/* ═══ 设计语言：与《应收账款分析图表生成器》（输差工具）同源 ═══
   色板/组件引用 VibeCoding 视觉词典：#15 Hero 页头、#8 仪表盘统计卡、
   #25 标签切换、#32 抽屉、#33 手风琴、#35 轻提示、#38 表单 */
:root{
  --blue-d:#014FA2; --blue-m:#3671CA; --line:#254AB9;
  --tblh:#BBD3EA; --blue-l:#DCE7EE; --border:#A9C1D4; --hair:#e7edf6;
  --ink:#1E293B; --muted:#64748B; --red:#C00000; --green:#15803D;
}
*{box-sizing:border-box}
body{margin:0;min-height:100vh;color:var(--ink);
  font-family:"Microsoft YaHei","微软雅黑","PingFang SC",system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;
  background:linear-gradient(155deg,#eff3fa 0%,#f3f6fc 30%,#f7f9fd 65%,#fbfcfe 100%) fixed;
  background-color:#f7f9fd;line-height:1.6}
.wrap{max-width:1180px;margin:0 auto;padding:14px 16px 60px}

/* ═══ #15 Hero 页头：标题不进卡片，直接落在页面上 ═══ */
.topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding:10px 2px 13px;margin:4px 0 0;border-bottom:2px solid var(--blue-d)}
.tb-name{font-size:27px;font-weight:700;color:var(--blue-d);letter-spacing:.4px;line-height:1.15}
.tb-sub{font-size:12px;color:#94a3b8;margin-top:3px}
.tb-right{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding-bottom:3px}
.chip{font-size:12.5px;color:var(--blue-d);background:#eef4fb;border:1px solid #d5e3f4;
  border-radius:20px;padding:4px 13px;font-variant-numeric:tabular-nums;white-space:nowrap}
@media(max-width:700px){.tb-name{font-size:22px}}

.btn{padding:8px 16px;border:none;border-radius:9px;font-size:14px;cursor:pointer;
  font-family:inherit;font-weight:500;transition:all .15s;text-decoration:none;display:inline-block}
.btn.primary{background:linear-gradient(180deg,#0a5aad,#014FA2);color:#fff;
  box-shadow:0 2px 8px rgba(1,79,162,.22)}
.btn.primary:hover{filter:brightness(1.08);box-shadow:0 4px 14px rgba(1,79,162,.30)}
.btn.ghost{background:#fff;color:#334155;border:1px solid #d5deea}
.btn.ghost:hover{background:#f2f7fc;border-color:#a9c1de;color:var(--blue-d)}
.btn.sm{padding:5px 12px;font-size:12.5px;border-radius:7px}

/* ═══ 状态层：全绿=一行小字；有问题=黄条（死规矩：警告绝不折叠隐藏） ═══ */
.hstrip{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:9px 2px 4px;font-size:12.5px;color:var(--muted)}
.hstrip .ok{color:var(--green);font-weight:600}
.hstrip .sep{color:#cbd5e1}
.hstrip a{color:var(--blue-m);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.alertbar{background:#fffbeb;border:1px solid #fde68a;border-radius:12px;padding:11px 16px;
  margin:12px 0 2px;font-size:13px;line-height:1.8;color:#7c4a03}
.alertbar b{color:#92400e}
.alertbar a{color:#92400e;font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.alertbar.ok{background:#f0fdf4;border-color:#bbf7d0;color:#166534}
.flash{background:#eef4fb;border:1px solid #cfe0f2;border-radius:12px;padding:10px 16px;
  margin:12px 0 0;font-size:13px;color:var(--blue-d)}

/* ═══ 数据条：可点卡片（开抽屉换文件） ═══ */
.dcard{display:flex;align-items:center;gap:10px;flex-wrap:wrap;width:100%;cursor:pointer;
  background:#fff;border:1px solid var(--hair);border-radius:14px;padding:12px 18px;margin:14px 0 0;
  box-shadow:0 6px 22px rgba(20,50,110,.07);text-align:left;font-family:inherit;font-size:13px;
  transition:border-color .15s,box-shadow .15s}
.dcard:hover{border-color:#a9c1de;box-shadow:0 8px 26px rgba(20,50,110,.12)}
.dcard .dt{font-size:14px;color:var(--blue-d);font-weight:700}
.dcard .ds{font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.dcard .sp{flex:1}
.dcard .arrow{color:#94a3b8;font-size:12px}

/* ═══ #8 仪表盘 · KPI 统计卡 ═══ */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:14px 0 0}
.kpi{background:linear-gradient(170deg,#f7fafd,#eef4fb);border:1px solid #dfe8f4;
  border-radius:12px;padding:12px 15px}
.kpi .k{font-size:12.5px;color:var(--ink);font-weight:600;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.kpi .v{font-size:22px;letter-spacing:-.2px;font-weight:700;color:var(--blue-d);
  font-variant-numeric:tabular-nums;line-height:1.3;margin-top:4px}
.kpi .v.neg{color:var(--red)}
.kpi .v.ok{color:var(--green)}
.kpi .c{font-size:11.5px;color:#94a3b8;margin-top:3px;line-height:1.5}
@media(max-width:900px){.kpis{grid-template-columns:repeat(2,1fr)}}

/* ═══ #25 标签切换 ═══ */
.tabs{display:flex;gap:2px;margin:18px 0 0;border-bottom:2px solid #dbe4ef;flex-wrap:wrap}
.tab{border:none;background:none;font:inherit;font-size:15px;padding:9px 18px;cursor:pointer;
  color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-2px;font-weight:500}
.tab:hover{color:var(--blue-d)}
.tab.active{color:var(--blue-d);border-color:var(--blue-d);font-weight:700}
.dot{background:#b45309;color:#fff;border-radius:10px;padding:0 7px;font-size:11px;margin-left:5px}
.panel{display:none;padding:16px 0 0}
.panel.active{display:block}

/* ═══ 汇报卡（.slide 同源）：仿宋标题 + 蓝条 + 报表表格 ═══ */
.slide{background:#fff;border:1px solid #e6ecf5;border-radius:12px;padding:20px 24px 18px;
  margin:0 0 16px;box-shadow:0 10px 34px rgba(20,50,110,.11)}
.sl-title{font-family:"FangSong","仿宋","STFangsong",serif;font-size:24px;font-weight:700;
  color:var(--blue-d)}
.sl-cap{font-size:12px;color:#94a3b8;margin-top:2px}
.sl-bar{height:4px;background:var(--blue-d);margin:8px 0 14px}
.sl-sub{font-size:14px;color:var(--blue-d);font-weight:600;margin:18px 0 8px;
  padding-left:9px;border-left:3px solid var(--blue-m)}
.sl-note{font-size:11.5px;color:var(--muted);margin-top:10px;line-height:1.7}

.scroller{overflow-x:auto}
table.out{border-collapse:collapse;width:100%;font-size:13px;min-width:820px}
table.out th,table.out td{border:1px solid var(--border);padding:5px 9px;text-align:right;
  font-variant-numeric:tabular-nums;white-space:nowrap}
table.out th{background:var(--tblh);color:var(--blue-d);font-weight:600;font-size:12.5px}
table.out td:first-child,table.out th:first-child{text-align:left;position:sticky;left:0;
  background:#fff;z-index:1;max-width:290px;overflow:hidden;text-overflow:ellipsis}
table.out th:first-child{background:var(--tblh);z-index:2}
table.out tr.sum td{background:var(--blue-l);font-weight:600}
table.out tr.sum td:first-child{background:var(--blue-l)}
table.out tr.sec td{background:#f2f7fc;color:var(--blue-d);font-weight:600;text-align:left}
table.out td.n{color:var(--red)}
table.out td.lvl1{padding-left:26px}
table.out td.lvl2{padding-left:44px}
table.out tr.det{display:none}
table.out tr.det.show{display:table-row}
table.out tr.par td:first-child{cursor:pointer}
table.out tr.par td:first-child::before{content:"▸ ";color:var(--blue-m);font-size:11px}
table.out tr.par.open td:first-child::before{content:"▾ "}
table.out tr:hover td{background:#f8fbfe}
table.out tr.sum:hover td{background:var(--blue-l)}
.xall{font-size:12px;color:var(--blue-m);cursor:pointer;text-decoration:underline;
  text-underline-offset:2px;background:none;border:none;font-family:inherit;padding:0}

/* 调节表（桥）：锚点行加重、比较行分色 */
table.out tr.anchor td{background:#eef4fb;font-weight:700;font-size:13.5px}
table.out tr.anchor td:first-child{background:#eef4fb}
table.out tr.pubrow td{color:var(--muted)}
table.out tr.diffrow td{background:#fffdf5;font-weight:600}
table.out tr.diffrow td:first-child{background:#fffdf5}

/* 对齐口径提示卡 */
.align-card{background:#f4f8fc;border:1px solid #dfe8f4;border-radius:12px;
  padding:13px 16px;margin:14px 0 2px;font-size:13px;line-height:1.8}
.align-card b{color:var(--blue-d)}
.align-card form{display:inline}

/* ═══ 校验卡 ═══ */
.checks{display:grid;gap:10px;margin-bottom:16px}
.check{background:#fff;border:1px solid var(--hair);border-left:4px solid var(--green);
  border-radius:10px;padding:9px 15px;box-shadow:0 3px 12px rgba(20,50,110,.05)}
.check.warn{border-left-color:#b45309;background:#fffdf5}
.check.fail{border-left-color:var(--red);background:#fdf6f5}
.check-name{font-weight:700;font-size:13.5px}
.check-detail{color:var(--muted);font-size:12.5px;margin-top:2px}
.warnings{margin:8px 0 0;padding-left:20px;font-size:13px;color:#7c4a03;line-height:1.9}

/* ═══ 手工参数（#38 表单 · 录入表同源样式） ═══ */
details.ppanel{background:#fff;border:1px solid var(--hair);border-radius:14px;margin:16px 0 0;
  box-shadow:0 6px 22px rgba(20,50,110,.07);overflow:hidden}
details.ppanel>summary{cursor:pointer;list-style:none;padding:13px 18px;display:flex;
  gap:12px;align-items:baseline;flex-wrap:wrap}
details.ppanel>summary::-webkit-details-marker{display:none}
details.ppanel>summary::before{content:"▸";color:var(--blue-m);font-size:12px}
details.ppanel[open]>summary::before{content:"▾"}
details.ppanel[open]>summary{border-bottom:1px solid #eef2f7}
.pp-t{font-size:14.5px;font-weight:700;color:var(--blue-d)}
.pp-s{font-size:12.5px;color:var(--muted)}
.pp-s .miss{color:#b45309;font-weight:600}
.pp-body{padding:14px 18px 16px}
table.edit{border-collapse:collapse;width:100%;min-width:880px}
table.edit th,table.edit td{border:1px solid #dbe2ea;padding:5px 8px;font-size:13px}
table.edit th{background:#eef4fb;color:var(--blue-d);font-weight:500;font-size:12.5px;
  text-align:center;white-space:nowrap}
table.edit td.mon{text-align:center;background:#fafbfd;font-weight:600;white-space:nowrap;
  font-variant-numeric:tabular-nums}
table.edit input{width:100%;min-width:72px;border:none;padding:4px 6px;font-size:13px;
  text-align:right;font-family:inherit;font-variant-numeric:tabular-nums;background:#fffdf2}
table.edit input.note{text-align:left;background:#fff;min-width:170px}
table.edit input:focus{outline:2px solid #bcd3ea;border-radius:4px}
table.edit td.autocell{background:#f4f6f8;text-align:right;white-space:nowrap;
  font-variant-numeric:tabular-nums;color:var(--muted)}
table.edit td.autocell input{width:74px;min-width:64px;background:#fff;border:1px solid #e2e8f0;
  border-radius:5px;margin-left:5px}
.ref{font-size:11px;color:#94a3b8;margin-top:1px;white-space:nowrap}
.btnrow{margin-top:13px;display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.hint{font-size:12px;color:var(--muted);line-height:1.7}

/* ═══ #32 抽屉：数据文件上传 ═══ */
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(520px,94vw);z-index:60;background:#fff;
  border-left:1px solid #dbe4ef;box-shadow:-14px 0 40px rgba(20,50,110,.16);
  display:flex;flex-direction:column;transform:translateX(100%);
  transition:transform .26s cubic-bezier(.4,0,.2,1);visibility:hidden}
.drawer.open{transform:translateX(0);visibility:visible}
.dw-head{display:flex;align-items:center;gap:12px;padding:14px 18px;
  border-bottom:1px solid #eef2f7;flex-shrink:0}
.dw-head h3{margin:0;font-size:16px;color:var(--blue-d);font-weight:600}
.dw-x{margin-left:auto;width:32px;height:32px;border:1px solid #d5deea;background:#fff;
  border-radius:8px;cursor:pointer;font-size:17px;line-height:1;color:#475569;font-family:inherit}
.dw-x:hover{background:#f2f7fc;border-color:#a9c1de;color:var(--blue-d)}
.dw-body{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:14px 18px 22px}
.up-slot{border:1.5px dashed #b9cbe0;border-radius:10px;padding:12px 14px;margin-bottom:12px;
  background:#fafcff}
.up-slot .t{font-weight:600;font-size:13.5px;color:var(--blue-d)}
.up-slot .req{color:var(--red);font-size:11px;margin-left:6px}
.up-slot .opt{color:#94a3b8;font-size:11px;margin-left:6px}
.up-slot .h{color:var(--muted);font-size:12px;margin:3px 0 7px;line-height:1.6}
.up-slot .m{font-size:12px;color:var(--green);margin-bottom:6px}
.up-slot .m.none{color:#94a3b8}
.up-slot input[type=file]{width:100%;font-size:12.5px}
@media(max-width:768px){.drawer{width:100vw;border-left:none}}
@media(prefers-reduced-motion:reduce){.drawer{transition:none}}

footer{max-width:1180px;margin:0 auto;padding:14px 18px 30px;font-size:12px;
  color:var(--muted);line-height:1.8}

/* ═══ 登录页 ═══ */
.login-body{display:grid;place-items:center;min-height:100vh;
  background:linear-gradient(155deg,#eff3fa,#f3f6fc 40%,#fbfcfe)}
.login-card{background:#fff;border:1px solid var(--hair);border-radius:14px;
  box-shadow:0 10px 34px rgba(20,50,110,.13);padding:34px 38px;width:350px;display:grid;gap:12px}
.login-card h1{font-size:21px;margin:0;color:var(--blue-d);padding-left:13px;position:relative}
.login-card h1::before{content:"";position:absolute;left:0;top:4px;bottom:4px;width:5px;
  border-radius:3px;background:linear-gradient(180deg,#014FA2,#3671CA)}
.login-card p{margin:0 0 6px;color:var(--muted);font-size:12.5px}
.login-card input{padding:10px 12px;border:1px solid #cbd5e1;border-radius:8px;font:inherit}
.login-card input:focus{outline:none;border-color:var(--line);box-shadow:0 0 0 3px rgba(37,74,185,.13)}
.login-card button{padding:10px;border:none;border-radius:9px;
  background:linear-gradient(180deg,#0a5aad,#014FA2);color:#fff;font:inherit;font-weight:600;
  cursor:pointer;box-shadow:0 2px 8px rgba(1,79,162,.22)}
.login-card .flash{margin:0}

.empty{background:#fff;border:1px solid var(--hair);border-radius:14px;padding:38px;
  text-align:center;margin-top:18px;box-shadow:0 6px 22px rgba(20,50,110,.07)}
.empty h2{color:var(--blue-d);margin:0 0 8px}
.empty p{color:var(--muted);font-size:13.5px}
