/* ==========================================================================
   /pengadaan and /kontrak workspace: the KPI grid and saving filter, status
   drift note, workspace grid with the tender preview, domain table cells
   (package, Proclist, PQ legend, PaDi, LVPO), and the domain parts of the form
   (PR info, guarantee document, Master Kontraktor field, milestones).

   The shared components are in ../ui/components.css, which every layout loads
   before this file.
   ========================================================================== */

.stats-grid {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 12px;
    min-width: 0;
}

/* Pilihan tahun kartu cost saving, bentuknya sama dengan deretan tab. */
.saving-filter {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px 12px;
}

.saving-filter-label {
    color: var(--muted-foreground-strong);
    font-size: 12px;
    font-weight: 500;
}

.saving-filter-options {
    display: inline-flex;
    gap: 3px;
    padding: 3px;
    border-radius: var(--radius-md);
    background: var(--muted);
}

.saving-filter-option {
    display: inline-flex;
    align-items: center;
    min-height: calc(var(--control-height-sm) - 6px);
    padding: 0 10px;
    border-radius: var(--radius-sm);
    color: var(--muted-foreground-strong);
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
}

.saving-filter-option:hover { color: var(--foreground); }
.saving-filter-option:focus-visible { outline: 1px solid var(--ring); outline-offset: 0; }

.saving-filter-option[aria-current="true"] {
    background: var(--card);
    color: var(--foreground);
    box-shadow: var(--shadow-xs);
}

/* Peringatan status tersimpan yang berbeda dengan status tampil. */
.status-drift {
    grid-column: 1 / -1;
    min-width: 0;
    padding: 14px 16px;
    border-color: var(--warning-border);
    background: var(--warning-soft);
    color: var(--warning-strong);
}

.status-drift-title { font-size: 14px; font-weight: 600; }

.status-drift-text {
    margin-top: 4px;
    font-size: 12px;
    line-height: 1.5;
}

.status-drift-list { margin-top: 8px; font-size: 12px; }

.status-drift-list summary { cursor: pointer; font-weight: 500; }

.status-drift-list ul {
    display: grid;
    gap: 6px;
    margin: 8px 0 0;
    padding: 0;
    list-style: none;
}

.status-drift-list li {
    display: flex;
    flex-wrap: wrap;
    gap: 2px 8px;
    min-width: 0;
}

.status-drift-ref { font-weight: 600; }

.status-drift-judul { min-width: 0; overflow-wrap: anywhere; }

/* Tabel modul mendapat ruang utama; ringkasan tender selalu di sisi kanan. */
.workspace-grid {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(300px, 28%);
    align-items: start;
    gap: 16px;
    min-width: 0;
}

.workspace-grid[data-package-expanded="true"] { grid-template-columns: minmax(0, 1fr); }
.workspace-grid[data-package-expanded="true"] .tender-preview-list {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 24px;
}

.workspace-primary {
    display: grid;
    align-content: start;
    gap: 16px;
    min-width: 0;
}

.workspace-primary > .table-card { min-width: 0; }

.workspace-primary .table-header {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 12px;
}
.workspace-primary .table-header-actions { flex-wrap: wrap; justify-content: flex-start; min-width: 0; }
.workspace-primary .table-header-actions .search { flex: 1 1 180px; min-width: 0; width: auto; }
.workspace-primary .table-footer,
.workspace-primary .pager { flex-wrap: wrap; }

.tender-preview { min-width: 0; overflow: hidden; }
.tender-preview-header { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px; padding: 18px; }
.tender-preview-header > div { flex: 1 1 180px; min-width: 0; }
.tender-preview-header h2 { margin: 0; font-size: 14px; font-weight: 600; line-height: 1.35; }
.tender-preview-header p { margin: 5px 0 0; color: var(--muted-foreground); font-size: 12px; line-height: 1.45; }
.tender-preview-header > .badge { flex: none; }
.tender-preview-legend { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 18px 14px; }
.tender-preview-list { margin: 0; padding: 0 18px; list-style: none; }
.tender-preview-list li { border-top: 1px solid var(--border); }
.tender-preview-list li:not([hidden]) { animation: tender-preview-arrive .24s ease-out; }
@media (prefers-reduced-motion: reduce) {
    .tender-preview-list li:not([hidden]) { animation: none; }
}
.tender-carousel { min-width: 0; }
.tender-preview-item {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    width: 100%;
    padding: 14px 0;
    border: 0;
    background: transparent;
    color: var(--foreground);
    text-align: left;
    cursor: pointer;
}
.tender-preview-item:hover .tender-preview-name { text-decoration: underline; text-underline-offset: 2px; }
.tender-preview-item:focus-visible { outline: 1px solid var(--ring); outline-offset: 0; border-radius: var(--radius-sm); }
.tender-preview-copy { display: grid; gap: 5px; min-width: 0; }
.tender-preview-name { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2; font-size: 12px; font-weight: 600; line-height: 1.45; }
.tender-preview-meta { overflow: hidden; color: var(--muted-foreground); font-size: 12px; white-space: nowrap; text-overflow: ellipsis; }
.tender-preview-item > .badge { flex: none; max-width: 116px; overflow: hidden; text-overflow: ellipsis; }
.tender-carousel-controls {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 0 18px 10px;
}
/* Tombol carousel adalah .button ukuran kecil: garis, hover, dan fokusnya
   sama dengan tombol lain di halaman ini. */
.tender-carousel-controls .button { height: var(--control-height-sm); font-size: 12px; }
.tender-carousel-button { width: 30px; padding: 0; }
.tender-carousel-button .icon { width: 15px; height: 15px; }
.tender-carousel-toggle { min-width: 52px; padding: 0 10px; }
.tender-carousel-status { min-width: 42px; color: var(--muted-foreground); font-size: 12px; text-align: center; font-variant-numeric: tabular-nums; }
.tender-preview-empty { margin: 0 18px; padding: 22px 0; border-top: 1px solid var(--border); color: var(--muted-foreground); font-size: 12px; }
.tender-preview-all { display: flex; align-items: center; justify-content: center; gap: 8px; width: calc(100% - 36px); margin: 4px 18px 18px; }
.tender-preview-all[aria-expanded="true"] .icon { transform: rotate(90deg); }
.tender-table-expand { grid-column: 1 / -1; min-width: 0; scroll-margin-top: 76px; }
.tender-table-expand[hidden] { display: none; }
.tender-table-expand > .table-card { margin-bottom: 0; }

.work-area-list {
    display: grid;
    gap: 3px;
    max-width: 24ch;
    padding-block: 8px;
}

.work-area-line {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.tender-state { display: grid; gap: 5px; padding-block: 8px; }
.tender-state-row { display: flex; align-items: center; gap: 8px; }
.tender-state-label { width: 44px; flex: none; color: var(--muted-foreground); font-size: 12px; }

/* Sel paket: judul tender, lalu No. PR dan No. Tender di bawahnya. Judul
   yang dulu terpotong di satu baris kini boleh dua baris — ia yang dipakai
   orang untuk mengenali paketnya. Nomornya kecil tapi utuh: nomor yang
   terpotong tidak bisa dicocokkan dengan dokumen. */
.package {
    min-width: 240px;
    max-width: 400px;
    padding: 10px 0;
}

.package-title {
    display: -webkit-box;
    overflow: hidden;
    color: var(--foreground);
    font-weight: 500;
    line-height: 1.4;
    text-wrap: pretty;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
}

.package-refs {
    display: flex;
    flex-wrap: wrap;
    gap: 2px 14px;
    margin-top: 4px;
}

.joint-tender-badge {
    align-self: flex-start;
    max-width: 100%;
    white-space: normal;
}

.package-ref {
    display: inline-flex;
    align-items: baseline;
    gap: 5px;
    min-width: 0;
}

.package-ref dt {
    color: var(--muted-foreground);
    font-size: 12px;
}

/* Satu klik memilih seluruh nomor, siap disalin ke SAP atau surel. */
.package-ref dd {
    color: var(--table-foreground);
    font-size: 12px;
    font-variant-numeric: tabular-nums;
    overflow-wrap: anywhere;
    user-select: all;
}

/* Monitoring SLA: identitas paket tetap utuh dalam satu kolom. */
[data-table-card="monitoring"] .package { max-width: 520px; }
[data-table-card="monitoring"] .package-title {
    display: block;
    overflow: visible;
    -webkit-line-clamp: unset;
    line-clamp: unset;
    overflow-wrap: anywhere;
}
[data-table-card="monitoring"] .package-refs {
    display: flex;
    flex-wrap: nowrap;
    gap: 16px;
    margin-top: 10px;
}

/* PaDi: judul utuh di atas, tiga nomor dokumen dalam kisi dua kolom. */
[data-table-card="padi"] table {
    min-width: 1150px;
    table-layout: fixed;
}
[data-table-card="padi"] th,
[data-table-card="padi"] td { padding-inline: 10px; overflow-wrap: anywhere; }
[data-table-card="padi"] th:nth-child(1) { width: 34%; }
[data-table-card="padi"] th:nth-child(2) { width: 14%; }
[data-table-card="padi"] th:nth-child(3) { width: 12%; }
[data-table-card="padi"] th:nth-child(4) { width: 10%; }
[data-table-card="padi"] th:nth-child(5) { width: 9%; }
[data-table-card="padi"] th:nth-child(6) { width: 14%; }
[data-table-card="padi"] th:nth-child(7) { width: 7%; }
[data-table-card="padi"] td[data-column="4"],
[data-table-card="padi"] td[data-column="5"] { white-space: nowrap; }
.padi-transaction { min-width: 0; max-width: none; }
.padi-transaction .package-title {
    display: block;
    overflow: visible;
    -webkit-line-clamp: unset;
    line-clamp: unset;
    overflow-wrap: anywhere;
}
.padi-transaction .package-refs {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px 12px;
    margin-top: 8px;
}
.padi-transaction .package-ref { display: grid; gap: 2px; }

/* LVPO: judul tidak tersembunyi sebagai catatan vendor; PR/PO tetap satu paket. */
[data-table-card="lvpo"] table {
    min-width: 1150px;
    table-layout: fixed;
}
[data-table-card="lvpo"] th,
[data-table-card="lvpo"] td { padding-inline: 10px; overflow-wrap: anywhere; }
[data-table-card="lvpo"] th:nth-child(1) { width: 32%; }
[data-table-card="lvpo"] th:nth-child(2) { width: 15%; }
[data-table-card="lvpo"] th:nth-child(3) { width: 12%; }
[data-table-card="lvpo"] th:nth-child(4) { width: 12%; }
[data-table-card="lvpo"] th:nth-child(5) { width: 9%; }
[data-table-card="lvpo"] th:nth-child(6) { width: 13%; }
[data-table-card="lvpo"] th:nth-child(7) { width: 7%; }
[data-table-card="lvpo"] td[data-column="4"],
[data-table-card="lvpo"] td[data-column="5"] { white-space: nowrap; }
[data-table-card="lvpo"] .package { min-width: 0; max-width: none; }
[data-table-card="lvpo"] .package-title {
    display: block;
    overflow: visible;
    -webkit-line-clamp: unset;
    line-clamp: unset;
    overflow-wrap: anywhere;
}
[data-table-card="lvpo"] .package-refs {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
    margin-top: 8px;
}
[data-table-card="lvpo"] .package-ref { display: grid; gap: 2px; }

/* Transaksi IOG: judul transaksi memimpin kolom pertama (boleh dua baris,
   nomor PR/PO di bawahnya); isi kolom lain tidak dilipat — "Rp / 212.500.000"
   tidak terbaca sebagai satu angka. */
[data-table-card="iog"] th,
[data-table-card="iog"] td:not([data-column="0"]) { white-space: nowrap; }
[data-table-card="iog"] .package { min-width: 260px; max-width: 420px; }

/* Tender berjalan: kartu di luar tab. Tanggal
   dan hitungan hari tidak dilipat; baris yang melewati batas diwarnai merah
   tipis supaya terlihat sebelum lencananya dibaca. */
[data-table-card="prakualifikasi"] { margin-bottom: 20px; scroll-margin-top: 76px; }
.pq-legend {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    padding: 12px 18px;
    border-bottom: 1px solid var(--border);
    background: var(--muted-subtle);
    font-size: 12px;
}
.pq-legend-label { margin-right: 2px; font-weight: 600; }
.pq-legend-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    max-width: 100%;
    padding: 5px 8px;
    border: 1px solid;
    border-radius: var(--radius-sm);
    line-height: 1.35;
}
.pq-legend-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.pq-green { border-color: var(--success-border); background: var(--success-soft); color: var(--success-strong); }
.pq-yellow { border-color: var(--warning-border); background: var(--warning-soft); color: var(--warning-strong); }
.pq-red { border-color: var(--destructive-border); background: var(--destructive-soft); color: var(--destructive-strong); }
.pq-legend-extra { color: var(--muted-foreground); }
[data-table-card="prakualifikasi"] th,
[data-table-card="prakualifikasi"] td:not([data-column="0"]) { white-space: nowrap; }
[data-table-card="prakualifikasi"] .package { min-width: 240px; max-width: 400px; }
[data-table-card="prakualifikasi"] th,
[data-table-card="prakualifikasi"] td { padding-inline: 12px; }
[data-table-card="prakualifikasi"] td.pq-remaining { font-variant-numeric: tabular-nums; }
[data-table-card="prakualifikasi"] td.pq-success { background: var(--success-soft); color: var(--success-strong); }
[data-table-card="prakualifikasi"] td.pq-pending { background: var(--warning-soft); color: var(--warning-strong); }
[data-table-card="prakualifikasi"] td.pq-cancelled { background: var(--destructive-soft); color: var(--destructive-strong); }
[data-table-card="prakualifikasi"] td.pq-neutral { background: var(--muted-subtle); color: var(--muted-foreground-strong); }
[data-table-card="prakualifikasi"] .pq-remaining .badge {
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font-size: 12px;
    font-weight: 600;
}

/* SC berada tepat di bawah No. Proclist; kontrak mengikuti kontraktor. */
.proclist-plan { min-width: 0; max-width: none; }
.proclist-plan .package-refs {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px 18px;
    margin-top: 0;
}
.proclist-plan .package-ref { display: grid; gap: 2px; }
.proclist-plan .package-ref dd {
    overflow: hidden;
    font-size: 12px;
    font-weight: 500;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.proclist-contractor-details { min-width: 0; }
.proclist-contractor-details .package-refs {
    display: block;
    margin-top: 6px;
}
.proclist-contractor-details .package-ref {
    display: grid;
    gap: 2px;
}
.proclist-contractor-details .package-ref dd {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
[data-table-card="proclist"] table {
    min-width: 1240px;
    table-layout: fixed;
}
/* Teks hanya boleh patah di spasi: "Kode" yang terbelah jadi "Kod / e" dan
   nomor yang terbelah di tanda hubung tidak terbaca sebagai satu nilai. Isi
   yang terlalu panjang dipotong dengan elipsis dan membawa title lengkapnya. */
[data-table-card="proclist"] th,
[data-table-card="proclist"] td { padding-inline: 10px; }
/* Tepi luar tetap 16px seperti tabel lain, supaya kolom pertama sejajar
   dengan judul kartu dan tabel modul lainnya. */
[data-table-card="proclist"] th:first-child,
[data-table-card="proclist"] td:first-child { padding-left: 16px; }
[data-table-card="proclist"] th:last-child,
[data-table-card="proclist"] td:last-child { padding-right: 16px; }
/* Lebar diukur pada lebar minimum 1240px: Rencana memuat dua nomor sebaris,
   kontraktor memuat nomor kontrak, dan Nilai/TKDN tetap terbaca. */
[data-table-card="proclist"] th:nth-child(1) { width: 16%; }
[data-table-card="proclist"] th:nth-child(2) { width: 5%; }
[data-table-card="proclist"] th:nth-child(3) { width: 13%; }
[data-table-card="proclist"] th:nth-child(4) { width: 11%; }
[data-table-card="proclist"] th:nth-child(5) { width: 9%; }
/* Tahapan: lebar untuk "Penunjukan Pemenang", tahapan terpanjang, dalam satu baris. */
[data-table-card="proclist"] th:nth-child(6) { width: 15%; }
[data-table-card="proclist"] th:nth-child(7) { width: 8%; }
[data-table-card="proclist"] th:nth-child(8) { width: 10%; }
[data-table-card="proclist"] th:nth-child(9) { width: 6%; }
/* Aksi: ubah dan detail berdampingan (2 × 28px) — 5% hanya muat satu,
   dan tombol detail hilang begitu tombol ubah muncul. */
[data-table-card="proclist"] th:nth-child(10) { width: 7%; }
[data-table-card="proclist"] td[data-column="2"] {
    padding-block: 14px;
    font-weight: 500;
    line-height: 1.45;
}
[data-table-card="proclist"] td[data-column="3"] { font-weight: 500; }
[data-table-card="proclist"] td[data-column="7"] {
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
[data-table-card="proclist"] td[data-column="8"] {
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
[data-table-card="proclist"] .subject > div:last-child { min-width: 0; }
[data-table-card="proclist"] .subject-name,
[data-table-card="proclist"] .subject-note { max-width: 100%; }
/* Lencana tidak pernah patah dua baris — pil berisi dua baris terbaca
   seperti tombol yang rusak. Bila kolomnya tetap terlalu sempit, teksnya
   dipotong, bukan dilipat. */
[data-table-card="proclist"] td[data-column="5"] .badge {
    max-width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.proclist-title,
.proclist-contractor {
    display: block;
    max-width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

/* Panel dokumen di formulir: PDF jaminan pelaksanaan routing. */
.form-document {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px;
    border: 1px dashed var(--input);
    border-radius: var(--radius-md);
    background: var(--card);
    transition: border-color .15s ease, background .15s ease;
}
.form-document[data-state="stored"],
.form-document[data-state="selected"] { border-style: solid; }
.form-document[data-dragging="true"] { border-color: var(--foreground); background: var(--muted); }
.form-document[data-state="unavailable"] { background: var(--muted); }
.form-field[data-invalid="true"] .form-document { border-color: var(--destructive); }
.form-document-icon {
    display: grid;
    flex: none;
    place-items: center;
    width: 38px;
    height: 44px;
    border-radius: var(--radius-sm);
    background: var(--muted);
    color: var(--muted-foreground);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .02em;
}
.form-document[data-state="stored"] .form-document-icon,
.form-document[data-state="selected"] .form-document-icon { background: var(--destructive-soft); color: var(--destructive-strong); }
.form-document-copy { display: grid; flex: 1; gap: 2px; min-width: 0; }
.form-document-copy strong {
    overflow: hidden;
    font-size: 13px;
    font-weight: 500;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.form-document-copy span { color: var(--muted-foreground); font-size: 12px; }
.form-document-actions { display: flex; flex: none; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
@media (max-width: 600px) {
    .form-document { flex-wrap: wrap; }
    .form-document-actions { width: 100%; justify-content: flex-start; }
}

/* Halaman berikutnya sedang diminta ke server: baris lama meredup, tetap terbaca. */
[data-table-card][aria-busy="true"] tbody { opacity: .55; transition: opacity .15s ease; }

[data-table-card="pengadaan"] .label-action {
    height: var(--control-height-sm);
    margin-top: 8px;
    padding-inline: 8px;
    font-size: 12px;
}

/* Pemeriksaan PR di formulir paket: jumlah PR, lalu tender lain yang memakai
   PR yang sama. Kartu peringatannya mengikuti Alert shadcn: permukaan putih,
   border tipis, ikon garis berwarna, judul medium, keterangan abu, dan baris
   tender datar yang dipisah garis. */
.form-pr-info { display: grid; gap: 8px; margin-top: 2px; color: var(--muted-foreground); font-size: 12px; line-height: 1.45; }
.form-pr-info:empty { display: none; }
.form-pr-info p { margin: 0; }
.form-pr-summary { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.form-pr-count {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: var(--card);
    color: var(--foreground);
    font-weight: 500;
    white-space: nowrap;
}
.form-pr-error { color: var(--destructive-strong); }
.form-pr-related {
    display: grid;
    grid-template-columns: 16px minmax(0, 1fr);
    column-gap: 10px;
    align-items: start;
    padding: 12px 14px;
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    background: var(--card);
    color: var(--foreground);
}
.form-pr-related-icon { margin-top: 1px; color: var(--warning); }
.form-pr-related-body { display: grid; gap: 2px; min-width: 0; }
.form-pr-info .form-pr-related-title { color: var(--foreground); font-size: 13px; font-weight: 500; }
.form-pr-info .form-pr-related-help { color: var(--muted-foreground); }
.form-pr-list { display: grid; margin: 8px 0 0; padding: 0; list-style: none; }
.form-pr-item { display: grid; gap: 2px; min-width: 0; padding: 8px 0; border-top: 1px solid var(--border); }
.form-pr-item:last-child { padding-bottom: 0; }
.form-pr-item-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.form-pr-tender { color: var(--foreground); font-weight: 500; font-variant-numeric: tabular-nums; }
.form-pr-meta { color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
.form-pr-info .form-pr-title { color: var(--foreground); overflow-wrap: anywhere; }

/* Chip wilayah kerja dan ikon kalender juga tidak tampak bisa diklik. */
.form-field[data-locked="true"] .form-chip,
.form-field[data-locked="true"] .kontraktor-toggle {
    pointer-events: none;
    opacity: 0.7;
}

.form-locked-note {
    margin: 0 0 16px;
    padding: 8px 12px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--muted-subtle);
    color: var(--muted-foreground);
    font-size: 12px;
    line-height: 1.5;
}

/* Tahapan proses adalah urutan, jadi dibaca sebagai jalur bernomor: titik
   penuh untuk yang sudah terjadi, garis untuk yang dilewati, lingkaran kosong
   untuk yang belum. Orang melihat sejauh mana paketnya tanpa membaca tanggal. */
.sheet-group[data-section="tahapan"] .form-grid { counter-reset: stage; }

.form-milestone {
    display: flex;
    gap: 4px;
}

.form-milestone .form-input { flex: 1; min-width: 0; }

.form-skip {
    flex: none;
    height: var(--control-height);
    padding: 0 8px;
    border: 1px solid var(--input);
    border-radius: var(--radius-md);
    background: var(--card);
    color: var(--muted-foreground);
    font-size: 12px;
}

.form-skip:hover { color: var(--foreground); }

/* Isian Nama kontraktor (kontraktor-field.js) di formulir /pengadaan dan /kontrak:
   saran dari master Kontraktor, centang Konsorsium untuk beberapa perusahaan. */
.kontraktor-field { display: grid; gap: 8px; min-width: 0; }

/* No kontrak routing: dipilih dari daftar Ringkasan (kontrak-nomor-field.js). */
.kontrak-nomor-field { display: grid; gap: 6px; min-width: 0; }
.kontrak-nomor-status[data-state="new"] { color: var(--warning-strong); }
.kontraktor-rows { display: grid; gap: 6px; }
.kontraktor-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }
.kontraktor-row .form-input { flex: 1; min-width: 0; }
.kontraktor-row .kontraktor-note { flex-basis: 100%; }
.kontraktor-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.kontraktor-toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 500; }
.kontraktor-toggle input { width: 14px; height: 14px; accent-color: var(--primary); }
.kontraktor-link {
    padding: 0;
    border: 0;
    background: none;
    color: var(--foreground);
    font-size: 12px;
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}
.kontraktor-link:disabled { opacity: .5; cursor: default; }
.kontraktor-preview:empty { display: none; }

.form-skip[aria-pressed="true"] {
    border-color: var(--muted-foreground-subtle);
    background: var(--accent);
    color: var(--foreground);
    font-weight: 500;
}

/* Lompatan antarbagian menempel di atas formulir yang digulir. */
.form-jump {
    position: sticky;
    top: -18px;
    z-index: 1;
    display: flex;
    gap: 4px;
    margin: -18px -18px 18px;
    padding: 10px 18px;
    overflow-x: auto;
    border-bottom: 1px solid var(--border);
    background: var(--card);
    scrollbar-width: none;
}

.form-jump-link {
    flex: none;
    height: var(--control-height-sm);
    padding: 0 9px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    color: var(--muted-foreground);
    font-size: 12px;
    font-weight: 500;
    white-space: nowrap;
}

.form-jump-link:hover { background: var(--accent); color: var(--foreground); }

/* =================================
   Responsive
================================= */

@media (max-width: 1300px) {
    .app:not([data-sidebar-collapsed="true"]) .workspace-grid { grid-template-columns: minmax(0, 1fr); }
    .app:not([data-sidebar-collapsed="true"]) .package-expand,
    .app:not([data-sidebar-collapsed="true"]) .workspace-expand { display: none; }
}

@media (max-width: 1100px) {
    .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .workspace-grid { grid-template-columns: minmax(0, 1fr); }
    .package-expand,
    .workspace-expand { display: none; }
}

@media (max-width: 767.98px) {
    .workspace-grid[data-package-expanded="true"] .tender-preview-list { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 639.98px) {
    .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
}

@media print {
    .workspace-grid { display: block; }
    .tender-preview { display: none; }
    .tender-table-expand[hidden] { display: block !important; }
    .sidebar, .overlay, .header, .tabs, .search, .table-filters,
    .pager, .sheet, .sheet-overlay, .row-actions, .label-action,
    .table-header-actions { display: none !important; }
}
