  :root{
    --bg:#eef2f0;
    --surface:#ffffff;
    --ink:#1d2b29;
    --muted:#5d6d6a;
    --line:#dde5e2;
    --line-soft:#eaf0ee;
    --brand:#0e6357;
    --brand-deep:#0a4d44;
    --brand-soft:#e3f0ec;
    --accent:#d98e2b;
    --paid:#2e9e5b;
    --paid-bg:#e6f4ec;
    --unpaid:#cf6a42;
    --unpaid-bg:#fbeae3;
    --advanced:#3b7dd8;
    --advanced-bg:#e8f0fc;
    --settled:#75838e;
    --settled-bg:#eef1f3;
    --danger:#c0392b;
    --radius:10px;
    --shadow:0 1px 2px rgba(16,42,37,.06), 0 8px 24px rgba(16,42,37,.06);
    --sidebar-w:230px;
    --print-ink:#111;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  html,body{height:100%}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
    background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5;
    -webkit-font-smoothing:antialiased;
  }
  button{font-family:inherit;cursor:pointer}
  input,select{font-family:inherit;font-size:13px}
  a{text-decoration:none;color:inherit}

  /* ===== 布局 ===== */
  #app{display:flex;min-height:100vh}
  .sidebar{
    width:var(--sidebar-w);flex:0 0 var(--sidebar-w);
    background:linear-gradient(180deg,#0f3a33 0%,#0b2f29 100%);
    color:#dbeae6;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:60;
  }
  .brand{display:flex;align-items:center;gap:10px;padding:20px 18px 18px}
  .brand .logo{
    width:34px;height:34px;border-radius:9px;background:rgba(255,255,255,.12);
    display:flex;align-items:center;justify-content:center;color:#7fd8c4;flex:0 0 34px;
  }
  .brand .name{font-size:15px;font-weight:700;letter-spacing:.5px;color:#fff}
  .brand .sub{font-size:11px;color:#7fb5ab;margin-top:1px}
  .nav{flex:1;padding:6px 10px;overflow-y:auto}
  .nav-group{font-size:11px;color:#6fa199;letter-spacing:1px;padding:14px 10px 6px}
  .nav-item{
    display:flex;align-items:center;gap:11px;padding:10px 12px;margin:2px 0;border-radius:8px;
    color:#c4d8d3;font-size:13.5px;transition:background .15s,color .15s;
  }
  .nav-item svg{flex:0 0 18px;opacity:.85}
  .nav-item:hover{background:rgba(255,255,255,.07);color:#fff}
  .nav-item.active{background:var(--brand);color:#fff;box-shadow:0 4px 12px rgba(0,0,0,.18)}
  .sidebar-foot{padding:14px;border-top:1px solid rgba(255,255,255,.08);font-size:11.5px;color:#7fb5ab;line-height:1.7}

  .main{flex:1;min-width:0;display:flex;flex-direction:column}
  .topbar{
    height:56px;background:var(--surface);border-bottom:1px solid var(--line);
    display:flex;align-items:center;justify-content:space-between;padding:0 20px;position:sticky;top:0;z-index:20;
  }
  .topbar .crumb{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px}
  .topbar .crumb .sep{color:var(--muted);font-weight:400}
  .topbar .actions{display:flex;align-items:center;gap:10px}
  .content{flex:1;padding:20px;min-width:0}
  .btn-menu{
    display:none;border:none;background:transparent;width:38px;height:38px;border-radius:8px;margin-right:4px;
    align-items:center;justify-content:center;color:var(--ink);flex:0 0 38px;
  }
  .btn-menu:hover{background:var(--line-soft)}
  #sidebarMask{display:none}

  /* ===== 通用组件 ===== */
  .card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
  .card-hd{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line-soft)}
  .card-hd h3{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px;color:var(--brand-deep)}
  .card-hd h3::before{content:"";display:inline-block;width:4px;height:16px;border-radius:2px;background:linear-gradient(180deg,var(--accent),var(--brand));flex:0 0 4px}
  .card-hd .desc{font-size:12px;color:var(--muted);margin-top:2px}
  .card-bd{padding:20px}
  .btn{
    display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:#fff;color:var(--ink);
    padding:8px 14px;border-radius:8px;font-size:13px;font-weight:600;transition:all .15s;white-space:nowrap;
  }
  .btn:hover{border-color:#b9c8c3;background:#f7faf9}
  .btn svg{flex:0 0 15px}
  .btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
  .btn.primary:hover{background:var(--brand-deep)}
  .btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}
  .btn.accent:hover{filter:brightness(1.05)}
  .btn.danger{background:#fff;border-color:#e5b8b2;color:var(--danger)}
  .btn.danger:hover{background:var(--danger);color:#fff;border-color:var(--danger)}
  .btn.sm{padding:5px 10px;font-size:12px;border-radius:7px}
  .btn:disabled{opacity:.45;cursor:not-allowed}
  .btn.ghost{border-color:transparent;background:transparent}
  .btn.ghost:hover{background:var(--line-soft)}

  .field{display:flex;flex-direction:column;gap:6px}
  .field label{font-size:12.5px;color:var(--muted);font-weight:600}
  .input,select.input{
    border:1px solid var(--line);border-radius:8px;padding:8px 11px;font-size:13px;background:#fff;color:var(--ink);outline:none;
    transition:border-color .15s, box-shadow .15s;width:100%;
  }
  .input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(14,99,87,.12)}
  .input:disabled{background:#f5f7f6;color:#8b9794}

  .seg{display:inline-flex;background:#e8eeec;border-radius:9px;padding:3px;gap:2px}
  .seg button{border:none;background:transparent;padding:6px 14px;border-radius:7px;font-size:12.5px;font-weight:600;color:var(--muted)}
  .seg button.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.12)}

  .toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px}

  .stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}
  .stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;position:relative;overflow:hidden}
  .stat-card .lbl{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:7px}
  .stat-card .lbl .dot{width:8px;height:8px;border-radius:50%}
  .stat-card .val{font-size:24px;font-weight:800;margin-top:8px;font-variant-numeric:tabular-nums;letter-spacing:.2px}
  .stat-card .hint{font-size:11.5px;color:var(--muted);margin-top:4px}
  .stat-card .tag{position:absolute;right:14px;top:14px;font-size:11px;padding:2px 8px;border-radius:20px;background:var(--line-soft);color:var(--muted)}

  table.tbl{width:100%;border-collapse:collapse;font-size:13px}
  table.tbl th{
    text-align:left;padding:10px 12px;background:#f4f7f6;color:var(--muted);font-weight:600;font-size:12px;
    border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;
  }
  table.tbl td{padding:10px 12px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
  table.tbl tr.row-main{cursor:pointer}
  table.tbl tr.row-main:hover{background:#f7faf9}
  table.tbl .num{font-variant-numeric:tabular-nums;text-align:right}
  table.tbl tr.detail-row>td{padding:0;border-bottom:1px solid var(--line)}
  .detail-box{background:#fafcfb;padding:14px 20px}
  .mono{font-variant-numeric:tabular-nums}

  .pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;font-size:11.5px;font-weight:600;white-space:nowrap}
  .pill .dot{width:6px;height:6px;border-radius:50%;background:currentColor}
  .pill.paid{background:var(--paid-bg);color:var(--paid)}
  .pill.unpaid{background:var(--unpaid-bg);color:var(--unpaid)}
  .pill.advanced{background:var(--advanced-bg);color:var(--advanced)}
  .pill.settled{background:var(--settled-bg);color:var(--settled)}
  .pill.printed{background:#eef3f6;color:#4a6370}
  .pill.unprinted{background:#fdf3e3;color:#b07624}
  .pill.reprinting{background:#e7e4fb;color:#5a4bd1}
  .pill.plain{background:var(--line-soft);color:var(--muted)}

  .empty{text-align:center;padding:60px 20px;color:var(--muted)}
  .empty svg{margin-bottom:10px;opacity:.4}
  .empty .t{font-size:15px;font-weight:600;color:#55625f}

  .toast{
    position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-20px);z-index:300;
    background:#1d2b29;color:#fff;padding:11px 20px;border-radius:9px;font-size:13.5px;box-shadow:0 8px 24px rgba(0,0,0,.25);
    opacity:0;pointer-events:none;transition:all .25s;max-width:80vw;
  }
  .toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
  .toast.ok{background:var(--brand)}
  .toast.err{background:var(--danger)}
  .toast.warn{background:#b07624}

  .modal-mask{
    position:fixed;inset:0;background:rgba(13,30,27,.45);z-index:200;display:flex;align-items:center;justify-content:center;
    opacity:0;pointer-events:none;transition:opacity .2s;
  }
  .modal-mask.show{opacity:1;pointer-events:auto}
  .modal{background:#fff;border-radius:14px;width:480px;max-width:92vw;box-shadow:0 24px 64px rgba(0,0,0,.28);overflow:hidden}
  .modal-hd{padding:18px 22px;border-bottom:1px solid var(--line-soft);display:flex;justify-content:space-between;align-items:center}
  .modal-hd h3{font-size:16px}
  .modal-bd{padding:22px}
  .modal-ft{padding:16px 22px;border-top:1px solid var(--line-soft);display:flex;justify-content:flex-end;gap:10px}

  .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  .grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
  .bar-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}
  .bar-row .bl{width:120px;font-size:13px;color:var(--ink);font-weight:600;display:flex;align-items:center;gap:8px;flex:0 0 120px}
  .bar-track{flex:1;height:22px;background:var(--line-soft);border-radius:6px;overflow:hidden}
  .bar-fill{height:100%;border-radius:6px;transition:width .6s ease;display:flex;align-items:center;justify-content:flex-end;padding-right:8px;color:#fff;font-size:11.5px;font-weight:700;min-width:0}
  .bar-row .bv{width:110px;text-align:right;font-weight:700;font-variant-numeric:tabular-nums;flex:0 0 110px}

  .donut-wrap{display:flex;align-items:center;gap:24px;flex-wrap:wrap}
  .donut-legend{flex:1;min-width:200px;display:flex;flex-direction:column;gap:10px}
  .donut-legend .li{display:flex;align-items:center;gap:10px;font-size:13px}
  .donut-legend .li .k{width:10px;height:10px;border-radius:3px;flex:0 0 10px}
  .donut-legend .li .n{flex:1;color:var(--muted)}
  .donut-legend .li .v{font-weight:700;font-variant-numeric:tabular-nums}
  .donut-legend .li .pct{font-size:13px;color:#1d2b29;font-weight:800;min-width:52px;text-align:right}

  .fee-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  .fee-cell{
    border:1px solid var(--line);border-radius:9px;padding:10px 12px;background:#fbfdfc;
    display:flex;flex-direction:column;gap:4px;
  }
  .fee-cell .fn{font-size:12px;color:var(--muted);display:flex;justify-content:space-between;gap:6px;align-items:center}
  .fee-cell .fa{font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
  .fee-cell .fp{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted);gap:6px}
  .fee-cell.editing{border-color:var(--accent);background:#fffaf1}

  .switch{position:relative;width:36px;height:20px;flex:0 0 36px;display:inline-block}
  .switch input{opacity:0;width:0;height:0}
  .switch .trk{position:absolute;inset:0;background:#cdd8d4;border-radius:20px;transition:background .2s}
  .switch .trk:before{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background:#fff;top:2px;left:2px;transition:transform .2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
  .switch input:checked + .trk{background:var(--brand)}
  .switch input:checked + .trk:before{transform:translateX(16px)}

  .kv{display:grid;grid-template-columns:repeat(2,1fr);gap:12px 20px}
  .kv .item{display:flex;gap:8px;font-size:13.5px}
  .kv .item .k{color:var(--muted);flex:0 0 84px}
  .kv .item .v{font-weight:600}

  .auth-card{max-width:420px;margin:60px auto;text-align:center}

  .badge-import{background:var(--advanced-bg);color:var(--advanced);font-size:11px;padding:2px 8px;border-radius:20px;font-weight:600}

  /* ===== 收据 ===== */
  .receipt-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:10px}
  .receipts{display:flex;flex-direction:column;gap:0;align-items:center}
  /* 两联合并为一张票据：第一张去底边框底圆角，第二张去顶边框顶圆角 */
  #receiptSheet .receipt.no-break{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;box-shadow:none}
  #receiptSheet .receipt:not(.no-break){border-top:none;border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}
  .receipt{
    width:760px;background:#fff;color:var(--print-ink);padding:22px 30px;border:1px solid #d8d8d8;border-radius:6px;
    box-shadow:0 2px 10px rgba(0,0,0,.06);font-family:"KaiTi","STKaiti","Kai",-apple-system,"Microsoft YaHei",sans-serif;
  }
  .receipt .r-reprint{text-align:center;font-size:13px;font-weight:700;color:#000;margin-bottom:5px;letter-spacing:2px}
  .receipt .r-prepaid{display:inline-block;font-size:13px;font-weight:700;color:#000;border:1px solid #000;border-radius:4px;padding:1px 6px;margin-left:8px;vertical-align:middle;letter-spacing:1px}
  .receipt .r-title{text-align:center;font-size:24px;font-weight:700;letter-spacing:10px;margin-bottom:14px}
  .receipt .r-head{display:flex;justify-content:space-between;font-size:13.5px;margin-bottom:6px;gap:20px}
  .receipt .r-head .cell{display:flex;gap:6px;align-items:center}
  .receipt .r-head .cell b{font-weight:700}
  .receipt .r-head .cell b.r-owner{font-weight:900;font-size:17px;letter-spacing:1px}
  .receipt .r-sub{font-size:13px;color:#444;margin-bottom:10px}
  .receipt table{width:100%;border-collapse:collapse;font-size:13.5px}
  .receipt table th,.receipt table td{border:1px solid #aaa;padding:7px 10px;text-align:center}
  .receipt table th{background:#f2f2f2;font-weight:700}
  .receipt table td.pj{text-align:left}
  .receipt table td.num{font-variant-numeric:tabular-nums}
  .receipt .r-total{display:flex;justify-content:space-between;font-size:14.5px;font-weight:700;margin-top:10px;padding:0 4px}
  .receipt .r-foot{display:flex;justify-content:space-between;margin-top:16px;font-size:12.5px;color:#333}
  .receipt .r-foot .item{display:flex;flex-direction:column;gap:2px}
  .receipt .r-foot .sig{margin-top:18px;font-size:12.5px;color:#333}
  .receipt .r-note{font-size:11px;color:#777;margin-top:10px}
  .receipt .r-code{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:700;color:#333;margin-top:5px}
  .receipt .r-code .rc-op{font-weight:700;margin-left:8px}
  .receipt .r-code .rc-val{letter-spacing:2px}
  .receipt .r-footer-text{font-size:12.5px;color:#333;margin-top:5px;white-space:pre-wrap;word-break:break-word;line-height:1.6;text-align:left}
  .receipt .edit-amt{width:92px;border:1px solid #c9c9c9;border-radius:4px;padding:4px 6px;text-align:right;font-size:13px}
  .receipt .edit-num{width:78px;border:1px solid #c9c9c9;border-radius:4px;padding:4px 6px;text-align:center;font-size:13px}
  .receipt .edit-amt::-webkit-inner-spin-button,.receipt .edit-amt::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
  .receipt .edit-amt{-moz-appearance:textfield;appearance:textfield}
  .receipt .edit-date{width:108px;border:1px solid #c9c9c9;border-radius:4px;padding:4px 6px;font-size:12px}
  .receipt .edit-note{display:inline-block;color:var(--accent);font-size:11px;margin-left:6px}
  .receipt .per-month{display:block;font-size:10px;color:var(--muted);font-weight:400}
  .receipt .auto-amt{font-weight:700}
  .receipt .edit-date-cell{display:inline-block;border-bottom:1px dashed var(--accent);color:var(--brand);cursor:pointer;padding:0 2px;min-width:66px}
  .dm-row{display:flex;align-items:center;gap:12px}
  .dm-row label{width:34px;flex:0 0 34px;font-weight:600;font-size:13px;color:var(--muted)}
  .dm-row .input{flex:1}

  /* ===== 打印（80mm 小票） ===== */
  @media print{
    @page{size:80mm auto;margin:0}
    body{background:#fff}
    .edit-note{display:none !important}
    body *{visibility:hidden !important}
    #receiptSheet,#receiptSheet *{visibility:visible !important}
    #receiptSheet{position:absolute;left:0;top:0;width:100%;padding:0;margin:0}
    /* 批量打印：隐藏其他元素（display:none不占空间），只显示 batchPrintArea */
    body.print-batch > *:not(#batchPrintArea){display:none !important}
    body.print-batch #batchPrintArea{display:block !important;position:static !important;width:100%;padding:0;margin:0}
    body.print-batch #batchPrintArea,body.print-batch #batchPrintArea *{visibility:visible !important}
    body.print-batch #batchPrintArea .batch-receipt-group{page-break-after:always}
    body.print-batch #batchPrintArea .batch-receipt-group:last-child{page-break-after:auto}
    .receipt{
      width:78mm;margin:0 auto;padding:2mm 1mm 4mm;box-shadow:none;border:none;border-radius:0;
      font-family:"KaiTi","STKaiti",-apple-system,"Microsoft YaHei",sans-serif;
      page-break-after:always;min-height:0;
    }
    #receiptSheet .receipt.no-break{padding-bottom:0}
    #receiptSheet .receipt:not(.no-break){padding-top:0;margin-top:0;padding-bottom:var(--footer-space,10mm)}
    .receipt:last-child{page-break-after:auto}
    .receipt .r-title{font-size:22pt !important;font-weight:800 !important;letter-spacing:4px;margin-bottom:3mm}
    .receipt .r-head{font-size:18pt !important;font-weight:700;display:grid;grid-template-columns:1fr 1fr;gap:0.5mm 1mm;margin-bottom:1.5mm;letter-spacing:-0.5px}
    .receipt .r-head .cell b.r-owner{font-weight:900 !important;font-size:26pt !important;letter-spacing:1px}
    .receipt .r-head .cell{white-space:nowrap;overflow:hidden;text-overflow:clip}
    .receipt table{font-size:18pt !important;font-weight:700;width:100%;table-layout:fixed;border-collapse:collapse}
    .receipt table th,.receipt table td{font-size:18pt !important;padding:1.5mm 0.5mm;border:1.5px solid #000;font-weight:700;line-height:2.2;vertical-align:middle;overflow:hidden}
    .receipt table col.c1{width:28%}
    .receipt table col.c2{width:25%}
    .receipt table col.c3{width:25%}
    .receipt table col.c4{width:22%}
    .receipt table th:nth-child(1),.receipt table td:nth-child(1){text-align:center;white-space:normal;word-break:break-all;line-height:1.8;font-weight:700}
    .receipt table th:nth-child(2),.receipt table td:nth-child(2){text-align:center;white-space:nowrap;font-size:14pt !important;font-weight:700}
    .receipt table th:nth-child(3),.receipt table td:nth-child(3){text-align:center;white-space:nowrap;font-size:14pt !important;font-weight:700}
    .receipt table th:nth-child(4),.receipt table td:nth-child(4){text-align:center;white-space:nowrap;font-weight:700;font-variant-numeric:tabular-nums}
    .receipt table td.num{white-space:nowrap;text-align:center;font-weight:700;font-variant-numeric:tabular-nums}
    .receipt .r-total{font-size:18pt !important;font-weight:700;margin-top:2.5mm;white-space:nowrap;overflow:hidden}
    .receipt .edit-amt,.receipt .edit-date,.receipt .edit-num{border:none;background:transparent;padding:0;width:100%;font-size:18pt !important;font-weight:700}
    .receipt .edit-date-cell{border:none;color:#000;cursor:default;min-width:0;font-weight:700;font-size:18pt !important}
    .receipt .r-foot{font-size:18pt !important;font-weight:700;margin-top:3mm;display:flex;justify-content:space-between;gap:1mm;letter-spacing:-0.5px}
    .receipt .r-foot .item{white-space:nowrap;overflow:hidden;text-overflow:clip}
    .receipt-toolbar,.receipt-banner{display:none !important}
    .receipt .r-note{display:none}
    .receipt .r-code{font-size:18pt !important;font-weight:700;margin-top:1.5mm;text-align:center}
    .receipt .r-footer-text{white-space:pre-wrap;word-break:break-word;line-height:1.6;text-align:left;font-weight:700}
    .receipt .per-month{display:none !important}
    .receipt .pj{font-weight:700}
    .receipt .num{font-weight:700}
  }
  /* ===== 位图打印渲染版式：等同 80mm 小票机打印（供 html2canvas 离屏渲染） ===== */
  .bitmap-print{background:#fff}
  .bitmap-print .edit-note{display:none !important}
  .bitmap-print .receipts{display:flex;flex-direction:column;align-items:center;gap:0}
  .bitmap-print .receipt{
    width:72mm;margin:0 auto;padding:2mm 1mm 4mm;box-shadow:none;border:none;border-radius:0;
    font-family:"KaiTi","STKaiti",-apple-system,"Microsoft YaHei",sans-serif;
    page-break-after:always;min-height:0;
  }
  .bitmap-print .receipt.no-break{padding-bottom:0}
  .bitmap-print .receipt:not(.no-break){padding-top:0;margin-top:0;padding-bottom:var(--footer-space,10mm)}
  .bitmap-print .receipt:last-child{page-break-after:auto}
  .bitmap-print .receipt .r-title{font-size:22pt !important;font-weight:800 !important;letter-spacing:4px;margin-bottom:3mm}
  .bitmap-print .receipt .r-head{font-size:18pt !important;font-weight:700;display:grid;grid-template-columns:1fr 1fr;gap:0.5mm 1mm;margin-bottom:1.5mm;letter-spacing:-0.5px}
  .bitmap-print .receipt .r-head .cell b.r-owner{font-weight:900 !important;font-size:26pt !important;letter-spacing:1px}
  .bitmap-print .receipt .r-head .cell{white-space:nowrap;overflow:hidden;text-overflow:clip}
  .bitmap-print .receipt table{font-size:18pt !important;font-weight:700;width:100%;table-layout:fixed;border-collapse:collapse}
  .bitmap-print .receipt table th,.bitmap-print .receipt table td{font-size:18pt !important;padding:1.5mm 0.5mm;border:1.5px solid #000;font-weight:700;line-height:2.2;vertical-align:middle;overflow:hidden}
  .bitmap-print .receipt table col.c1{width:28%}
  .bitmap-print .receipt table col.c2{width:25%}
  .bitmap-print .receipt table col.c3{width:25%}
  .bitmap-print .receipt table col.c4{width:22%}
  .bitmap-print .receipt table th:nth-child(1),.bitmap-print .receipt table td:nth-child(1){text-align:center;white-space:normal;word-break:break-all;line-height:1.8;font-weight:700}
  .bitmap-print .receipt table th:nth-child(2),.bitmap-print .receipt table td:nth-child(2){text-align:center;white-space:nowrap;font-size:14pt !important;font-weight:700}
  .bitmap-print .receipt table th:nth-child(3),.bitmap-print .receipt table td:nth-child(3){text-align:center;white-space:nowrap;font-size:14pt !important;font-weight:700}
  .bitmap-print .receipt table th:nth-child(4),.bitmap-print .receipt table td:nth-child(4){text-align:center;white-space:nowrap;font-weight:700;font-variant-numeric:tabular-nums}
  .bitmap-print .receipt table td.num{white-space:nowrap;text-align:center;font-weight:700;font-variant-numeric:tabular-nums}
  .bitmap-print .receipt .r-total{font-size:18pt !important;font-weight:700;margin-top:2.5mm;white-space:nowrap;overflow:hidden}
  .bitmap-print .receipt .edit-amt,.bitmap-print .receipt .edit-date,.bitmap-print .receipt .edit-num{border:none;background:transparent;padding:0;width:100%;font-size:18pt !important;font-weight:700}
  .bitmap-print .receipt .edit-date-cell{border:none;color:#000;cursor:default;min-width:0;font-weight:700;font-size:18pt !important}
  .bitmap-print .receipt .r-foot{font-size:18pt !important;font-weight:700;margin-top:3mm;display:flex;justify-content:space-between;gap:1mm;letter-spacing:-0.5px}
  .bitmap-print .receipt .r-foot .item{white-space:nowrap;overflow:hidden;text-overflow:clip}
  .bitmap-print .receipt .r-note{display:none}
  .bitmap-print .receipt .r-code{font-size:18pt !important;font-weight:700;margin-top:1.5mm;text-align:center}
  .bitmap-print .receipt .r-footer-text{white-space:pre-wrap;word-break:break-word;line-height:1.6;text-align:left;font-weight:700}
  .bitmap-print .receipt .per-month{display:none !important}
  .bitmap-print .receipt .pj{font-weight:700}
  .bitmap-print .receipt .num{font-weight:700}
  /* 交账清单打印 */
  body.print-settlement @page{size:A4;margin:15mm}
  body.print-settlement{background:#fff}
  body.print-settlement *{visibility:hidden !important}
  body.print-settlement #settlementPrint,body.print-settlement #settlementPrint *{visibility:visible !important}
  body.print-settlement #settlementPrint{display:block !important;position:absolute;left:0;top:0;width:100%;padding:0;margin:0}
  .settlement-doc{font-family:"Microsoft YaHei",-apple-system,sans-serif;color:#1d2b29;padding:0 10mm}
  .settlement-doc h1{text-align:center;font-size:22px;margin:0 0 6px;letter-spacing:4px}
  .settlement-doc .sub{text-align:center;font-size:12px;color:#5d6d6a;margin-bottom:16px}
  .settlement-doc .meta{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:12px;padding:8px 12px;background:#f5f7f6;border-radius:6px}
  .settlement-doc table{width:100%;border-collapse:collapse;font-size:11.5px;margin-bottom:14px}
  .settlement-doc table th{background:#e8efed;padding:7px 6px;border:1px solid #c5d0cd;text-align:center;font-weight:700}
  .settlement-doc table td{padding:6px;border:1px solid #d5ddd9;text-align:center}
  .settlement-doc table td.num{text-align:right;font-variant-numeric:tabular-nums}
  .settlement-doc table tfoot td{background:#f0f5f3;font-weight:700}
  .settlement-doc .summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
  .settlement-doc .summary .box{border:1px solid #d5ddd9;border-radius:6px;padding:10px;text-align:center}
  .settlement-doc .summary .box .lbl{font-size:11px;color:#5d6d6a}
  .settlement-doc .summary .box .val{font-size:18px;font-weight:800;margin-top:4px}
  .settlement-doc .sign{display:flex;justify-content:space-between;margin-top:30px;font-size:13px}
  .settlement-doc .sign div{border-bottom:1px solid #999;min-width:140px;text-align:center;padding-bottom:4px}
  .settlement-doc .adv-idx{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:#e8f0fc;color:#3b7dd8;font-size:12px;font-weight:700}
  .settlement-doc .adv-ticket{font-family:"Courier New",monospace;font-weight:700;color:#1d2b29;border-left:2px solid #c5d0cd}

  /* 人员管理 */
  .user-row{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:var(--line-soft);border-radius:8px}
  .user-info{display:flex;align-items:center;gap:8px;font-size:13.5px}
  .user-role{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:700}
  .user-role.role-admin{background:#e8f5ee;color:#0e6357}
  .user-role.role-cashier{background:#fff3e0;color:#b07624}
  .user-current{font-size:11px;color:var(--brand);font-weight:700}
  .user-actions{display:flex;gap:6px}

  .dm-single-ro{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--line-soft);border-radius:7px;font-size:13.5px}
  .dm-single-ro b{color:var(--brand);font-size:15px}
  .dm-single-none{color:#999}
  .dm-tag{font-size:11px;color:var(--muted);background:#fff;padding:2px 8px;border-radius:10px;border:1px solid var(--line)}

  /* 统计明细 */
  .stat-detail td{white-space:nowrap;font-size:12.5px}
  .stat-detail .stat-hit{font-weight:700}
  .stat-detail .stat-hit.paid{background:var(--paid-bg);color:var(--paid)}
  .stat-detail .stat-hit.unpaid{background:var(--unpaid-bg);color:var(--unpaid)}
  .stat-detail .stat-hit.advanced{background:var(--advanced-bg);color:var(--advanced)}
  .stat-detail .stat-hit.settled{background:var(--settled-bg);color:var(--settled)}
  .stat-detail .stat-sub{background:var(--line-soft);font-weight:700}
  .stat-detail tfoot td{background:#f0f5f3;font-weight:700;border-top:2px solid var(--brand)}

  /* ===== 数据核对 ===== */
  .dc-alert{border-left:4px solid var(--brand);margin-bottom:16px;padding:14px 18px;font-size:13px;line-height:1.9}
  .dc-alert-hd{font-size:14px;margin-bottom:4px}
  .dc-alert .c-warn{color:var(--accent)}
  .dc-alert-tip{color:var(--muted);font-size:12px;margin-top:4px}
  .dc-scroll{overflow:auto;max-height:calc(100vh - 260px)}
  .dc-table{border-collapse:collapse;width:max-content;min-width:100%}
  .dc-table th,.dc-table td{border:1px solid var(--line);padding:6px 8px;font-size:12px;vertical-align:top;text-align:left;white-space:nowrap}
  .dc-table th{background:#f0f5f3;position:sticky;top:0;z-index:2;font-weight:700}
  .dc-table td.dc-door{font-weight:700}
  .dc-table td.dc-cell{min-width:118px;line-height:1.55}
  .dc-single{color:var(--brand);font-weight:700}
  .dc-range{color:var(--muted);font-size:11px}
  .dc-exp{color:#8a6d1a;font-size:11px}
  .dc-ok{color:var(--brand);font-weight:700}
  .dc-bad{color:var(--danger);font-weight:700}
  .dc-none{color:#999}
  .dc-st{display:block;font-size:11px;color:var(--muted);border-top:1px dashed var(--line);margin-top:3px;padding-top:2px}

  /* ===== 移动端适配（≤820px） ===== */
  /* ===== 手机适配 ===== */
  @media (max-width:820px){
    #app{min-width:0}
    .btn-menu{display:flex}
    .sidebar{
      position:fixed;left:0;top:0;transform:translateX(-100%);transition:transform .25s ease;height:100vh;z-index:120;
    }
    .sidebar.open{transform:translateX(0)}
    #sidebarMask{
      display:block;position:fixed;inset:0;background:rgba(13,30,27,.45);z-index:110;opacity:0;pointer-events:none;transition:opacity .25s;
    }
    #sidebarMask.show{opacity:1;pointer-events:auto}
    /* 顶部栏：高度自适应，按钮换行不重叠 */
    .topbar{height:auto;padding:8px 12px;gap:8px;flex-wrap:wrap;align-items:flex-start}
    .topbar .crumb{font-size:14px;order:1;flex:1;min-width:0}
    .topbar .actions{order:2;width:100%;gap:6px;flex-wrap:wrap;justify-content:flex-start}
    .topbar .actions .btn.sm{font-size:14px;padding:8px 10px;min-height:40px;flex:1;min-width:80px}
    .topbar .actions .btn.sm svg{width:14px;height:14px}
    .topbar .actions .btn.sm .t{display:none} /* 手机端按钮只显示图标，避免文字溢出 */
    #communityBadge{min-width:70px !important;font-size:13px !important;padding:5px 8px !important;flex:1;min-width:80px}
    #operatorBadge{font-size:13px;padding:4px 8px;flex:1;min-width:80px;text-align:center}
    #btnLogout{font-size:14px;padding:8px 10px;flex:1;min-width:60px}
    .content{padding:12px}
    .stat-grid{grid-template-columns:1fr;gap:8px;margin-bottom:16px}
    .stat-card{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 10px;padding:10px 12px;overflow:hidden}
    .stat-card .lbl{font-size:14px;flex:0 0 auto}
    .stat-card .val{font-size:18px;margin-top:0}
    .stat-card .hint{font-size:12.5px;line-height:1.5;margin-top:0;flex:1 1 auto;min-width:0}
    .donut-legend .li{font-size:14px}
    .bar-row .bl,.bar-row .bv{font-size:14px}
    .grid-2,.grid-3{grid-template-columns:1fr}
    .fee-grid{grid-template-columns:repeat(2,1fr)}
    .toolbar .input{min-width:0}
    /* 保留原版收据手机样式，确保打印不溢出 */
    .receipt{width:100%;padding:14px 10px}
    .receipt .r-title{font-size:20px}
    .receipt.no-break{page-break-after:auto !important}
    .receipt table{width:100%;font-size:13px}
    .receipt table th,.receipt table td{padding:8px 5px}
    .receipt table th:nth-child(2),.receipt table th:nth-child(3),.receipt table td:nth-child(2),.receipt table td:nth-child(3){font-size:12px}
    /* 手机端预览：眉头（抬头区）与可修改框不溢出票面 */
    .receipt .r-head{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px;font-size:14px;justify-content:flex-start}
    .receipt .r-head .cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
    .receipt table{table-layout:fixed}
    .receipt table col.c1{width:20%}
    .receipt table col.c2{width:24%}
    .receipt table col.c3{width:26%}
    .receipt table col.c4{width:30%}
    .receipt .edit-amt,.receipt .edit-num{width:100%;min-width:0;max-width:100%;box-sizing:border-box}
    .receipt .edit-date-cell{min-width:0;max-width:100%}
    .receipt .r-total{flex-wrap:wrap;white-space:normal;word-break:break-all}
    /* 手机端：票据页可编辑输入框加大（方便年龄大/视力弱用户点按输入） */
    .receipt .edit-amt{width:110px;font-size:15px;padding:8px 8px;min-height:44px;box-sizing:border-box}
    .receipt .edit-num{width:96px;font-size:15px;padding:8px 8px;min-height:44px;box-sizing:border-box}
    .receipt .edit-date-cell{font-size:15px;min-height:42px;padding:4px 2px;min-width:0;display:inline-flex;align-items:center;line-height:1.2;word-break:break-all}
    .receipt .edit-note{font-size:13px;margin-left:4px}
    .receipt input{font-size:16px}
    .auth-card{margin:24px auto}
    .kv{grid-template-columns:1fr 1fr}
    .donut-wrap{justify-content:center}
    .receipt-toolbar .btn{font-size:14px;padding:10px 14px;min-height:44px}
    .dc-table th,.dc-table td{font-size:12.5px;padding:7px 7px}
    /* 手机端：界面字体整体加大（适合年龄偏大用户） */
    .content{font-size:15px}
    .topbar .crumb{font-size:15px}
    .card-hd h3{font-size:17px}
    .card-hd .desc{font-size:13px}
    .pill{font-size:12px}
    /* 按钮触摸区域增强 */
    .btn{min-height:42px;font-size:14px}
    .btn.sm{min-height:38px;font-size:13px}
    .input{font-size:15px;min-height:42px}
    select.input{min-height:42px}
    .toolbar{flex-wrap:wrap;gap:8px}
    .toolbar .input{flex:1;min-width:110px}
    .toolbar .btn{min-height:42px;font-size:14px}
    .modal{width:94vw;max-width:94vw;max-height:88vh;overflow-y:auto}
    #statusSearchResults,#statusSearchResults [data-rec-id]{font-size:14px}
    #reprintLogBox{font-size:13px}
    /* 数据维护编辑弹窗：手机版费用明细竖排卡片（不横向滑动） */
    .m-fee-edit-card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px;margin-bottom:10px}
    .m-fee-edit-name{font-weight:700;font-size:15px;margin-bottom:8px}
    .m-fee-edit-fields{display:flex;flex-wrap:wrap;gap:8px}
    .m-fee-edit-fields label{flex:1 1 45%;display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted);min-width:0}
    .m-fee-edit-fields label .input,.m-fee-edit-status select{width:100%;min-width:0;min-height:42px;font-size:15px}
    .m-fee-edit-status{margin-top:8px}
    .m-fee-edit-status label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}
    /* 手机版：验证码使用记录竖排卡片（不横向滑动） */
    .m-vc-log{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px;margin-bottom:8px;font-size:13px}
    .m-vc-log-hd{font-weight:700;margin-bottom:6px;display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap}
    .m-vc-log-row{display:flex;gap:6px;align-items:center;margin-bottom:6px;flex-wrap:wrap}
    .m-vc-log-row span{color:var(--muted);font-size:12.5px}
    .m-vc-log-row b{font-size:14px}
    .m-vc-log-sub{color:var(--muted);font-size:12px;line-height:1.6}
    /* 手机版：设置页/弹窗内表格固定列宽+自动换行，避免横向滑动 */
    #settingsWrap table.tbl,.modal table.tbl{table-layout:fixed;word-break:break-all}
    #backupListBox>div{flex-wrap:wrap;gap:6px}
  }
  /* ===== 手机卡片视图（登录设备=手机时使用；电脑版原界面不受影响） ===== */
  .m-list{display:block}
  .m-card{background:#fff;border:1px solid var(--line-soft);border-radius:12px;padding:12px 14px;margin-bottom:10px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
  .m-card-hd{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
  .m-card-hd .mt{font-size:17px;font-weight:700}
  .m-card-hd .ms{color:var(--muted);font-size:14px}
  .m-card-sub{font-size:14px;color:var(--muted);margin-top:5px}
  .m-card-amt{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-top:9px;flex-wrap:wrap}
  .m-card-amt .big{font-size:19px;font-weight:700;color:var(--accent)}
  .m-card-amt .sub{font-size:13px;color:var(--muted)}
  .m-card-ops{display:flex;gap:8px;margin-top:11px}
  .m-card-ops .btn{flex:1;justify-content:center;display:flex;align-items:center;min-height:44px;font-size:15px}
  .m-detail{margin-top:9px;border-top:1px dashed var(--line);padding-top:9px}
  .m-detail.open{display:block}
  .m-fee-grid{display:grid;grid-template-columns:1fr;gap:8px}
  .m-fee-row{background:var(--line-soft);border-radius:8px;padding:9px 10px}
  .m-fee-row .fn{font-weight:600;font-size:14.5px;display:flex;justify-content:space-between;gap:6px;align-items:center}
  .m-fee-row .fd{font-size:13.5px;color:var(--muted);margin-top:3px}
  .m-fee-row .fa{font-size:15px;font-weight:700;margin-top:4px}
  .m-status-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
  .m-status-row .pill{font-size:12.5px}
  .m-chk{display:flex;align-items:center;gap:8px;margin-bottom:8px}
  .m-chk input{width:22px;height:22px;flex-shrink:0}
  .m-chk span{font-size:15px}
  .m-note{font-size:13.5px;color:var(--muted);margin:10px 2px}
  .m-verify-row{display:flex;justify-content:space-between;gap:8px;font-size:14px;padding:7px 0;border-bottom:1px solid var(--line-soft)}
  .m-verify-row:last-child{border-bottom:none}
  .m-verify-row .ok{color:var(--paid);font-weight:700}
  .m-verify-row .bad{color:#d4380d;font-weight:700}
  .m-verify-row .none{color:var(--muted)}
  @media (max-width:480px){
    .m-card{padding:11px 12px}
    .m-card-amt .big{font-size:18px}
  }
  @media (max-width:480px){
    .stat-grid{grid-template-columns:1fr 1fr}
    .fee-grid{grid-template-columns:1fr}
    .kv{grid-template-columns:1fr}
  }

  /* ===== 登录界面 ===== */
  .login-mask{position:fixed;inset:0;background:linear-gradient(135deg,#0e6357 0%,#1a8a75 50%,#0e6357 100%);display:flex;align-items:center;justify-content:center;z-index:9999}
  .login-mask.hidden{display:none}
  .login-box{background:#fff;border-radius:16px;padding:36px 32px;width:340px;box-shadow:0 20px 60px rgba(0,0,0,.3);text-align:center}
  .login-logo{width:64px;height:64px;background:linear-gradient(135deg,#0e6357,#1a8a75);border-radius:16px;display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
  .login-box h2{margin:0 0 4px;font-size:20px;color:#1d2b29}
  .login-sub{margin:0 0 24px;font-size:13px;color:var(--muted)}
  .login-field{text-align:left;margin-bottom:14px}
  .login-field label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:5px}
  .login-field .input{width:100%}
  .login-btn{width:100%;padding:11px;font-size:15px;margin-top:6px}
  .login-tip{margin:14px 0 0;font-size:11.5px;color:#aaa}
