:root{--c-danger-border:#ecc9cf;--c-danger-soft:#fbeef0;--c-info-ink:#2f5650;--c-warn-soft:#fbf3e4;--c-warn-ink:#8a5a14;--c-brand:#3f6e67;--c-brand-light:#5a9088;--c-soft:#e4f0ee;--c-bg:#faf8f6;--c-surface:#fff;--c-border:#e9e3de;--c-text:#2b3332;--c-muted:#71807d;--c-danger:#b85767;--c-success:#4c8068;--c-radius:18px;--c-shadow:0 10px 28px -16px rgb(45 74 70 / 28%)}
body.customer-page{min-height:100vh;color:var(--c-text);background:radial-gradient(circle at 6% 0%,var(--c-soft),transparent 34%),var(--c-bg)}
.customer-page .customer-shell{width:min(100% - 48px,1160px);margin:auto}.customer-page .customer-topbar{color:#fff;background:linear-gradient(180deg,#4b7e76,var(--c-brand));box-shadow:0 2px 12px rgb(45 74 70 / 18%)}.customer-page .customer-topbar .customer-shell{display:flex;min-height:68px;align-items:center;justify-content:space-between;gap:24px}.customer-page .customer-wordmark{font-weight:800;letter-spacing:.08em}.customer-page .customer-wordmark small{display:block;color:#d9ece8;font-size:11px;font-weight:500;letter-spacing:.04em}.customer-page .customer-nav{display:flex;flex-wrap:wrap;gap:4px}.customer-page .customer-nav a{padding:8px 10px;border-radius:8px;color:#e7f3f0;font-size:13px;font-weight:700;text-decoration:none}.customer-page .customer-nav a[aria-current="page"],.customer-page .customer-nav a:hover{color:#fff;background:rgb(255 255 255 / 16%)}
.customer-page .customer-main{padding:36px 0 72px}.customer-page .customer-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:24px}.customer-page .customer-heading h1{margin:0;font-size:clamp(30px,4vw,42px);line-height:1.25}.customer-page .customer-heading p:not(.eyebrow){max-width:620px;margin:8px 0 0;color:var(--c-muted);line-height:1.6}.customer-page .customer-heading .eyebrow,.customer-page .customer-card .eyebrow{color:var(--c-brand);font-size:12px;letter-spacing:.08em;text-transform:none}.customer-page .customer-layout{display:grid;grid-template-columns:minmax(300px,.72fr) minmax(0,1.28fr);gap:18px}.customer-page .customer-detail-layout{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr);gap:18px}.customer-page .customer-card{min-width:0;padding:28px;border:1px solid var(--c-border);border-radius:var(--c-radius);background:linear-gradient(180deg,#fff,#fdfcfb);box-shadow:var(--c-shadow)}.customer-page .customer-card h2{margin:0;font-size:clamp(21px,2.4vw,27px)}.customer-page .customer-card .help{color:var(--c-muted)}.customer-page .customer-card .field{margin-top:18px}.customer-page .customer-card label{color:var(--c-text);font-size:13px}.customer-page .customer-card input,.customer-page .customer-card select{border-color:#dcd3cc;border-radius:11px}.customer-page .customer-card input:focus,.customer-page .customer-card select:focus{border-color:var(--c-brand-light);outline:0;box-shadow:0 0 0 3px rgb(90 144 136 / 20%)}.customer-page .customer-card .primary-button,.customer-page .customer-card .secondary-button{width:auto;min-height:44px;margin:0;border-radius:11px;font-weight:800}.customer-page .customer-card .primary-button{border-color:var(--c-brand);background:linear-gradient(180deg,#63988f,var(--c-brand-light));box-shadow:var(--c-shadow)}.customer-page .customer-card .primary-button:hover:not(:disabled){background:var(--c-brand);transform:translateY(-1px)}.customer-page .customer-card .secondary-button{border-color:#dcd3cc;color:var(--c-brand);background:#fff}.customer-page .customer-card .primary-button:focus-visible,.customer-page .customer-card .secondary-button:focus-visible{outline-color:var(--c-brand-light)}
.customer-page .customer-form-actions,.customer-page .customer-search-actions,.customer-page .customer-detail-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}.customer-page .customer-form-actions .primary-button{flex:1}.customer-page .customer-search{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end;margin:20px 0}.customer-page .customer-search .field{margin:0}.customer-page .customer-search-actions{margin:0}.customer-page .customer-section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.customer-page .customer-section-heading .secondary-button{flex:0 0 auto}.customer-page .customer-table{margin-top:16px;overflow-x:auto;border:1px solid var(--c-border);border-radius:12px}.customer-page .customer-table table{min-width:660px}.customer-page .customer-table th{color:var(--c-brand);background:#f1f8f6}.customer-page .customer-table tbody tr:hover td{background:#f7fbfa}.customer-page .customer-table a{color:var(--c-brand);font-weight:800}.customer-page .customer-status{min-height:1.5em;margin:16px 0 0;color:var(--c-muted)}.customer-page .customer-status[data-tone="success"]{color:var(--c-success);font-weight:700}.customer-page .customer-status[data-tone="error"]{color:var(--c-danger);font-weight:700}.customer-page .customer-aside{display:grid;align-content:start;gap:16px}.customer-page .customer-note{margin:18px 0 0;padding:13px;border-left:4px solid var(--c-brand-light);border-radius:0 12px 12px 0;color:var(--c-brand);background:#f2f8f7;line-height:1.55}.customer-page .customer-summary{display:grid;gap:10px;margin-top:20px}.customer-page .customer-summary article{padding:13px;border:1px solid var(--c-border);border-radius:12px;background:#f9fbfa}.customer-page .customer-summary strong,.customer-page .customer-summary span{display:block}.customer-page .customer-summary span{margin-top:3px;color:var(--c-muted);font-size:13px}.customer-page dialog{border-color:var(--c-border);border-radius:18px;box-shadow:var(--c-shadow)}.customer-page dialog::backdrop{background:rgb(43 51 50 / 42%)}
@media(max-width:800px){.customer-page .customer-layout,.customer-page .customer-detail-layout{grid-template-columns:1fr}.customer-page .customer-main{padding-top:26px}.customer-page .customer-heading{align-items:flex-start;flex-direction:column}.customer-page .customer-card{padding:24px}}@media(max-width:500px){.customer-page .customer-shell{width:min(100% - 24px,1160px)}.customer-page .customer-topbar .customer-shell{min-height:58px;align-items:flex-start;flex-direction:column;gap:2px;padding:10px 0}.customer-page .customer-nav{width:100%;overflow-x:auto;flex-wrap:nowrap}.customer-page .customer-main{padding-top:22px}.customer-page .customer-card{padding:18px;border-radius:15px}.customer-page .customer-form-actions,.customer-page .customer-search-actions,.customer-page .customer-detail-actions{flex-direction:column}.customer-page .customer-card .primary-button,.customer-page .customer-card .secondary-button{width:100%}.customer-page .customer-search{grid-template-columns:1fr}}
.customer-page .customer-list-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:10px}.customer-page .customer-pagination{display:flex;align-items:center;gap:8px;white-space:nowrap}.customer-page .customer-pagination .secondary-button{min-height:36px;padding:7px 12px}.customer-page .customer-tabs{display:flex;gap:4px;margin:18px 0 14px;border-bottom:1px solid var(--c-border)}.customer-page .customer-tabs button{border:0;border-bottom:3px solid transparent;padding:10px 12px;color:var(--c-muted);background:transparent;font:inherit;font-weight:800;cursor:pointer}.customer-page .customer-tabs button[aria-selected="true"]{border-bottom-color:var(--c-brand);color:var(--c-brand)}.customer-page .record-list{display:grid;gap:10px;margin-top:14px}.customer-page .record-list article{padding:12px;border:1px solid var(--c-border);border-radius:10px;background:#f9fbfa}.customer-page .record-list small{display:block;color:var(--c-muted);margin-top:5px}.customer-page textarea{width:100%;resize:vertical}.customer-page #note-form .secondary-button{margin-top:10px;width:auto}.customer-page .customer-list-toolbar .customer-status{margin:0}@media(max-width:600px){.customer-page .customer-list-toolbar{align-items:flex-start;flex-direction:column}.customer-page .customer-pagination{width:100%;justify-content:space-between}}
.customer-page .customer-card{box-sizing:border-box}@media(max-width:500px){.customer-page .customer-section-heading{align-items:flex-start;flex-direction:column}.customer-page .customer-section-heading .secondary-button{width:auto}}
.customer-list-page .customer-list-heading .primary-button{width:auto;margin:0;white-space:nowrap;text-decoration:none}.customer-page .customer-sort-button{display:inline-flex;align-items:center;gap:6px;border:0;padding:0;color:inherit;background:transparent;font:inherit;font-weight:800;cursor:pointer}.customer-page .customer-sort-button span{color:var(--c-brand-light);font-size:1.05em}.customer-page .customer-sort-button:focus-visible{outline:3px solid var(--c-brand-light);outline-offset:4px;border-radius:4px}.customer-page .customer-sort-button:disabled{cursor:wait;opacity:.55}@media(max-width:500px){.customer-list-page .customer-list-heading .primary-button{width:100%;text-align:center}}
.contract-detail-page .contract-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.contract-detail-page .contract-data-list{display:grid;grid-template-columns:auto 1fr;gap:12px 18px;margin:0}.contract-detail-page .contract-data-list dt{font-weight:800}.contract-detail-page .contract-data-list dd{margin:0;color:var(--c-muted)}.contract-detail-page .contract-services-card,.contract-detail-page .contract-notes-card{grid-column:1/-1}.contract-detail-page .contract-billing-documents-card{grid-column:1/-1}.contract-detail-page .contract-billing-documents-card h3{margin:14px 0 6px}.contract-detail-page .contract-billing-documents-card .record-list a{overflow-wrap:anywhere}.contract-detail-page .contract-section-heading,.contract-detail-page .dialog-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.contract-detail-page .contract-section-heading .primary-button{width:auto;margin:0}.contract-detail-page .contract-dialog{width:min(100% - 32px,780px);max-height:calc(100vh - 32px);overflow:auto;padding:24px}.contract-detail-page .dialog-close{border:0;background:transparent;color:var(--c-muted);font-size:30px;line-height:1;cursor:pointer}.contract-detail-page .dialog-search>div{display:flex;gap:8px}.contract-detail-page .dialog-search input{min-width:0}.contract-detail-page .dialog-search .secondary-button{white-space:nowrap}.contract-detail-page .service-catalog{display:grid;gap:8px;max-height:360px;overflow:auto}.contract-detail-page .service-choice{display:flex;gap:11px;align-items:flex-start;padding:12px;border:1px solid var(--c-border);border-radius:10px;cursor:pointer}.contract-detail-page .service-choice input{width:18px;min-height:18px;margin:3px 0 0;flex:0 0 auto}.contract-detail-page .service-choice span,.contract-detail-page .service-choice strong,.contract-detail-page .service-choice small{display:block}.contract-detail-page .service-choice small{margin-top:3px;color:var(--c-muted)}.contract-detail-page .dialog-pagination{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:14px}.contract-detail-page .document-type-tabs{display:flex;gap:6px;margin:0 0 16px;border-bottom:1px solid var(--c-border)}.contract-detail-page .document-type-tabs button{padding:9px 11px;border:0;border-bottom:3px solid transparent;background:transparent;color:var(--c-muted);font:inherit;font-weight:800;cursor:pointer}.contract-detail-page .document-type-tabs button[aria-selected=true]{border-bottom-color:var(--c-brand);color:var(--c-brand)}.contract-detail-page .document-upload{padding:14px;border:1px solid var(--c-border);border-radius:12px;background:#f9fbfa}.contract-detail-page .document-upload .primary-button{width:auto;margin-top:4px}.contract-detail-page .document-versions{margin-top:14px}.contract-detail-page .dialog-actions .primary-button{width:auto;margin-top:0}@media(max-width:800px){.contract-detail-page .contract-detail-grid{grid-template-columns:1fr}.contract-detail-page .contract-services-card,.contract-detail-page .contract-notes-card{grid-column:auto}}@media(max-width:500px){.contract-detail-page .contract-section-heading,.contract-detail-page .dialog-heading{flex-direction:column}.contract-detail-page .contract-section-heading .primary-button,.contract-detail-page .document-upload .primary-button{width:100%}.contract-detail-page .contract-dialog{width:min(100% - 20px,780px);padding:18px}.contract-detail-page .dialog-search>div{flex-direction:column}.contract-detail-page .dialog-search .secondary-button{width:100%}.contract-detail-page .dialog-pagination{justify-content:space-between;flex-wrap:wrap}.contract-detail-page .dialog-pagination .secondary-button{width:auto}}
.customer-page .service-status-summary select{width:100%;margin-top:8px}.customer-page .service-status-summary .help{margin:7px 0 0;font-size:12px}.customer-page .service-status-badge{display:inline-flex;align-items:center;width:max-content;max-width:100%;margin-top:5px;padding:4px 9px;border:1px solid #cfd8d5;border-radius:999px;color:#52615e;background:#eef2f0;font-size:13px;font-weight:800;line-height:1.2}.customer-page .service-status-badge.is-contracting{border-color:#8fc4a4;color:#23633f;background:#e9f6ed}.customer-page .service-status-badge.is-paused{border-color:#e1b66d;color:#84520d;background:#fff4dd}.customer-page .service-status-badge.is-terminated{border-color:#e1a1aa;color:#9d3044;background:#ffedf0}.customer-list-page .customer-table .service-status-badge{margin-top:0;white-space:nowrap}
.contract-detail-page .contract-context{display:grid;grid-template-columns:repeat(2,minmax(180px,1fr));gap:10px;margin:16px 0}.contract-detail-page .contract-context span{display:block;padding:10px 13px;border:1px solid var(--c-border);border-left:4px solid var(--c-brand-light);border-radius:0 10px 10px 0;background:#f2f8f7}.contract-detail-page .contract-context strong,.contract-detail-page .contract-context small{display:block}.contract-detail-page .contract-context strong{font-size:12px;color:var(--c-brand)}.contract-detail-page .contract-context small{margin-top:2px;color:var(--c-text);font-weight:800}@media(max-width:500px){.contract-detail-page .contract-context{grid-template-columns:1fr}}
.contract-detail-page .customer-heading-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.contract-detail-page .customer-heading-actions>*{width:auto;margin:0;text-decoration:none}.contract-detail-page .checkbox-label{display:flex;align-items:center;gap:8px;margin-top:14px}.contract-detail-page .checkbox-label input{width:auto}@media(max-width:600px){.contract-detail-page .customer-heading-actions{width:100%;justify-content:stretch}.contract-detail-page .customer-heading-actions>*{flex:1}.contract-detail-page .customer-heading-actions a{text-align:center}}
.service-work-badge{display:inline-block;margin-left:8px;padding:1px 10px;border-radius:999px;font-size:.78rem;font-weight:800;vertical-align:middle;white-space:nowrap}
.service-work-badge.is-done{background:#e3f2ec;color:#1d5c47}
.service-work-badge.is-pending{background:#fdf3e3;color:#8a5a12}

/* UI-074：aria-disabled 的連結沒有原生停用外觀，需明確標示，否則使用者看不出不可點。 */
.customer-page a[aria-disabled="true"]{opacity:.55;cursor:not-allowed;pointer-events:none}
.customer-page a[aria-disabled="true"]:focus-visible{pointer-events:auto;outline:3px solid var(--c-brand,#2f6f62);outline-offset:2px}

/* UI-076：客戶編號改在標題下方常駐顯示（原本藏在已移除的「系統資訊」分頁裡）。 */
.customer-page .customer-code-line{margin:6px 0 0;color:var(--c-brand);font-size:13px;font-weight:800;letter-spacing:.02em}
/* UI-076：客戶歸屬的下一步連結。原本卡片只寫「請至客戶歸屬工作台」卻沒有任何連結。 */
.customer-page .customer-group-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.customer-page .customer-group-links .secondary-button{width:auto;min-height:38px;margin:0;text-decoration:none;display:inline-flex;align-items:center}

/* UI-079：客戶文件版本表——比照既有 .customer-table 的橫向捲動容器，避免 390px 寬度下整頁橫向溢位。 */
.customer-page .customer-document-table{margin-top:14px;overflow-x:auto;border:1px solid var(--c-border);border-radius:12px}
.customer-page .customer-document-table table{width:100%;min-width:560px;border-collapse:collapse}
.customer-page .customer-document-table th,.customer-page .customer-document-table td{padding:10px 12px;text-align:left;white-space:nowrap}
.customer-page .customer-document-table th{color:var(--c-brand);background:#f1f8f6}
.customer-page .customer-document-table tbody tr:hover td{background:#f7fbfa}
/* UI-121 Critic P1-1：原本把 td:last-child 設成 flex，會讓 colspan 的「尚無檔案」列與操作欄被壓成一字一行；改由欄內的 .customer-document-actions 排列按鈕，td 維持 table-cell。 */
.customer-page .customer-document-table .customer-document-actions{display:flex;gap:8px;flex-wrap:nowrap}
.customer-page .customer-document-table .secondary-button{min-height:36px;padding:7px 12px;text-decoration:none}

/* UI-100：危險操作卡片與刪除確認對話框。只對管理員顯示（customer.js 依 /api/bootstrap 的角色解除 hidden）。 */
.customer-page .customer-danger-card{margin-top:16px;border-color:var(--c-danger-border)}.customer-page .customer-danger-card .eyebrow{color:var(--c-danger)}.customer-page .customer-danger-row{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.customer-page .customer-danger-row h2{margin:2px 0 6px}.customer-page .customer-danger-help{margin:0;color:var(--c-muted)}.customer-page .danger-outline-button{min-height:44px;padding:9px 16px;border:1px solid var(--c-danger);border-radius:12px;background:#fff;color:var(--c-danger);font:inherit;font-weight:800;cursor:pointer}.customer-page .danger-outline-button:hover{background:var(--c-danger-soft)}.customer-page .danger-button{min-height:44px;padding:9px 18px;border:1px solid var(--c-danger);border-radius:12px;background:var(--c-danger);color:#fff;font:inherit;font-weight:800;cursor:pointer}.customer-page .danger-button:disabled{opacity:.45;cursor:not-allowed}.customer-page .customer-delete-dialog{width:min(100% - 32px,520px);max-height:calc(100vh - 32px);overflow:auto;padding:24px}.customer-page .customer-delete-dialog h2{margin:2px 0 12px}.customer-page .customer-delete-target{margin:0 0 12px;padding:11px 13px;border:1px solid var(--c-danger-border);border-radius:12px;background:var(--c-danger-soft);overflow-wrap:anywhere}.customer-page .customer-delete-target strong{display:block;font-size:1.1rem}.customer-page .customer-delete-target span{display:block;margin-top:2px;color:var(--c-muted);font-size:13px}.customer-page .customer-delete-callout{margin:0 0 14px;padding:10px 12px;border-radius:10px;background:var(--c-soft);color:var(--c-info-ink);line-height:1.6}.customer-page .customer-delete-dialog[data-mode="blocked"] .customer-delete-callout{background:var(--c-warn-soft);color:var(--c-warn-ink)}.customer-page .customer-delete-countdown{min-height:1.4em;margin:0;color:var(--c-muted);font-size:13px}.customer-page .customer-delete-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;margin-top:14px}.customer-page .customer-delete-dialog .dialog-actions button{width:auto}@media(max-width:500px){.customer-page .customer-delete-dialog{width:min(100% - 20px,520px);padding:18px}.customer-page .danger-outline-button{width:100%}}
/* UI-101：客戶清單的客戶歸屬欄與篩選。篩選區改三欄：第一列 搜尋條件（跨兩欄）｜客戶類型，第二列 服務狀態｜客戶歸屬｜按鈕。 */
#customer-search-form{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) auto}#customer-search-form>.field:first-child{grid-column:1/3}#customer-search-form>.field:nth-child(2){grid-column:3/5}.customer-page .customer-group-tag{display:inline-block;border-radius:8px;padding:2px 10px;font-size:.92em;font-weight:700;white-space:nowrap;max-width:12em;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;background:var(--c-soft);color:var(--c-info-ink)}.customer-page .customer-group-none{color:var(--c-muted);white-space:nowrap}@media(max-width:500px){#customer-search-form{grid-template-columns:1fr}#customer-search-form>.field:first-child,#customer-search-form>.field:nth-child(2){grid-column:auto}}
/* UI-102：決算月欄不換行；修改歷程的「顯示較早的 N 筆」按鈕。 */
.customer-page .customer-fiscal-month{white-space:nowrap}.customer-page .history-toggle{margin-top:10px;justify-self:start;width:auto}
/* UI-111：項目「已加入的服務」中審核後才加入的服務。 */
.service-work-badge.service-addition-badge{background:#e7eef9;color:#2b4f86;white-space:normal}
/* UI-112：從項目移除已加入的服務（docs/design/drafts/ui-112-contract-service-removal-v1.md）。 */
.contract-detail-page .service-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.contract-detail-page .service-card-body{flex:1 1 auto;min-width:0}
.contract-detail-page .service-card-actions{flex:0 0 auto}
.contract-detail-page .service-card-actions button{width:auto;min-height:40px;margin:0;padding:6px 14px}
.contract-detail-page .service-remove-button{border:1px solid var(--c-danger);background:var(--c-surface);color:var(--c-danger);border-radius:12px;font:inherit;font-weight:800;cursor:pointer}
.contract-detail-page .service-remove-button:disabled{opacity:.45;cursor:not-allowed}
.contract-detail-page .removed-services{margin-top:14px;border-top:1px solid var(--c-border);padding-top:10px}
.contract-detail-page .removed-services>summary{cursor:pointer;font-weight:800;padding:4px 0}
.contract-detail-page .removed-services .card-list{margin-top:8px}
.contract-detail-page .removed-services li{background:var(--c-warn-soft);color:var(--c-muted)}
.service-work-badge.service-removed-badge{background:var(--c-surface);border:1px solid var(--c-border);color:var(--c-muted)}
.service-removal-dialog .service-removal-use-list{margin:4px 0 12px;padding-left:1.2em;overflow-wrap:anywhere}
.service-removal-dialog .service-removal-uses-title{margin:0;font-weight:700}
.service-removal-dialog .service-removal-warning{margin:0 0 12px;padding:10px 12px;border:1px solid var(--c-warn-ink);border-radius:10px;background:var(--c-warn-soft);color:var(--c-warn-ink)}
.service-removal-dialog .service-removal-blocked{margin:0 0 12px;padding:10px 12px;border:1px solid var(--c-danger);border-radius:10px;background:var(--c-danger-soft);color:var(--c-text)}
.service-removal-dialog .service-removal-blocked p{margin:0}
.service-removal-dialog .service-removal-blocked p+p{margin-top:6px;color:var(--c-muted)}
.service-removal-dialog textarea[aria-invalid="true"]{border-color:var(--c-danger);box-shadow:0 0 0 2px var(--c-danger-soft)}
.service-removal-dialog label.is-invalid{color:var(--c-danger)}
@media(max-width:520px){.contract-detail-page .service-card{flex-direction:column}.contract-detail-page .service-card-actions{align-self:flex-end}}
/* UI-113：擔當查看客戶資料時的唯讀說明。 */
.customer-readonly-notice{margin:0 0 16px;padding:10px 14px;border:1px solid var(--c-border);border-radius:12px;background:var(--c-warn-soft);color:var(--c-text);font-weight:700}
/* UI-114：客戶清單「可修改／僅查看」標示。 */
.customer-edit-chip{display:inline-block;border-radius:999px;padding:1px 10px;font-size:12px;font-weight:700;white-space:nowrap}
.customer-edit-chip.is-editable{background:var(--c-soft);color:var(--c-brand)}
.customer-edit-chip.is-view-only{background:var(--c-surface);border:1px solid var(--c-border);color:var(--c-muted)}
/* UI-114：不是自己可修改的項目只能查看——隱藏所有修改入口（文件仍可開啟與下載）。 */
body.contract-view-only #open-revision-dialog,body.contract-view-only #contract-status-action,body.contract-view-only #open-service-dialog,body.contract-view-only #note-form,body.contract-view-only #document-upload,body.contract-view-only .document-archive-button,body.contract-view-only .service-card-actions{display:none!important}

/* UI-118：表定申告時程區塊。只用既有色彩 token。 */
.scheduled-filings-card{margin-top:18px}
.scheduled-month-control{display:flex;gap:6px;align-items:center}
.scheduled-month-control input{min-width:0;flex:1}
.scheduled-summary{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}
.scheduled-stat{display:inline-flex;gap:8px;align-items:baseline;border:1px solid var(--c-border);border-radius:12px;padding:6px 12px;background:var(--c-soft)}
.scheduled-stat b{font-size:18px}
.scheduled-kind{display:inline-block;border-radius:999px;padding:1px 9px;font-size:12px;font-weight:700;background:var(--c-soft);color:var(--c-brand)}
.scheduled-kind-detail{margin-left:4px;color:var(--c-muted);font-size:12px}
.scheduled-unset{margin:12px 0 0;display:flex;flex-wrap:wrap;gap:8px;align-items:center;color:var(--c-muted)}

/* UI-121（核准⑨⑩）：左欄＝客戶資料表單＋客戶文件（上下排列）；客戶文件依分類分組的標題列。 */
.customer-page .customer-detail-main{display:grid;gap:18px;align-content:start;min-width:0}
.customer-page .customer-document-table tr.customer-document-group th{text-align:left;font-size:.85rem;padding-top:14px;color:var(--c-brand,#3f6e67);background:transparent;border-bottom:1px solid var(--c-border,#e9e3de)}
.customer-page .customer-document-table tr.customer-document-group .customer-document-group-count{margin-left:6px;font-weight:400;color:var(--c-muted,#71807d)}
.customer-page .customer-document-table td.customer-document-group-empty{color:var(--c-muted,#71807d)}
.customer-page .customer-document-table td:nth-child(2){white-space:normal;overflow-wrap:anywhere;min-width:10em}
.customer-page .customer-detail-main .customer-document-table th,.customer-page .customer-detail-main .customer-document-table td{padding:8px 9px}
.customer-page .customer-detail-main .customer-document-table td:nth-child(2){min-width:8em}
/* UI-122：部門 chip（稅務／行政／社勞）、客戶詳情「各部門擔當」卡片、項目清單與詳情的負責部門／項目擔當。色票沿用核准靜態稿。 */
.department-chip{display:inline-block;border-radius:999px;padding:0 9px;font-size:12px;font-weight:700;line-height:1.7;white-space:nowrap}
.department-chip[data-department="tax"]{background:#e7f1ef;color:#3f6e67}
.department-chip[data-department="administrative"]{background:#f6eedd;color:#7a5a1d}
.department-chip[data-department="labor"]{background:#e6e9f6;color:#3f4f8f}
.customer-page .department-responsibles-table{margin-top:12px;overflow-x:auto;border:1px solid var(--c-border);border-radius:12px}
.customer-page .department-responsibles-table table{width:100%;min-width:0;border-collapse:collapse;font-size:13px}
.customer-page .department-responsibles-table th,.customer-page .department-responsibles-table td{padding:8px 10px;border-bottom:1px solid var(--c-border);text-align:left;vertical-align:top}
.customer-page .department-responsibles-table th{color:var(--c-brand);background:#f1f8f6;font-size:12px;white-space:nowrap}
.customer-page .department-responsibles-table td:first-child{white-space:nowrap}
.customer-page .department-responsibles-table tbody tr:last-child td{border-bottom:0}
.customer-page .department-responsible-note{display:block;color:var(--c-muted);font-size:12px}
.customer-page .department-contract-line{display:block;overflow-wrap:anywhere}
.customer-page .department-empty{color:var(--c-muted)}
.contract-list-page .contract-department-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;font-size:12px;color:var(--c-muted)}
.contract-workbench-page .contract-placement-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;margin:16px 0 0}
.contract-workbench-page .contract-placement-grid .field{margin:0}
.contract-workbench-page .contract-placement-grid select:disabled{opacity:.85}
/* UI-122（核准⑥）：客戶清單「部門」篩選緊接在「負責人」右邊（同一列）。 */
#customer-search-form>.field:nth-child(2){grid-column:3/4}#customer-search-form>.field:nth-child(3){grid-column:4/5;min-width:150px}@media(max-width:500px){#customer-search-form>.field:nth-child(2),#customer-search-form>.field:nth-child(3){grid-column:auto;min-width:0}}
/* UI-122：項目詳情多一顆「改派項目擔當」後，窄螢幕的標頭按鈕改為依內容寬度換行（原 flex:1 會把 6 顆擠成直排文字）。 */
@media(max-width:600px){.contract-detail-page .customer-heading-actions>*{flex:1 1 auto}}
/* UI-126：共做擔當 chip（灰色，靜態稿 --chip-co／--co）、項目詳情的調整按鈕與候選清單、追加服務的對象／備註、紀錄。 */
.collaborator-chip{display:inline-block;margin:2px 4px 2px 0;padding:0 9px;border-radius:999px;background:#eef0ef;color:#5d6b69;font-size:12px;font-weight:700;line-height:1.7;white-space:nowrap}
.collaborator-chip.is-inactive{opacity:.7;text-decoration:line-through}
.collaborator-chip-label{margin-right:3px;font-weight:600}
.contract-detail-page .contract-context .collaborator-chip{display:inline-block;margin:2px 4px 2px 0;padding:0 9px;border:0;border-radius:999px;background:#eef0ef}
.contract-detail-page .contract-context .contract-collaborator-list{display:flex;flex-wrap:wrap;align-items:center;gap:0}
.contract-detail-page .contract-context .contract-collaborators-button{width:auto;min-height:36px;margin:8px 0 0;padding:4px 12px}
.contract-detail-page .collaborator-candidates-fieldset{min-width:0;margin:0 0 12px;padding:0;border:0}
.contract-detail-page .collaborator-candidates{display:grid;gap:6px;max-height:min(50vh,360px);overflow:auto;padding:2px}
.contract-detail-page .collaborator-candidate{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;min-width:0;padding:8px 10px;border:1px solid var(--c-border);border-radius:10px;font-weight:700}
.contract-detail-page .collaborator-candidate input{width:auto;min-height:0;margin:0}
.contract-detail-page .collaborator-candidate-name{overflow-wrap:anywhere}
.contract-detail-page .collaborator-event-list li{overflow-wrap:anywhere}
.contract-detail-page .service-choice-blocked{display:block;color:var(--c-muted);font-weight:700}
.customer-page .department-collaborators{display:block;margin-top:2px}
.contract-combined-page .contract-addon-line-ordinal{display:inline-block;margin-left:8px;padding:0 8px;border-radius:999px;background:#eef0ef;color:#5d6b69;font-size:12px;font-weight:700;vertical-align:middle}
.contract-combined-page .contract-addon-line-target{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;margin-top:8px;width:min(100%,520px)}
.contract-combined-page .contract-addon-line-target label{font-size:12px;color:var(--c-muted);font-weight:700}
.contract-combined-page .contract-addon-line-target input{min-width:0;max-width:100%}
.contract-combined-page .contract-addon-line-error:empty{display:none}
/* UI-130：建立項目 Step 1／Step 2 的提示（決算月未設定、客戶負責擔當未指派）；客戶資料「客戶名稱」第一欄＋只儲存名稱；客戶清單的行政／社勞擔當。 */
.contract-combined-page .contract-selection-hints{display:grid;gap:8px;margin:12px 0 0}
.contract-combined-page .contract-selection-hints[hidden]{display:none}
.contract-combined-page .contract-selection-hint{margin:12px 0 0;padding:9px 13px;border-radius:10px;background:var(--c-warn-soft);color:var(--c-warn-ink);font-size:14px;line-height:1.55;overflow-wrap:anywhere}
.contract-combined-page .contract-selection-hints .contract-selection-hint{margin:0}
.contract-combined-page .contract-selection-hint[hidden]{display:none}
.customer-page .customer-name-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.customer-page .customer-name-row input{flex:1 1 220px;min-width:0}
.customer-page .customer-name-row .secondary-button{width:auto;margin:0;white-space:nowrap}
.customer-page .customer-name-reason[hidden]{display:none}
.customer-page .customer-name-reason{margin-top:8px}
.customer-department-responsible{display:block;margin-top:2px;color:var(--c-muted);font-size:12px;overflow-wrap:anywhere}
/* UI-132：項目折扣調整與刪除（折扣區目前值＋按鈕、鎖定說明、調整表單、變更紀錄、刪除確認）。只用既有色彩 token。 */
.contract-detail-page .discount-current-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin:8px 0;padding:10px 14px;border-radius:10px;background:var(--c-soft)}
.contract-detail-page .discount-current-row .contract-service-total{margin:0;min-width:0;overflow-wrap:anywhere}
.contract-detail-page .discount-actions{display:flex;gap:8px;flex-wrap:wrap}
.contract-detail-page .discount-actions button{width:auto;min-height:40px;margin:0;padding:6px 14px}
.contract-detail-page .discount-actions button:disabled{opacity:.45;cursor:not-allowed}
.contract-detail-page .discount-lock-notice{margin:0 0 10px;padding:8px 12px;border-radius:10px;background:var(--c-warn-soft);color:var(--c-warn-ink);overflow-wrap:anywhere}
.contract-detail-page #discount-form input[aria-invalid="true"],.discount-remove-dialog textarea[aria-invalid="true"]{border-color:var(--c-danger);box-shadow:0 0 0 2px var(--c-danger-soft)}
.contract-detail-page .discount-form-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.contract-detail-page .discount-form-actions button{width:auto}
.contract-detail-page .discount-history{margin-top:14px;padding-top:10px;border-top:1px solid var(--c-border)}
.contract-detail-page .discount-history-list{margin:6px 0;padding-left:1.2em}
.contract-detail-page .discount-history-list li{margin-bottom:6px;overflow-wrap:anywhere}
.discount-remove-dialog{width:min(100% - 32px,520px)}
.discount-remove-dialog .dialog-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;margin-top:14px}
.discount-remove-dialog .dialog-actions button{width:auto}
@media(max-width:520px){.contract-detail-page .discount-actions,.contract-detail-page .discount-actions button,.contract-detail-page .discount-form-actions button,.discount-remove-dialog .dialog-actions button{width:100%}.discount-remove-dialog{width:min(100% - 20px,520px)}}
/* UI-132（Critic P2-1）：刪除折扣對話框與折扣區的錯誤／狀態列沒有內容時不佔高度（只限這兩處，不影響全站狀態列）；元素仍保留在 DOM，live region 照常運作。 */
.discount-remove-dialog .field-error:empty,.discount-remove-dialog .customer-status:empty,.contract-detail-page .discount-error:empty{min-height:0;margin:0}
