/* Fado Agri CRM — giao diện Version 1 (cũ). Nguyên văn globals.css tại commit bbf2ced, chỉ bỏ
   dòng @import "tailwindcss" (nay ở src/app/globals.css). Không sửa file này — xem globals.css. */

:root{
  --bg:#F4F6FA;
  --card:#FFFFFF;
  --border:#E8ECF4;
  --border-soft:#EEF1F8;
  --ink:#0F172A;
  --muted:#64748B;
  --faint:#94A3B8;
  --navy:#F0FAF4;
  --navy-2:#E1F5E9;
  --side-text:#64748B;
  --purple:#1FAE7A;
  --purple-dark:#178F65;
  --purple-soft:#E3F8EF;
  --purple-line:#BEEDD8;
  /* Series (đã validate CVD-safe) */
  --c1:#1FAE7A; --c2:#0891B2; --c3:#EA580C; --c4:#16A34A; --c5:#DC2626; --c6:#2563EB;
  --green:#16A34A; --green-soft:#DCFCE7;
  --amber:#B45309; --amber-soft:#FEF3C7;
  --red:#DC2626;  --red-soft:#FEE2E2;
  --cyan:#0891B2; --cyan-soft:#CFFAFE;
  --shadow:0 1px 2px rgba(15,23,42,.04),0 4px 16px rgba(15,23,42,.05);
  --shadow-lg:0 8px 30px rgba(15,23,42,.14);
  --radius:14px;
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0;background:var(--card);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Inter",Helvetica,Arial,sans-serif;
  font-size:14px;-webkit-font-smoothing:antialiased;
}
h1,h2,h3{margin:0;font-weight:700;letter-spacing:-0.01em;color:var(--ink);}

/* ═══ Layout: sidebar + main ═══ */
/* Shell chiếm đúng 100vh và không tự cuộn — sidebar vì vậy đứng yên tuyệt đối.
   .main là vùng cuộn nội bộ duy nhất (overflow-y:auto) nên chỉ nội dung bên
   phải di chuyển khi cuộn; .pagehead sticky bên trong nó nên vẫn dính đúng. */
.shell{display:flex;height:100vh;overflow:hidden;background:var(--bg);}
.sidebar{
  width:224px;flex-shrink:0;background:var(--navy);color:var(--side-text);
  display:flex;flex-direction:column;
  margin:14px 0 14px 14px;border-radius:24px;box-shadow:var(--shadow-lg);
}
.brand{
  display:flex;align-items:center;gap:11px;margin:14px 12px 8px;padding:12px 13px;
  border-radius:16px;background:var(--purple);box-shadow:var(--shadow);
}
.brand-logo-box{
  width:42px;height:42px;flex-shrink:0;border-radius:11px;background:#fff;padding:3px;
  display:flex;align-items:center;justify-content:center;
}
.brand .logo{height:100%;width:100%;object-fit:contain;}
.brand .bt{line-height:1.25;}
.brand .bt b{display:block;color:#fff;font-size:13.5px;letter-spacing:.4px;}
.brand .bt span{font-size:10px;text-transform:uppercase;letter-spacing:1.4px;color:rgba(255,255,255,.8);}
.side-label{font-size:10px;text-transform:uppercase;letter-spacing:1.6px;color:#8B94A8;padding:20px 20px 8px;}
.nav{display:flex;flex-direction:column;gap:2px;padding:0 10px;}
.nav-item{
  display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:9px;cursor:pointer;
  font-size:13.5px;color:var(--side-text);user-select:none;transition:background .12s,color .12s;
}
.nav-item svg{width:17px;height:17px;flex-shrink:0;opacity:.85;}
.nav-item:hover{background:var(--navy-2);color:var(--ink);}
.nav-item.active{background:var(--purple);color:#fff;font-weight:600;}
.nav-item.active svg{opacity:1;}
.side-foot{margin-top:auto;padding:14px 16px;border-top:1px solid var(--border-soft);}
.side-user{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.avatar{
  width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--purple),#6EE7B7);
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;
}
.side-user .su b{display:block;color:var(--ink);font-size:13px;line-height:1.2;}
.side-user .su span{font-size:11px;color:var(--side-text);}
.side-logout{
  display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--side-text);cursor:pointer;
  padding:7px 10px;border-radius:8px;
}
.side-logout:hover{background:var(--navy-2);color:var(--ink);}

/* ═══ Mobile: sidebar becomes a fixed bottom tab bar ═══ */
@media (max-width:768px),((max-height:768px) and (orientation:landscape) and (pointer:coarse)){
  .sidebar{
    position:fixed;left:0;right:0;bottom:0;top:auto;width:100%;height:auto;
    flex-direction:row;align-items:stretch;z-index:40;padding:4px 2px;
    border-top:1px solid var(--border);border-radius:0;margin:0;box-shadow:none;
    padding-bottom:calc(4px + env(safe-area-inset-bottom));
  }
  .brand,.side-label{display:none;}
  .nav{flex:1;flex-direction:row;padding:0;gap:0;}
  .nav-item{
    flex:1;flex-direction:column;gap:3px;padding:6px 2px;border-radius:10px;
    font-size:10px;text-align:center;min-width:0;
  }
  .nav-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;}
  .nav-item svg{width:19px;height:19px;}
  .side-foot{
    margin-top:0;padding:0 6px;border-top:none;border-left:1px solid var(--border);
    display:flex;align-items:center;flex-shrink:0;
  }
  .side-user{display:none;}
  .side-logout{flex-direction:column;gap:3px;font-size:10px;padding:6px 6px;}
  .content{padding:16px 16px calc(78px + env(safe-area-inset-bottom));}
  .pagehead{padding:14px 16px;}
}

.main{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow-y:auto;}
.pagehead{
  background:var(--bg);border-bottom:1px solid var(--border);
  padding:18px 30px;position:sticky;top:0;z-index:10;flex-shrink:0;
}
.pagehead h2{font-size:19px;}
.pagehead .sub{font-size:12px;color:var(--muted);margin-top:3px;}
.pagehead-row{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;}
.topbar-actions{display:flex;align-items:center;gap:10px;}
.topbar-search{
  display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--border);
  border-radius:10px;padding:7px 12px;color:var(--faint);min-width:200px;
}
.topbar-search input{
  border:none;background:none;padding:0;font-size:13px;color:var(--ink);flex:1;box-shadow:none;
}
.topbar-search input:focus{outline:none;box-shadow:none;}
.topbar-search{transition:border-color .15s,box-shadow .15s;}
/* Bấm vào ô tìm: viền + vòng sáng, con trỏ màu nhấn, ẩn chữ gợi ý — trước đây con trỏ dính sát
   chữ "T" của placeholder nên nhìn như một dấu chấm. padding-left: input padding 0 làm con trỏ bị cắt mất nửa. */
.topbar-search:focus-within{border-color:var(--purple);box-shadow:0 0 0 3px rgba(31,174,122,.18);}
.topbar-search input{caret-color:var(--purple);padding:0 0 0 3px;}
.topbar-search:focus-within input::placeholder{color:transparent;}
.qs-kbd{font-family:inherit;font-size:10.5px;color:var(--faint);border:1px solid var(--border);border-radius:5px;padding:1px 5px;white-space:nowrap;}
/* Gợi ý của ô tìm nhanh (Ctrl+K) — customer-quick-search.tsx. */
.qs-drop{
  position:absolute;top:calc(100% + 6px);right:0;width:min(420px,calc(100vw - 32px));z-index:50;
  background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-lg);
  padding:6px;max-height:70vh;overflow-y:auto;color:var(--ink);
}
.qs-item{padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px;}
.qs-item.active{background:var(--purple-soft);}
.qs-empty{padding:12px 10px;font-size:13px;color:var(--muted);}
.qs-foot{padding:6px 10px 2px;font-size:11px;color:var(--faint);border-top:1px solid var(--border-soft);margin-top:4px;}
.topbar-icon-btn{
  display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:9px;
  border:1px solid var(--border);background:var(--card);color:var(--muted);cursor:pointer;flex-shrink:0;
}
.topbar-icon-btn:hover{border-color:var(--purple);color:var(--purple-dark);}
.topbar-avatar{
  width:34px;height:34px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,var(--purple),#6EE7B7);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;
  cursor:default;
}
@media (max-width:768px),((max-height:768px) and (orientation:landscape) and (pointer:coarse)){
  .topbar-search{min-width:0;flex:1;}
  .qs-kbd{display:none;}
}
.content{padding:24px 30px 70px;max-width:1680px;width:100%;margin:0 auto;}

/* ═══ Cards ═══ */
.card{
  background:var(--card);border:1px solid var(--border-soft);border-radius:var(--radius);
  padding:20px 22px;box-shadow:var(--shadow);
}
.card-title{font-size:14.5px;font-weight:700;margin-bottom:16px;}
.data-gap-banner{
  display:flex;align-items:center;gap:12px;padding:12px 16px;margin-bottom:16px;
  background:var(--amber-soft);border:1px solid #FDE68A;border-radius:var(--radius);
  color:var(--amber);font-size:13px;
}
.data-gap-banner svg{flex-shrink:0;}
.data-gap-banner .msg{flex:1;color:#92400E;}
.data-gap-banner a{color:var(--amber);font-weight:700;text-decoration:none;white-space:nowrap;}
.data-gap-banner a:hover{text-decoration:underline;}
.grid-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:16px;}
.kpi-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
.kpi-top .label{margin-bottom:0;}
.kpi-icon{
  width:34px;height:34px;border-radius:10px;flex-shrink:0;background:var(--muted);color:#fff;
  display:flex;align-items:center;justify-content:center;
}
/* NOTE: "tint-purple" is a real violet here, independent of the --purple brand variable (which
   is the green brand accent) — the class name is legacy from before the brand color changed to
   green; keeping it a genuine purple gives the KPI cards actual color variety instead of two
   tints both rendering the same green. */
.kpi-icon.tint-purple{background:#7C3AED;}
.kpi-icon.tint-orange{background:#EA580C;}
.kpi-icon.tint-green{background:#16A34A;}
.kpi-icon.tint-cyan{background:#0891B2;}
.kpi-icon.tint-blue{background:#2563EB;}
.kpi-icon.tint-rose{background:#E11D48;}
.kpi .label{font-size:11px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin-bottom:8px;font-weight:600;}
.kpi .value{font-size:26px;font-weight:800;letter-spacing:-.02em;}
.kpi .value.warn{color:var(--red);}
.kpi .sub{font-size:12px;color:var(--muted);margin-top:5px;}
.kpi.tint-purple{background:#F5F3FF;border-color:#DDD6FE;}
.kpi.tint-purple .value{color:#6D28D9;}
.kpi.tint-orange{background:#FFF7ED;border-color:#FED7AA;}
.kpi.tint-orange .value{color:#C2410C;}
.kpi.tint-green{background:#F0FDF4;border-color:#BBF7D0;}
.kpi.tint-green .value{color:#15803D;}
.kpi.tint-cyan{background:#ECFEFF;border-color:#A5F3FC;}
.kpi.tint-cyan .value{color:#0E7490;}
.kpi.tint-blue{background:#EFF6FF;border-color:#BFDBFE;}
.kpi.tint-blue .value{color:#1D4ED8;}
.kpi.tint-rose{background:#FFF1F2;border-color:#FECDD3;}
.kpi.tint-rose .value{color:#BE123C;}
.two-col{display:grid;grid-template-columns:1.2fr 1fr;gap:16px;}
.three-col{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;}
@media (max-width:1100px){.three-col{grid-template-columns:1fr;}}
@media (max-width:900px){.two-col{grid-template-columns:1fr;}}
.section-title{font-size:14.5px;font-weight:700;margin:4px 0 14px;}

/* ═══ Charts ═══ */
.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;font-size:12.5px;}
.bar-label{width:130px;flex-shrink:0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.bar-track{flex:1;background:var(--border-soft);border-radius:5px;height:10px;overflow:hidden;}
.bar-fill{height:100%;background:var(--c1);border-radius:5px;min-width:2px;}
.bar-fill.alt{background:var(--c2);}
.bar-fill.red{background:var(--c5);}
.bar-fill.orange{background:var(--c3);}
.bar-fill.green{background:var(--c4);}
.bar-val{width:64px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums;font-size:11.5px;font-weight:600;}

.cols{display:flex;align-items:flex-end;justify-content:space-around;gap:18px;height:190px;padding:10px 6px 0;}
.colwrap{display:flex;flex-direction:column;align-items:center;gap:6px;flex:1;max-width:96px;height:100%;justify-content:flex-end;}
.colv{font-size:13px;font-weight:700;}
.colbar{
  width:56px;border-radius:6px 6px 2px 2px;min-height:3px;transition:height .3s;
  background-image:linear-gradient(180deg,rgba(255,255,255,.32),rgba(255,255,255,0) 45%);
  background-blend-mode:overlay;box-shadow:0 3px 6px rgba(15,23,42,.12);
}
.coll{font-size:11.5px;color:var(--muted);text-align:center;white-space:nowrap;}

.donut-wrap{display:flex;align-items:center;gap:20px;flex-wrap:wrap;}
.legend{display:flex;flex-direction:column;gap:7px;font-size:12.5px;min-width:150px;flex:1;}
.legend .li{display:flex;align-items:center;gap:8px;color:var(--ink);}
.legend .sw{width:10px;height:10px;border-radius:3px;flex-shrink:0;}
.legend .lv{margin-left:auto;color:var(--muted);font-variant-numeric:tabular-nums;font-weight:600;}

.funnel-wrap{display:flex;gap:18px;align-items:center;flex-wrap:wrap;}
.funnel-rows{flex:1;min-width:190px;display:flex;flex-direction:column;gap:6px;}
.frow{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:6px 10px;border-radius:8px;background:var(--bg);}
.frow .sw{width:9px;height:9px;border-radius:50%;flex-shrink:0;}
.frow .fv{font-weight:700;margin-left:4px;}
.frow .fp{margin-left:auto;color:var(--muted);font-size:11.5px;font-variant-numeric:tabular-nums;}

/* Dashboard drill-down: any chart bar/row/tile that links out to a filtered list. */
.dash-click{cursor:pointer;border-radius:8px;transition:background .12s;}
.dash-click:hover{background:var(--purple-soft);}
.card.kpi.dash-click:hover{box-shadow:var(--shadow-lg);}
svg a{cursor:pointer;}
svg a:hover circle,svg a:hover polygon{opacity:.85;}

/* Segmented control (period switcher: Tuần này / Theo tháng / Theo quý / Theo năm). */
.subtabs{display:inline-flex;align-items:center;background:var(--border-soft);border-radius:10px;padding:3px;gap:2px;}
.subtab{
  padding:7px 14px;font-size:12.5px;font-weight:600;color:var(--muted);border-radius:7px;
  cursor:pointer;user-select:none;white-space:nowrap;transition:background .12s,color .12s;
}
.subtab:hover{color:var(--ink);}
.subtab.active{background:var(--card);color:var(--purple-dark);box-shadow:var(--shadow);}
.subtab .count{margin-left:6px;padding:1px 7px;border-radius:10px;background:var(--card);color:var(--muted);font-size:11px;}
.subtab.active .count{background:var(--purple-soft);color:var(--purple-dark);}

/* "Tương tác gần nhất" (Danh sách khách hàng): chấm màu theo độ "nguội" — xem careLevel (last-interaction.ts). */
.care-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px;flex:none;}
.care-dot.fresh{background:var(--green);}
.care-dot.warn{background:#F59E0B;}
.care-dot.overdue{background:var(--red);}
.care-dot.none{background:transparent;border:1.5px solid var(--faint);}
mark.hl{background:#FEF08A;color:inherit;padding:0 1px;border-radius:2px;}

/* ═══ Filters & inputs ═══ */
.filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;align-items:center;}
select,input,textarea{
  font-size:13px;padding:8px 12px;border:1px solid var(--border);border-radius:9px;background:var(--card);color:var(--ink);
  font-family:inherit;box-shadow:0 1px 2px rgba(15,23,42,.03);
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--purple-dark);box-shadow:0 0 0 3px rgba(23,143,101,.14);}

/* input[type=range] chấm điểm đánh giá (khách hàng/nhân sự): bỏ padding/border/background chung
   của "select,input,textarea" ở trên (không hợp cho track native) — tự vẽ track + thumb để nút
   trượt bám sát 2 đầu, không còn khoảng trống do padding lẫn margin mặc định của trình duyệt. */
input[type="range"]{
  -webkit-appearance:none;appearance:none;padding:0;border:none;background:transparent;box-shadow:none;
  height:20px;cursor:pointer;
}
input[type="range"]::-webkit-slider-runnable-track{height:6px;border-radius:3px;background:var(--border);}
input[type="range"]::-moz-range-track{height:6px;border-radius:3px;background:var(--border);}
input[type="range"]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;
  background:var(--purple);border:2px solid #fff;box-shadow:0 1px 3px rgba(15,23,42,.25);
  margin-top:-6px;cursor:pointer;
}
input[type="range"]::-moz-range-thumb{
  width:18px;height:18px;border-radius:50%;background:var(--purple);border:2px solid #fff;
  box-shadow:0 1px 3px rgba(15,23,42,.25);cursor:pointer;
}
input[type="range"]:focus{outline:none;box-shadow:none;}
input[type="range"]:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(23,143,101,.2),0 1px 3px rgba(15,23,42,.25);}
input[type="range"]:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(23,143,101,.2),0 1px 3px rgba(15,23,42,.25);}
label.f{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);margin:9px 0 4px;font-weight:600;}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;}
.form-grid .full{grid-column:1/-1;}
.form-grid input,.form-grid select,.form-grid textarea{width:100%;}
.check{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px;}

.btn{
  display:inline-flex;align-items:center;gap:6px;padding:9px 16px;font-size:13px;border-radius:9px;cursor:pointer;
  border:1px solid var(--purple-dark);background:var(--purple);color:#fff;font-weight:600;user-select:none;font-family:inherit;
  box-shadow:0 1px 2px rgba(23,143,101,.25);transition:background .12s;
}
.btn:hover{background:var(--purple-dark);}
.btn.ghost{background:var(--card);color:var(--ink);border-color:var(--border);box-shadow:0 1px 2px rgba(15,23,42,.04);font-weight:500;}
.btn.ghost:hover{border-color:var(--purple);color:var(--purple-dark);background:var(--card);}
.btn.danger{background:var(--card);color:var(--red);border-color:var(--border);box-shadow:none;}
.btn.danger:hover{border-color:var(--red);background:#FFF5F5;}
.btn.sm{padding:5px 11px;font-size:12px;border-radius:7px;}
.btn.ochre{background:var(--c3);border-color:#C2410C;box-shadow:0 1px 2px rgba(194,65,12,.25);}
.btn.ochre:hover{background:#C2410C;}

/* ═══ Table ═══ */
.tablewrap{overflow-x:auto;background:var(--card);border:1px solid var(--border-soft);border-radius:var(--radius);box-shadow:var(--shadow);}
table{width:100%;border-collapse:collapse;}
thead th{
  text-align:center;font-size:11px;text-transform:uppercase;letter-spacing:.8px;color:var(--purple-dark);font-weight:800;
  background:var(--purple-soft);padding:12px 14px;border-bottom:2px solid var(--purple-line);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;
}
tbody td{padding:11px 14px;border-bottom:1px solid var(--border-soft);font-size:13px;vertical-align:middle;}
tbody tr:last-child td{border-bottom:none;}

/* Columns vary a lot in width in the fixed-layout customer table (Công ty 20% next to Sale 8%) —
   without a boundary, left-aligned header labels of very different widths just look randomly
   spaced. A hairline divider makes each column's extent explicit instead. */
.tbl-fixed thead th:not(:last-child){border-right:1px solid var(--border-soft);}
.tbl-fixed tbody td:not(:last-child){border-right:1px solid var(--border-soft);}
tbody tr.click:hover{background:var(--purple-soft);cursor:pointer;}
.num{text-align:right;font-variant-numeric:tabular-nums;}

/* Badges (thay stamp) */
.stamp{
  display:inline-block;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:.2px;white-space:nowrap;
}
.stamp.green{background:var(--green-soft);color:#15803D;}
.stamp.ochre{background:var(--amber-soft);color:var(--amber);}
.stamp.red{background:var(--red-soft);color:#B91C1C;}
.stamp.grey{background:var(--border-soft);color:var(--muted);}
.pill{display:inline-block;padding:3px 10px;border-radius:20px;background:var(--purple-soft);font-size:11px;color:var(--purple-dark);font-weight:600;white-space:nowrap;}
.pill.lg{padding:4px 12px;font-size:12px;}
/* Inline-editable journey-stage dropdown (customer table). NOT styled as a centered .pill: the
   browser's native <option> popup ignores text-align/centering (it's rendered outside CSS's
   reach), so a centered closed box next to a left-aligned open list reads as "misaligned" — left
   aligning both, like every other <select> in the app, keeps them consistent instead. Width is
   still clamped to the column: a bare <select> otherwise sizes its closed box to fit its WIDEST
   <option> (not the selected one), overflowing into the next column. */
.stage-select{
  display:block;width:100%;max-width:100%;box-sizing:border-box;
  padding:5px 8px;font-size:12px;font-weight:600;text-align:left;
  border:1px solid var(--purple-line);border-radius:8px;background:var(--purple-soft);color:var(--purple-dark);
  cursor:pointer;font-family:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.stage-select:hover:not(:disabled){background:var(--purple-line);}
.stage-select:disabled{opacity:.6;cursor:wait;}

/* Fixed layout: column widths come purely from <colgroup>, so the table never grows past its
   container — long cell content truncates (see .ellipsis) instead of forcing a horizontal scroll. */
.tbl-fixed{table-layout:fixed;}
.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.subline{font-size:11px;color:var(--faint);margin-top:2px;}
.cell-strong{font-size:14px;font-weight:700;}
.cell-strong.won{color:var(--green);}
.cell-strong.open{color:var(--ink);}

/* ═══ Kanban ═══ */
.kanban{display:grid;grid-template-columns:repeat(8,minmax(172px,1fr));gap:12px;overflow-x:auto;padding-bottom:12px;}
.kcol{background:#EDF6F1;border-radius:12px;padding:10px;min-height:320px;}
.kcol.dragover{outline:2px dashed var(--purple);outline-offset:-2px;background:var(--purple-soft);}
.kcol h4{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:2px 4px 4px;display:flex;justify-content:space-between;font-weight:700;}
.kcol .ksum{font-size:10.5px;color:var(--faint);margin:0 4px 10px;}
.kcard{
  background:var(--card);border:1px solid var(--border-soft);border-radius:10px;padding:10px 12px;margin-bottom:8px;font-size:12px;
  cursor:grab;box-shadow:0 1px 2px rgba(15,23,42,.06);
}
.kcard:hover{box-shadow:var(--shadow-lg);border-color:var(--purple-line);}
.kcard.won{border-left:3px solid var(--green);}
.kcard.lost{opacity:.55;border-left:3px solid var(--red);}
.kcard .co{font-weight:700;margin-bottom:3px;}
.kcard .meta{color:var(--muted);font-size:11px;line-height:1.5;}
.kcard:active{cursor:grabbing;}

/* ═══ Modal ═══ */
.modal-overlay{position:fixed;inset:0;background:rgba(15,23,42,.5);backdrop-filter:blur(2px);display:none;align-items:flex-start;justify-content:center;z-index:50;overflow-y:auto;padding:20px 16px;}
.modal-overlay.show{display:flex;}
.modal{background:var(--card);border-radius:16px;max-width:640px;width:100%;padding:20px 28px;margin-bottom:20px;box-shadow:var(--shadow-lg);}
.modal.wide{max-width:840px;}
.modal h3{font-size:18px;margin-bottom:5px;}
.modal .meta-row{font-size:12.5px;color:var(--muted);margin-bottom:14px;line-height:1.6;}
.close-x{float:right;cursor:pointer;color:var(--faint);font-size:17px;line-height:1;padding:4px;border-radius:6px;}
.close-x:hover{background:var(--border-soft);color:var(--ink);}
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:14px;}

/* ═══ Timeline ═══ */
.timeline{border-left:2px solid var(--border);padding-left:16px;margin-top:10px;}
.timeline-item{position:relative;margin-bottom:13px;}
.timeline-item::before{content:"";position:absolute;left:-21px;top:3px;width:8px;height:8px;border-radius:50%;background:var(--purple);box-shadow:0 0 0 3px var(--purple-soft);}
.timeline-item .t-date{font-size:11px;color:var(--faint);text-transform:uppercase;letter-spacing:.4px;font-weight:600;}
.timeline-item .t-note{font-size:13px;margin-top:2px;}

.note-banner{background:#FFFBEB;border:1px solid #FDE68A;color:#92400E;font-size:12.5px;padding:11px 15px;border-radius:10px;margin-bottom:16px;}

/* ═══ Login ═══ */
.login-wrap{
  min-height:100vh;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:20px;
  background:radial-gradient(1000px 500px at 80% -10%,rgba(31,174,122,.20),transparent),
             radial-gradient(800px 400px at -10% 110%,rgba(8,145,178,.14),transparent),var(--bg);
}
.login-card{background:var(--card);border-radius:18px;padding:36px 40px;width:380px;box-shadow:var(--shadow-lg);}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px;}
.login-brand .logo{height:36px;width:auto;object-fit:contain;}
.login-brand h1{font-size:20px;}
.login-brand span{font-size:11px;text-transform:uppercase;letter-spacing:1.4px;color:var(--muted);}
.login-card input{width:100%;margin-bottom:12px;padding:11px 13px;border-radius:10px;}
.login-card .btn{width:100%;padding:11px;justify-content:center;border-radius:10px;font-size:14px;}
.login-err{color:var(--red);font-size:12.5px;margin-bottom:10px;min-height:16px;}

/* ═══ Toast ═══ */
#toast{
  position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:var(--ink);color:#fff;
  padding:11px 20px;border-radius:10px;font-size:13px;display:none;z-index:99;max-width:90%;box-shadow:var(--shadow-lg);
}
#toast.show{display:block;}
#toast.err{background:var(--red);}

.muted{color:var(--muted);font-size:12px;}

/* ═══ PWA install banner ═══ */
.pwa-install-banner{
  position:fixed;right:16px;bottom:16px;z-index:45;max-width:280px;
  background:var(--ink);color:#fff;border-radius:14px;box-shadow:var(--shadow-lg);
  padding:12px 14px;
}
.pwa-install-banner .install-close{
  float:right;background:none;border:none;color:rgba(255,255,255,.55);cursor:pointer;
  font-size:16px;line-height:1;padding:2px 4px;margin:-4px -6px 0 0;
}
.pwa-install-banner .install-close:hover{color:#fff;}
.pwa-install-banner .install-cta{
  background:var(--purple);color:#fff;border:none;border-radius:8px;padding:7px 12px;
  font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap;font-family:inherit;
}
.pwa-install-banner .install-cta:hover{background:var(--purple-dark);}
.pwa-install-ios-tip{
  margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.15);
  font-size:12px;color:rgba(255,255,255,.85);line-height:1.6;
}
@media (max-width:768px),((max-height:768px) and (orientation:landscape) and (pointer:coarse)){
  .pwa-install-banner{right:12px;left:12px;bottom:calc(70px + env(safe-area-inset-bottom));max-width:none;}
}

/* ═══ Mobile polish: card-style tables, stacked filters, bigger touch targets ═══
   Placed last so it wins the cascade over the base .tablewrap/table/.filters/.btn rules above
   (same media condition as the sidebar block near the top — kept separate so each stays next to
   what it overrides instead of one large block far from its base rules). */
@media (max-width:768px),((max-height:768px) and (orientation:landscape) and (pointer:coarse)){
  /* Any table using .tbl-fixed (currently just the customers list) — a fixed % grid can't read on
     a ~360px screen, so each <tr> becomes a card and each <td> a labeled row instead. Requires the
     cell to carry data-label="..." (added in CustomerTable); cells without one just show no label. */
  .tbl-fixed{table-layout:auto;}
  .tbl-fixed thead{display:none;}
  .tbl-fixed,.tbl-fixed tbody,.tbl-fixed tr,.tbl-fixed td{display:block;width:100%;}
  .tbl-fixed tr{
    background:var(--card);border:1px solid var(--border-soft);border-radius:var(--radius);
    margin-bottom:12px;box-shadow:var(--shadow);padding:2px 0;
  }
  .tbl-fixed tr:last-child{margin-bottom:0;}
  .tbl-fixed td{
    padding:8px 14px;border-bottom:1px solid var(--border-soft) !important;border-right:none !important;
    text-align:left !important;
  }
  .tbl-fixed tr td:last-child{border-bottom:none !important;}
  .tbl-fixed td[data-label]::before{
    content:attr(data-label);display:block;font-size:10px;font-weight:700;text-transform:uppercase;
    letter-spacing:.5px;color:var(--muted);margin-bottom:3px;
  }
  .tablewrap{overflow-x:visible;}

  /* Filter bars: one full-width control per row instead of a cramped wrapped row. */
  .filters{flex-direction:column;align-items:stretch;}
  .filters select,.filters input,.filters .btn,.filters a.btn{width:100%;justify-content:center;}
  .filters .check{padding:4px 0;}

  /* Bigger tap targets: default checkbox render box and .btn.sm are comfortable with a mouse but
     too small to reliably hit with a finger. */
  input[type="checkbox"]{width:19px;height:19px;}
  .btn.sm{padding:8px 14px;min-height:36px;}
}
.mt{margin-top:16px;}

/* Ô tìm nhanh — "dò khách" (21/10/2026, bổ sung cho V1; xem customer-quick-search.tsx). */
.qs-group{padding:8px 10px 4px;font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);}
.qs-row{display:flex;align-items:center;gap:10px;}
.qs-main{flex:1;min-width:0;}
.qs-action{flex-shrink:0;font-size:12px;font-weight:700;color:#fff;background:var(--purple);padding:5px 10px;border-radius:8px;}
.qs-taken{cursor:default;opacity:.75;}
.qs-create{color:var(--purple-dark);font-weight:700;border-top:1px solid var(--border-soft);margin-top:4px;}

/* Khung "Kết quả dò" trên Danh sách khách hàng (22/10/2026, xem customer-probe-panel.tsx). */
.probe-panel{padding:14px 18px;border-color:var(--purple-line);}
.probe-title{font-size:13px;font-weight:700;color:var(--purple-dark);margin-bottom:8px;}
.probe-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-top:1px solid var(--border-soft);}
.probe-title + .probe-row{border-top:none;}
.probe-main{flex:1;min-width:0;font-size:13.5px;}
.probe-taken{opacity:.8;}
