:root{
  --ink:#16211f; --soft:#57635f; --faint:#8a9591;
  --line:#d8dcd9; --line-2:#eceeed;
  --bg:#f4f6f5; --card:#fff;
  --accent:#1C5E57; --accent-soft:#e2edea;
  --warn:#9C4A15; --warn-soft:#f7ece2;
  --ok:#1C5E57;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);
  font:14px/1.55 -apple-system,"Segoe UI",Roboto,"Noto Sans SC","PingFang SC",sans-serif}
a{color:var(--accent)}

/* nav */
.nav{display:flex;align-items:center;gap:22px;background:var(--card);
  border-bottom:1px solid var(--line);padding:0 22px;height:52px;position:sticky;top:0;z-index:5}
.brand{font-weight:700;font-size:16px;color:var(--accent);text-decoration:none;letter-spacing:-.2px}
.brand span{font-weight:400;color:var(--faint);font-size:12px;margin-left:5px}
.nav nav{display:flex;gap:16px;margin-right:auto}
.nav nav a{color:var(--soft);text-decoration:none;font-size:13.5px;padding:4px 0}
.nav nav a:hover{color:var(--accent)}
.who{color:var(--faint);font-size:12.5px;margin-right:10px}
.inline{display:flex;align-items:center}

.wrap{max-width:1180px;margin:0 auto;padding:22px}
h1{font-size:21px;margin:0 0 4px}
h2{font-size:15px;margin:26px 0 10px;letter-spacing:.02em}
h3{font-size:13px;text-transform:uppercase;letter-spacing:.1em;color:var(--faint);margin:22px 0 8px}
.sub{color:var(--soft);font-size:13px;margin:0 0 18px}

.flash{padding:9px 13px;border-radius:4px;margin-bottom:14px;font-size:13.5px}
.flash.ok{background:var(--accent-soft);color:var(--accent)}
.flash.error{background:var(--warn-soft);color:var(--warn)}

.card{background:var(--card);border:1px solid var(--line);border-radius:5px;padding:18px 20px;margin-bottom:16px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}

/* forms */
label{display:block;font-size:12px;color:var(--soft);margin-bottom:3px}
input[type=text],input[type=email],input[type=password],input[type=date],
input[type=number],select,textarea{
  width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:4px;
  font:inherit;background:#fff;color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}
textarea{min-height:80px;resize:vertical}
.field{margin-bottom:11px}
.checks{display:flex;gap:18px;flex-wrap:wrap;margin:8px 0 12px;font-size:13px;color:var(--ink)}
.checks label{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink);margin:0}

button,.btn{font:inherit;padding:7px 15px;border-radius:4px;border:1px solid var(--accent);
  background:var(--accent);color:#fff;cursor:pointer;text-decoration:none;display:inline-block}
button.ghost,.btn.ghost{background:#fff;color:var(--accent)}
button.link{background:none;border:none;color:var(--soft);padding:0;cursor:pointer;font-size:12.5px}
button.link:hover{color:var(--warn)}
button:disabled{opacity:.45;cursor:not-allowed}

/* tables */
table{width:100%;border-collapse:collapse;font-size:13.5px}
th{text-align:left;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);
  border-bottom:1px solid var(--line);padding:8px 10px;white-space:nowrap;font-weight:600}
td{padding:8px 10px;border-bottom:1px solid var(--line-2);vertical-align:top}
tr:last-child td{border-bottom:none}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
.tablewrap{overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:5px}

.pill{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11.5px;
  background:var(--line-2);color:var(--soft);white-space:nowrap}
.pill.ok{background:var(--accent-soft);color:var(--accent)}
.pill.warn{background:var(--warn-soft);color:var(--warn)}

.kv{width:100%;font-size:13px}
.kv td{padding:3px 0;border:none}
.kv td:first-child{color:var(--soft);width:42%}

.note{border-left:3px solid var(--accent);background:var(--accent-soft);padding:12px 14px;
  border-radius:0 4px 4px 0;margin-bottom:12px;font-size:13.5px}
.note.warn{border-color:var(--warn);background:var(--warn-soft)}
.note b{display:block;margin-bottom:2px}

.stat{background:var(--card);border:1px solid var(--line);border-radius:5px;padding:14px 16px}
.stat .n{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums}
.stat .l{font-size:12px;color:var(--faint)}

/* 状态筛选卡片。既是统计也是筛选器，所以是 <a> 不是 <div> ——
   右键能新标签页打开，地址栏里带着筛选条件，可以直接存书签。 */
.fcards{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.fcard{flex:1 1 110px;min-width:100px;background:var(--card);border:1px solid var(--line);
  border-top:3px solid var(--line);border-radius:5px;padding:11px 13px;
  text-decoration:none;color:var(--ink);display:block;transition:border-color .12s,background .12s}
.fcard:hover{border-color:var(--faint);border-top-color:var(--faint)}
.fcard .n{display:block;font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.15}
.fcard .l{display:block;font-size:12px;color:var(--faint);margin-top:2px}
.fcard.on{background:var(--accent-soft);border-color:var(--accent)}
.fcard.on .n,.fcard.on .l{color:var(--accent)}
/* 顶部那道色条按生命周期走：灰(全部) 询价 报价 成交 在途 送达 流失 */
.fcard.k1{border-top-color:#c8ccca}
.fcard.k2{border-top-color:#d8a13c}
.fcard.k3{border-top-color:var(--accent)}
.fcard.k4{border-top-color:#3b7ea1}
.fcard.k5{border-top-color:#6a9c4f}
.fcard.k6{border-top-color:#b9553f}
.fcard.on.k1,.fcard.on.k2,.fcard.on.k3,
.fcard.on.k4,.fcard.on.k5,.fcard.on.k6{border-color:var(--accent)}

/* 危险动作：删除、清除。红色但不刺眼 —— 平时是描边，悬停才实心 */
button.danger,.btn.danger{border-color:var(--warn);color:var(--warn);background:#fff}
button.danger:hover,.btn.danger:hover{background:var(--warn);color:#fff}
button.link.danger{color:var(--faint);background:none;border:none}
button.link.danger:hover{color:var(--warn)}
.rowacts{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:2px}
.rowacts form{display:inline}

/* 弹框。原生 <dialog>，Esc 关闭和遮罩都是浏览器给的 */
.dlg{border:1px solid var(--line);border-radius:6px;padding:20px 22px;
  width:min(520px,calc(100vw - 28px));background:var(--card);color:var(--ink);
  box-shadow:0 12px 40px rgba(0,0,0,.18)}
.dlg::backdrop{background:rgba(22,33,31,.42)}
.dlg h3{margin:0 0 8px}
.dlg .dlg-foot{justify-content:flex-end;margin-top:14px;gap:10px}
.dlg .row>div{margin-bottom:10px}

.muted{color:var(--faint)}
.small{font-size:12.5px}
.mono{font-family:ui-monospace,Menlo,monospace;font-size:12.5px}

/* login */
.login{max-width:340px;margin:12vh auto}
.login .card{padding:26px}

/* ============================================================
   手机适配
   仓库里、路上、客户办公室——这套东西经常是在手机上打开的。
   两条原则：① 表格不横向滚，改成一行一张卡片
             ② 点击目标够大，别让人用指甲尖去戳
   ============================================================ */

@media (max-width: 760px) {

  body { font-size: 15px; }                 /* 手机上小一号看着累 */
  .wrap { padding: 14px 12px 40px; max-width: 100% }
  /* 任何一处溢出都会把整页撑宽、右边被裁掉，所以统一兜底 */
  .card, .stat, .note, .tablewrap, form { max-width: 100%; min-width: 0 }

  /* 顶栏：品牌一行，导航单独一行可横滑 */
  .nav {
    height: auto; padding: 10px 12px; flex-wrap: wrap; gap: 8px 14px;
  }
  .brand { font-size: 15px; }
  .brand span { display: none; }            /* 副标题在手机上是噪音 */
  .nav nav {
    order: 3; width: 100%; overflow-x: auto; gap: 14px;
    padding-bottom: 2px; -webkit-overflow-scrolling: touch;
  }
  .nav nav a { white-space: nowrap; padding: 6px 0; }
  .who { margin-right: 6px }

  h1 { font-size: 19px }
  .sub { font-size: 12.5px }

  /* 表单：每格独占一行，不要挤成两列 */
  .row > div { flex: 1 1 100% !important; width: auto !important; min-width: 0 !important; }
  .row { gap: 0 }
  .field, .row > div { margin-bottom: 12px }
  input, select, textarea { font-size: 16px; padding: 10px }  /* 16px 才不会触发 iOS 自动放大 */
  button, .btn { padding: 11px 18px; min-height: 44px }       /* 拇指点得到 */
  .checks { gap: 10px 16px }
  .checks label { min-height: 32px }

  /* 统计卡片横排改竖排 */
  .grid.g3 { grid-template-columns: 1fr 1fr }
  .stat { padding: 11px 12px }
  .stat .n { font-size: 19px }

  /* 状态卡片：手机上一行三个，够大能点，也不占满一屏 */
  .fcards { gap: 7px; margin-bottom: 12px }
  .fcard { flex: 1 1 calc(33.333% - 5px); min-width: 0; padding: 9px 8px; text-align: center }
  .fcard .n { font-size: 17px }
  .fcard .l { font-size: 11px }
  /* 列表页上方那条：搜索框自己占一行 */
  .fcards + .row { flex-wrap: wrap; gap: 8px }
  .fcards + .row > form.searchbar { width: 100%; gap: 8px }
  .fcards + .row > form.searchbar input { width: auto !important; flex: 1 1 auto !important }

  /* 关键：表格改卡片。表头藏掉，每个格子自己带标签 */
  table.cards { min-width: 0 }
  table.cards thead { display: none }
  table.cards, table.cards tbody, table.cards tr, table.cards td { display: block; width: 100% }
  table.cards tr {
    border: 1px solid var(--line); border-radius: 5px;
    padding: 10px 12px; margin-bottom: 10px; background: var(--card);
  }
  table.cards td {
    border: none; padding: 3px 0; display: flex; flex-wrap: wrap;
    justify-content: space-between; align-items: baseline;
    gap: 2px 14px; text-align: right; min-width: 0; word-break: break-word;
  }
  table.cards td::before {
    content: attr(data-label);
    color: var(--faint); font-size: 12px; text-align: left; flex: 0 0 auto;
  }
  table.cards td:not([data-label]) { display: none }   /* 没标签的格子手机上不显示 */
  table.cards td.num { text-align: right }
  /* 格子里的副行（城市、毛利率）自己占一行，不跟主值挤 */
  table.cards td > div { flex: 1 1 100%; text-align: right }
  /* 第一格（报价号）当卡片标题，横过来占满 */
  table.cards td[data-label="报价号"] {
    display: block; text-align: left; border-bottom: 1px solid var(--line-2);
    padding-bottom: 7px; margin-bottom: 5px;
  }
  table.cards td[data-label="报价号"]::before { display: none }
  table.cards td[data-label="报价号"] a { font-size: 16px; font-weight: 600 }

  /* 其余表格（历史、日志、主数据）保持横滑，但给个提示阴影 */
  .tablewrap { -webkit-overflow-scrolling: touch }

  /* 弹框在手机上贴近全屏，字段一列排 */
  .dlg { width: calc(100vw - 20px); padding: 16px 14px; margin: auto }
  .dlg .row > div { flex: 1 1 100% !important; width: auto !important }
  .dlg .dlg-foot button { flex: 1 1 auto }

  .card { padding: 14px 14px }
  .note { padding: 11px 12px; font-size: 13px }
  .kv td:first-child { width: 38% }
}

/* 很窄的屏（iPhone SE 之类）统计卡片单列 */
@media (max-width: 420px) {
  .grid.g3 { grid-template-columns: 1fr }
}
