/* App Tài công (db/117, v3.0.145). Một màn: lọc theo mốc → thẻ đoàn. Thẻ theo contract card vận hành (AGENTS §8.13):
   padding 14px, khoảng cách giữa khối do container gap 14px quản lý. Nút mốc cao ≥ 52px — bấm bằng ngón cái trên tàu,
   tay ướt, nắng gắt. */
#manTC{padding:11px 14px calc(96px + env(safe-area-inset-bottom));box-sizing:border-box;max-width:620px;margin:0 auto;min-width:0}
.tcLoc{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-bottom:12px}
.tcChip{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;padding:8px 4px;border:1px solid var(--vien);
  border-radius:12px;background:#fff;color:var(--mo);font:inherit;cursor:pointer}
.tcChip b{font-size:18px;line-height:1.1;color:var(--chu);font-variant-numeric:tabular-nums}
.tcChip span{font-size:11px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.tcChip.on{border-color:#111;background:#111;color:#fff}
.tcChip.on b{color:#fff}
.tcTim{margin-bottom:12px}
.tcTim.an{display:none}
.tcTim input{width:100%;box-sizing:border-box}
.tcDs{display:flex;flex-direction:column;gap:14px;min-width:0}
/* Bo góc thẻ 24px (chủ dự án 24/10/2026) — lớn hơn khối bên trong (ô mốc 14, khung chat 20) cho đúng thứ bậc. */
.tcThe{display:flex;flex-direction:column;gap:14px;padding:14px;background:#fff;border:1.5px solid #e2e8f0;border-radius:24px;
  box-shadow:0 1px 3px rgba(15,23,42,.05);min-width:0;max-width:100%;box-sizing:border-box}
.tcThe.tcn-cho{border-color:#fbd24e}
.tcThe.tcn-di{border-color:#fb923c}
.tcThe.tcn-ve{border-color:#34d399}
/* Báo rước (db/117): Thu ngân bấm chuông — đỏ, lên đầu danh sách, nhãn chuông nhấp nháy nhẹ. */
.tcThe.tcn-ruoc{border-color:#dc2626;background:#fff5f5;box-shadow:0 0 0 3px rgba(220,38,38,.15)}
.tcThe.nhay{animation:tcNhay 1.6s ease-out 1}
@keyframes tcNhay{0%{box-shadow:0 0 0 4px rgba(15,118,110,.45)}100%{box-shadow:0 1px 3px rgba(15,23,42,.05)}}
.tcDau{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;min-height:35px;min-width:0}
.tcTen{min-width:0}
.tcMa{font-size:24px;font-weight:850;letter-spacing:.3px;line-height:1.15;color:var(--chu);overflow-wrap:anywhere}
.tcMa.chuaCo{font-size:17px;color:#a16207}
.tcKhach{font-size:15px;font-weight:700;color:var(--chu);margin-top:4px}
.tcNhan{flex:0 0 auto;font-size:11px;font-weight:800;padding:5px 10px;border-radius:20px;white-space:nowrap}
.tcNhan.tcn-cho{background:#fef9c3;color:#854d0e}
.tcNhan.tcn-di{background:#ffedd5;color:#9a3412}
.tcNhan.tcn-ve{background:#d1fae5;color:#065f46}
.tcNhan.tcn-ruoc{display:inline-flex;align-items:center;gap:5px;background:#dc2626;color:#fff}
/* Chuông trên nhãn báo rước rung theo nhịp (cùng kiểu rung với chuông Thu ngân), nghỉ giữa các lần để đỡ rối mắt. */
.tcNhan.tcn-ruoc .ic{width:13px;height:13px;transform-origin:50% 15%;animation:tcChuongRung 1.8s ease-in-out infinite}
@keyframes tcChuongRung{0%,40%,100%{transform:rotate(0)}6%{transform:rotate(-18deg)}12%{transform:rotate(16deg)}18%{transform:rotate(-12deg)}
  24%{transform:rotate(9deg)}30%{transform:rotate(-5deg)}}
@media (prefers-reduced-motion:reduce){.tcNhan.tcn-ruoc .ic{animation:none}}
.tcThe .tcAnhCano{width:100%;aspect-ratio:16/10;border-radius:12px}
/* Hai ô mốc (chủ dự án 24/10/2026): bằng nhau, cùng bố cục; Đã lên tàu ĐỎ (đổi từ vàng cùng ngày), Đã về XANH. */
.tcHaiNut{display:grid;grid-template-columns:1fr 1fr;gap:10px;min-width:0}
/* 24/10/2026: hạ chiều cao — bố cục ngang, icon trái, nhãn + dòng phụ phải. Hai ô vẫn bằng nhau (grid 1fr 1fr, cao cố định). */
.tcO{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;align-content:center;
  column-gap:10px;row-gap:1px;height:60px;padding:8px 12px;box-sizing:border-box;min-width:0;border:2px solid transparent;
  border-radius:14px;font:inherit;text-align:left;cursor:pointer}
/* Chữ trái, icon phải (chủ dự án 24/10/2026). */
.tcO .tcMocIcon{grid-column:2;grid-row:1 / 3;align-self:center;width:24px;height:24px}
.tcO .tcONhan,.tcO .tcOPhu{grid-column:1}
.tcO .tcONhan{grid-row:1}
.tcO .tcOPhu{grid-row:2}
.tcO .tcONhan{font-size:15px;font-weight:850;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tcO .tcOPhu{font-size:11.5px;font-weight:600;line-height:1.3;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tcO .tcOPhu b{font-size:13px;font-weight:850;font-variant-numeric:tabular-nums}
.tcO.len{background:#fef2f2;border-color:#fca5a5;color:#b91c1c}
.tcO.ve{background:#ecfdf5;border-color:#6ee7b7;color:#047857}
.tcO.len.da{background:#dc2626;border-color:#dc2626;color:#fff}
.tcO.ve.da{background:#047857;border-color:#047857;color:#fff}
button.tcO:disabled{background:#eef2f6;border-color:#e2e8f0;color:#94a3b8;cursor:not-allowed}
button.tcO[aria-busy="true"]{opacity:.6}
.tcO:not(:disabled):active{transform:scale(.98)}
/* Khung trao đổi: dùng NGUYÊN CSS .chat của thẻ lượt Thu ngân (viền trên, đệm 10/13/12). Thẻ Tài công có đệm 14px nên
   kéo khung ra sát mép thẻ để giống hệt Thu ngân. */
.tcThe > .tcChat{margin:0 -14px -14px;min-width:0}
@media (max-width:360px){.tcO{column-gap:8px;padding:8px 10px}.tcO .tcONhan{font-size:14px}.tcMa{font-size:21px}}
/* Chưa có ảnh: một dải mỏng thay vì khung 16:10 trống. */
.tcThe .oAnh.khoa.tcAnhCano{aspect-ratio:auto;min-height:48px}
.tcThe .oAnh.khoa.tcAnhCano .trong{flex-direction:row;gap:8px}
/* 24/10/2026 (chủ dự án): thanh sắp xếp · chế độ xem · lịch (khung .hangTim của Thu ngân) + nhãn ngày đang xem. */
#manTC .hangTim{align-items:center}
.tcNhanNgay{flex:1 1 auto;min-width:0;text-align:right;font-size:13px;font-weight:800;color:var(--chu);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Ngày cũ hơn hôm qua: máy chủ không nhận mốc (db/117) — ô giữ màu đã / chưa nhưng không phải nút. */
.tcO.chiXem{cursor:default}
.tcO.chiXem:not(.da){background:#f8fafc;border-color:#e2e8f0;color:#64748b}
/* db/118: ô ảnh trống là nút chụp ảnh đi cano (tài công có quyền anh.chup_cano). */
.tcThe button.tcChupCano{width:100%;border:1.5px dashed #94a3b8;background:#f8fafc;color:#0f766e;font:inherit;font-weight:800;cursor:pointer}
.tcThe button.tcChupCano .ic{width:20px;height:20px}
.tcThe button.tcChupCano .trong{color:#0f766e;font-size:14px;font-weight:800}
/* v3.0.159: dải đỏ "Chạm để bật loa báo" — hiện khi iPhone chưa cho phát tiếng (chưa chạm sau khi mở app / bị chặn lại). */
.tcBatLoa{display:flex;align-items:center;gap:12px;width:100%;margin:0 0 12px;padding:12px 14px;box-sizing:border-box;border:0;
  border-radius:16px;background:#dc2626;color:#fff;font:inherit;text-align:left;cursor:pointer;box-shadow:0 6px 16px rgba(220,38,38,.35);
  animation:tcBatLoaNhip 1.6s ease-in-out infinite}
.tcBatLoa.an{display:none}
.tcBatLoa .ic{width:26px;height:26px;flex:0 0 auto}
.tcBatLoa span{display:grid;gap:2px;min-width:0}
.tcBatLoa b{font-size:16px;font-weight:850}
.tcBatLoa small{font-size:12px;font-weight:600;opacity:.92;line-height:1.35}
@keyframes tcBatLoaNhip{0%,100%{transform:scale(1)}50%{transform:scale(1.015)}}
@media (prefers-reduced-motion:reduce){.tcBatLoa{animation:none}}
/* db/153 (v3.0.194): dải báo chưa ai nhận — nút "Đã nhận" (app Android: tăng âm lượng 2 lần cũng được). */
.tcDaNhan{display:flex;flex-direction:column;gap:8px;margin:0 0 12px}
.tcDaNhan.an{display:none}
.tcDaNhanMuc{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:14px;background:#fef2f2;border:1px solid #fecaca}
.tcDaNhanMuc>span{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.tcDaNhanMuc b{color:#991b1b;font-size:15px}
.tcDaNhanMuc small{color:#7f1d1d;font-size:12px}
.tcDaNhanMuc .nutChinh{flex:0 0 auto;width:auto;min-height:44px;padding:0 18px;margin:0}
