/* ================= 老炮项目管理 · 样式（浅色精修版） =================
   调色板集中在 :root，改主题只动这一块。
   ==================================================================== */
:root{
  /* 中性色 */
  --bg:#f5f6f9;
  --bg-2:#eceef3;
  --panel:#ffffff;
  --panel-2:#f7f8fb;
  --line:#e6eaf0;
  --line-2:#f0f2f7;
  --ink:#0f1729;
  --ink-2:#4a5568;
  --ink-3:#98a2b3;

  /* 深色面（顶栏 / 侧栏） */
  --brand:#111a28;
  --brand-2:#1a2438;

  /* 强调色 */
  --amber:#e07b0a;
  --amber-2:#f2a72e;
  --amber-ink:#8a4a00;
  --amber-soft:#fff5e6;

  --green:#0e9f6e;
  --green-ink:#05684a;
  --green-soft:#e6f7f0;

  --red:#e02424;
  --red-ink:#a81b1b;
  --red-soft:#fdecec;

  --blue:#2563eb;
  --blue-ink:#1a4bb8;
  --blue-soft:#eaf0fe;

  --purple:#7c3aed;
  --purple-ink:#5b21b6;
  --purple-soft:#f2ebfe;

  /* 图表 / 成本构成配色 */
  --c-worker:#e07b0a;
  --c-machine:#2563eb;
  --c-vehicle:#7c3aed;
  --c-material:#0e9f6e;
  --c-reimburse:#e02424;
  --c-other:#7a8699;
  --c-staff:#0d9488;
  --c-advance:#d97706;
  --c-gantt-a:#5ea4f0;
  --c-gantt-b:#2563eb;
  --c-gantt-a-late:#f0776a;
  --c-gantt-b-late:#d02c22;
  --c-gantt-track:#eaf0fe;
  --c-gantt-track-line:#c8dcfb;

  /* 形状 */
  --radius:16px;
  --radius-sm:11px;
  --ring:0 0 0 3px rgba(224,123,10,.16);

  /* 阴影 */
  --shadow-xs:0 1px 2px rgba(16,24,40,.05);
  --shadow:0 1px 2px rgba(16,24,40,.04), 0 10px 26px -14px rgba(16,24,40,.20);
  --shadow-md:0 2px 6px rgba(16,24,40,.05), 0 18px 42px -20px rgba(16,24,40,.26);
  --shadow-lg:0 32px 70px -24px rgba(11,18,32,.44);

  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-t:env(safe-area-inset-top,0px);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:
    radial-gradient(1200px 600px at 12% -8%, #ffffff 0%, rgba(255,255,255,0) 60%),
    radial-gradient(900px 500px at 100% 0%, #eef2fb 0%, rgba(238,242,251,0) 55%),
    var(--bg);
  background-attachment:fixed;
  color:var(--ink);
  font:15px/1.58 -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  letter-spacing:.002em;
}
::selection{background:rgba(224,123,10,.22)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
a{color:var(--blue);text-decoration:none}
input,select,textarea{font-variant-numeric:tabular-nums}
::-webkit-scrollbar{height:9px;width:9px}
::-webkit-scrollbar-thumb{background:#ccd4e0;border-radius:9px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#b3bfd0;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 布局 ---------- */
#app{min-height:100vh}
.shell{display:flex;min-height:100vh}

.side{
  display:none;width:216px;flex:0 0 216px;
  background:linear-gradient(178deg,#151f30 0%,#0d1522 100%);
  color:#c3ccdb;flex-direction:column;position:sticky;top:0;height:100vh;
  box-shadow:inset -1px 0 0 rgba(255,255,255,.06);
}
.brand{padding:22px 18px 16px;position:relative}
.brand::after{content:'';position:absolute;left:18px;right:18px;bottom:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.14),rgba(255,255,255,0))}
.brand b{display:block;color:#fff;font-size:16px;font-weight:600;letter-spacing:.6px}
.brand b::after{content:'';display:inline-block;width:6px;height:6px;border-radius:2px;background:var(--amber-2);margin-left:7px;vertical-align:2px;box-shadow:0 0 12px rgba(242,167,46,.9)}
.brand span{font-size:11px;color:#6d7c93;letter-spacing:.4px}
.side nav{padding:12px 10px;overflow:auto;flex:1}
.side nav button{
  display:flex;align-items:center;gap:11px;width:100%;padding:10px 12px;border-radius:11px;
  color:#a7b4c7;font-size:14px;text-align:left;margin-bottom:3px;position:relative;
  transition:background .16s,color .16s,transform .16s;
}
.side nav button .ic{width:18px;display:grid;place-items:center;font-size:16px;opacity:.85}
.side nav button:hover{background:rgba(255,255,255,.07);color:#fff}
.side nav button:active{transform:scale(.985)}
.side nav button.on{
  background:linear-gradient(135deg,var(--amber-2),var(--amber));
  color:#2a1a00;font-weight:600;
  box-shadow:0 10px 22px -12px rgba(224,123,10,.95);
}
.side nav button.on .ic{opacity:1}
.side .side-foot{padding:14px 18px;font-size:11px;color:#5d6b80;border-top:1px solid rgba(255,255,255,.07)}

.main{flex:1;min-width:0;display:flex;flex-direction:column}

.top{
  position:sticky;top:0;z-index:30;
  background:linear-gradient(180deg,rgba(19,28,44,.97),rgba(13,20,32,.97));
  backdrop-filter:saturate(160%) blur(10px);
  color:#fff;padding:calc(11px + var(--safe-t)) 14px 11px;display:flex;align-items:center;gap:10px;
  box-shadow:0 1px 0 rgba(255,255,255,.06), 0 10px 30px -22px rgba(0,0,0,.9);
}
.top .proj{
  display:flex;align-items:center;gap:7px;background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.09);
  padding:7px 12px;border-radius:11px;font-size:13px;max-width:56vw;
  transition:background .16s;
}
.top .proj:hover{background:rgba(255,255,255,.16)}
.top .proj b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top .proj span:last-child{display:grid;place-items:center;color:#9fb0c6}
.top .ttl{font-size:15px;font-weight:600;flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top .act{display:flex;gap:7px}
.icon-btn{
  width:35px;height:35px;border-radius:11px;background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.09);color:#fff;display:grid;place-items:center;font-size:16px;
  transition:background .16s,transform .16s,color .16s;
}
.icon-btn:hover{background:linear-gradient(135deg,var(--amber-2),var(--amber));color:#2a1a00;border-color:transparent}
.icon-btn:active{transform:scale(.94)}

.page{padding:16px 14px 100px;max-width:1180px;width:100%;margin:0 auto}
.page-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:4px 0 16px}
.page-h h1{font-size:20px;margin:0;letter-spacing:-.3px;font-weight:650}
.page-h .sub{font-size:12.5px;color:var(--ink-3);font-weight:400;margin-top:3px}

/* 页面元素依次入场 */
@keyframes fadeUp{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
.page > *{animation:fadeUp .36s cubic-bezier(.22,.85,.3,1) both}
.page > *:nth-child(1){animation-delay:.01s}
.page > *:nth-child(2){animation-delay:.05s}
.page > *:nth-child(3){animation-delay:.09s}
.page > *:nth-child(4){animation-delay:.13s}
.page > *:nth-child(5){animation-delay:.16s}
.page > *:nth-child(n+6){animation-delay:.19s}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;transition-duration:.001ms !important}
  html{scroll-behavior:auto}
}

.bottom{
  position:fixed;left:0;right:0;bottom:0;z-index:40;
  background:rgba(255,255,255,.9);
  backdrop-filter:saturate(180%) blur(16px);
  border-top:1px solid var(--line);display:flex;padding:7px 2px calc(7px + var(--safe-b));
  box-shadow:0 -8px 26px -18px rgba(15,23,41,.35);
}
.bottom button{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:4px 0;
  color:var(--ink-3);font-size:10.5px;border-radius:11px;transition:color .16s,transform .16s,background .16s;
}
.bottom button .ic{font-size:20px;line-height:1;display:grid;place-items:center}
.bottom button.on{color:var(--amber-ink);font-weight:600;background:var(--amber-soft)}
.bottom button:active{transform:scale(.94)}

@media (min-width:900px){
  .side{display:flex}
  .bottom{display:none}
  .top .ttl{text-align:left;font-size:13px;color:#8b9ab1;font-weight:500;letter-spacing:.3px}
  .page{padding:22px 26px 48px}
}

/* ---------- 卡片 ---------- */
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);margin-bottom:14px;overflow:hidden;
}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 15px;border-bottom:1px solid var(--line-2)}
.card-h h3{margin:0;font-size:14.5px;font-weight:600;display:flex;align-items:center;letter-spacing:-.15px}
.card-h h3::before{content:'';width:3px;height:14px;border-radius:2px;background:linear-gradient(180deg,var(--amber-2),var(--amber));margin-right:9px;flex:0 0 3px}
.card-h .hint{font-size:12px;color:var(--ink-3)}
/* 今日考勤：日期挪到标题下面一行 */
.att-date{padding:9px 15px 0;font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
/* 财务：页签行 + 右侧导出按钮 */
.fin-tabs{display:flex;align-items:center;gap:9px;margin-bottom:14px;overflow-x:auto;padding-bottom:2px}
.fin-tabs .fin-export{flex:none}
.card-b{padding:15px}
/* 支出类别透视（数据透视：类别 / 金额条 / 金额 / 占比） */
.pv{padding:10px 15px}
.pv-row{display:flex;align-items:center;gap:10px;padding:7px 0}
.pv-nm{width:78px;flex:none;font-size:13px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-bar{flex:1;height:13px;background:var(--panel-2);border-radius:7px;overflow:hidden}
.pv-bar span{display:block;height:100%;background:linear-gradient(90deg,var(--amber),#f3ad55);border-radius:7px}
.pv-am{width:94px;flex:none;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;font-size:13px}
.pv-pc{width:50px;flex:none;text-align:right;color:var(--ink-3);font-size:12px;font-variant-numeric:tabular-nums}
.pv-tot{border-top:1px solid var(--line-2);margin-top:4px;padding-top:9px}
.pv-tot .pv-nm,.pv-tot .pv-am{color:var(--ink);font-weight:700}
.pv-tot .pv-bar{background:transparent}
.card-b.tight{padding:10px}

.grid{display:grid;gap:13px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(2,minmax(0,1fr))}
.g4{grid-template-columns:repeat(2,minmax(0,1fr))}
@media (min-width:700px){ .g3{grid-template-columns:repeat(3,minmax(0,1fr))} .g4{grid-template-columns:repeat(4,minmax(0,1fr))} }

/* ---------- 统计块 ---------- */
.tile{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden;
  transition:transform .18s cubic-bezier(.22,.85,.3,1),box-shadow .18s,border-color .18s;
}
.tile::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent,var(--line))}
.tile .lb{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:6px}
.tile .vl{font-size:23px;font-weight:700;margin-top:6px;letter-spacing:-.6px;font-variant-numeric:tabular-nums}
.tile .ft{font-size:11.5px;color:var(--ink-3);margin-top:3px}
.tile .bar{height:4px;border-radius:4px;background:var(--line-2);margin-top:10px;overflow:hidden}
.tile .bar > i{display:block;height:100%;border-radius:4px;background:var(--accent,var(--amber));transition:width .5s cubic-bezier(.22,.85,.3,1)}

.tile.k-green{--accent:var(--green)} .tile.k-green .vl{color:var(--green-ink)}
.tile.k-red{--accent:var(--red)} .tile.k-red .vl{color:var(--red-ink)}
.tile.k-amber{--accent:var(--amber)} .tile.k-amber .vl{color:var(--amber-ink)}
.tile.k-blue{--accent:var(--blue)} .tile.k-blue .vl{color:var(--blue-ink)}
.tile.k-ink{--accent:#3d4a60} .tile.k-ink .vl{color:var(--ink)}

/* ---------- 我的：账号卡 + 宫格入口（第 13 轮新增，第 14 轮美化重排） ---------- */
.mine-card{
  position:relative;overflow:hidden;
  background:linear-gradient(180deg,#fffdf8,#fff 60%);
  border:1px solid var(--line);border-radius:var(--radius);
  padding:18px 16px 16px;box-shadow:var(--shadow);
}
.mine-card::after{
  content:'';position:absolute;right:-52px;top:-60px;width:156px;height:156px;border-radius:50%;
  background:radial-gradient(circle,rgba(242,167,46,.22),rgba(242,167,46,0) 68%);pointer-events:none;
}
.mc-top{display:flex;align-items:center;gap:14px;position:relative}
.mc-av{
  flex:0 0 58px;height:58px;border-radius:19px;display:grid;place-items:center;
  color:#fff;font-size:23px;font-weight:700;letter-spacing:1px;
  background:linear-gradient(160deg,var(--amber-2),var(--amber));
  box-shadow:0 7px 16px rgba(224,123,10,.30);
}
.mc-info{flex:1;min-width:0}
.mc-info b{font-size:18px;letter-spacing:.2px}
.mc-info .mc-role{font-size:12.5px;font-weight:600;color:var(--amber-ink);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mc-info .mc-meta{font-size:12px;color:var(--ink-3);margin-top:3px}
.mc-perm{position:relative;display:flex;gap:6px;flex-wrap:wrap;margin-top:13px}
.mc-btns{position:relative;display:flex;gap:9px;margin-top:15px}
.mc-btn{
  flex:1;cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;color:var(--ink-2);
  background:var(--panel-2);border:1px solid var(--line);border-radius:12px;padding:10px 0;
  transition:transform .15s,background .15s,border-color .15s;
}
.mc-btn:active{transform:scale(.97)}
.mc-btn.dgr{color:var(--red-ink);background:var(--red-soft);border-color:#f6d9d9}

.mine-sec{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:700;color:var(--ink-2);margin:20px 2px 11px}
.mine-sec::before{content:'';width:3px;height:13px;border-radius:2px;background:linear-gradient(180deg,var(--amber-2),var(--amber))}

.app-grid{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px 4px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 6px;box-shadow:var(--shadow);
}
.app-tile{display:flex;flex-direction:column;align-items:center;gap:6px;background:none;border:0;cursor:pointer;font:inherit;color:var(--ink);padding:4px 0;transition:transform .15s}
.app-tile:active{transform:scale(.93)}
.app-tile .at-ic{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;color:#fff;box-shadow:0 4px 11px rgba(50,40,20,.16)}
.app-tile .at-ic svg{width:22px;height:22px}
.app-tile .at-t{font-size:12px;font-weight:600;color:var(--ink);line-height:1.2}
.app-tile .at-s{font-size:10.5px;color:var(--ink-3);line-height:1}
.app-tile.c-blue .at-ic{background:linear-gradient(175deg,#5b8def,#3f6fe0)}
.app-tile.c-green .at-ic{background:linear-gradient(175deg,#4fbf67,#2e9e4f)}
.app-tile.c-amber .at-ic{background:linear-gradient(175deg,#f5b13d,#e8960f)}
.app-tile.c-teal .at-ic{background:linear-gradient(175deg,#39b8a8,#1f9a8c)}
.app-tile.c-red .at-ic{background:linear-gradient(175deg,#ef6b5e,#d94a3d)}
.app-tile.c-purple .at-ic{background:linear-gradient(175deg,#a06df2,#7c3aed)}
/* 工作台宫格：一行 3 个（第 16 轮），和「我的」页同一套风格 */
.app-grid.cols3{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 4px}
@media (min-width:700px){.app-grid.cols3{grid-template-columns:repeat(6,minmax(0,1fr))}}

/* 按钮排（财务·按人查账那一排）：手机上主按钮独占一行，下面两个均分 */
.btn-row{display:flex;gap:8px;flex-wrap:wrap}
.btn-row .btn{flex:1 1 auto;white-space:nowrap}
@media (max-width:699px){.btn-row .btn.lead{flex:1 1 100%}}
.mine-foot{text-align:center;color:var(--ink-3);font-size:12px;margin:22px 0 8px}
.tile.clk{cursor:pointer}
.tile.clk:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:#d8dfe9}
@media (min-width:700px){ .tile .vl{font-size:25px} }

/* ---------- 按钮 ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 15px;border-radius:var(--radius-sm);
  background:var(--panel);border:1px solid var(--line);font-size:13.5px;font-weight:500;white-space:nowrap;
  box-shadow:var(--shadow-xs);transition:background .16s,box-shadow .16s,transform .12s,border-color .16s;
}
.btn:hover{background:var(--panel-2);border-color:#d8dfe9}
.btn:active{transform:scale(.975);box-shadow:none}
.btn.pri{
  background:linear-gradient(135deg,var(--amber-2),var(--amber));border-color:transparent;color:#2a1a00;font-weight:600;
  box-shadow:0 10px 22px -12px rgba(224,123,10,.95);
}
.btn.pri:hover{filter:brightness(1.04)}
.btn.dark{background:linear-gradient(135deg,#1c2739,var(--brand));border-color:transparent;color:#fff}
.btn.dark:hover{background:linear-gradient(135deg,#243149,#161f30)}
.btn.sm{padding:6px 11px;font-size:12.5px;border-radius:9px}
.btn.gh{background:transparent;box-shadow:none}
.btn.gh:hover{background:var(--panel-2)}
.btn.dgr{color:var(--red-ink);border-color:#f4d3d3;background:#fffafa}
.btn.dgr:hover{background:var(--red-soft);border-color:#eebfbf}
.btn.blk{width:100%}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn:focus-visible,.inp:focus-visible,.icon-btn:focus-visible{outline:none;box-shadow:var(--ring)}

/* 分段控件 */
.seg{display:inline-flex;background:var(--panel-2);border:1px solid var(--line);border-radius:12px;padding:3px;gap:2px;flex-wrap:wrap}
.seg button{padding:7px 14px;border-radius:9px;font-size:13px;color:var(--ink-2);white-space:nowrap;transition:background .16s,color .16s,box-shadow .16s}
.seg button:hover{color:var(--ink)}
.seg button.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(16,24,40,.13)}
.seg.amber button.on{background:linear-gradient(135deg,var(--amber-2),var(--amber));color:#2a1a00;box-shadow:0 8px 18px -12px rgba(224,123,10,.95)}
.tabs{display:flex;gap:4px;overflow-x:auto;padding-bottom:2px;margin-bottom:14px}
.tabs::-webkit-scrollbar{display:none}

/* ---------- 表单 ---------- */
.field{margin-bottom:13px}
.field > label{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:6px;font-weight:500}
.field .tip{font-size:11.5px;color:var(--ink-3);margin-top:5px;line-height:1.5}
.inp{
  width:100%;padding:10px 13px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;
  outline:none;transition:border-color .16s,box-shadow .16s;
}
.inp::placeholder{color:#b6bfcd}
.inp:hover{border-color:#d8dfe9}
.inp:focus{border-color:var(--amber);box-shadow:var(--ring)}
.inp[readonly]{background:var(--panel-2);color:var(--ink-2)}
.ro{display:block;min-height:41px;padding:9px 12px;border:1px solid var(--line-2);border-radius:var(--radius-sm);background:var(--panel-2);color:var(--ink);font-size:14px;line-height:1.4;white-space:pre-wrap}
/* 支付凭证（第 20 轮）：老板支出 / 管理人员报销上传的小票截图 */
.vouch-thumb{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid var(--line-2);vertical-align:middle;display:block}
.vouch-thumb.big{width:100%;max-width:320px;height:auto;max-height:260px;object-fit:contain;background:var(--panel-2)}
.vouch-has{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
select.inp{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M2 4l4 4 4-4' fill='none' stroke='%2398a2b3' stroke-width='1.7' stroke-linecap='round'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}
textarea.inp{min-height:70px;resize:vertical}
input[type="date"].inp{min-height:41px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:11px}
@media (max-width:520px){ .row3{grid-template-columns:1fr 1fr} }

/* ---------- 表格 ---------- */
.tw{overflow-x:auto;-webkit-overflow-scrolling:touch}
table{border-collapse:separate;border-spacing:0;width:100%;font-size:13.5px}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line-2);white-space:nowrap}
th{
  font-size:11.5px;color:var(--ink-3);font-weight:600;background:var(--panel-2);
  position:sticky;top:0;z-index:1;letter-spacing:.3px;
  box-shadow:inset 0 -1px 0 var(--line);
}
tbody tr{transition:background .14s}
tbody tr:hover{background:#fafbfd}
tbody tr:last-child td{border-bottom:none}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
/* 预支结算 · 按人查账：点「明细」直接在本人这一行下方展开 */
tr.acct-open > td{background:var(--amber-soft)}
tr.acct-detail > td{background:var(--panel-2);white-space:normal;padding:12px 15px;border-bottom:2px solid var(--line)}
tr.acct-detail table{font-size:12.5px}
tr.acct-detail th{position:static;z-index:auto;box-shadow:none}
tr.acct-detail th,tr.acct-detail td{padding:7px 9px}
tr.ptot td{background:var(--panel-2);font-weight:700;border-top:2px solid var(--line)}
/* 报销 · 各账号垫付汇总台账（r19.2/19.3 重排） */
.rb-sum .card-b{padding:8px 0}
.rb-row{display:flex;align-items:center;gap:12px;padding:11px 15px;border-bottom:1px solid var(--line-2);cursor:pointer;transition:background .14s}
.rb-row:last-child{border-bottom:none}
.rb-row:hover{background:#fafbfd}
.rb-av{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;flex:none;background:var(--panel-2);color:var(--ink-2)}
.rb-name{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.rb-name b{font-size:14.5px;font-weight:600;line-height:1.2}
.rb-name .muted{font-size:11.5px}
.rb-nums{display:flex;gap:20px;text-align:right}
.rb-num{display:flex;flex-direction:column;gap:2px;min-width:80px}
.rb-num .muted{font-size:11px}
.rb-num b{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}
.rb-num b.em{color:var(--red-ink)}
.rb-tot{background:var(--panel-2);cursor:default}
.rb-tot:hover{background:var(--panel-2)}
.rb-tot .rb-av{background:var(--ink-3);color:#fff}
.rb-tot b{font-weight:700}
.muted{color:var(--ink-3)}
.small{font-size:12px}
.empty{padding:40px 16px;text-align:center;color:var(--ink-3);font-size:13.5px;line-height:1.7}
.empty .big{font-size:32px;display:block;margin-bottom:10px;opacity:.42;filter:grayscale(.15)}

/* ---------- 标签 ---------- */
.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:1.75;letter-spacing:.2px}
.t-amber{background:var(--amber-soft);color:var(--amber-ink)}
.t-green{background:var(--green-soft);color:var(--green-ink)}
.t-red{background:var(--red-soft);color:var(--red-ink)}
.t-blue{background:var(--blue-soft);color:var(--blue-ink)}
.t-purple{background:var(--purple-soft);color:var(--purple-ink)}
.t-gray{background:#f0f2f7;color:#667085}

/* ---------- 列表项 ---------- */
.item{display:flex;align-items:center;gap:12px;padding:12px 15px;border-bottom:1px solid var(--line-2);transition:background .14s}
.item:last-child{border-bottom:none}
.item .av{
  width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-size:14px;font-weight:700;flex:0 0 38px;
  background:linear-gradient(160deg,#f4f6fa,#e9edf4);color:var(--ink-2);
  box-shadow:inset 0 0 0 1px rgba(16,24,40,.05);
}
.item .bd{flex:1;min-width:0}
.item .bd b{display:block;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .bd span{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
.item .bd > span{display:block}
.item .rt{text-align:right;font-variant-numeric:tabular-nums}
.item .rt b{font-size:14.5px}
.item.clk{cursor:pointer}
.item.clk:hover{background:#fafbfd}
.item.on{background:linear-gradient(90deg,var(--amber-soft),rgba(255,245,230,.4));box-shadow:inset 3px 0 0 var(--amber)}
.item .adv-ck{flex:0 0 auto;display:flex;align-items:center;cursor:pointer}
.item .adv-ck input{width:17px;height:17px;accent-color:var(--amber);cursor:pointer;margin:0}

/* ---------- 日历 ---------- */
.cal-h{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.cal-h span{text-align:center;font-size:11.5px;color:var(--ink-3);font-weight:600;padding:3px 0;letter-spacing:.4px}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cell{
  aspect-ratio:1/1.08;border:1px solid var(--line);border-radius:12px;background:#fff;
  padding:6px 6px 5px;display:flex;flex-direction:column;justify-content:space-between;
  text-align:left;overflow:hidden;min-height:48px;position:relative;
  transition:transform .14s cubic-bezier(.22,.85,.3,1),box-shadow .14s,border-color .14s;
}
.cell:hover{transform:translateY(-1px);border-color:var(--amber);box-shadow:0 6px 16px -10px rgba(224,123,10,.6)}
.cell:active{transform:scale(.97)}
.cell.out{opacity:.34;pointer-events:none}
.cell .d{font-size:12px;font-weight:600;color:var(--ink-2);line-height:1;font-variant-numeric:tabular-nums}
.cell .mk{font-size:9.5px;line-height:1.38;font-weight:700;overflow:hidden;letter-spacing:-.1px}
.cell.today{border-color:var(--amber);background:linear-gradient(180deg,#fffdf8,#fff)}
.cell.today .d{color:var(--amber-ink)}
.cell.today .d::after{content:'';display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--amber);margin-left:3px;vertical-align:2px}
.cell.has{background:var(--amber-soft);border-color:#f5dcb4}
.cell.s-off{background:var(--red-soft);border-color:#f7d5d5}
.cell.s-ok{background:var(--green-soft);border-color:#c6ecdc}
.cell.s-half{background:var(--blue-soft);border-color:#cfdffb}
@media (min-width:700px){
  .cell{aspect-ratio:1/0.86;min-height:68px;padding:7px 8px 6px}
  .cell .mk{font-size:11px}
}

/* ---------- 横道图 ---------- */
.gantt{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:#fff;box-shadow:var(--shadow)}
.gantt-in{min-width:720px}
.gantt-head{display:flex;position:sticky;top:0;background:var(--panel-2);z-index:2;border-bottom:1px solid var(--line)}
.gantt-head .name{width:196px;flex:0 0 196px;padding:9px 13px;font-size:11.5px;color:var(--ink-3);font-weight:600;border-right:1px solid var(--line);letter-spacing:.3px}
.gantt-months{flex:1;display:flex}
.gantt-months div{flex:none;padding:9px 0;font-size:11.5px;color:var(--ink-3);font-weight:600;text-align:center;border-right:1px solid var(--line-2);letter-spacing:.3px}
.gantt-rows{position:relative}
.gantt-row{display:flex;border-bottom:1px solid var(--line-2);min-height:44px;transition:background .14s}
.gantt-row:hover{background:#fafbfd}
.gantt-row:last-child{border-bottom:none}
.gantt-row .name{width:196px;flex:0 0 196px;padding:10px 13px;border-right:1px solid var(--line);font-size:13px}
.gantt-row .name b{display:block;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gantt-row .name span{font-size:11px;color:var(--ink-3)}
.gantt-track{flex:1;position:relative}
.gbar{
  position:absolute;top:11px;height:22px;border-radius:8px;overflow:hidden;display:flex;align-items:center;
  background:var(--c-gantt-track);border:1px solid var(--c-gantt-track-line);
  box-shadow:0 4px 12px -8px rgba(37,99,235,.55);
}
.gbar > i{position:absolute;left:0;top:0;bottom:0;transition:width .5s cubic-bezier(.22,.85,.3,1)}
.gbar > em{position:relative;font-style:normal;font-size:11px;font-weight:700;color:#0e3a70;padding:0 7px;white-space:nowrap;text-shadow:0 0 3px rgba(255,255,255,.85)}
.today-line{position:absolute;top:0;bottom:0;width:2px;background:var(--red);opacity:.6;z-index:3;pointer-events:none}
.today-line::before{content:'';position:absolute;top:-4px;left:-3px;width:8px;height:8px;border-radius:50%;background:var(--red);box-shadow:0 0 0 3px rgba(224,36,36,.18)}
.gantt-grid{position:absolute;inset:0;pointer-events:none}

/* ---------- 弹窗 ---------- */
.mask{
  position:fixed;inset:0;background:rgba(15,23,41,.46);backdrop-filter:blur(3px);z-index:100;
  display:flex;align-items:flex-end;justify-content:center;animation:fadeIn .18s ease;
}
@media (min-width:700px){ .mask{align-items:center} }
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.sheet{
  background:#fff;width:100%;max-width:520px;max-height:90vh;border-radius:20px 20px 0 0;display:flex;flex-direction:column;
  animation:sheetUp .26s cubic-bezier(.22,.85,.3,1);box-shadow:var(--shadow-lg);
}
@media (min-width:700px){ .sheet{border-radius:18px} }
@keyframes sheetUp{from{transform:translateY(26px) scale(.99);opacity:.5}to{transform:none;opacity:1}}
.sheet-h{display:flex;align-items:center;justify-content:space-between;padding:15px 17px;border-bottom:1px solid var(--line-2)}
.sheet-h h3{margin:0;font-size:16px;font-weight:650;letter-spacing:-.2px}
.sheet-b{padding:17px;overflow:auto;flex:1;-webkit-overflow-scrolling:touch}
.sheet-f{padding:13px 17px calc(13px + var(--safe-b));border-top:1px solid var(--line-2);display:flex;gap:10px;background:var(--panel-2)}
.sheet-f .btn{flex:1}
.x{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;color:var(--ink-3);font-size:16px;transition:background .16s,color .16s}
.x:hover{background:var(--panel-2);color:var(--ink)}

/* ---------- 提示 ---------- */
#toast-root{position:fixed;left:0;right:0;bottom:calc(88px + var(--safe-b));z-index:200;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
@media (min-width:900px){ #toast-root{bottom:26px} }
@keyframes toastIn{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
.toast{
  background:rgba(17,24,40,.95);color:#fff;padding:11px 18px;border-radius:999px;font-size:13.5px;
  box-shadow:var(--shadow-lg);animation:toastIn .24s cubic-bezier(.22,.85,.3,1);max-width:88vw;text-align:center;
  border:1px solid rgba(255,255,255,.08);
}
.toast.ok{background:linear-gradient(135deg,#12b981,#059669)}
.toast.err{background:linear-gradient(135deg,#f0524b,#d32020)}

.loading{padding:80px 20px;text-align:center;color:var(--ink-3)}
.spin{width:28px;height:28px;border:3px solid var(--line);border-top-color:var(--amber);border-radius:50%;margin:0 auto 14px;animation:sp .75s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---------- 杂项 ---------- */
.chips{display:flex;gap:7px;flex-wrap:wrap}
.chip{
  padding:6px 13px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:12.5px;color:var(--ink-2);
  transition:background .16s,color .16s,border-color .16s,transform .12s,box-shadow .16s;white-space:nowrap;
}
.chip:hover{border-color:#d8dfe9;background:var(--panel-2)}
.chip:active{transform:scale(.96)}
.chip.on{
  background:linear-gradient(135deg,#1c2739,var(--brand));border-color:transparent;color:#fff;font-weight:600;
  box-shadow:0 8px 18px -12px rgba(17,26,40,.95);
}
.split{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.stat-line{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line-2);font-size:13.5px}
.stat-line:last-child{border-bottom:none}
.stat-line > span:first-child{color:var(--ink-2)}
.stat-line b{font-variant-numeric:tabular-nums;letter-spacing:-.2px}
.note{
  background:linear-gradient(180deg,var(--amber-soft),#fffaf1);
  border:1px solid #f3dcb6;color:var(--amber-ink);padding:11px 13px;border-radius:var(--radius-sm);
  font-size:12.5px;line-height:1.65;
}
.note b{color:#6f3a00}
.help{font-size:12.5px;color:var(--ink-3);line-height:1.75}

/* ---------- 对账单打印 ---------- */
#print-area{display:none}
@media print{
  body{background:#fff !important}
  #app{display:none !important}
  .shell,.bottom,#modal-root,#toast-root{display:none !important}
  #print-area{display:block !important;color:#000;font-size:12px}
  #print-area h1{font-size:19px;margin:0 0 6px;letter-spacing:0}
  /* 报表主标题：项目名单独一行、字号放大（22px）；「收支明细表」另起一行做副标题 */
  #print-area h1.ptitle{font-size:22px;font-weight:700;line-height:1.35;margin:0 0 3px;letter-spacing:.2px;word-break:break-word}
  #print-area .ptitle-sub{font-size:15px;font-weight:600;letter-spacing:4px;color:#222;margin:0 0 10px;padding-bottom:8px;border-bottom:2px solid #333}
  /* 每个分项单独一页 */
  .psec{break-before:page;page-break-before:always;break-inside:auto}
  #print-area .psec.first{break-before:auto;page-break-before:auto}
  #print-area .pmeta{font-size:11px;color:#444;margin-bottom:14px;line-height:1.6}
  #print-area h2{font-size:14px;margin:0 0 6px;padding-left:7px;border-left:3px solid #333}
  #print-area h3.psub{font-size:12.5px;font-weight:700;margin:0 0 6px;letter-spacing:.2px}
  #print-area table{border-collapse:collapse;width:100%;font-size:10.5px}
  #print-area th,#print-area td{border:1px solid #999;padding:4px 6px;text-align:right;white-space:nowrap}
  #print-area th{background:#f1f3f7;font-weight:600}
  #print-area td:nth-child(-n+3),#print-area th:nth-child(-n+3){text-align:left}
  #print-area tr.ptot td{font-weight:700;background:#fafafa}
  #print-area .pblock{break-inside:avoid;page-break-inside:avoid;margin-bottom:18px;padding-bottom:6px;border-bottom:1px dashed #ccc}
  #print-area .pmeta2{font-size:10.5px;color:#555;margin:-3px 0 7px}
  #print-area table{margin-bottom:9px}
  #print-area table.psmall{width:auto;min-width:52%}
  #print-area .psign{display:flex;justify-content:space-between;margin-top:30px;font-size:12px}
  /* 施工日志打印版式 */
  #print-area .logprint{margin-bottom:14px;break-inside:avoid;page-break-inside:avoid}
  #print-area .logprint table.lt{width:100%;font-size:11px;border-collapse:collapse}
  #print-area .logprint th,#print-area .logprint td{border:1px solid #333;padding:6px 8px;vertical-align:middle}
  #print-area .logprint th.lbl{width:15%;background:#f1f3f7;font-weight:600;text-align:center;white-space:nowrap}
  #print-area .logprint th.tall{vertical-align:top}
  #print-area .logprint td.left{text-align:left;line-height:1.85}
  #print-area .logprint .lphotos{display:flex;gap:8px;flex-wrap:wrap}
  #print-area .logprint .lphotos img{width:31%;min-width:150px;border:1px solid #999;border-radius:2px}
  @page{margin:12mm}
}

/* ================= 登录 / 首次设置 / 账号（第1轮 多租户） ================= */
.auth{
  min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:22px 16px;
  background:linear-gradient(165deg,var(--brand) 0%,var(--brand-2) 58%,#26334d 100%);
}
.auth-card{
  width:100%;max-width:394px;background:var(--panel);border-radius:var(--radius);overflow:hidden;
  box-shadow:0 24px 60px -18px rgba(0,0,0,.55);
}
.auth-brand{background:linear-gradient(180deg,#131c2c,#0d1420);color:#fff;padding:24px 26px 22px}
.auth-brand b{display:block;font-size:17px;letter-spacing:.4px}
.auth-brand span{display:block;font-size:12.5px;color:#94a3b8;margin-top:6px;line-height:1.6}
.auth-body{padding:24px 26px 26px}
.auth-body .field:last-of-type{margin-bottom:16px}
.auth-err{background:var(--red-soft);color:var(--red-ink);font-size:13px;padding:10px 13px;border-radius:var(--radius-sm);margin-bottom:13px;line-height:1.6}
.auth-err:empty{display:none}
.auth-ok{background:var(--green-soft);color:var(--green-ink);font-size:13px;padding:10px 13px;border-radius:var(--radius-sm);margin-bottom:13px;line-height:1.6}
.auth-ok:empty{display:none}
.auth-hint{font-size:12.5px;color:var(--ink-3);line-height:1.75;margin-top:16px;padding-top:15px;border-top:1px solid var(--line)}
.auth-hint b{color:var(--ink-2);font-weight:600}
.btn.blk{width:100%;padding:12px;font-size:15px}
.auth-foot{text-align:center;color:#94a3b8;font-size:12px;margin-top:18px;line-height:1.7}

/* 顶栏账号 */
.who{
  display:flex;align-items:center;gap:7px;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.09);
  padding:5px 12px 5px 5px;border-radius:11px;color:#fff;font-size:12.5px;max-width:150px;transition:background .16s;
}
.who:hover{background:rgba(255,255,255,.16)}
.who .av{
  width:25px;height:25px;border-radius:50%;background:linear-gradient(135deg,var(--amber-2),var(--amber));
  color:#2a1a00;font-size:12px;font-weight:700;display:grid;place-items:center;flex:none;
}
.who b{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 租户管理 */
.tn{display:flex;align-items:center;gap:13px;padding:13px 0;border-bottom:1px dashed var(--line-2)}
.tn:last-child{border-bottom:none}
.tn .av{
  width:40px;height:40px;border-radius:12px;background:var(--blue-soft);color:var(--blue-ink);
  display:grid;place-items:center;font-weight:700;font-size:15px;flex:none;
}
.tn.off .av{background:var(--bg-2);color:var(--ink-3)}
.tn .bd{flex:1;min-width:0}
.tn .bd > b{display:block;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tn .bd > span{display:block;font-size:12.5px;color:var(--ink-3);margin-top:3px;line-height:1.6}
.tn .bd > span b{color:var(--ink-2);font-weight:500}
.tn .rt{display:flex;gap:9px;flex-wrap:wrap;justify-content:flex-end;flex:none;max-width:52%}
.tn.off .bd > b{color:var(--ink-3)}
.tn.off .perm-tags .tag{opacity:.55}
.tn.is-boss .av{background:linear-gradient(135deg,var(--amber-2),var(--amber));color:#2a1a00}

/* 租户 / 子账号列表（精修美化）：每家公司 / 每个账号一张浮起卡片 */
.tnt-list{display:flex;flex-direction:column;gap:11px;margin-top:12px}
.tnt{background:var(--panel);border:1px solid var(--line);border-radius:15px;padding:14px 14px 13px;box-shadow:0 1px 3px rgba(16,23,41,.05);transition:box-shadow .2s,transform .2s}
.tnt:hover{box-shadow:0 4px 14px rgba(16,23,41,.08)}
.tnt.off{background:var(--panel-2);box-shadow:none}
.tnt.off .tnt-av{background:var(--bg-2);color:var(--ink-3)}
.tnt-head{display:flex;align-items:flex-start;gap:12px}
.tnt-av{width:46px;height:46px;border-radius:50%;flex:none;background:linear-gradient(135deg,var(--amber-2),var(--amber));color:#2a1a00;display:grid;place-items:center;font-size:18px;font-weight:800;box-shadow:0 2px 6px rgba(224,123,10,.28)}
.tnt-bd{flex:1;min-width:0;padding-top:1px}
.tnt-tit{font-size:15.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tnt.off .tnt-tit{color:var(--ink-3)}
.tnt-meta{margin-top:8px;flex-wrap:nowrap}
.tnt-meta .chip{font-size:11.5px;padding:2px 9px;background:var(--amber-soft);border-color:transparent;color:var(--amber-ink);flex:0 0 auto}
.tnt-owners{margin-top:12px;display:flex;flex-direction:column;gap:8px}
.tnt-owner{display:flex;align-items:center;gap:10px;background:var(--panel-2);border:1px solid var(--line-2);border-radius:12px;padding:9px 11px}
.tnt-av2{width:32px;height:32px;border-radius:50%;flex:none;background:linear-gradient(135deg,#cfd8e6,#aeb9cc);color:#28323f;display:grid;place-items:center;font-size:13px;font-weight:700}
.tnt-ob{flex:1;min-width:0}
.tnt-ob b{display:block;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tnt-ob span{font-size:12px;color:var(--ink-3)}
.tnt-acts{flex:none;display:flex;gap:6px}
.tnt-acts .btn{flex:0 0 auto;padding:6px 10px}
.tnt-note{margin-top:11px;font-size:12.5px;color:var(--red-ink);text-align:center;padding:10px;border:1px dashed var(--red-soft);border-radius:10px;background:var(--red-soft)}

/* 子账号卡片（与租户同风格，头像用蓝色区分） */
.sut{background:var(--panel);border:1px solid var(--line);border-radius:15px;padding:14px;box-shadow:0 1px 3px rgba(16,23,41,.05);transition:box-shadow .2s,transform .2s}
.sut:hover{box-shadow:0 4px 14px rgba(16,23,41,.08)}
.sut.off{background:var(--panel-2);box-shadow:none}
.sut.off .sut-av{background:var(--bg-2);color:var(--ink-3)}
.sut.is-boss .sut-av{background:linear-gradient(135deg,var(--amber-2),var(--amber));color:#2a1a00}
.sut-head{display:flex;align-items:flex-start;gap:12px}
.sut-av{width:46px;height:46px;border-radius:50%;flex:none;background:linear-gradient(135deg,#5b8def,var(--blue));color:#fff;display:grid;place-items:center;font-size:18px;font-weight:800;box-shadow:0 2px 6px rgba(37,99,235,.25)}
.sut-bd{flex:1;min-width:0;padding-top:1px}
.sut-tit{font-size:15.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sut.off .sut-tit{color:var(--ink-3)}
.sut-sub{font-size:12px;color:var(--ink-3);margin-top:3px}
.sut-perms{margin-top:8px}
.sut-perms .chip{font-size:11.5px;padding:2px 9px}
.sut-perms .chip.am{background:var(--amber-soft);border-color:transparent;color:var(--amber-ink)}
.sut-perms .chip.soft{background:#f3ede1;color:var(--ink-3)}
.sut-proj{font-size:12px;color:var(--ink-3);margin-top:6px;line-height:1.5}
.sut-acts{margin-top:11px}
.sut-acts .btn{flex:0 0 auto}

/* 子账号 · 权限勾选 */
.perm-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px!important;align-items:center}
.perm-box{display:flex;flex-direction:column;gap:8px;margin-top:2px}
.perm-row{
  display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:var(--panel);cursor:pointer;
  transition:border-color .15s,background .15s;
}
.perm-row:hover{border-color:var(--amber-2);background:var(--amber-soft)}
.perm-row input{width:17px;height:17px;accent-color:var(--amber);margin:2px 0 0;flex:none;cursor:pointer}
.perm-row > span{display:block;min-width:0;flex:1}
.perm-row b{display:block;font-size:13.5px;font-weight:600;color:var(--ink)}
.perm-row i{display:block;font-style:normal;font-size:12px;color:var(--ink-3);margin-top:3px;line-height:1.55}
.perm-row input:checked ~ span b{color:var(--amber-ink)}
@media(max-width:720px){
  .who{max-width:36px;padding:5px;border-radius:50%}
  .who b{display:none}
  .tn{flex-wrap:wrap}
  .tn .rt{max-width:100%;justify-content:flex-start}
}

/* ---------- 打卡（第 4 轮） ---------- */
.cell .pn{
  position:absolute;top:4px;right:4px;width:6px;height:6px;border-radius:50%;
  background:var(--blue);box-shadow:0 0 0 2px #fff,0 0 6px rgba(37,99,235,.7);
}
/* 项目弹窗里的「打卡设置」 */
.pbox{
  margin-top:14px;padding:13px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:linear-gradient(180deg,var(--panel-2),var(--panel));
}
.pbox .chk{
  display:flex;align-items:flex-start;gap:9px;font-size:13.5px;cursor:pointer;
  padding:3px 0;line-height:1.6;color:var(--ink-2);
}
.pbox .chk input{width:17px;height:17px;accent-color:var(--amber);margin:2px 0 0;flex:none;cursor:pointer}
.pbox .chk b{color:var(--ink)}
.pbox .hint{font-size:12px;color:var(--ink-3);line-height:1.6}
.pbox > .hint{margin:5px 0 2px;padding-left:26px}
[data-punch-more]{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
/* ---- 打卡设置新版式（分区 + 卡片网格，手机上自动变一列） ---- */
.pbox .psw{align-items:center;padding:0 0 2px}
.pbox .psw b{font-size:13.5px}
/* 注意：类名统一加 punch- 前缀，别用 pgrid / pcard 这类通用名（材料模块已占用 .pgrid） */
.punch-grp{margin-top:13px}
.punch-grp-t{font-size:12.5px;font-weight:700;color:var(--ink-2);margin:0 0 8px;padding-left:2px;display:flex;align-items:center;gap:7px}
.punch-grp-t em{font-style:normal;font-weight:400;font-size:11.5px;color:var(--ink-3)}
.punch-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.punch-card{background:var(--panel);border:1px solid var(--line-2);border-radius:10px;padding:10px 11px;min-width:0}
.punch-card-t{font-size:12px;font-weight:600;color:var(--ink-3);margin-bottom:7px}
.punch-card .chk{font-size:12.5px;line-height:1.55;padding:2px 0}
.punch-card .chk input{width:16px;height:16px}
.punch-card .hint{margin-top:6px}
.punch-unit{display:flex;align-items:center;gap:7px}
.punch-unit .inp{max-width:110px}
.punch-unit > span{font-size:12px;color:var(--ink-3)}
.punch-time{display:flex;align-items:center;gap:6px;min-width:0}
.punch-time .inp{max-width:none;flex:1 1 70px;min-width:0;padding-left:6px;padding-right:6px;font-size:12.5px}
.punch-time > i{font-style:normal;font-size:12px;color:var(--ink-3);flex:none}
@media (max-width:680px){.punch-grid{grid-template-columns:1fr}}
/* 旧版式（保留给别处可能还在用的地方，不再用于打卡设置） */
.prow{display:flex;gap:12px;align-items:flex-start;padding:8px 0}
.prow + .prow{border-top:1px solid var(--line-2)}
.plabel{flex:0 0 74px;font-size:12.5px;font-weight:600;color:var(--ink-3);padding-top:9px}
.pval{flex:1;min-width:0}
.pval .inp{max-width:150px}
.pval .hint{margin-top:5px}
/* 考勤弹窗里的打卡详情卡 */
.punch-info{
  margin:4px 0 14px;padding:11px 13px;border:1px solid #cfdffb;border-radius:var(--radius-sm);
  background:var(--blue-soft);
}
.punch-info .pi-h{font-size:12.5px;font-weight:700;color:var(--blue-ink);margin-bottom:8px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.punch-info .pi-row{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:13px}
.punch-info .pi-row + .pi-row{border-top:1px solid rgba(37,99,235,.14)}
.punch-info .pi-row .pl{flex:0 0 34px;color:var(--ink-3);font-size:12.5px}
.punch-info .pi-row b{font-variant-numeric:tabular-nums;color:var(--ink);font-size:14px}
.punch-info .pi-row .hint{flex:1;font-size:12px}
.punch-info .pi-foot{margin-top:8px;padding-top:8px;border-top:1px solid rgba(37,99,235,.14);font-size:12.5px;color:var(--blue-ink);line-height:1.6}
.pthumb{width:46px;height:46px;object-fit:cover;border-radius:8px;border:1px solid #cfdffb;cursor:zoom-in;flex:none}
/* 看大图 */
.photo-veil{
  position:fixed;inset:0;z-index:9999;background:rgba(12,10,8,.9);
  display:flex;align-items:center;justify-content:center;padding:22px;cursor:zoom-out;
}
.photo-veil img{max-width:100%;max-height:100%;border-radius:10px;box-shadow:0 24px 60px -20px rgba(0,0,0,.7)}
.photo-veil .x{
  position:absolute;top:18px;right:20px;width:38px;height:38px;border-radius:50%;
  border:0;background:rgba(255,255,255,.16);color:#fff;font-size:18px;cursor:pointer;
}
@media(max-width:720px){
  .prow{flex-direction:column;gap:2px}
  .plabel{flex:none;padding-top:0}
  .pval .inp{max-width:100%}
}

/* ============================================================
 * 第 6 轮：一天 4 个卡 + 补卡审批
 * ============================================================ */
/* 项目表单里的 4 个打卡时段，一行一个 */
.ptime{display:flex;align-items:center;gap:7px;margin-bottom:6px;flex-wrap:wrap}
.ptime > span{flex:0 0 58px;font-size:12.5px;color:var(--ink-2)}
.ptime > i{font-style:normal;font-size:12px;color:var(--ink-3)}
.pval .ptime .inp{max-width:112px}
/* 考勤页顶上的「待批补卡」提示条 */
.fixbar{
  display:flex;align-items:center;gap:10px;cursor:pointer;
  background:linear-gradient(135deg,var(--amber-soft),#fffaf2);
  border:1px solid var(--amber);border-radius:12px;
  padding:11px 14px;margin-bottom:12px;
}
.fixbar .ic{font-size:17px;flex:none}
.fixbar .tx{flex:1;min-width:0;font-size:13px;color:var(--amber-ink);line-height:1.5}
.fixbar .tx b{font-weight:700}
.fixbar .go{flex:none;font-size:12.5px;font-weight:600;color:var(--amber-ink)}
.fixbar:hover{background:linear-gradient(135deg,#ffeed6,#fff6e9)}
/* 审批弹窗里一条申请 */
.fixrow{border:1px solid var(--line);border-radius:12px;padding:11px 12px;margin-bottom:10px;background:var(--panel-2)}
.fixrow .fr-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.fixrow .fr-h b{font-size:14px;color:var(--ink)}
.fixrow .fr-h .hint{font-size:12px;color:var(--ink-3)}
.fixrow .fr-b{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fixrow .fr-b .inp{max-width:130px}
.frow2{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:12.5px;color:var(--ink-2);padding:5px 0;border-top:1px solid var(--line-2)}
.frow2 b{font-size:12px;font-weight:600}
.frow2 b.ok{color:var(--green-ink)}
.frow2 b.no{color:var(--red-ink)}
/* 打卡详情：4 个点各一行，缺的压暗 */
.punch-info .pi-row .pl{flex:0 0 58px}
.punch-info .pi-row.pi-miss{opacity:.5}
.punch-info .pi-row.pi-miss b{color:var(--amber-ink)}

/* ===== 第 7 轮：考勤页工具条 + 打卡照片墙 + 异常名单 ===== */
.ptools{display:flex;gap:10px;margin-bottom:12px}
.ptool{
  flex:1;display:flex;align-items:center;gap:8px;cursor:pointer;white-space:nowrap;
  background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:10px 14px;font-size:13.5px;color:var(--ink);font-weight:600;text-align:left;
}
.ptool .ic{font-size:16px;flex:none}
.ptool .tx{flex:1;min-width:0}
.ptool .hint{font-size:11.5px;color:var(--ink-3);font-weight:400;flex:none}
.ptool i{
  flex:none;font-style:normal;background:var(--amber);color:#fff;font-weight:700;
  font-size:11.5px;min-width:20px;text-align:center;border-radius:10px;padding:1px 6px;
}
.ptool.warn{border-color:var(--amber);background:linear-gradient(135deg,var(--amber-soft),#fffaf2)}
.ptool:hover{border-color:var(--amber)}

/* 照片墙：月份导航 + 按天分组 */
.ph-nav{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}
.ph-nav b{font-size:13.5px;text-align:center;flex:1;min-width:0}
.pday{border-top:1px solid var(--line-2);padding:10px 0}
.pday:first-of-type{border-top:0}
.pday-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px;font-size:13px}
.pday-h b{font-weight:700}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:8px}
.pcell{margin:0;cursor:zoom-in}
.pcell img{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:10px;border:1px solid var(--line);display:block}
.pcell figcaption{font-size:11px;color:var(--ink-3);text-align:center;margin-top:3px;line-height:1.35}

/* 异常名单：一人一卡，下面列明细行 */
.isrow{border:1px solid var(--line);border-radius:12px;padding:11px 12px;margin-bottom:10px;background:var(--panel-2)}
.is-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.is-h b{font-size:14.5px}
.is-h .hint{font-size:12px;color:var(--ink-3)}
.is-t{margin:7px 0 4px;display:flex;gap:5px;flex-wrap:wrap}
.is-i{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  font-size:12.5px;color:var(--ink-2);padding:6px 0;border-top:1px dashed var(--line-2);cursor:pointer;
}
.is-i:hover{color:var(--amber-ink)}
.is-i .dt{font-weight:600;flex:none}
.is-i .kd{flex:none}
.is-i .hint{flex:1;min-width:0}
.is-i .go{flex:none;font-weight:600;color:var(--amber-ink)}

/* ================= 记工面板（r24）=================
   日历点进去 → 一次给多个工人记工。类名统一 att-/ds- 前缀，
   避开材料模块已占用的 .pgrid / .pcell。 */
.sheet.full{max-width:560px;height:100dvh;max-height:100dvh;border-radius:0}
@media (min-width:700px){ .sheet.full{height:92vh;max-height:92vh;border-radius:18px} }
.sheet.full .sheet-h{padding:13px 16px}
.sheet.full .sheet-b{padding:0}

/* 日期行 */
.ds-date{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:13px 16px;border-bottom:1px solid var(--line-2);background:#fff;width:100%;text-align:left}
.ds-date b{font-size:15px;font-weight:650;color:var(--ink);letter-spacing:-.2px}
.ds-date .gt{color:var(--ink-3);font-size:15px}
.ds-dateinp{position:absolute;inset:0;opacity:0;width:100%;height:100%;cursor:pointer}
.ds-datewrap{position:relative}

/* 记工类型页签 */
.ds-tabs{display:flex;gap:0;border-bottom:1px solid var(--line-2);background:#fff;padding:0 6px}
.ds-tabs button{flex:1;padding:11px 2px;font-size:13.5px;color:var(--ink-3);font-weight:600;
  border-bottom:2px solid transparent;transition:color .15s,border-color .15s}
.ds-tabs button.on{color:var(--amber-ink);border-bottom-color:var(--amber)}
.ds-tabs button:disabled{opacity:.45}

/* 全选 / 未设工价 */
.ds-bar{display:flex;align-items:center;gap:10px;padding:11px 16px 6px;flex-wrap:wrap}
.ds-warn{margin-left:auto;font-size:12.5px;font-weight:600;color:var(--red);display:flex;align-items:center;gap:4px}

/* 工人格子 */
.ds-people{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;
  padding:4px 16px 16px;max-height:44vh;overflow-y:auto;overflow-x:hidden}
@media (min-width:700px){ .ds-people{grid-template-columns:repeat(6,1fr)} }
.ds-p{position:relative;border:1.5px solid var(--line);border-radius:12px;background:#fff;
  padding:9px 4px 7px;display:flex;flex-direction:column;align-items:center;gap:5px;
  transition:border-color .14s,background .14s,transform .1s}
.ds-p:active{transform:scale(.96)}
.ds-p .av{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;
  font-size:15px;font-weight:700;background:var(--bg-2);color:var(--ink-2);overflow:hidden}
.ds-p b{font-size:12px;font-weight:600;color:var(--ink-2);line-height:1.2;text-align:center;
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-p .sub{font-size:10px;color:var(--ink-3);line-height:1.1}
.ds-p.on{border-color:var(--amber);background:var(--amber-soft)}
.ds-p.on .av{background:var(--amber);color:#fff}
.ds-p.on b{color:var(--amber-ink)}
.ds-p .ck{position:absolute;top:-6px;right:-6px;width:19px;height:19px;border-radius:50%;
  background:var(--amber);color:#fff;font-size:12px;display:none;place-items:center;
  box-shadow:0 2px 5px rgba(224,123,10,.45);font-weight:700}
.ds-p.on .ck{display:grid}
.ds-p .nopay{position:absolute;top:5px;right:5px;width:6px;height:6px;border-radius:50%;background:var(--red)}
.ds-p.add{border-style:dashed;color:var(--ink-3)}
.ds-p.add .av{background:transparent;color:var(--ink-3);font-size:20px;font-weight:400}
.ds-p .sub{color:var(--green-ink);font-weight:600}
.ds-p.on .sub{color:var(--amber-ink)}   /* 已记工靠小字标出来，不跟「选中」抢底色 */

/* 记工 / 流水 二级页签 */
.ds-tabs2{display:flex;background:var(--panel-2);border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2)}
.ds-tabs2 button{flex:1;padding:11px 0;font-size:13.5px;font-weight:600;color:var(--ink-3);position:relative}
.ds-tabs2 button.on{color:var(--ink);background:#fff}
.ds-tabs2 button.on::after{content:'';position:absolute;left:50%;transform:translateX(-50%);bottom:0;
  width:28px;height:2.5px;border-radius:2px;background:var(--amber)}

/* 表单区 */
.ds-form{padding:14px 16px 22px}
.ds-field{display:flex;align-items:flex-start;gap:10px;margin-bottom:13px}
.ds-lbl{flex:none;width:44px;font-size:13px;color:var(--ink-3);padding-top:8px;font-weight:600}
.ds-opts{flex:1;display:flex;gap:7px;flex-wrap:wrap}
.ds-opt{padding:8px 13px;border:1.5px solid var(--line);border-radius:10px;background:#fff;
  font-size:13px;color:var(--ink-2);font-weight:600;transition:all .14s}
.ds-opt:active{transform:scale(.96)}
.ds-opt.on{border-color:var(--amber);background:var(--amber-soft);color:var(--amber-ink)}
.ds-sub{flex:1;display:flex;gap:7px;flex-wrap:wrap;align-items:center}
.ds-num{width:90px;padding:8px 10px;border:1.5px solid var(--line);border-radius:10px;
  font-size:13px;text-align:right;font-variant-numeric:tabular-nums}
.ds-num:focus{outline:0;border-color:var(--amber)}
.ds-unit{font-size:12.5px;color:var(--ink-3)}
.ds-live{background:var(--panel-2);border:1px dashed var(--line);border-radius:10px;
  padding:10px 12px;font-size:13px;color:var(--ink-2);line-height:1.7;margin-top:4px}
.ds-live b{color:var(--amber-ink);font-size:15px}

/* 记工流水 */
.ds-flow{padding:6px 16px 22px}
.ds-fi{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line-2);cursor:pointer}
.ds-fi:active{background:var(--panel-2)}
.ds-fi .bd{flex:1;min-width:0}
.ds-fi .bd b{font-size:14px;display:block}
.ds-fi .bd span{font-size:12px;color:var(--ink-3)}
.ds-fi .rt{text-align:right;flex:none}
.ds-fi .rt b{font-size:14px;font-variant-numeric:tabular-nums}
.ds-fi .rt span{display:block;font-size:11px;color:var(--blue)}

/* 日历格子：显示当天几个工 / 多少劳务费（nowrap 防止「个工」折行被裁） */
.cell.attday .mk{font-size:9.5px;line-height:1.34;white-space:nowrap;letter-spacing:0}
.cell .mk .n{font-weight:700;font-size:10.5px;letter-spacing:-.2px}
.cell .mk .m{font-weight:600;opacity:.88;font-size:9px;letter-spacing:-.2px}
.cell.attday{padding:5px 4px 4px}
.att-sum-note{font-size:12px;color:var(--ink-3);padding:9px 4px 0;text-align:center}

/* 记工面板：日期行里的原生日期框（点了直接弹系统日历） */
.ds-date .ds-dinp{flex:1;border:0;background:transparent;font-size:15px;font-weight:650;color:var(--ink);
  padding:0;font-family:inherit;-webkit-appearance:none;appearance:none;min-width:0}
.ds-date .ds-dinp:focus{outline:0}
.ds-date .ds-dinp::-webkit-calendar-picker-indicator{opacity:.55;cursor:pointer}

/* ---------- 跨项目总账（r25.1 整页重排：抬头 + 三张数字卡 + 一项目一行 + 按月明细） ---------- */
.pa-exp{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.pa-exp .btn{flex:none}
.pa-exp span{font-size:11.5px;color:var(--ink-3);line-height:1.5}
.pa-head{display:flex;align-items:center;gap:12px;padding:0 0 14px;border-bottom:1px solid var(--line-2)}
.pa-av{flex:0 0 44px;height:44px;border-radius:14px;display:grid;place-items:center;
  font-size:15px;font-weight:700;color:#fff;letter-spacing:.5px;
  background:linear-gradient(160deg,var(--amber-2),var(--amber));box-shadow:0 7px 15px -9px rgba(224,123,10,.6)}
.pa-who{flex:1;min-width:0}
.pa-who b{display:block;font-size:17px;font-weight:650;letter-spacing:-.2px;line-height:1.25}
.pa-who span{display:block;font-size:12px;color:var(--ink-3);margin-top:3px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pa-n{flex:none;text-align:right;padding-left:6px}
.pa-n b{display:block;font-size:20px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.pa-n span{display:block;font-size:11px;color:var(--ink-3)}

.pa-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:14px 0 4px}
.pa-kpi{border:1px solid var(--line);border-radius:12px;background:var(--panel-2);padding:10px 8px;text-align:center;overflow:hidden}
.pa-kpi span{display:block;font-size:11.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-kpi b{display:block;font-size:18px;font-weight:700;margin-top:4px;letter-spacing:-.5px;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.pa-kpi i{display:block;font-style:normal;font-size:10.5px;color:var(--ink-3);margin-top:3px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.pa-sec-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:18px 0 9px}
.pa-sec-h h4{margin:0;font-size:13.5px;font-weight:650;letter-spacing:-.1px;color:var(--ink)}
.pa-sec-h span{font-size:11.5px;color:var(--ink-3);text-align:right}

.pa-list{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel)}
.pa-prow{display:flex;align-items:center;gap:10px;width:100%;font:inherit;color:inherit;text-align:left;
  -webkit-appearance:none;appearance:none;background:none;border:0;border-radius:0;
  border-bottom:1px solid var(--line-2);padding:11px 13px;cursor:pointer;transition:background .14s,box-shadow .14s}
.pa-prow:last-of-type{border-bottom:none}
.pa-prow:active{background:var(--panel-2)}
.pa-prow.on{background:var(--amber-soft);box-shadow:inset 3px 0 0 var(--amber)}
.pa-pn{flex:1;min-width:0}
.pa-pn b{display:block;font-size:14.5px;font-weight:600;line-height:1.3;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pa-pn em{display:block;font-style:normal;font-size:11.5px;color:var(--ink-3);margin-top:2px;
  font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pa-cur{font-style:normal;font-size:10.5px;font-weight:600;color:#667085;background:#f0f2f7;
  border-radius:999px;padding:1px 7px;margin-left:6px;vertical-align:1px}
.pa-pv{flex:none;text-align:right;padding-left:6px}
.pa-pv b{display:block;font-size:15.5px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.pa-pv em{display:block;font-style:normal;font-size:11.5px;margin-top:2px;font-variant-numeric:tabular-nums}
.pa-tot{display:flex;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;
  padding:10px 13px;background:var(--panel-2);border-top:2px solid var(--line);
  font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.pa-tot b{font-weight:700;color:inherit}

.pa-months{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel)}
.pa-mh{display:flex;align-items:center;gap:8px;padding:8px 13px;background:var(--panel-2);
  border-bottom:1px solid var(--line-2);font-size:12px;color:var(--ink-3)}
.pa-mh b{font-size:13px;font-weight:650;color:var(--ink)}
.pa-mh span{flex:1;min-width:0;font-variant-numeric:tabular-nums}
.pa-mh em{font-style:normal;font-size:13px;font-weight:700;color:var(--amber-ink);font-variant-numeric:tabular-nums}
.pa-months .ds-fi{padding:9px 13px;margin:0}
.pa-months .ds-fi .bd b{font-size:13.5px;letter-spacing:-.1px}
.pa-months .ds-fi .bd span{margin-top:2px;display:block;line-height:1.5;white-space:normal}
.pa-mgrp:last-child .ds-fi:last-child{border-bottom:none}
.pa-empty{padding:20px 14px;text-align:center;font-size:12.5px;color:var(--ink-3)}

/* 考勤页底部「跨项目总账」入口：可点的一行 */
.stat-line.lk{cursor:pointer;margin:0 -15px;padding:11px 15px;border-bottom:none;border-top:1px solid var(--line-2)}
.stat-line.lk:hover{background:#fff8ec}
.stat-line.lk:active{background:var(--amber-soft)}
.stat-line.lk b{color:var(--amber-ink)}
