:root{
  --navy:#1E2761; --navy2:#2b3a86; --ink:#1f2733; --muted:#6b7280;
  --line:#e4e7ee; --bg:#f4f6fb; --card:#fff; --ok:#0f7b3f; --warn:#b8860b;
  --danger:#b4232a; --chip:#eef1f9;
  --sidebar-width:156px;
  /* 由 base.html 按实际导航高度同步；租户端没有后台顶栏时保持 0。 */
  --table-sticky-top:0px;
}

/* Activation and record actions keep the next step visible without crowding mobile. */
.setup-heading{display:flex;justify-content:space-between;align-items:start;gap:12px;flex-wrap:wrap}
.setup-heading h1{margin-bottom:3px}
.setup-picker{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:14px 0}
.setup-picker select{min-width:180px;max-width:100%}
.setup-project{margin:14px 0;color:var(--muted)}
.setup-steps{list-style:none;display:grid;gap:12px;padding:0;margin:18px 0;max-width:780px}
.setup-step{display:flex;gap:14px;align-items:start;padding:17px;background:var(--card);border:1px solid var(--line);border-radius:12px}
.setup-step h2{font-size:17px;margin:0 0 4px}.setup-step p{margin:0 0 8px;color:var(--muted)}
.setup-marker{flex:0 0 30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--navy);color:#fff;font-weight:700}
.setup-step.is-done .setup-marker{background:var(--ok)}
.setup-entry{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 16px;margin-bottom:18px;background:#f6f8fd;border:1px solid var(--line);border-radius:10px}
.setup-entry p{margin:2px 0 0}
.record-more-actions{position:relative;margin-left:auto}
.record-more-actions>summary{list-style:none;cursor:pointer}.record-more-actions>summary::-webkit-details-marker{display:none}
.record-more-menu{position:absolute;right:0;top:calc(100% + 5px);z-index:30;width:min(260px,90vw);padding:7px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(20,30,70,.17)}
.record-more-menu a,.record-more-menu button{display:block;width:100%;padding:10px 12px;text-align:left;background:none;border:0;border-radius:6px;color:var(--ink);font:inherit;cursor:pointer}
.record-more-menu a:hover,.record-more-menu button:hover{background:#f2f4fa;text-decoration:none}
.record-more-menu .record-menu-danger{color:var(--danger)}
.record-more-menu form{margin:0}
.file-selection{display:block;margin-top:4px;color:var(--ok);font-size:12px;overflow-wrap:anywhere}
@media(max-width:640px){.setup-step{padding:14px}.record-more-actions{margin-left:0}}

/* 月结核对中心：状态优先、任务入口紧跟问题；窄屏改成单列。 */
.month-close-filter{display:flex;align-items:end;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.month-close-filter label{display:grid;gap:5px;min-width:190px}
.month-close-verdict{display:flex;align-items:center;gap:16px;padding:18px 20px;border-radius:12px;margin:14px 0 20px;border:1px solid}
.month-close-verdict.ready{background:#edf8f0;border-color:#9dcea8;color:#245d31}
.month-close-verdict.blocked{background:#fff1ef;border-color:#e8aaa3;color:#8a2720}
.month-close-verdict h2,.month-close-verdict p{margin:2px 0}
.verdict-icon{display:grid;place-items:center;width:44px;height:44px;flex:0 0 44px;border-radius:50%;background:#a42d22;color:#fff;font-size:25px;font-weight:800}
.month-close-verdict.ready .verdict-icon{background:#276536}
.month-close-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.month-close-summary article{display:grid;gap:8px}
.month-close-summary strong{font-size:22px;font-variant-numeric:tabular-nums}
.month-close-summary dl{display:grid;grid-template-columns:1fr auto;gap:4px 10px;margin:0;font-size:13px}
.month-close-summary dt{color:var(--muted)}.month-close-summary dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}
.month-close-checks{display:grid;gap:10px}.close-check{padding:0;overflow:hidden}
.close-check-title{display:flex;align-items:center;gap:12px;padding:14px 16px}.close-check-title h3,.close-check-title p{margin:0}
.close-status{min-width:52px;text-align:center;padding:5px 8px;border-radius:999px;font-size:12px;font-weight:700}
.close-blocking .close-status{background:#fde3df;color:#a42d22}.close-warning .close-status{background:#fff0c8;color:#805c00}.close-passed .close-status{background:#dff1e3;color:#276536}
.close-issues{border-top:1px solid var(--line)}.close-issue{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:12px 16px;border-top:1px solid var(--line)}
.close-issue:first-child{border-top:0}.close-issue p{margin:3px 0 0;font-size:13px;color:var(--muted)}
.month-close-rule{margin-top:16px}
.month-close-confirm{border-left:4px solid #8b95a7;margin-top:14px}
.month-close-confirm.close-state-confirmed{border-left-color:#2d7d46;background:#f6fbf7}
.month-close-confirm.close-state-waiting_review{border-left-color:#d49b16;background:#fffaf0}
.month-close-confirm.close-state-stale{border-left-color:#bd2d25;background:#fff6f5}
.month-close-confirm .section-head{align-items:center}.month-close-confirm h2{margin:6px 0 2px}
.month-close-confirm details{margin-top:10px}.month-close-confirm summary{cursor:pointer;color:#273474;font-weight:600}
@media(max-width:760px){.section-head.month-close-head{display:block}.month-close-head>.actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:10px}.month-close-head>.actions .btn{padding:8px 4px;text-align:center;font-size:12px;min-width:0}.month-close-filter{display:grid}.month-close-filter label{min-width:0}.month-close-filter input[type=month]{width:100%;min-width:0}.month-close-summary{grid-template-columns:1fr}.close-issue{align-items:flex-start;flex-direction:column}.close-issue .btn{width:100%;text-align:center}.month-close-verdict{align-items:flex-start}.month-close-confirm .section-head{display:block}.month-close-confirm .actions{margin-top:10px}}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",Segoe UI,Roboto,Helvetica,Arial,sans-serif;
  color:var(--ink);background:var(--bg);font-size:14px;line-height:1.5}
a{color:var(--navy2);text-decoration:none}
a:hover{text-decoration:underline}

/* 桌面应用框架：顶部只放全局动作，左侧承载业务模块。 */
.topbar{display:flex;align-items:center;gap:12px;background:var(--navy);color:#fff;
  padding:0 16px;min-height:52px;position:sticky;top:0;z-index:20;flex-wrap:nowrap}
.brand{flex:0 0 calc(var(--sidebar-width) - 16px)}.brand a{color:#fff;font-weight:700;font-size:16px;white-space:nowrap}
.global-tools{display:flex;align-items:center;gap:5px;white-space:nowrap}
.global-tools .task-link,.quick-create>summary{display:block;color:#e3e8f8;padding:6px 9px;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;list-style:none}
.global-tools .task-link:hover,.global-tools .task-link.on,.quick-create[open]>summary,.quick-create>summary:hover{background:rgba(255,255,255,.14);color:#fff;text-decoration:none}
.quick-create{position:relative}.quick-create>summary::-webkit-details-marker{display:none}
.quick-create-menu{position:absolute;top:38px;right:0;width:250px;padding:8px;background:#fff;border:1px solid #dce1ec;border-radius:11px;box-shadow:0 12px 32px rgba(14,22,58,.22);z-index:30}
.quick-create-menu>strong{display:block;padding:5px 8px 7px;color:#8a92a5;font-size:10px;letter-spacing:.08em}
.quick-create-menu a{display:block;padding:8px;border-radius:8px;color:var(--ink);white-space:normal}
.quick-create-menu a:hover{background:#f0f3f9;text-decoration:none}.quick-create-menu b{display:block;color:var(--navy);font-size:13px}.quick-create-menu small{display:block;color:#7a8295;font-size:11px;margin-top:1px}
.sidebar{position:fixed;left:0;top:var(--table-sticky-top);bottom:0;width:var(--sidebar-width);z-index:18;overflow-y:auto;padding:10px 9px 18px;background:#fff;border-right:1px solid #dce1ec;box-shadow:3px 0 14px rgba(26,35,79,.04);scrollbar-width:thin}
.nav{display:flex;flex-direction:column;gap:3px}
.nav-primary{display:flex;flex-direction:column;gap:3px;padding-bottom:8px;margin-bottom:5px;border-bottom:1px solid #e6e9f0}
.nav-primary a{display:block;background:transparent}
.nav-primary a b{display:block;color:inherit}.nav-primary a small{display:block;color:#8a92a5;font-size:10.5px;font-weight:400;margin-top:1px;line-height:1.35}
.nav-primary a.on small{color:#59617a}
.nav a{color:#47516a;padding:8px 10px;border-radius:7px;font-size:13.5px}
.nav a:hover{background:#f0f3f9;text-decoration:none;color:var(--navy)}
.nav a.on{background:#e9edfa;color:var(--navy);font-weight:700}
/* 分组导航：组名是链接，右边箭头也是键盘/点击入口。桌面子菜单采用 QuickBooks 式
   右侧浮层；hover 时主导航完全不动，短延迟过滤路过，稍迟收起方便移入浮层。
   「更多」只收低频且不涉及钱的功能；会算钱、每期都要做的必须有自己的顶级组
   —— 水电抄表当年藏在抽屉里，整套功能建好了一张表都没人建。 */
.navgrp{position:relative;width:100%}
.navgrp>.navgrp-top{display:flex;align-items:center;gap:2px;width:100%;font-weight:600;border-radius:7px}
.navgrp>.navgrp-top>.navgrp-name{flex:1;min-width:0}
.navgrp-caret{flex:none;background:none;border:0;padding:8px 9px;border-radius:7px;cursor:pointer;
  color:inherit;font-size:12px;line-height:1;opacity:.55;transform:rotate(-90deg);transition:transform .12s ease}
.navgrp-caret:hover{opacity:1;background:#e6eaf6}
.navgrp-caret:focus-visible{outline:2px solid var(--navy);outline-offset:1px}
.navgrp.preview>.navgrp-top>.navgrp-caret{transform:none}
.navgrp.on>.navgrp-top{background:var(--navy)}
.navgrp.on>.navgrp-top>.navgrp-name,.navgrp.on>.navgrp-top>.navgrp-name:hover{background:transparent;color:#fff}
.navgrp.on>.navgrp-top>.navgrp-caret{color:#fff;opacity:.8}
.navgrp.on>.navgrp-top>.navgrp-caret:hover{background:rgba(255,255,255,.18)}
.navgrp-menu{display:none;position:static;margin:3px 0 6px 9px;padding:2px 0 2px 7px;border-left:2px solid #e5e9f2}
.navgrp.on>.navgrp-menu{display:block}
.navflyout-title{display:none}
.navgrp-menu a{display:block;color:#566079;padding:6px 7px;white-space:normal;font-size:12.5px}
.navgrp-menu a:hover,.navgrp-menu a.on{background:#f0f2f9;color:var(--navy);text-decoration:none}
.navgrp-menu a small{display:block;color:#8a92a5;font-size:10.5px;font-weight:400;margin-top:1px;line-height:1.35}
.navgrp-menu a:hover small,.navgrp-menu a.on small{color:#59617a}
.utility-menu{min-width:0}.utility-menu a{padding:6px 7px}
/* 有 JS 的桌面端一律用右侧浮层；无 JS 仍退回「当前模块就地展开」。 */
@media(min-width:1101px){
  .nav.nav-js .navgrp>.navgrp-menu{display:none}
  .nav.nav-js .navgrp.preview>.navgrp-menu{display:block;position:fixed;
    top:var(--nav-flyout-top,var(--table-sticky-top));left:calc(var(--sidebar-width) - 9px);
    width:260px;max-height:calc(100vh - var(--table-sticky-top) - 12px);overflow-y:auto;
    margin:0;padding:7px;background:#fff;border:1px solid #dce1ec;border-radius:10px;
    box-shadow:0 12px 30px rgba(14,22,58,.18);z-index:40}
  .nav.nav-js .navflyout-title{display:block;padding:5px 8px 7px;color:#303a57;
    font-size:12px;font-weight:800;letter-spacing:.06em;border-bottom:1px solid #edf0f6;margin-bottom:3px}
  .nav.nav-js .navgrp-menu a{padding:7px 8px;border-radius:7px}
}
.navmenu-label{padding:9px 7px 3px;color:#9097aa;font-size:9.5px;font-weight:800;letter-spacing:.08em}
.navmenu-label:first-child{padding-top:4px}
.navtoggle{display:none;background:rgba(255,255,255,.16);color:#fff;border:none;border-radius:8px;
  padding:5px 12px;font-size:18px;line-height:1;cursor:pointer}
.mobile-search-toggle{display:none;background:rgba(255,255,255,.16);color:#fff;border:0;border-radius:8px;font-size:22px;line-height:1}
.who{margin-left:auto;color:#c9d2f0;font-size:13px;display:flex;align-items:center;gap:8px;white-space:nowrap}
.who .logout{color:#ffd7d7;margin-left:4px}
.sidebar-mask{display:none}
.badge{font-size:11px;padding:2px 8px;border-radius:10px}
.badge.staff{background:#2e7d32;color:#fff}
.badge.viewer{background:#8a6d1a;color:#fff}

/* 手机端把登录后的「后台外壳」改成自身可滚动的内层容器。
   iOS Chrome 会让 window/document 的滚动越过内容底部约半屏且停住不回弹（scrollTop 超出
   scrollHeight-clientHeight，visualViewport 被顶下去），页尾因此拖出一大段可滚动的空白；
   Safari 无此问题。把滚动收进 body 内层容器后，浏览器地址栏那套越界滚动不再作用，
   滚动被内容高度夹住，页尾空白消失。sticky 顶栏、fixed 侧栏/悬浮球不受影响。 */
@media(max-width:720px){
  .recon2>.rec-left .rs-tag,.recon2>.rec-left .rs-amt,.recon2>.rec-left .rs-who,.recon2>.rec-left .rec-diff{display:none}
  .receipt-state{padding:12px}
  .receipt-metadata summary{margin-top:0;min-height:44px;display:flex;align-items:center}
  html:has(body.app-body){height:100%;overflow:hidden}
  body.app-body{height:100vh;height:100dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}
}
.wrap{max-width:1180px;margin:20px auto;padding:0 16px}
.app-body .wrap{width:calc(100vw - var(--sidebar-width) - 40px);max-width:1560px;margin:20px 20px 24px calc(var(--sidebar-width) + max(20px,calc(50vw - 874px)))}
/* 数据表页放宽：正文页保持 1180（长行文字不好读），但 11 列的账单表在
   1180 里会溢出，钉右的操作列就会盖住状态列。宽屏本来就有空间，用起来。 */
.wrap.wide{max-width:min(1600px,calc(100vw - 32px))}
.app-body .wrap.wide{max-width:none}
h1{font-size:22px;margin:0 0 4px;color:var(--navy)}
h2{font-size:16px;margin:22px 0 10px;color:var(--navy)}
.sub{color:var(--muted);margin:0 0 18px}
.row{display:flex;gap:16px;flex-wrap:wrap}
.right{margin-left:auto}

/* flash */
.flash{padding:10px 14px;border-radius:8px;margin-bottom:16px;font-weight:500}
.flash.ok{background:#e6f4ea;color:var(--ok);border:1px solid #b6dfc2}
.flash.err{background:#fbe9e9;color:var(--danger);border:1px solid #efc2c4}

/* cards */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px}
.card .k{color:var(--muted);font-size:13px}
.card .v{font-size:26px;font-weight:700;color:var(--navy);margin-top:4px}
.card .v.small{font-size:20px}
.card .foot{color:var(--muted);font-size:12px;margin-top:6px}
.card.alert .v{color:var(--danger)}
.card.good .v{color:var(--ok)}

/* panel */
.panel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:16px}
.panel h3{margin:0 0 12px;font-size:15px;color:var(--navy)}
.empty-state{text-align:left;background:linear-gradient(180deg,#fff,#f7f9fd)}
.empty-state b{display:block;color:var(--navy);font-size:15px;margin-bottom:4px}

/* task-first dashboard */
.taskhub{background:linear-gradient(135deg,#fff7e6,#eef4ff 58%,#fff);border:1px solid #d8deee;
  border-radius:16px;padding:16px 18px;margin-bottom:18px;box-shadow:0 4px 18px rgba(30,39,97,.06)}
.taskhub-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.taskhub h2{margin:0 0 2px}
.taskgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.taskcard{display:block;background:rgba(255,255,255,.86);border:1px solid rgba(207,212,226,.9);
  border-radius:13px;padding:13px 14px;color:var(--ink);text-decoration:none;transition:.15s}
.taskcard:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(30,39,97,.12);text-decoration:none}
.taskcard b{display:block;color:var(--navy);font-size:15px;margin-bottom:4px}
.taskcard span{display:block;color:var(--muted);font-size:12.5px;line-height:1.45}
.taskcard.hot{border-color:#b6dfc2;background:#f2fbf5}
.taskcard.warn{border-color:#f4d5a5;background:#fff8eb}
.guide-prompt{margin:-6px 0 18px;padding:11px 13px;border:1px solid #d8deee;border-radius:11px;background:#f7f9ff}
.guide-prompt summary{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:14px}.guide-prompt>div{padding-top:9px}.guide-prompt p{margin:0 0 8px;color:var(--muted);font-size:13px}
.guide-prompt b{color:var(--navy);margin-right:8px}.guide-prompt span{color:var(--muted);font-size:13px}
.record-nav{display:flex;gap:7px;flex-wrap:wrap;margin:-6px 0 14px}.record-nav a{padding:5px 9px;border:1px solid var(--line);border-radius:99px;background:#fff;color:var(--navy2);font-size:12px;font-weight:700;text-decoration:none}.record-nav a:hover{background:#f3f6ff}
.next-step-card{margin:0 0 14px;padding:14px 16px;border:1px solid #d7deec;border-left:4px solid var(--navy2);border-radius:12px;background:linear-gradient(135deg,#fff,#f7f9ff)}.next-step-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;color:var(--muted);font-size:11px}.next-step-body{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:8px}.next-step-body small{color:var(--muted)}.next-step-body h2{margin:1px 0 3px;font-size:17px}.next-step-body p{margin:0;color:var(--muted);font-size:13px}.flow-chip{display:inline-block;padding:3px 7px;border-radius:99px;background:#edf1f8;color:#58647d;font-weight:800}.flow-pending,.flow-confirm,.flow-billing,.flow-allocation,.flow-review{background:#fff1df;color:#925b0c}.flow-done{background:#eaf7ed;color:#26713b}.flow-void{background:#f1f1f1;color:#666}.work-progress{display:grid;grid-template-columns:auto repeat(4,minmax(0,1fr));gap:7px;align-items:stretch;margin:0 0 14px}.work-progress>b{display:flex;align-items:center;padding:8px;color:var(--navy);font-size:12px}.work-progress>span{display:grid;grid-template-columns:25px 1fr;align-items:center;padding:8px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:12px;font-weight:700}.work-progress i{grid-row:1/3;width:20px;height:20px;display:grid;place-items:center;border-radius:50%;background:#edf1f8;color:#69718a;font-style:normal}.work-progress small{font-size:10px;color:var(--muted);font-weight:400}.work-progress .done i{background:#dff3e4;color:#26713b}.work-progress .current{border-color:#e2b96f;background:#fff9ed}.record-history>summary{cursor:pointer;color:var(--navy)}.record-history[open]>summary{margin-bottom:12px}

/* 岗位首页：同一账本按职责给入口，不另算一套经理/董事数字。 */
.role-home{margin:0 0 18px;padding:16px 18px;border:1px solid #d8deee;border-radius:14px;background:linear-gradient(135deg,#fff,#f2f5ff)}
.role-home-head{display:flex;align-items:center;justify-content:space-between;gap:18px}.role-home-head h2{margin:2px 0 3px;font-size:19px}.role-home-head p{margin:0;color:var(--muted)}
.role-kicker{color:var(--navy2);font-size:11px;font-weight:800;letter-spacing:.08em}
.role-lanes,.cashflow-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:13px}
.role-lanes a,.cashflow-links a{display:block;padding:11px 12px;border:1px solid #e0e4ef;border-radius:10px;background:#fff;color:var(--ink);text-decoration:none}
.role-lanes a:hover,.cashflow-links a:hover{border-color:#aeb9da;box-shadow:0 3px 10px rgba(30,39,97,.08)}
.role-lanes b,.cashflow-links b{display:block;color:var(--navy);margin-bottom:2px}.role-lanes span,.cashflow-links span{display:block;color:var(--muted);font-size:12px}
.decision-strip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:10px}.decision-strip a{display:block;padding:10px 11px;border:1px solid #dce1ec;border-radius:10px;background:rgba(255,255,255,.8);color:var(--ink);text-decoration:none}.decision-strip a:hover{border-color:#aeb9da}.decision-strip span,.decision-strip small{display:block;color:var(--muted);font-size:11px}.decision-strip b{display:block;color:var(--navy);margin:3px 0;font-size:14px}.director-decisions{grid-template-columns:repeat(4,minmax(0,1fr))}
.director-home,.director-report-home{background:linear-gradient(135deg,#fff9eb,#f4f6ff);border-color:#e6d8b8}.cashflow-links{grid-template-columns:repeat(4,minmax(0,1fr))}
.staff-role-home{display:flex;align-items:center;justify-content:space-between;gap:18px}.staff-role-home h2{margin:2px 0 3px}.staff-role-home p{margin:0;color:var(--muted)}
.role-actions{display:flex;gap:7px;flex-wrap:wrap}.role-actions a{padding:6px 10px;border-radius:8px;background:#fff;border:1px solid #d8deee;font-weight:600;text-decoration:none}

/* user-friendly tax upload */
.ux-note{background:#fff8e1;border:1px solid #f3d68a;color:#634600;border-radius:12px;padding:10px 14px;margin-bottom:14px}
.tax-wizard{max-width:820px}
.modecards{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
.modecard{position:relative;border:1px solid var(--line);border-radius:14px;background:#fff;padding:14px 14px 14px 42px;
  cursor:pointer;transition:.15s;min-height:112px}
.modecard:hover{box-shadow:0 4px 14px rgba(30,39,97,.12)}
.modecard.selected{border-color:var(--navy);box-shadow:0 0 0 2px rgba(43,58,134,.10);background:#fbfcff}
.modecard input{position:absolute;left:15px;top:18px;transform:scale(1.15)}
.mode-title{display:block;color:var(--navy);font-weight:800;font-size:16px}
.mode-copy{display:block;color:var(--muted);font-size:12.5px;line-height:1.45;margin-top:5px}
.mode-pill{display:inline-block;margin-top:10px;background:var(--chip);color:var(--navy2);font-size:12px;padding:2px 8px;border-radius:10px}
.selected-mode{background:#eef4ff;color:var(--navy);border:1px solid #d8e1fb;border-radius:10px;padding:9px 11px;font-weight:700;margin-bottom:12px}
.upload-section{display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px}
.uploadbox{display:block;border:1.5px dashed #b8c2d9;border-radius:14px;background:#fbfcff;padding:15px 16px;cursor:pointer;transition:.15s}
.uploadbox:hover,.uploadbox.drag{border-color:var(--navy2);background:#f2f6ff}
.uploadbox.has-file{border-style:solid;border-color:#b6dfc2;background:#f2fbf5}
.upload-title{display:block;color:var(--navy);font-weight:700;margin-bottom:4px}
.upload-copy{display:block;color:var(--muted);font-size:12.5px;margin-bottom:10px}
.uploadbox input[type=file]{width:100%;font-size:13px}
.upload-file{display:inline-block;margin-top:8px;background:#fff;border:1px solid var(--line);border-radius:9px;padding:4px 8px;color:#41496a;font-size:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tax-preview{background:#f7f9fd;border:1px solid var(--line);border-radius:12px;padding:11px 12px;margin-bottom:12px}
.tax-preview b{color:var(--navy)}
.sticky-submit{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sticky-submit .btn:disabled{background:#aeb5c8;cursor:not-allowed}

/* money-action confirmation */
.confirm-box{background:#f7f9fd;border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:10px 0 12px}
.confirm-box b{color:var(--navy)}
.confirm-lines{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;margin-top:8px}
.confirm-lines span{background:#fff;border:1px solid #eef1f7;border-radius:8px;padding:5px 8px;font-size:12.5px;color:#41496a}

.boss-summary{border-radius:14px;padding:14px 16px;margin-bottom:14px;border:1px solid var(--line);background:#fff}
.boss-summary.ok{background:#f2fbf5;border-color:#b6dfc2}
.boss-summary.bad{background:#fff3f3;border-color:#efc2c4}
.boss-summary h2{margin:0 0 10px}
.boss-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:8px}
.boss-grid div{background:rgba(255,255,255,.75);border:1px solid rgba(228,231,238,.9);border-radius:10px;padding:9px 10px}
.boss-grid span{display:block;font-size:12px;color:var(--muted);margin-bottom:2px}
.boss-grid b{color:var(--navy)}

/* tables */
/* ⚠️勿加 overflow:hidden —— 它会截断 position:sticky 的操作列（钉不住右边）。
   圆角由四角单元格各自做。 */
table.grid{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:10px}
.grid tr:first-child th:first-child{border-top-left-radius:9px}
.grid tr:first-child th:last-child{border-top-right-radius:9px}
.grid tr:last-child td:first-child{border-bottom-left-radius:9px}
.grid tr:last-child td:last-child{border-bottom-right-radius:9px}
.grid th{background:#f0f2f9;color:#3a4256;text-align:left;font-weight:600;font-size:12.5px;padding:9px 7px;border-bottom:1px solid var(--line)}
.grid td{padding:9px 7px;border-bottom:1px solid var(--line);vertical-align:middle}
.grid tr:last-child td{border-bottom:none}
.grid tr:hover td{background:#fafbff}
.num{text-align:right;font-variant-numeric:tabular-nums}
/* ⚠️.grid th 的 text-align:left 特异度盖过 .num，数字列表头会左对齐而单元格右对齐。
   规范：表头对齐方式必须与列内容一致。 */
.grid th.num{text-align:right}
.tablewrap{overflow-x:auto}
/* 收款后保留清单位置时，实际保存结果和重复警告仍必须可见。 */
.utility-collection-list>.flash{position:sticky;top:calc(var(--table-sticky-top) + 8px);z-index:19}
.utility-collection-list .rowact{flex-wrap:wrap}
.dashboard-expiry-mobile{display:none}
.grid-sticky-shell{display:none;position:fixed;z-index:4;overflow:hidden;pointer-events:none;background:transparent}
.grid-sticky-shell.open{display:block}
.grid-sticky-shell .grid-sticky-clone-table{position:absolute!important;top:0!important;margin:0!important;border-radius:0!important;background:#fff}
.grid-sticky-shell .grid-sticky-clone-table th{position:static!important;top:auto!important}

/* chips / statuses */
.chip{display:inline-block;padding:2px 9px;border-radius:10px;font-size:12px;background:var(--chip);color:#41496a}
.s-unpaid{background:#fbeaea;color:var(--danger)}
.s-partial{background:#fdf0d9;color:var(--warn)}
.s-paid{background:#e6f4ea;color:var(--ok)}
.s-void{background:#eee;color:#888;text-decoration:line-through}
.s-active{background:#e6f4ea;color:var(--ok)}
.s-draft{background:#eef1f9;color:#41496a}
.s-expired{background:#f3e8d0;color:#8a6d1a}
.s-terminated{background:#eee;color:#888}
.overdue{color:var(--danger);font-weight:600}

/* buttons */
.btn{display:inline-block;background:var(--navy);color:#fff;border:none;border-radius:8px;
  padding:8px 14px;font-size:14px;cursor:pointer;font-family:inherit}
.btn:hover{background:var(--navy2);text-decoration:none;color:#fff}
.btn.sec{background:#fff;color:var(--navy);border:1px solid var(--navy)}
.btn.sec:hover{background:#f0f2f9}
.btn.sm{padding:5px 10px;font-size:13px}
.btn.danger{background:var(--danger)}
.btn.ghost{background:transparent;color:var(--navy2);padding:5px 8px}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}

/* 合同 → 账单 → 收款 → 人工核销 → 开票：五个模块是同一件事，不让员工跨页后失去上下文。 */
.revenue-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:7px;margin:0 0 14px}
.revenue-stage{display:flex;align-items:center;gap:8px;min-width:0;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:8px 10px;color:var(--ink);text-decoration:none}
.revenue-stage:hover{text-decoration:none;border-color:#aeb9da;background:#fbfcff}
.revenue-stage.current{border-color:var(--navy2);background:#eef2fd;box-shadow:inset 0 -3px 0 var(--navy2)}
.revenue-stage.muted{opacity:.55}
.revenue-no{display:flex;align-items:center;justify-content:center;flex:0 0 24px;height:24px;border-radius:50%;
  background:#e9edf8;color:var(--navy);font-size:12px;font-weight:800}
.revenue-stage.current .revenue-no{background:var(--navy);color:#fff}
.revenue-stage b,.revenue-stage small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.revenue-stage b{font-size:13px;color:var(--navy)}
.revenue-stage small{font-size:11px;color:var(--muted)}

/* 列表页筛选与空结果统一：输入区是一块，结果反馈是另一块。 */
.filterbar{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;padding:10px 12px}
.filter-summary{flex-basis:100%;color:var(--muted);font-size:12px;opacity:.9}
.contract-filter-actions{display:flex;align-items:center;gap:4px}
@media(max-width:720px){
  .filterbar:has(.contract-filter-field){display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:end;gap:12px 10px;padding:14px}
  .filterbar:has(.contract-filter-field) .contract-filter-field{grid-column:1/-1;min-width:0}
  .filterbar:has(.contract-filter-field) .contract-filter-field label{margin-bottom:6px}
  .filterbar:has(.contract-filter-field) .contract-filter-date{grid-column:auto}
  .filterbar:has(.contract-filter-field) .contract-filter-actions{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;margin-top:2px}
  .filterbar:has(.contract-filter-field) .contract-filter-actions .btn{min-height:44px;text-align:center}
  .filterbar:has(.contract-filter-field) .contract-filter-actions .btn[type=submit]{width:100%}
  .filterbar:has(.contract-filter-field) .filter-summary{grid-column:1/-1;padding-top:10px;border-top:1px solid var(--line);line-height:1.55}
}
.empty-cell{text-align:left!important;padding:22px 18px!important;white-space:normal!important}
.empty-cell b{display:block;color:var(--navy);font-size:14px;margin-bottom:3px}
.empty-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.status-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.status-tabs a{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:16px;
  background:#fff;padding:5px 11px;color:var(--navy2);font-size:13px;text-decoration:none}
.status-tabs a:hover{border-color:#aeb9da;background:#f7f9fd}
.status-tabs a.on{background:var(--navy);border-color:var(--navy);color:#fff}
.category-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  margin:0 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}
.category-bar .status-tabs{margin:0}
.category-help{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;color:var(--navy)}

@media(max-width:900px){
  .revenue-flow{grid-template-columns:repeat(5,minmax(142px,1fr));overflow-x:auto;padding-bottom:4px}
}
@media(max-width:1300px){
  .grid .bill-secondary{display:none}
}

/* forms */
form .field{margin-bottom:12px}
label{display:block;font-size:13px;color:#41496a;margin-bottom:4px}
input[type=text],input[type=password],input[type=number],input[type=date],select,textarea{
  width:100%;padding:8px 10px;border:1px solid #cfd4e2;border-radius:8px;font-size:14px;font-family:inherit;background:#fff}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--navy2);box-shadow:0 0 0 2px rgba(43,58,134,.12)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.hint{color:var(--muted);font-size:12px}
.lowconf input, input.lowconf{background:#fff8e1;border-color:#e0b400}
.lowconf-tag{color:#a07800;font-size:11px}
details.more{margin:10px 0;border:1px dashed #cfd4e2;border-radius:8px;padding:8px 12px}
details.more summary{cursor:pointer;color:var(--navy2);font-weight:500}

/* login */
.login-wrap{max-width:360px;margin:8vh auto;background:#fff;padding:28px;border-radius:14px;border:1px solid var(--line)}
.login-wrap h1{text-align:center}

/* dashboard grid map */
.gridmap{display:flex;flex-wrap:wrap;gap:6px}
.cell{width:64px;height:44px;border-radius:6px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;font-size:11px;color:#fff;text-decoration:none}
.cell small{opacity:.85;font-size:10px}
.c-normal{background:#9aa3b2}.c-rented{background:#2e7d32}.c-self{background:#3b6fb0}.c-maint{background:#c99a1e}
.legend{display:flex;gap:14px;font-size:12px;color:var(--muted);margin:8px 0}
.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-1px}

/* SaaS pilot UX: one readable action per row and errors that are easy to find. */
.flash.err:focus{outline:3px solid var(--danger);outline-offset:3px;scroll-margin-top:24px}
.confirm-card:has(.confirm-err){border-color:#e4a4a8}
.confirm-card .confirm-err{font-weight:700}
.task-card>a:hover,.task-card>a:focus-visible{background:#f6f8fd}
.setup-steps .setup-step>a,.setup-step a{font-weight:700;display:inline-block;padding:8px 0}
@media(max-width:640px){
  .task-card>a{display:grid;grid-template-columns:minmax(0,1fr);gap:3px;padding:12px 0}
  .task-card>a span{max-width:none;text-align:left}
  .setup-heading .btn{width:100%;text-align:center}
  .setup-picker{display:grid;grid-template-columns:1fr 1fr}
  .setup-picker label{grid-column:1/-1}.setup-picker select{min-width:0;width:100%}
  .setup-step h2{font-size:16px}
}
@media(prefers-reduced-motion:reduce){.upload-progress>span:after{animation:none;width:100%}}

/* misc */
.mini{font-size:12px;color:var(--muted)}
.kv{display:grid;grid-template-columns:120px 1fr;gap:6px 12px;font-size:14px}
.kv .k{color:var(--muted)}
.pill-row{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
.svgbar{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px}
.timeline{list-style:none;padding:0;margin:0}
.timeline li{padding:8px 0;border-bottom:1px solid var(--line);font-size:13px}
/* 操作轨迹（_trail.html）：时间靠左对齐成一列，眼睛顺着往下扫得到「几点做的」 */
.trail li{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}
.trail li:last-child{border-bottom:none}
.trail .tr-when{color:var(--muted);font-variant-numeric:tabular-nums;flex:0 0 118px}
.trail .tr-who{color:var(--navy)}
.trail .tr-act{background:var(--chip);color:var(--navy2);border-radius:6px;padding:1px 8px;font-size:12px}
.trail .tr-txt{color:var(--muted);flex:1 1 240px;word-break:break-word}
@media(max-width:640px){.trail .tr-when{flex-basis:100%}}
/* help link in top bar */
.help-link{color:#fff;background:rgba(255,255,255,.16);padding:3px 10px;border-radius:12px;font-size:12.5px}
.help-link:hover{background:rgba(255,255,255,.28);text-decoration:none;color:#fff}

/* onboarding checklist */
.onboard{background:linear-gradient(180deg,#fbfcff,#f2f5fd);border:1px solid #d5ddf3;border-radius:14px;padding:16px 18px;margin-bottom:18px}
.onboard-head{font-weight:700;color:var(--navy);margin-bottom:12px}
.onboard .steps{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.onboard .step{display:block;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 14px;text-decoration:none;color:var(--ink);position:relative;transition:box-shadow .15s}
.onboard .step:hover{box-shadow:0 3px 10px rgba(30,39,97,.12);text-decoration:none}
.onboard .step .num{display:inline-flex;width:22px;height:22px;border-radius:50%;background:var(--navy);color:#fff;align-items:center;justify-content:center;font-size:12px;font-weight:700;margin-bottom:6px}
.onboard .step b{display:block;color:var(--navy);margin-bottom:3px}
.onboard .step small{color:var(--muted);line-height:1.45}
.onboard .step.done{background:#f2faf5;border-color:#bfe3cc}
.onboard .step.done .num{background:var(--ok)}
.onboard .step.done b{color:var(--ok)}

/* 水电共用同一层上下文：先选总览 / 电费 / 水费，再看各自的业务步骤。 */
.utility-context{margin:6px 0 12px}
/* 流程步骤一排，右端挂「切到电费/水费 · 水电总览」小链接（原来的分段开关已删） */
.utility-flow{display:flex;align-items:stretch;gap:7px;margin:0}
.utility-stage{flex:1 1 0;display:grid;grid-template-columns:25px 1fr;grid-template-rows:auto auto;column-gap:8px;
  align-items:center;background:#fff;border:1px solid var(--line);border-radius:9px;padding:7px 9px;
  color:var(--ink);text-decoration:none;min-width:0}
.utility-side{display:flex;flex-direction:column;justify-content:center;gap:3px;padding:0 4px 0 8px;font-size:12px;white-space:nowrap}
.utility-side a{color:var(--muted);text-decoration:none}.utility-side a:first-child{color:var(--navy);font-weight:650}
.utility-side a:hover{text-decoration:underline}
@media (max-width:720px){.utility-flow{flex-wrap:wrap}.utility-stage{flex-basis:calc(50% - 4px)}.utility-side{flex-direction:row;gap:12px;padding:4px 2px}}
.utility-stage:hover{text-decoration:none;border-color:#aeb9da;box-shadow:0 3px 10px rgba(30,39,97,.08)}
.utility-stage>span{grid-row:1/3;display:flex;align-items:center;justify-content:center;width:23px;height:23px;
  border-radius:50%;background:#e9edf8;color:var(--navy);font-size:12px;font-weight:800}
.utility-stage>b{color:var(--navy);font-size:13px;white-space:nowrap}
.utility-stage>small{color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utility-stage.current{background:#f0f3fc;border-color:var(--navy2);box-shadow:inset 0 -3px 0 var(--navy2)}
.utility-stage.current>span{background:var(--navy);color:#fff}
.utility-links{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;margin:5px 3px 10px}
.utility-links a.on{font-weight:700;color:var(--navy)}

/* 水电工作台：两条现有业务并列，不把设置页伪装成日常工作。 */
.utility-choice{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:18px 0}
.utility-module{background:#fff;border:1px solid var(--line);border-radius:16px;padding:20px;box-shadow:0 4px 18px rgba(30,39,97,.05)}
.utility-module.electric{border-top:4px solid #d39517}
.utility-module.water{border-top:4px solid #3280b8}
.utility-module-title{display:flex;gap:13px;align-items:flex-start}
.utility-module-title h2{font-size:20px;margin:0 0 3px}
.utility-module-title p{color:var(--muted);font-size:13px;margin:0;min-height:40px}
.utility-icon{display:flex;align-items:center;justify-content:center;flex:0 0 42px;height:42px;border-radius:12px;background:#f2f4fa;font-size:21px}
.utility-status{display:grid;grid-template-columns:1fr 1fr;margin:18px 0;border:1px solid var(--line);border-radius:11px;overflow:hidden}
.utility-status>span{padding:11px 13px;display:flex;flex-direction:column;border-right:1px solid var(--line)}
.utility-status>span:last-child{border-right:0}
.utility-status b{font-size:18px;color:var(--navy)}
.utility-status small{color:var(--muted);font-size:11.5px}
.utility-primary{width:100%;text-align:center}
.utility-shortcuts{display:flex;gap:12px;flex-wrap:wrap;margin-top:12px;font-size:12.5px}
.utility-where h2{margin:0 0 12px}
.utility-where-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.utility-where-grid a{display:flex;flex-direction:column;padding:11px 12px;border:1px solid var(--line);border-radius:9px;text-decoration:none}
.utility-where-grid a:hover{background:#f7f9ff;border-color:#bfc8e1}
.utility-where-grid small{color:var(--muted);margin-top:2px}

/* 水费：设置方式先解释、抄表按用途分组、保存与出账明确拆成两步。 */
.water-mode-guide{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}
.water-mode-guide>div{background:#fff;border:1px solid var(--line);border-radius:11px;padding:12px;display:flex;flex-direction:column}
.water-mode-guide span{font-size:10.5px;color:#69718a;text-transform:uppercase}
.water-mode-guide b{color:var(--navy);margin:3px 0}
.water-mode-guide small{color:var(--muted);line-height:1.4}
.water-register{margin-bottom:12px}
.section-head,.water-group-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}
.section-head h2,.water-group-head h2{margin:0 0 2px}
.section-head p,.water-group-head p{margin:0}
.water-editor{margin-top:10px}
.water-scope-floor{background:#e8f3fb;color:#24648d}
.water-scope-contract{background:#ebf6ed;color:#297143}
.water-scope-deduction{background:#f4edf8;color:#765285}
.water-progress{display:grid;grid-template-columns:auto auto;column-gap:9px;min-width:250px;align-items:center;font-size:12.5px}
.water-progress span{color:var(--muted);font-size:12px;text-align:right}
.water-progress i{grid-column:1/3;height:5px;background:var(--line);border-radius:4px;overflow:hidden;margin-top:4px}
.water-progress em{display:block;height:100%;background:var(--ok)}
.water-step-title{display:flex;align-items:center;gap:10px;margin:14px 0 10px}
.water-step-title>span{display:flex;align-items:center;justify-content:center;min-width:30px;height:30px;padding:0 9px;border-radius:15px;background:var(--navy);color:#fff;font-weight:800;font-size:13px;letter-spacing:.2px}
.water-step-title>div{display:flex;flex-direction:column}.water-step-title b{color:var(--navy);font-size:16px}.water-step-title small{color:var(--muted)}
.water-post-action{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-top:10px;border-top:1px solid var(--line)}
.utility-bill-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}
.utility-bill-summary>div{background:#fff;border:1px solid var(--line);border-radius:11px;padding:14px;display:flex;flex-direction:column;text-align:center}
.utility-bill-summary small,.utility-bill-summary span{color:var(--muted)}
.utility-bill-summary b{font-size:22px;color:var(--navy)}
.utility-bill-summary b.ok{color:var(--ok)}
.utility-bill-summary .attention{border-left:4px solid var(--danger)}
.utility-bill-summary .attention b{color:var(--danger)}

/* 电表档案：首次批量建档与日常设备清单分开，不再在零数据时出现两份相同模板按钮。 */
.meter-coverage{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  background:#fff8e8;border:1px solid #efd8a4;border-left:5px solid #c58713;border-radius:12px;
  padding:14px 16px;margin-bottom:14px}
.meter-coverage>div:first-child{display:flex;align-items:center;gap:12px}
.meter-coverage p{margin:2px 0 0;color:var(--muted);font-size:12.5px}
.meter-coverage.complete{background:#f2faf5;border-color:#bfe3cc;border-left-color:var(--ok)}
.coverage-mark{display:flex;align-items:center;justify-content:center;flex:0 0 38px;height:38px;border-radius:50%;
  background:#fff;color:#8a5e08;border:1px solid #e3c986;font-size:16px;font-weight:800}
.meter-coverage.complete .coverage-mark{color:var(--ok);border-color:#9fd2b1}
.coverage-next{display:flex;align-items:flex-end;gap:6px;flex-direction:column}
.meter-import{border-color:#cdd5ec;padding:0;overflow:hidden}
.meter-import-head{padding:14px 16px 10px;background:#f7f9ff;border-bottom:1px solid var(--line)}
.meter-import-head h2{margin:0 0 3px;font-size:17px}
.meter-import-head p{margin:0;color:var(--muted);font-size:12.5px}
.meter-import-steps{display:grid;grid-template-columns:repeat(3,1fr)}
.meter-import-step{display:flex;align-items:flex-start;flex-direction:column;gap:7px;padding:15px 16px;
  border-right:1px solid var(--line);margin:0;min-width:0}
.meter-import-step:last-child{border-right:0}
.meter-import-step>b{color:var(--navy)}
.meter-import-step>small{color:var(--muted);line-height:1.45;min-height:36px}
.meter-import-step .step-no{display:flex;align-items:center;justify-content:center;width:24px;height:24px;
  border-radius:50%;background:var(--navy);color:#fff;font-size:12px;font-weight:800}
.meter-import-note{margin:0;padding:9px 16px;background:#fbfcff;border-top:1px solid var(--line)}
.meter-list-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-top:18px}
.meter-list-head h2{margin:0 0 2px}
.meter-list-head p{margin:0}
.empty-cell{text-align:center;padding:24px!important;color:var(--muted)}
.empty-cell b{color:var(--navy)}
.add-one{margin-top:14px;border-style:dashed}
.add-one summary{cursor:pointer;color:var(--navy)}
.add-one[open] summary{margin-bottom:14px}
.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;
  overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
button:disabled{opacity:.5;cursor:not-allowed}
.charge-amount:disabled,.charge-unit-price:disabled{background:#f1f3f7;color:#9aa1ad;cursor:not-allowed}

/* plain-language gloss */
.gloss{color:var(--muted);font-size:12.5px;background:#f6f8fd;border-left:3px solid #c7d2ee;padding:6px 10px;border-radius:0 6px 6px 0;margin:6px 0 12px}
abbr[title]{text-decoration:underline dotted;cursor:help}

/* help page */
.help-toc{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.help-toc a{background:var(--chip);padding:5px 12px;border-radius:14px;font-size:13px}
.help-q{font-weight:600;color:var(--navy);margin:14px 0 4px}
.help-step{display:flex;gap:10px;align-items:flex-start;margin:8px 0}
.help-step .n{flex:0 0 24px;height:24px;border-radius:50%;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}

/* expiry calendar */
.calwrap{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:8px}
.calbox{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.calhead{font-weight:600;color:var(--navy);text-align:center;margin-bottom:6px}
table.cal{border-collapse:collapse}
table.cal th{width:34px;height:26px;font-size:12px;color:var(--muted);font-weight:500;text-align:center}
table.cal td{width:34px;height:34px;text-align:center;vertical-align:middle;position:relative;border-radius:6px;font-size:13px;color:var(--ink)}
table.cal td.empty{background:transparent}
table.cal td.today{outline:2px solid var(--navy2);font-weight:700}
table.cal td.has-exp{background:#fbe9e9;color:var(--danger);font-weight:700;cursor:help}
table.cal td .expdot{position:absolute;top:1px;right:3px;background:var(--danger);color:#fff;font-size:9px;line-height:1;padding:1px 4px;border-radius:8px}

/* 房态图 / 剖面图 */
.timeaxis{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.timeaxis a{padding:3px 10px;border-radius:12px;background:var(--chip);font-size:13px}
.timeaxis a:hover{text-decoration:none}
.timeaxis a.on{background:var(--navy);color:#fff}
.c-vacant{background:#cbd2e0}
.c-reserved{background:#e59a2e}
.bldblock{margin-bottom:18px}
.bldhead{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.bldhead .rate{color:var(--muted);font-size:12.5px}
.floorrow{display:flex;gap:8px;align-items:stretch;margin-bottom:6px}
.floortag{flex:0 0 44px;display:flex;align-items:center;justify-content:center;background:#f0f2f9;border-radius:6px;font-size:12px;color:#41496a}
.rooms{display:flex;gap:6px;flex-wrap:wrap;flex:1}
.room{display:flex;flex-direction:column;justify-content:space-between;min-height:58px;padding:5px 8px;border-radius:8px;text-decoration:none;color:#fff;font-size:12px;overflow:hidden}
.room:hover{text-decoration:none;box-shadow:0 2px 8px rgba(30,39,97,.22)}
.room .rtop{display:flex;justify-content:space-between;align-items:center;gap:4px}
.room .rcode{font-weight:700}
.room .rmid{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room .rbot{font-size:11px;opacity:.92}
.room .rflags{display:flex;gap:3px;align-items:center}
.room .dot{color:#ff5a5a;font-size:13px;line-height:1}
.room .clk{font-size:11px}
.r-rented{background:#2e7d32}
.r-vacant{background:#eef1f6;color:#41496a;border:1px dashed #b9c1d6}
.r-vacant .rbot,.r-vacant .rmid{color:#6b7280}
.r-reserved{background:#e59a2e}
.r-self{background:#3b6fb0}
.r-maint{background:#c99a1e}
.r-makeready{background:#8a6fbf;color:#fff}.r-makeready .rbot,.r-makeready .rmid{color:#f0ebf7}
.c-makeready{background:#8a6fbf}
.addcell{display:inline-flex;align-items:center;justify-content:center;min-width:56px;height:56px;padding:0 8px;border:1px dashed #9aa3b2;border-radius:8px;color:#6b7280;font-size:12px;text-decoration:none;align-self:center}
.addcell:hover{border-color:var(--navy);color:var(--navy);background:#f4f6fb}
.fledit{margin-left:4px;font-size:11px;color:#9aa3b2;text-decoration:none;opacity:.7}
.fledit:hover{color:var(--navy);opacity:1}

/* 租户端 H5 */
.tbody{background:#f0f2f7}
.tapp{max-width:480px;margin:0 auto;min-height:100vh;min-height:100dvh;background:#f0f2f7;padding-bottom:64px}
.tbar{background:var(--navy);color:#fff;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:10}
.tbar .tbrand{font-weight:700}
.tbar .tunit{font-size:13px;opacity:.9}
.tmain{padding:14px}
.ttabs{position:fixed;bottom:0;left:0;right:0;max-width:480px;margin:0 auto;background:#fff;border-top:1px solid var(--line);display:flex;height:60px}
.ttabs a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;color:#8b93a7;text-decoration:none}
.ttabs a span{font-size:20px;line-height:1}
.ttabs a.on{color:var(--navy)}
.tcard{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:12px}
.tcard h3{margin:0 0 10px;font-size:15px;color:var(--navy)}
.tbig{font-size:30px;font-weight:800;color:var(--danger)}
.tbig.ok{color:var(--ok)}
.tgrid4{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.tentry{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;text-align:center;text-decoration:none;color:var(--ink)}
.tentry .ic{font-size:26px}
.tentry .lb{margin-top:6px;font-weight:600;color:var(--navy)}
.tbill{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}
.tbill:last-child{border-bottom:none}
.tlogin{max-width:360px;margin:12vh auto;background:#fff;padding:24px;border-radius:14px}

@media(max-width:640px){
  .grid2,.grid3{grid-template-columns:1fr}
  .kv{grid-template-columns:90px 1fr}
  .nav a{padding:6px 9px}
  .onboard .steps{grid-template-columns:1fr}
  .utility-choice,.utility-where-grid{grid-template-columns:1fr}
  .water-mode-guide{grid-template-columns:1fr 1fr}
  .utility-bill-summary{grid-template-columns:1fr}
  .utility-stage{padding:8px}
  .utility-links{align-items:flex-start;flex-wrap:wrap}
  .meter-import-steps{grid-template-columns:1fr}
  .meter-import-step{border-right:0;border-bottom:1px solid var(--line)}
  .meter-import-step:last-child{border-bottom:0}
  .coverage-next{align-items:flex-start}
  .room{width:auto!important;flex:1 1 44%;min-width:120px}
  .floortag{flex-basis:34px}
}

/* ---- 阶段4 通用补充 ---- */
.muted{opacity:.55}
.nowrap{white-space:nowrap}
.btn.xs{padding:3px 8px;font-size:12px}
.inline-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.reading-commandbar,.water-period-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:9px}
.reading-toolbar{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;margin:0}
.reading-filter{margin:0;font-size:11.5px;color:var(--muted)}
.reading-filter>span{display:block;margin:0 0 3px}
.reading-filter select{width:170px}.reading-filter .compact-date{width:148px}
.reading-toolbar-help{align-self:center;color:var(--muted);font-size:11.5px;white-space:nowrap}
.period-nav{display:inline-flex;align-items:center;gap:4px}
/* 筛选 + 状态条同一张卡：卡片竖排，状态条贴在筛选下面用一条细线隔开 */
.period-card{flex-direction:column;align-items:stretch;gap:0;padding:8px 10px 0}
.period-card .reading-toolbar{padding-bottom:8px}
.period-status{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 -10px;padding:7px 12px;border-top:1px solid var(--line);border-radius:0 0 10px 10px;background:#f8f9fd;font-size:13px}
.period-status.is-done{background:#f4faf6}
.ps-jump{color:#9a6600;text-decoration:underline dotted}
.ps-left{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0}
.ps-period{font-size:14px;color:var(--navy)}
.ps-bar{display:inline-block;width:90px;height:6px;background:var(--line);border-radius:4px;overflow:hidden}.ps-bar i{display:block;height:100%;background:var(--ok)}
.period-status .ps-item{color:var(--muted);white-space:nowrap}.period-status .ps-item b{color:var(--ink)}
.period-status .ps-item.is-warn,.period-status .ps-item.is-warn b{color:#9a6600}
.ps-hint{color:var(--muted);font-size:12px}
.period-status-nav{display:flex;gap:6px;margin-left:auto}
@media (max-width:720px){.period-status-nav{margin-left:0;width:100%}.period-status-nav .btn{flex:1;text-align:center}}
/* 水表页：一组一个 <details>，全部已出账的组默认收起；行压成一行 */
.water-reading-group{background:#fff;border:1px solid var(--line);border-radius:11px;padding:0;margin-bottom:8px}
.water-reading-group>summary{display:flex;align-items:center;gap:10px;padding:9px 14px;cursor:pointer;list-style:none}
.water-reading-group>summary::-webkit-details-marker{display:none}
.water-reading-group>summary::before{content:"▸";color:var(--muted);font-size:12px;width:10px}
.water-reading-group[open]>summary::before{content:"▾"}
.water-reading-group>summary b{color:var(--navy);font-size:15px}
.water-reading-group>summary .mini{color:var(--muted)}
.water-reading-group .tablewrap{padding:0 10px 8px}
.grid.compact th{padding:6px 7px}.grid.compact td{padding:5px 7px}
.water-reading-group input.reading-value{width:104px;padding:4px 7px}
.water-reading-group input.compact-date{width:132px;padding:4px 7px;font-size:13px}
.water-preview{margin-top:14px;border-top:4px solid #3280b8}
.water-preview>summary{display:flex;align-items:baseline;gap:10px;cursor:pointer;list-style:none;margin:-4px 0 6px}
.water-preview>summary::-webkit-details-marker{display:none}
.water-preview>summary b{color:var(--navy);font-size:16px}
.water-preview>summary::before{content:"▸";color:var(--muted);font-size:12px}
.water-preview[open]>summary::before{content:"▾"}
.water-preview-billed{margin-top:10px;border-top:1px dashed var(--line);padding-top:6px}
/* 抄表行按状态上色；:target 是从状态条点名跳过来的那一行 */
.grid tr.is-unread>td{background:#fffbea}
.grid tr.is-pending>td{background:#eef5fd}
.grid tr:target>td{background:#ffe9a8;transition:background .6s}
.tnum,.grid td.tnum{font-variant-numeric:tabular-nums}
/* 「去作废」只在指到那一行时露出，16 行已出账不必行行都挂一个链接 */
.row-hover-link{margin-left:6px;opacity:0;transition:opacity .15s}
tr:hover .row-hover-link,tr:focus-within .row-hover-link{opacity:1}
/* 保存条贴在窗口底部，填到一半不用翻到最下面 */
.water-save-bar{position:sticky;bottom:0;z-index:5;margin:6px -4px 0;padding:8px 10px;background:rgba(255,255,255,.96);border-top:1px solid var(--line);backdrop-filter:blur(4px)}
.warn-fold>summary{cursor:pointer;font-weight:500}.warn-fold ul{margin:6px 0 0;padding-left:18px;font-weight:400;font-size:12.5px}
.water-preview-billed>summary{cursor:pointer;color:var(--muted)}
.period-nav .btn.xs{padding:4px 8px;line-height:1;font-size:14px}
.reading-progress{display:grid;grid-template-columns:auto auto;column-gap:9px;min-width:250px;align-items:center;font-size:12.5px}
.reading-progress span{color:var(--muted);text-align:right}
.reading-progress i{grid-column:1/3;height:5px;background:var(--line);border-radius:4px;overflow:hidden;margin-top:4px}
.reading-progress em{display:block;height:100%;background:var(--ok)}
.reading-grid input.reading-value{width:96px;font-size:14px;padding:5px 7px}
.reading-grid input.compact-date{width:132px;padding:5px 7px;font-size:13px}
.meter-direct-entry{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;margin-top:10px;
  padding-top:10px;border-top:1px solid var(--line)}
.meter-direct-entry .reading-filter input[type=number]{width:126px}
.meter-direct-entry .reading-toolbar-help{margin-left:2px}
@media(max-width:640px){
  .water-period-bar,.reading-commandbar{align-items:stretch;flex-direction:column}
  .water-progress,.reading-progress{min-width:0}
  .reading-toolbar-help{white-space:normal}
  .meter-direct-entry{align-items:stretch}.meter-direct-entry .reading-filter input{width:100%}
}
/* 一排按钮。原来只在模板里写 class 却没有规则，靠 button 的行内默认排版凑合。 */
.btnrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.frow{display:flex;gap:18px;align-items:center;margin:8px 0;flex-wrap:wrap}
.chk{font-size:14px;color:var(--ink)}

/* ---- 阶段4 租户端 H5 ---- */
.tsec{font-weight:700;color:var(--navy);margin:16px 2px 6px;font-size:14px}
.tnote{background:#fff8e1;border:1px solid #ffe08a;border-radius:8px;padding:8px 10px;margin-top:8px;font-size:12px;color:#7a5b00;line-height:1.5}
.tag{display:inline-block;font-size:11px;padding:1px 6px;border-radius:6px;background:var(--chip);color:var(--navy2);vertical-align:middle;margin-left:4px}
.tag.ok{background:#e6f7ec;color:var(--ok)}
.tempty{text-align:center;color:var(--navy2);padding:22px;font-size:13px}
/* 账单卡：覆盖旧的 flex-row .tbill，改为堆叠卡片 */
.tbill{display:block;background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px}
.tbill-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.tbill-name{font-weight:600;color:var(--navy)}
.tbill-amt{font-weight:700;color:var(--danger);white-space:nowrap}
.tbill-amt.muted{color:var(--navy2);font-weight:600;opacity:1}
.tbill-sub{display:flex;justify-content:space-between;color:var(--navy2);font-size:12px;margin-top:3px;gap:8px}
.tbill-sub .overdue{color:var(--danger);font-weight:600}
.tbill.paid{opacity:.85}
.tbody-text{margin-top:6px;white-space:pre-wrap;color:var(--ink);font-size:14px;line-height:1.6}
.tlist{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:12px}
.trow{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink)}
.trow:last-child{border-bottom:none}
.trow .chev{color:#c2c7d4;font-size:18px}
.tcheck{display:block;background:#fff;border:1px solid var(--line);border-radius:10px;padding:11px 12px;margin-bottom:8px}
.tcheck input{margin-right:8px;transform:scale(1.2)}
.tcheck-body{display:inline-flex;justify-content:space-between;width:calc(100% - 26px);vertical-align:middle;gap:8px}

/* ---- 阶段5 物业 ---- */
.actions .sep{display:inline-block;width:1px;height:18px;background:var(--line);margin:0 4px;vertical-align:middle}
.photo-row{display:flex;gap:8px;flex-wrap:wrap}
.thumb{width:120px;height:90px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
table.weekcal td.free{background:#f7f9fc;height:30px}
table.weekcal td.booked{background:#e6eef7;color:var(--navy);font-size:11px;line-height:1.2;font-weight:600;border:1px solid #cdd9ea}
table.weekcal th{background:#f0f2f9;text-align:center;font-size:12px}
table.weekcal td{text-align:center;vertical-align:middle}

/* ==== 改进包A 房态图升级 ==== */
/* KPI 条 */
.kpibar{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin:12px 0}
.kpibar .kpi{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.kpibar .kpi.alert{border-color:#f0c2c4;background:#fdf4f4}
.kpibar .kv{font-size:20px;font-weight:800;color:var(--navy)}
.kpibar .kv .ku{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px}
.kpibar .kpi.alert .kv{color:var(--danger)}
.kpibar .kl{font-size:12px;color:var(--muted);margin-top:2px}
/* 视图切换条 */
.viewbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.viewtabs{display:flex;gap:4px;background:#eef1f9;border-radius:9px;padding:3px}
.viewtabs a{padding:6px 14px;border-radius:7px;font-size:14px;color:var(--navy2);text-decoration:none}
.viewtabs a.on{background:#fff;color:var(--navy);font-weight:700;box-shadow:0 1px 3px rgba(30,39,97,.12)}
.viewactions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
/* 图例2 + 筛选 + 时间轴 */
.mapctl{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:12px}
.legend2{display:flex;gap:14px;font-size:12.5px;color:#41496a;flex-wrap:wrap;align-items:center}
.legend2 span[data-f]{cursor:pointer;padding:2px 6px;border-radius:6px;user-select:none}
.legend2 span[data-f]:hover{background:#f0f2f9}
.legend2 span.sel{background:var(--navy);color:#fff}
.legend2 i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.c-reserved{background:#e59a2e}.c-expiring{background:#e59a2e}.c-overdue{background:#b4232a}
.filtrow{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
.filtrow .fl{font-size:13px;color:var(--muted)}
.filtrow select{padding:4px 6px;font-size:13px}
.axisrow{display:flex;align-items:center;gap:10px;margin-top:8px;flex-wrap:wrap}
.axisrow input[type=range]{flex:1;min-width:180px;max-width:420px;accent-color:var(--navy)}
.axisrow .axislbl{font-weight:700;color:var(--navy);font-size:13px;min-width:120px}
/* 单元格增强 */
.room{cursor:pointer}
.room .rbot{display:flex;justify-content:space-between;gap:4px;align-items:baseline}
.room .rarea{opacity:.9}
.room .rrent{font-weight:700}
.room.dim{opacity:.18;filter:grayscale(1)}
.room.has-exp{box-shadow:inset 0 -4px 0 #e59a2e}
.room.has-overdue{box-shadow:inset 0 -4px 0 #b4232a}
.room.has-exp.has-overdue{box-shadow:inset 0 -4px 0 #b4232a, inset 0 -8px 0 #e59a2e}
.badge{display:inline-flex;align-items:center;font-size:10px;line-height:1;padding:2px 4px;border-radius:4px;font-weight:700;color:#fff;margin-left:2px}
.badge.b-owe{background:#b4232a}
.badge.b-exp{background:#e59a2e}
/* 悬停提示 */
.roomtip{position:fixed;display:none;z-index:900;background:rgba(20,26,54,.95);color:#fff;font-size:12px;line-height:1.5;padding:6px 9px;border-radius:6px;max-width:280px;pointer-events:none;box-shadow:0 4px 14px rgba(0,0,0,.3)}
/* 侧滑抽屉 */
.drawer-mask{position:fixed;inset:0;background:rgba(20,26,54,.35);opacity:0;visibility:hidden;transition:.18s;z-index:950}
.drawer-mask.open{opacity:1;visibility:visible}
.drawer{position:fixed;top:0;right:0;width:360px;max-width:90vw;height:100vh;background:#fff;box-shadow:-4px 0 24px rgba(30,39,97,.18);transform:translateX(100%);transition:transform .2s;z-index:960;display:flex;flex-direction:column}
.drawer.open{transform:translateX(0)}
.drawer-hd{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line);font-weight:700;color:var(--navy);font-size:15px}
.drawer-x{background:none;border:none;font-size:24px;line-height:1;color:var(--muted);cursor:pointer;padding:0 4px}
.drawer-bd{padding:14px 16px;overflow-y:auto;flex:1}
.dkv{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid #f0f2f7;font-size:14px}
.dkv span{color:var(--muted)}
.dkv b{color:var(--ink);text-align:right}
.dkv b.od{color:var(--danger)}
.dsec{margin:14px 0 4px;font-weight:700;color:var(--navy);font-size:13px}
.dact{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
@media(max-width:820px){.kpibar{grid-template-columns:repeat(3,1fr)}}

/* ==== 改进包B 经营报表 ==== */
.barrow{display:grid;grid-template-columns:64px 1fr 130px;gap:10px;align-items:center;padding:5px 0}
.barrow .bl{font-size:12.5px;color:var(--muted);text-align:right}
.bartrack{background:#eef1f7;border-radius:5px;height:22px;position:relative;overflow:hidden}
.barfill{height:100%;background:var(--navy2);border-radius:5px}
.barfill.g{background:var(--ok)}
.barfill.o{background:#e59a2e}
.barfill.r{background:var(--danger)}
.barrow .bv{font-size:12.5px;color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}
.barrow.hi .barfill{background:var(--danger)}
.ratetag{font-weight:700}
.ratetag.g{color:var(--ok)}.ratetag.o{color:#b8860b}.ratetag.r{color:var(--danger)}
/* 经营月报 */
.mrpt{background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px;max-width:820px}
.mrpt h2{border-bottom:2px solid var(--navy);padding-bottom:6px;margin-top:20px}
.mrgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:12px 0}
.mrbox{border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.mrbox .mk{font-size:12px;color:var(--muted)}
.mrbox .mv{font-size:22px;font-weight:800;color:var(--navy);margin-top:2px}
.mrbox.alert .mv{color:var(--danger)}
.mrbox.good .mv{color:var(--ok)}
@media print{
  .nav,.brand,.actions,.logout,.help-link,.topbar,.sidebar,.sidebar-mask{display:none!important}
  body{background:#fff}
  .mrpt{border:none;max-width:100%}
  @page{margin:1.4cm}
}

/* ==== 改进包C 催缴分级 ==== */
.dtier{display:inline-block;padding:2px 8px;border-radius:6px;font-size:12px;font-weight:700;color:#fff;white-space:nowrap}
.dtier.t1{background:#c9a227}
.dtier.t2{background:#e59a2e}
.dtier.t3{background:#c0392b}
.dtier.t4{background:#7d1c1c}

/* ==== 设置·功能开关 ==== */
.setrow{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:10px 0;border-bottom:1px solid #f0f2f7}
.setrow:last-child{border-bottom:none}
.setlbl .sk{font-weight:600;color:var(--ink)}
.setctl select,.setctl input[type=text]{padding:6px 8px}
.switch{position:relative;display:inline-block;width:46px;height:26px}
.switch input{opacity:0;width:0;height:0}
.switch .slider{position:absolute;cursor:pointer;inset:0;background:#c7ccd8;border-radius:26px;transition:.2s}
.switch .slider:before{content:"";position:absolute;height:20px;width:20px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:.2s}
.switch input:checked+.slider{background:var(--ok)}
.switch input:checked+.slider:before{transform:translateX(20px)}

/* ==== AI 使用助手 ==== */
.ai-fab{position:fixed;right:20px;bottom:20px;z-index:940;background:var(--navy);color:#fff;border:none;border-radius:24px;padding:11px 18px;font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 4px 16px rgba(30,39,97,.32)}
.ai-fab:hover{background:var(--navy2)}
.ai-panel{position:fixed;right:20px;bottom:74px;z-index:945;width:370px;max-width:calc(100vw - 32px);height:520px;max-height:calc(100vh - 120px);background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 8px 32px rgba(30,39,97,.24);display:none;flex-direction:column;overflow:hidden}
.ai-panel.open{display:flex}
.ai-hd{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;background:var(--navy);color:#fff;font-weight:700}
.ai-x{background:none;border:none;color:#fff;font-size:22px;line-height:1;cursor:pointer}
.ai-msgs{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:10px;background:var(--bg)}
.ai-msg{max-width:85%;padding:9px 12px;border-radius:12px;font-size:14px;line-height:1.6;white-space:normal;word-break:break-word}
.ai-msg.bot{background:#fff;border:1px solid var(--line);color:var(--ink);align-self:flex-start;border-bottom-left-radius:3px}
.ai-msg.user{background:var(--navy2);color:#fff;align-self:flex-end;border-bottom-right-radius:3px}
.ai-dots{color:var(--muted)}
.ai-input{display:flex;gap:8px;padding:10px;border-top:1px solid var(--line);background:#fff;align-items:flex-end}
.ai-input textarea{flex:1;resize:none;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;font-family:inherit;line-height:1.4}

/* ---- AI 助手：建议提问 + 头部操作 ---- */
.ai-hd-actions{display:flex;gap:6px;align-items:center}
.ai-hd-actions .ai-x{font-size:12px;opacity:.9}
#aiNew,#aiDelete{white-space:nowrap}
.ai-privacy{padding:7px 11px;background:#fff8e8;border-bottom:1px solid #ead9a5;color:#66521b;font-size:11.5px;line-height:1.45}
.ai-source{margin-top:7px;color:var(--muted);font-size:11px}
.ai-links{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.ai-links a{display:inline-block;padding:3px 8px;border:1px solid #cbd4ea;border-radius:12px;background:#f7f9ff;color:var(--navy2);font-size:11.5px;text-decoration:none}
.ai-links a:hover{background:var(--navy);border-color:var(--navy);color:#fff}
.ai-rate{display:flex;align-items:center;gap:5px;margin-top:8px;padding-top:6px;border-top:1px solid #edf0f6;color:var(--muted);font-size:11px}
.ai-rate button{border:1px solid var(--line);border-radius:12px;background:#fff;padding:2px 7px;cursor:pointer}
.ai-rate button:hover{background:#f1f4fb}
.ai-rating-summary{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-bottom:12px}
.ai-suggest{padding:8px 10px;border-top:1px solid var(--line);background:#fafbff;display:flex;flex-direction:column;gap:6px}
.ai-suggest-hd{font-size:12px;color:var(--muted)}
.ai-chip{text-align:left;background:#fff;border:1px solid var(--line);border-radius:14px;padding:6px 11px;font-size:13px;color:var(--navy2);cursor:pointer;line-height:1.3}
.ai-chip:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.help-searchbox{position:sticky;top:54px;z-index:8;background:#fff;border-color:#cbd4ea}
.help-searchbox input{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-size:15px}

@media(max-width:520px){
  .ai-fab{right:10px;bottom:10px;width:48px;height:48px;padding:0;display:grid;place-items:center;border-radius:50%;font-size:20px}
  .ai-fab-label{display:none}
  .ai-panel{right:8px;bottom:66px;max-width:calc(100vw - 16px);height:calc(100vh - 86px);max-height:none}
  .ai-hd{padding:9px 10px;align-items:flex-start}
  .ai-hd-actions{gap:2px;flex-wrap:wrap;justify-content:flex-end}
  .ai-hd-actions .ai-x{font-size:11px;padding:2px 3px}
  .ai-msg{max-width:92%}
}

/* ==== 全站录入表单暂存（Odoo 云朵 / × 交互） ==== */
.form-draft-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0 10px;padding:7px 10px;background:#f7f9fd;border:1px solid var(--line);border-radius:9px;color:var(--muted);font-size:12px}
.form-draft-bar.warn{background:#fff8e8;border-color:#e7cf8b;color:#70591d}
.form-draft-bar.saved{background:#f2faf4;border-color:#b9ddc1;color:#246a37}
.draft-save,.draft-restore,.draft-discard{border:0;background:transparent;color:inherit;font:inherit;font-weight:700;cursor:pointer;padding:4px 7px;border-radius:6px}
.draft-save:hover,.draft-restore:hover,.draft-discard:hover{background:rgba(30,39,97,.08)}
.draft-save{font-size:13px;color:var(--navy2)}
.draft-discard{margin-left:auto;font-size:21px;line-height:1;padding:1px 7px}
.draft-file-note{flex-basis:100%;font-size:11px;color:var(--muted)}
@media(max-width:520px){.draft-discard{margin-left:0}.draft-state{flex:1;min-width:130px}}

/* ---- 收款核销（版式参考 Xero Find&Match + QuickBooks Receive Payment）---- */
/* 登记页先把水电入口说清楚；这里只决定下一页先看哪类账单，不是自动核销。 */
.payment-entry-panel,.payment-entry-notice{max-width:none}
.payment-entry-panel{padding:20px}
.payment-entry-notice.ok{border-left:4px solid #2d7d46;background:#f4faf5}
.payment-entry-notice.warn{border-left:4px solid #e0b400;background:#fffdf3}
.payment-entry-notice.danger{border-left:4px solid var(--danger);background:#fdf5f5}
.payment-entry-grid{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(380px,.88fr);gap:22px;align-items:start}
.payment-entry-core,.payment-entry-details{min-width:0}
.payment-entry-details{padding-left:22px;border-left:1px solid var(--line)}
.payment-entry-details .confirm-box{margin-top:18px}
.payment-purpose-box{border:1px solid var(--line);border-radius:12px;padding:11px 12px 12px;margin:0 0 14px;background:#f8f9fd}
.payment-purpose-box legend{padding:0 5px;font-size:13px;font-weight:700;color:var(--navy)}
.payment-purpose-box>p{margin:0 0 9px}
.payment-purpose-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.payment-purpose{display:flex;align-items:flex-start;gap:8px;border:1px solid #d8deed;border-radius:10px;
  background:#fff;padding:9px 10px;cursor:pointer;transition:border-color .12s,box-shadow .12s,background .12s}
.payment-purpose:hover{border-color:#aeb9da;box-shadow:0 2px 8px rgba(30,39,97,.06)}
.payment-purpose:has(input:checked){border-color:var(--navy2);box-shadow:0 0 0 2px rgba(49,67,143,.12)}
.payment-purpose.electric:has(input:checked){background:#f2f5ff}.payment-purpose.water:has(input:checked){background:#eefafa}
.payment-purpose input{margin-top:3px}.payment-purpose span,.payment-purpose small{display:block}
.payment-purpose b{font-size:13px;color:var(--navy2)}.payment-purpose small{margin-top:2px;font-size:11px;color:var(--muted)}
@media(max-width:980px){.payment-entry-grid{grid-template-columns:1fr}.payment-entry-details{padding:18px 0 0;border-left:0;border-top:1px solid var(--line)}}
.fee-focus-note{margin:0 0 10px;padding:8px 10px;border-left:4px solid var(--navy2);border-radius:8px;background:#f3f6ff;
  color:#41496a;font-size:12.5px}
.fee-filter-empty{margin:-2px 0 10px;padding:8px 10px;border-radius:8px;background:#fff8e9;color:#805e12}
/* 差额条：Xero 的做法是把「差额」摆在最显眼位置，颜色随状态变，逼人对到零。 */
.recon-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:var(--card);
  border:1px solid var(--line);border-left:4px solid var(--navy2);border-radius:12px;
  padding:12px 16px;margin-bottom:14px;position:sticky;top:56px;z-index:9;
  box-shadow:0 2px 10px rgba(30,39,97,.05)}
.recon-bar.done{border-left-color:var(--ok);background:#f4fbf6}
.recon-bar.bad{border-left-color:var(--danger);background:#fdf5f5}
.rb-cell{display:flex;flex-direction:column;gap:2px}
.rb-k{font-size:11.5px;color:var(--muted)}
.rb-v{font-size:19px;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums}
.rb-op{font-size:18px;color:var(--muted);font-weight:600}
.rb-diff .rb-v{font-size:22px}
.recon-bar.done .rb-diff .rb-v{color:var(--ok)}
.recon-bar.bad .rb-diff .rb-v{color:var(--danger)}
.rb-note{flex:1;min-width:200px;text-align:right;font-size:12.5px;color:var(--muted)}

/* 两种「金额对不上」的情形，直接写在页面上，员工不用记 */
.cases{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.case{background:#f6f8fd;border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  font-size:12.5px;line-height:1.7;color:#41496a}

/* QuickBooks 式对账表：Open Balance / Payment 两列高亮并排 */
table.recon th.hi,table.recon td.hi{background:#f7f9ff}
table.recon input[type=number]{width:110px;text-align:right;padding:5px 7px;border:1px solid var(--line);
  border-radius:6px;font-variant-numeric:tabular-nums}
table.recon input[type=number]:focus{outline:2px solid #c7d2ee;outline-offset:-1px}
/* 核销是本页主任务：两格固定在右边，横向滚动时也不能把「本次减免」裁掉。
   以前 1150px 左右的屏幕只露出减免输入框一条边，员工既看不到标题也不知道填什么。 */
table.recon{--recon-entry-width:132px}
table.recon .recon-entry{min-width:var(--recon-entry-width);width:var(--recon-entry-width)}
table.recon th.recon-entry small{display:block;margin-top:2px;color:var(--muted);font-size:10px;font-weight:400}
table.recon .recon-allocate,table.recon .recon-discount{position:sticky;z-index:2}
table.recon .recon-allocate{right:var(--recon-entry-width);box-shadow:-7px 0 10px -9px rgba(20,26,54,.45)}
table.recon .recon-discount{right:0;background:#fff}
table.recon th.recon-allocate,table.recon th.recon-discount{z-index:4;background:#f0f2f9}
table.recon th.recon-allocate{background:#f7f9ff}
table.recon tr.rowon td.recon-entry{background:#e9f0ff}
table.recon tr.rowbad td.recon-entry{background:#fdf0f0}
table.recon tr.totrow td.recon-entry{background:#f0f2f9}
table.recon .in-reason{width:100%;margin-top:5px;padding:4px 7px;border:1px solid var(--warn);
  border-radius:6px;font-size:12px}
table.recon tr.rowon td{background:#f3f7ff}
table.recon tr.rowon td.hi{background:#e9f0ff}
table.recon tr.rowbad td{background:#fdf0f0}
table.recon tr.totrow td{background:#f0f2f9;font-weight:600;border-top:2px solid var(--line)}
.recon-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
.fee-filters{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:0 0 10px}
.fee-filter{border:1px solid var(--line);border-radius:16px;background:#fff;color:var(--navy2);
  padding:5px 10px;font:inherit;font-size:12.5px;cursor:pointer}
.fee-filter:hover{background:#f7f9fd;border-color:#aeb9da}
.fee-filter.on{background:var(--navy);border-color:var(--navy);color:#fff}
.fee-chip{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:11px;
  background:#eef1f6;color:#4d566b;font-size:12px;white-space:nowrap}
.fee-chip.fee-electric{background:#edf2ff;color:#294a9b}
.fee-chip.fee-water{background:#e7f7f8;color:#15717a}
.fee-chip.fee-mixed{background:#f0eafe;color:#6941a5}
.fee-chip.fee-unallocated{background:#fff3dc;color:#8a5b00}
.payment-fees{white-space:normal!important;min-width:120px}
.payment-fees .fee-chip{margin:1px 2px 1px 0}
.bill-context{min-width:150px;max-width:230px;color:#41496a}
.bill-context span,.bill-context small{display:block;white-space:normal}
.bill-context small{margin-top:2px;color:var(--muted);font-size:11px;line-height:1.35}
table.recon tr.fee-row-electric:not(.rowon):not(.rowbad) td{background:#fbfcff}
table.recon tr.fee-row-water:not(.rowon):not(.rowbad) td{background:#f8fdfd}
.btn:disabled{opacity:.45;cursor:not-allowed}
.tag.warn{background:#fdf0d9;color:var(--warn)}

@media(max-width:760px){
  .payment-purpose-grid{grid-template-columns:1fr}
  .cases{grid-template-columns:1fr}
  .recon-bar{position:static;gap:10px;padding:10px 12px}
  .rb-v{font-size:16px}.rb-diff .rb-v{font-size:18px}
  .rb-note{text-align:left;flex-basis:100%}
  table.recon{--recon-entry-width:104px}
  table.recon input[type=number]{width:88px}
}

@media print{
  .topbar,.sidebar,.sidebar-mask,.no-print,.month-close-filter,.ai-fab,.ai-panel{display:none!important}
  .wrap{max-width:none!important;margin:0!important;padding:0!important}
  .panel,.month-close-verdict{box-shadow:none!important;break-inside:avoid}
  .month-close-checks{display:block}.close-check{margin-bottom:10px}
  .month-close-summary{grid-template-columns:repeat(4,1fr)!important}
  body{background:#fff;color:#111;font-size:11pt}
}

/* ---- 正式打印单据：催缴、收据、退租结算与交接共用一套 A4 口径 ---- */
.print-tip{max-width:720px;margin:0 auto 12px;padding:9px 12px;border:1px solid #d7deef;
  border-radius:9px;background:#f7f9ff;color:#4d566b;font-size:12.5px}
.print-tip b{color:var(--navy);margin-right:6px}
.print-sheet{max-width:720px;margin:0 auto 24px;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:30px;color:var(--ink)}
.print-sheet:last-of-type{margin-bottom:0}
.print-sheet h2{text-align:center;color:var(--navy);margin:0 0 4px;font-size:22px}
.print-sheet .print-org{text-align:center;color:var(--muted);margin-bottom:20px}
.print-sheet .print-lead{font-size:15px;line-height:1.75;margin:14px 0}
.print-sheet .print-amount{color:var(--danger);font-size:18px;white-space:nowrap}
.print-table{margin:14px 0;table-layout:fixed!important}
.print-table td,.print-table th{white-space:normal!important;overflow-wrap:anywhere}
.print-table .doc-no{width:21%}.print-table .doc-fee{width:18%}
.print-table .doc-period{width:23%}.print-table .doc-due{width:24%}
.print-table .doc-money{width:14%}
.print-table .date-main,.print-table .date-note{display:block}
.print-table .date-note{font-size:11px;margin-top:2px}
.print-signatures{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;
  margin-top:30px;color:var(--muted)}
.print-note{margin-top:14px;color:var(--muted);font-size:12px;line-height:1.65}
.bill-print-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid var(--line);
  border-radius:8px;overflow:hidden;margin:14px 0}
.bill-print-meta>div{display:grid;grid-template-columns:82px minmax(0,1fr);gap:8px;padding:8px 10px;
  border-bottom:1px solid var(--line)}
.bill-print-meta>div:nth-child(odd){border-right:1px solid var(--line)}
.bill-print-meta>div:nth-last-child(-n+2){border-bottom:0}
.bill-print-meta span{color:var(--muted);font-size:12px}.bill-print-meta b{overflow-wrap:anywhere}
.bill-print-table .bill-doc-fee{width:20%}.bill-print-table .bill-doc-no{width:22%}
.bill-print-table .bill-doc-money{width:14.5%}
.utility-print-title{margin:16px 0 4px;color:var(--navy);font-size:15px}
.utility-print-table{font-size:11px}
.utility-print-table th,.utility-print-table td{padding:6px 5px!important}
.utility-print-table th:first-child{width:18%}
@page bill-a5-landscape{size:A5 landscape;margin:6mm}
@page bill-a5-portrait{size:A5 portrait;margin:6mm}
@page bill-a4-landscape{size:A4 landscape;margin:8mm}
@page bill-a4-portrait{size:A4 portrait;margin:8mm}
.bill-a5-landscape{page:bill-a5-landscape}.bill-a5-portrait{page:bill-a5-portrait}
.bill-a4-landscape{page:bill-a4-landscape}.bill-a4-portrait{page:bill-a4-portrait}
.bill-print-options,.bill-document-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.bill-print-options label{display:flex;align-items:center;gap:6px}
.bill-print-options select{width:auto}
.bill-statement{max-width:none}
.bill-doc-date{display:inline-block;white-space:nowrap}
.bill-statement .utility-print-table{font-size:13px}
.bill-statement .utility-print-portrait{break-inside:avoid}
.settlement-table{width:100%;border-collapse:collapse;margin:14px 0}
.settlement-table td{padding:9px 6px;border-bottom:1px solid var(--line)}
.settlement-table td.r{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.settlement-table tr.sum td{font-weight:800;font-size:17px;border-top:2px solid var(--navy);border-bottom:none}
.handover-kv{display:flex;flex-wrap:wrap;gap:6px 24px;margin:8px 0}
.handover-kv div{min-width:200px}
.handover-table{width:100%;border-collapse:collapse;margin:12px 0;table-layout:fixed}
.handover-table th,.handover-table td{border:1px solid var(--line);padding:8px 10px;text-align:left;font-size:14px;
  white-space:normal;overflow-wrap:anywhere}
.handover-table th{background:#f4f6fb}.handover-table td.r{text-align:right;font-variant-numeric:tabular-nums}
.handover-section{font-weight:700;color:var(--navy);margin:18px 0 6px}
.handover-check{font-size:15px}.handover-blank td{height:30px}

@media print{
  @page{size:A4 portrait;margin:12mm}
  html,body{min-width:0!important;width:auto!important;background:#fff!important}
  .noprint,.print-tip{display:none!important}
  .wrap{max-width:none!important;width:auto!important;margin:0!important;padding:0!important}
  .print-sheet{box-sizing:border-box;width:100%!important;max-width:none!important;margin:0!important;
    padding:0!important;border:0!important;border-radius:0!important;box-shadow:none!important;color:#111}
  .print-sheet h2{font-size:18pt;color:#111}.print-sheet .print-org{color:#444;margin-bottom:8mm}
  .print-sheet .print-lead{font-size:10.5pt;line-height:1.65;margin:4mm 0}
  .print-sheet .print-amount{font-size:13pt;color:#111}
  .print-table{width:100%!important;table-layout:fixed!important;margin:4mm 0!important;border-color:#777!important}
  .print-table thead{display:table-header-group}.print-table tfoot{display:table-footer-group}
  .print-sheet .grid th,.print-sheet .grid td{position:static!important;white-space:normal!important;
    overflow-wrap:anywhere!important;word-break:normal!important;padding:2.2mm 1.6mm!important;
    font-size:9.5pt!important;line-height:1.35!important;border-color:#999!important}
  .print-sheet .grid th{background:#f0f0f0!important;color:#111!important}
  .print-sheet .grid tr{break-inside:avoid;page-break-inside:avoid}
  .print-table .date-note{font-size:8.5pt}.print-table .doc-money{white-space:nowrap!important}
  .print-signatures{break-inside:avoid;page-break-inside:avoid;margin-top:9mm;color:#333;font-size:10pt}
  .print-note{break-inside:avoid;page-break-inside:avoid;color:#333;font-size:9pt;line-height:1.55}
  .bill-print-meta{margin:4mm 0;border-color:#999;border-radius:0}
  .bill-print-meta>div{grid-template-columns:20mm minmax(0,1fr);padding:2mm;border-color:#999;
    font-size:9.5pt;line-height:1.35}
  .bill-print-meta span{font-size:8.5pt;color:#444}
  .utility-print-title{margin:3mm 0 1mm;font-size:10.5pt;color:#111}
  .utility-print-table th,.utility-print-table td{padding:1.3mm .8mm!important;font-size:7.5pt!important}
  .bill-statement h2{font-size:16pt}.bill-statement .print-org{margin-bottom:2mm;font-size:9pt}
  .bill-statement .bill-print-meta{margin:2mm 0}
  .bill-statement .bill-print-meta>div{grid-template-columns:17mm minmax(0,1fr);padding:1.2mm 1.5mm;
    font-size:10pt;line-height:1.3}
  .bill-statement .bill-print-meta span{font-size:9pt}
  .bill-statement .print-table{margin:2mm 0!important}
  .bill-statement .grid th,.bill-statement .grid td{padding:1.1mm .8mm!important;
    font-size:10pt!important;line-height:1.3!important}
  .bill-statement .utility-print-title{margin:2mm 0 .7mm;font-size:9pt}
  .bill-statement .utility-print-table th,.bill-statement .utility-print-table td{
    padding:1mm .7mm!important;font-size:9pt!important;line-height:1.3!important}
  .bill-statement .print-note{margin-top:1.5mm;font-size:8.5pt;line-height:1.4}
  .bill-statement .print-signatures{margin-top:3mm;font-size:9pt}
  .bill-a5-portrait .bill-doc-fee,.bill-a4-portrait .bill-doc-fee{width:13%}
  .bill-a5-portrait .bill-doc-no,.bill-a4-portrait .bill-doc-no{width:15%}
  .bill-a5-portrait .bill-doc-money,.bill-a4-portrait .bill-doc-money{width:18%}
  .print-page{break-after:page;page-break-after:always}
  .print-page:last-of-type{break-after:auto;page-break-after:auto}
  .settlement-table,.handover-table{break-inside:avoid;page-break-inside:avoid}
  .settlement-table td{padding:2.2mm 1.5mm;font-size:10pt;border-color:#999}
  .handover-table th,.handover-table td{padding:1.8mm 2mm;font-size:9.5pt;border-color:#777}
  .handover-section{margin:4mm 0 1.5mm}.handover-check{font-size:10pt}
  .handover-blank td{height:7mm}.handover-kv{gap:1.5mm 6mm;font-size:9.5pt}
  .handover-kv div{min-width:42%}
  .ho .print-org{margin-bottom:4mm}
  .ho .handover-table{margin:1.5mm 0}
  .ho .handover-table th,.ho .handover-table td{padding:1.1mm 1.7mm;font-size:9pt}
  .ho .handover-section{margin:2.5mm 0 1mm}
  .ho .handover-blank td{height:5mm}
  .ho .print-note{margin:2mm 0;font-size:8.5pt;line-height:1.45}
  .ho .print-signatures{margin-top:5mm;font-size:9pt}
}

/* ---- 待办队列卡（参考 Xero 的「Reconcile X items」入口）---- */
/* 数字先行、一句话讲清是什么、整张卡就是筛选链接。当前选中的卡加深底色。 */
.queue{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin-bottom:14px}
.q-card{display:flex;flex-direction:column;gap:1px;background:var(--card);border:1px solid var(--line);
  border-radius:12px;padding:12px 14px;text-decoration:none;color:inherit;
  border-left:4px solid var(--line);transition:box-shadow .12s,border-color .12s}
.q-card:hover{text-decoration:none;box-shadow:0 4px 14px rgba(30,39,97,.10);border-color:#c3cbe4}
.q-card.on{background:#eef2fd;border-left-color:var(--navy2)}
.q-card.q-hot{border-left-color:var(--danger)}
.q-card.q-hot .q-n{color:var(--danger)}
.q-card.q-warn{border-left-color:var(--warn)}
.q-card.q-warn .q-n{color:var(--warn)}
.q-card.q-done{border-left-color:#8dcaa2;background:#f7fcf8}
.q-card.q-done .q-n{color:var(--ok)}
.q-n{font-size:26px;font-weight:700;line-height:1.1;color:var(--navy);font-variant-numeric:tabular-nums}
.q-k{font-size:13px;font-weight:600;color:var(--navy2)}
.q-sub{font-size:11.5px;color:var(--muted);margin-top:2px}

/* 待办行整行提亮：不用扫数字就知道哪几行要动手 */
table.grid tr.row-todo td{background:#fffaf2}
table.grid tr.row-todo:hover td{background:#fff4e4}

@media(max-width:760px){
  .queue{grid-template-columns:repeat(2,1fr);gap:8px}
  .q-card{padding:10px 11px}
  .q-n{font-size:21px}
}

/* ---- 表格密度与行操作（依 Carbon / NN-g / Pencil&Paper 的数据表规范）---- */
/* 全站表格表头统一吸顶；宽表由 sticky_headers.js 负责横向同步，普通表格直接由浏览器处理。 */
table thead th{position:sticky;top:var(--table-sticky-top);z-index:2;background:var(--bg)}
/* 行高：紧凑 40 / 常规 48 / 宽松 56。原来账单行因为操作列竖排堆到 ~170px，一屏只剩 3 行。 */
table.grid{table-layout:auto}
.grid td,.grid th{white-space:nowrap}
/* 只有明确标了 .wrap 的列才准换行（备注、原因这类长文本） */
.grid td.wrap,.grid th.wrap{white-space:normal}
.grid td.mini{font-size:12px;color:var(--muted)}
/* 表格高过一屏时冻结表头；避开后台固定顶栏（移动端抽屉展开时也会动态更新）。 */
.grid thead th,.grid tr:first-child th{position:sticky;top:var(--table-sticky-top);z-index:2}
/* 横向滚动容器会被浏览器同时视作 sticky 的纵向参照物；这里若继续用顶栏高度，
   表头会在表格内部凭空下移，并盖住第一行。页面滚动时的顶栏吸附由
   sticky_headers.js 的同步表头负责，容器内的原表头只需贴住自身顶部。 */
.tablewrap .grid thead th,.tablewrap .grid tr:first-child th{top:0}
/* 金额用等宽数字，避免 ¥1,111.11 看起来比 ¥999.99 短 */
.grid td.num{font-variant-numeric:tabular-nums}

/* 行操作：主操作留在行内，其余收进 ⋯（Carbon：少于 3 个才全部行内） */
.rowact{display:flex;align-items:center;justify-content:flex-end;gap:6px;white-space:nowrap}
.rowmenu-btn{border:1px solid var(--line);background:#fff;border-radius:6px;cursor:pointer;
  width:26px;height:26px;line-height:1;padding:0;color:var(--navy2);font-size:15px;font-weight:700}
.rowmenu-btn:hover{background:#f0f2f9;border-color:#c3cbe4}
/* popover 走顶层，不会被 table 的 overflow:hidden / .tablewrap 的 overflow-x 裁掉 */
.rowmenu{position:fixed;margin:0;inset:auto;border:1px solid var(--line);border-radius:10px;
  background:#fff;box-shadow:0 10px 28px rgba(20,26,54,.18);padding:6px;min-width:132px}
.rowmenu:popover-open{display:block}
.rowmenu a,.rowmenu button{display:block;width:100%;text-align:left;background:none;border:0;
  padding:8px 10px;border-radius:6px;color:var(--navy2);font-size:13px;cursor:pointer;white-space:nowrap}
.rowmenu a:hover,.rowmenu button:hover{background:#f0f2f9;color:var(--navy);text-decoration:none}
.rowmenu button.danger{color:var(--danger)}
.rowmenu button.danger:hover{background:#fdf0f0}
.rowmenu hr{border:0;border-top:1px solid var(--line);margin:5px 2px}
/* ⚠️ 共用菜单靠 [hidden] 收起不适用的项。上面那条 .rowmenu a,.rowmenu button
   的 display:block 会盖过 [hidden] 的默认 display:none（这个坑踩过），所以写死。 */
.rowmenu [hidden]{display:none !important}

@media(max-width:760px){
  .grid td,.grid th{padding:7px 8px}
}

/* 操作列钉在右边：表格再宽，主操作也永远够得着（否则横向溢出就点不到「收款」） */
.grid tr > *:last-child.actcol{position:sticky;right:0;background:#fff;
  box-shadow:-6px 0 8px -6px rgba(20,26,54,.18)}
.grid th.actcol{background:#f0f2f9;z-index:3}
.grid tr:hover td.actcol{background:#fafbff}
.grid tr.row-todo td.actcol{background:#fffaf2}
.grid tr.row-todo:hover td.actcol{background:#fff4e4}
.grid tr.totrow td.actcol{background:#f0f2f9}

/* 宽数据表明确分配列宽，避免右侧粘滞操作列覆盖最后几列。 */
.action-grid{table-layout:fixed}
.action-grid td,.action-grid th{white-space:normal;overflow-wrap:anywhere}
.action-grid td.num,.action-grid th.num{white-space:nowrap;overflow-wrap:normal}
.action-grid tr > *:last-child.actcol{width:120px}
.contracts-grid tr > *:last-child.actcol{width:180px}
.batch-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0 8px;
  padding:10px 12px;border:1px solid #c9d2ea;border-radius:10px;background:#f7f9ff}
.batch-bar>div:first-child{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.batch-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.bill-col-select{width:36px}.bill-select-cell{text-align:center!important;padding-left:6px!important;padding-right:6px!important}
.bill-select-cell input{width:17px;height:17px;margin:0;accent-color:var(--navy2);cursor:pointer}
.bills-grid tr.row-selected td{background:#eef2fd}
.bills-grid tr.row-selected td.actcol{background:#eef2fd}
.bills-grid .bill-col-no{width:9%}.bills-grid .bill-col-tenant{width:9%}
.bills-grid .bill-col-fee{width:16%}.bills-grid .bill-col-period{width:10%}
.bills-grid .bill-col-due{width:8%}.bills-grid .bill-col-money{width:7.5%}
.bills-grid .bill-col-status{width:8%}.bills-grid .bill-col-actions{width:10%}
/* Split fee columns share compact dates, balances and on-demand source details. */
.bills-grid.split-bills-grid{table-layout:fixed;min-width:1120px}
.split-bills-grid .split-bill-col-no{width:8%}.split-bills-grid .split-bill-col-tenant{width:12%}
.split-bills-grid .split-bill-col-fee{width:14%}.split-bills-grid .split-bill-col-dates{width:13%}
.split-bills-grid .split-bill-col-money{width:9%}.split-bills-grid .split-bill-col-balance{width:9%}
.split-bills-grid .split-bill-col-actions{width:142px}
.split-bills-grid tr>*:last-child.actcol{width:142px;position:static;box-shadow:none}
.split-bills-grid td{padding-top:14px;padding-bottom:14px}
.split-bills-grid .split-bill-subline{display:block;margin-top:5px;color:var(--muted);font-size:12px;line-height:1.4}
.split-bill-number,.split-bill-tenant{font-weight:600}.split-bill-fee-amount{font-weight:600;font-variant-numeric:tabular-nums}
.split-bills-grid .split-bill-meter-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:4px;color:var(--muted);font-size:12px}
.split-bill-meter-details{margin-top:4px;font-size:12px}
.split-bill-meter-details summary{cursor:pointer;color:var(--navy2);width:fit-content;max-width:100%;border-radius:3px}
.split-bill-meter-details summary:focus-visible{outline:2px solid var(--navy2);outline-offset:3px}
.split-bill-meter-details ul{margin:8px 0 0;padding:0;list-style:none}
.split-bill-meter-details li{padding:6px 0;border-top:1px solid var(--line);line-height:1.5}
.split-bill-meter-details li span{display:block;color:var(--muted)}
.split-bill-period{font-size:12px;line-height:1.5;color:var(--ink)}.split-bill-period-end{display:block;color:var(--muted)}
.split-bill-amount,.split-bill-balance{font-variant-numeric:tabular-nums}.split-bill-balance{font-size:15px}
.split-bills-grid .s-void .split-bill-balance{color:var(--muted)}
.split-bills-grid .split-bill-subline.overdue{color:#b4232c}
@media(min-width:1500px){.split-bill-period-end{display:inline;margin-left:4px}}
@media(max-width:720px){
  .mobile-task-table.split-bills-grid tr.mobile-open>td.mobile-card-select-source:before{content:none}
  .split-bills-grid .split-bill-meter-label{white-space:normal;overflow:visible}
  .split-bill-meter-details summary{margin-left:auto;min-height:44px;display:flex;align-items:center;justify-content:flex-end;gap:5px}
  .split-bill-meter-details summary:before{content:'▸'}.split-bill-meter-details[open] summary:before{content:'▾'}
}
.payments-grid .payment-col-date{width:7%}.payments-grid .payment-col-tenant{width:8%}
.payments-grid .payment-col-project{width:7%}.payments-grid .payment-col-money{width:7%}
.payments-grid .payment-col-method{width:6%}.payments-grid .payment-col-status{width:8%}
.payments-grid .payment-col-content{width:15%}.payments-grid .payment-col-reference{width:7%}
.payments-grid .payment-col-operator{width:8%}.payments-grid .payment-col-actions{width:13%}
.bills-grid td:nth-child(2),.bills-grid td:nth-child(3),.bills-grid td:nth-child(4),
.bills-grid td:nth-child(5),.bills-grid td:nth-child(11),.payments-grid td:nth-child(2),
.payments-grid td:nth-child(3),.payments-grid td:nth-child(7),.payments-grid td:nth-child(10),
.payments-grid td:nth-child(11){overflow-wrap:anywhere}

@media(max-width:1300px){
  .bills-grid{table-layout:auto}
  .bills-grid col.bill-secondary{display:none}
}

@media(max-width:760px){
  /* 手机保持单元格可读，宽表通过外层 tablewrap 横向滑动，不把汉字压成竖列。 */
  .action-grid{table-layout:auto;min-width:760px}
  .bills-grid{min-width:900px}
  .payments-grid{min-width:1080px}
  .batch-bar{align-items:flex-start;flex-direction:column}.batch-actions{width:100%}
  .action-grid tr > *:last-child.actcol{position:static;box-shadow:none}
  /* 合同经办在手机上也要一眼找到退租；不能要求先横滑到表尾才发现入口。 */
  .contracts-grid tr > *:last-child.actcol{position:sticky;right:0;background:#fff;
    box-shadow:-6px 0 8px -6px rgba(20,26,54,.18)}
  .contracts-grid th.actcol{background:#f0f2f9}
}

/* 从列表页 #files 跳进来时闪一下，告诉人「上传就在这」 */
#files:target{background:#fff9e8;border:1px solid var(--warn);border-radius:10px;padding:10px;
  animation:flashfiles 1.6s ease-out}
@keyframes flashfiles{0%{background:#ffeeba}100%{background:#fff9e8}}

/* ---- 租户选择器（登记收款）---- */
/* 74 个租户，原生 select 只能按开头匹配；银行回单印全称、系统存简称，对不上。
   改成子串搜索的列表，同时把「单元」和「欠款额」摆出来当判据。 */
.tpick-input{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px}
.tpick-input:focus{outline:2px solid #c7d2ee;outline-offset:-1px;border-color:#c3cbe4}
.tpick-hint{margin-top:4px;color:var(--muted)}
.tpick-list{margin-top:6px;max-height:290px;overflow-y:auto;border:1px solid var(--line);
  border-radius:10px;background:#fff;box-shadow:0 8px 22px rgba(20,26,54,.10)}
.tpick-opt{display:flex;align-items:baseline;justify-content:space-between;gap:10px;width:100%;
  text-align:left;background:none;border:0;border-bottom:1px solid #f0f2f7;padding:8px 10px;
  cursor:pointer;font-size:13.5px;color:var(--navy2)}
.tpick-opt:last-of-type{border-bottom:0}
/* ⚠️作者写的 display:flex 会盖过 UA 的 [hidden]{display:none} —— 不补这条，
   JS 把选项标成 hidden 了，屏幕上照样全部显示（搜索看起来完全没生效）。 */
.tpick-opt[hidden]{display:none}
.tpick-opt:hover,.tpick-opt.active{background:#f0f4ff}
.tpick-opt.picked{background:#e9f0ff}
.tpick-opt.dim{opacity:.55}
.tp-name{font-weight:600;color:var(--navy);white-space:nowrap}
.tp-code{font-weight:400;font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.tp-meta{display:flex;gap:8px;align-items:baseline;white-space:nowrap;font-size:12px}
.tp-unit{color:var(--navy2)}
.tp-none{color:var(--muted)}
.tp-due{color:var(--danger);font-weight:600;font-variant-numeric:tabular-nums}
.tp-clear{color:var(--ok)}
.tpick-empty{padding:10px}

@media(max-width:760px){
  .tpick-opt{flex-direction:column;gap:2px}
  .tp-meta{white-space:normal}
}

/* 收款备注（＝回单背面那段拆分说明）—— 核销时最需要看的一句话 */
.remit{display:flex;gap:10px;align-items:baseline;background:#fffdf3;border:1px solid var(--warn);
  border-radius:10px;padding:9px 12px;margin-bottom:12px}
.remit-k{font-size:11.5px;color:var(--warn);font-weight:600;white-space:nowrap}
.remit-v{font-size:13.5px;color:#41496a}

/* ---- 核销：左右对照（Xero Reconcile 的版式）----
   左边「这笔钱」钉住不动，右边是候选账单。上下叠的话，往下翻账单时
   「收了多少钱」会滚出视线，两边就对不上了。 */
.recon2{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}
.receipt-search{display:flex;align-items:end;gap:12px;flex-wrap:wrap}
.receipt-search-input{flex:1;min-width:200px}
.receipt-search label{display:block;margin-bottom:5px;font-weight:600}
.receipt-search input{width:100%;box-sizing:border-box;min-height:44px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font:inherit;color:var(--ink);background:#fff}
.receipt-search p{width:100%;margin:0}
.receipt-state p{margin:8px 0}
.receipt-metadata summary{cursor:pointer;margin-top:10px;min-height:28px}
.receipt-submit-summary{flex-basis:100%;font-weight:600;color:var(--navy2)}
.payment-sources{white-space:normal;min-width:140px;text-align:left}
.mobile-card-head .mobile-card-copy>.mobile-card-note{display:block;-webkit-line-clamp:unset;overflow:visible;color:var(--navy2);line-height:1.6}
#alloc-form [hidden]{display:none!important}
@media(max-width:720px){
  .receipt-search{gap:10px}
  .receipt-search-input{flex-basis:100%}
  .receipt-search input,.receipt-search select{font-size:16px;min-height:44px}
  #allocation-form.mobile-task-table tr[data-bill]>td.recon-allocate{display:grid!important;grid-template-columns:88px minmax(0,1fr);align-items:center;gap:12px}
  #allocation-form.mobile-task-table tr[data-bill]>td.recon-allocate:before{content:'本次核销';color:var(--muted)}
  #allocation-form .in-alloc{width:100%;box-sizing:border-box;min-height:44px;font-size:16px}
  #allocation-form.mobile-task-table tr.totrow{display:none!important}
  #alloc-form .recon-foot{position:sticky;bottom:0;background:var(--card);padding:12px 0 calc(12px + env(safe-area-inset-bottom));z-index:3;border-top:1px solid var(--line)}
}
.rec-left{position:sticky;top:64px;display:flex;flex-direction:column;gap:10px}

.rec-src{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--navy2);
  border-radius:12px;padding:14px}
.rs-tag{font-size:11px;color:var(--muted);letter-spacing:.06em}
.rs-amt{font-size:27px;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums;line-height:1.2}
.rs-who{font-size:14px;font-weight:600;color:var(--navy2);margin-top:2px}
.rs-meta{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;margin:10px 0 0;font-size:12px}
.rs-meta dt{color:var(--muted)}
.rs-meta dd{margin:0;color:#41496a}
.rs-ref{word-break:break-all;font-variant-numeric:tabular-nums}
.rs-remit{margin-top:10px;padding:8px 10px;background:#fffdf3;border:1px solid var(--warn);
  border-radius:8px;font-size:12.5px;line-height:1.65;color:#41496a}
.rs-remit b{color:var(--warn);font-size:11.5px}

/* 差额：跟左栏一起钉住，右边一改这里立刻变 */
.rec-diff{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.rec-diff.done{border-color:var(--ok);background:#f4fbf6}
.rec-diff.bad{border-color:var(--danger);background:#fdf5f5}
.rd-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:12.5px;
  color:var(--muted);padding:2px 0}
.rd-row b{font-size:14px;color:var(--navy2);font-variant-numeric:tabular-nums}
.rd-main{border-top:1px solid var(--line);margin-top:6px;padding-top:8px}
.rd-main span{color:var(--navy2);font-weight:600}
.rd-main b{font-size:20px;color:var(--navy)}
.rec-diff.done .rd-main b{color:var(--ok)}
.rec-diff.bad .rd-main b{color:var(--danger)}
.rd-note{margin-top:8px;font-size:12px;color:var(--muted);line-height:1.6}

.rec-help{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 14px;font-size:12.5px}
.rec-help summary{cursor:pointer;color:var(--navy2);font-weight:600;list-style:none}
.rec-help summary::-webkit-details-marker{display:none}
.rec-help summary:after{content:" ▾";font-size:10px;opacity:.7}
.rec-help p{margin:8px 0 0;line-height:1.7;color:#41496a}

.rec-right > .panel:first-child{margin-top:0}

@media(max-width:900px){
  .recon2{grid-template-columns:1fr}
  .rec-left{position:static}
  .rs-amt{font-size:23px}
}

/* 中等桌面只压缩顶部全局动作；业务模块已经在左栏，不再挤顶栏。 */
@media(min-width:1101px) and (max-width:1500px){
  .topbar{gap:8px;padding:0 12px}
  .brand a{font-size:14px;white-space:nowrap}
  .navsearch{max-width:280px}
  .who{gap:5px;font-size:12px}
  .who .uname{display:none}
}

/* 平板与手机的导航抽屉 */
@media(max-width:1100px){
  .navtoggle{display:inline-flex}
  .brand{flex-basis:auto}
  .brand a{font-size:15px}
  .who{font-size:12px;gap:6px}
  .who .help-link,.who .uname{display:none}
  .app-body .wrap,.app-body .wrap.wide{width:auto;max-width:1180px;margin:18px auto;padding:0 16px}
  .sidebar{display:none;top:var(--table-sticky-top);width:min(360px,88vw);padding:8px 10px 22px;background:var(--navy);border-right:0;box-shadow:10px 0 30px rgba(10,15,45,.28)}
  /* topbar 与 sidebar 中间有断网提示条，不能用相邻兄弟 +，否则只出现遮罩不出现菜单。 */
  .topbar.navopen ~ .sidebar{display:block}
  .topbar.navopen ~ .sidebar-mask{display:block;position:fixed;inset:var(--table-sticky-top) 0 0 0;z-index:17;border:0;background:rgba(20,25,48,.36)}
  .nav{display:flex;gap:3px;padding:4px 0 8px}
  .nav-primary{display:flex;flex-direction:column;gap:3px;padding-bottom:6px;margin-bottom:5px;border-bottom:1px solid rgba(255,255,255,.12)}
  .nav-primary a{background:transparent}.nav-primary a small{color:#adb8d8}
  .nav a{padding:11px 12px;font-size:15px;border-radius:8px}
  .nav>a,.nav-primary a{color:#dce3fb}.nav>a:hover,.nav>a.on,.nav-primary a:hover,.nav-primary a.on{background:rgba(255,255,255,.14);color:#fff}
  .nav-primary a.on small{color:#dce3fb}
  /* 手机上不玩折叠：抽屉一拉开，所有子页直接列出来，少一层猜 */
  .navgrp{width:100%}
  .navgrp>.navgrp-top{width:100%;font-size:15px;font-weight:600}
  .navgrp.on>.navgrp-top{background:rgba(255,255,255,.16)}
  .navgrp-caret{display:none}
  .navgrp-menu{display:block;position:static;background:rgba(255,255,255,.07);border:none;
    box-shadow:none;margin:2px 0 6px 10px;padding:2px 0}
  .navgrp-menu a{color:#dce3fb;font-size:14px;padding:9px 12px}
  .navgrp-menu a small{color:#adb8d8}
  .navgrp-menu a:hover,.navgrp-menu a.on{background:rgba(255,255,255,.14);color:#fff}
  .utility-menu{min-width:0}
  .navmenu-label{color:#8795bf;padding-left:12px}
  .topbar{padding:0 12px;gap:8px}
}

/* ---- 移动端适配（员工端后台）---- */
@media(max-width:760px){
  .topbar{flex-wrap:wrap;padding:7px 12px}.brand{order:1}.global-tools{order:2}.who{order:3}.navtoggle{order:4}.quick-create{display:none}
  .wrap,.app-body .wrap,.app-body .wrap.wide{padding:0 12px;margin:14px auto}
  h1{font-size:19px}
  h2{font-size:15px;margin:18px 0 8px}
  .cards{grid-template-columns:1fr 1fr;gap:10px}
  .card{padding:12px}
  .card .v{font-size:22px}
  .panel{padding:12px}
  .actions .btn{font-size:13px}
  .row>div{min-width:0!important}   /* 两栏布局在手机上收起为整行，防止 min-width 撑破 */
  .kv{grid-template-columns:92px 1fr}
  .taskgrid,.modecards,.boss-grid{grid-template-columns:1fr}
  .sticky-submit{position:sticky;bottom:0;background:rgba(244,246,251,.96);margin:10px -12px -12px;padding:10px 12px;border-top:1px solid var(--line)}
}
@media(max-width:560px){
  .kpibar{grid-template-columns:repeat(2,1fr)!important}
  .cards{grid-template-columns:1fr}
  .card .v{font-size:24px}
  table.grid td,table.grid th{padding:7px 8px;font-size:13px}
  .confirm-lines{grid-template-columns:1fr}
}

/* ---- 房态中心 V3：诚实的楼层运营矩阵，不伪装成有坐标的建筑平面图 ---- */
.asset-overview{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(470px,.85fr);gap:10px;margin-bottom:10px}
.asset-hero{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:17px 20px;
  border:1px solid #d8deee;border-radius:15px;background:linear-gradient(135deg,#fff 0%,#f5f7ff 100%)}
.asset-hero h1{font-size:27px;margin:2px 0 3px}.asset-hero p{max-width:760px;margin:0;color:var(--muted)}
.asset-eyebrow{font-size:11px;font-weight:800;letter-spacing:.13em;color:var(--navy2)}
.asset-occupancy{position:relative;flex:0 0 116px;width:116px;height:116px;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:50%;background:conic-gradient(var(--ok) var(--occ),#e8ecf4 0);text-align:center;color:var(--ink)}
.asset-occupancy:before{content:"";position:absolute;inset:7px;border-radius:50%;background:#fff}.asset-occupancy>div,.asset-occupancy>small{position:relative;z-index:1}
.asset-occupancy>div{display:grid;gap:0}.asset-occupancy strong{font-size:24px;line-height:1.05;color:var(--navy)}.asset-occupancy span{font-size:10px;color:var(--muted)}.asset-occupancy small{margin-top:3px;font-size:9px;color:#70788a}
.asset-scope{display:flex;align-items:end;gap:10px;flex-wrap:wrap;padding:13px 14px;margin:12px 0 10px;background:#fff;border:1px solid var(--line);border-radius:12px}
.asset-scope label{display:grid;gap:4px;min-width:190px;font-size:11px;font-weight:700;color:var(--muted)}
.asset-scope select,.asset-scope input{height:38px;min-width:0;background:#fff}.asset-scope .asset-search{flex:1;min-width:210px}
.asset-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0}
.asset-kpi{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:12px 14px;border:1px solid var(--line);border-radius:11px;background:#fff}
.asset-kpi>span{font-size:12px;color:var(--muted)}.asset-kpi strong{grid-row:1/3;grid-column:2;font-size:23px;line-height:1.15;color:var(--navy);font-variant-numeric:tabular-nums}
.asset-kpi strong em{font-size:10px;font-style:normal;margin-left:3px;color:var(--muted)}.asset-kpi small{font-size:11px;color:#8990a0}
.asset-kpi.alert{border-left:4px solid #d79b1e;background:#fffcf5}.asset-kpi.alert strong{color:#9a6600}
.asset-viewbar{margin:0 0 9px}.asset-create-menu{position:relative}.asset-create-menu>summary{list-style:none;cursor:pointer}.asset-create-menu>summary::-webkit-details-marker{display:none}
.asset-create-menu>div{position:absolute;right:0;top:36px;z-index:18;display:grid;min-width:150px;padding:6px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 28px rgba(30,39,97,.18)}
.asset-create-menu>div a{padding:8px 10px;border-radius:7px}.asset-create-menu>div a:hover{background:#f0f2f9;text-decoration:none}
.asset-map-tools{position:sticky;top:calc(var(--table-sticky-top) + 8px);z-index:12;padding:7px;margin-bottom:12px;border:1px solid #d9deeb;border-radius:13px;background:rgba(255,255,255,.97);box-shadow:0 5px 18px rgba(30,39,97,.06);backdrop-filter:blur(8px)}
.asset-task-tabs{display:flex;align-items:stretch;gap:5px;min-width:0}.asset-task-tabs>button{display:flex;align-items:center;gap:7px;min-height:38px;padding:7px 11px;border:1px solid transparent;border-radius:9px;background:transparent;color:#47516a;font:inherit;cursor:pointer;white-space:nowrap}
.asset-task-tabs>button:hover{background:#f2f5fb}.asset-task-tabs>button.sel{background:var(--navy);color:#fff}.asset-task-tabs button span{font-size:12px;font-weight:700}.asset-task-tabs button b{min-width:21px;padding:1px 6px;border-radius:999px;background:#e9edf6;color:var(--navy);font-size:10px}.asset-task-tabs button.sel b{background:#fff;color:var(--navy)}.asset-task-tabs button small{font-size:10px;color:#8a5e00}.asset-task-tabs button.sel small{color:#fff}.asset-filter-count{align-self:center;margin-left:auto;padding:0 8px;color:var(--muted);font-size:11px;white-space:nowrap}
.asset-advanced{margin-top:5px;border-top:1px solid #edf0f5}.asset-advanced>summary{display:flex;align-items:center;gap:8px;padding:7px 9px 2px;list-style:none;cursor:pointer;color:var(--navy2);font-size:11px;font-weight:700}.asset-advanced>summary::-webkit-details-marker{display:none}.asset-advanced>summary:before{content:"＋";display:grid;place-items:center;width:17px;height:17px;border-radius:50%;background:#edf1f8}.asset-advanced[open]>summary:before{content:"−"}.asset-advanced>summary span{color:var(--muted);font-weight:400}.asset-advanced-body{padding:4px 7px 3px}
.asset-state-chips{gap:7px}.asset-state-chips button{display:inline-flex;align-items:center;gap:5px;padding:5px 8px;border:1px solid #e0e4ed;border-radius:999px;background:#fff;color:#41496a;font:inherit;font-size:12px;cursor:pointer}
.asset-state-chips button:hover{border-color:#aeb7d0;background:#f7f9ff}.asset-state-chips button.sel{border-color:var(--navy);background:var(--navy);color:#fff}
.asset-state-chips button b{min-width:19px;padding:0 5px;border-radius:9px;background:#eef1f7;color:var(--navy);font-size:10px;text-align:center}.asset-state-chips button.sel b{background:#fff;color:var(--navy)}
.asset-state-chips i{width:9px;height:9px;margin:0;border-radius:50%}.c-rented{background:#4f9b70}.c-vacant{background:#aab2c1}.c-self{background:#5b7fb9}.c-maint{background:#c8932d}
.asset-filter-row,.asset-axis{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px solid #edf0f5}
.asset-filter-row label{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}.asset-filter-row select{padding:4px 6px;font-size:12px}
.asset-filter-row .mini{margin-left:auto}.asset-axis label{font-size:12px;font-weight:700;color:var(--navy)}.asset-axis input{flex:1;min-width:180px;max-width:520px;accent-color:var(--navy)}.asset-axis strong{min-width:120px;font-size:12px;color:var(--navy)}
.asset-map{display:grid;gap:14px}.asset-project{overflow:hidden;border:1px solid #dce1ed;border-radius:14px;background:#fff;box-shadow:0 3px 14px rgba(30,39,97,.04)}
.asset-project-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:13px 16px;background:linear-gradient(90deg,#f4f7ff,#fff)}
.asset-project-head>div{display:flex;align-items:center;gap:9px;min-width:0}.asset-project-head h2{margin:0;font-size:17px}.asset-project-head>div>span:last-child{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asset-project-mark{padding:2px 7px;border-radius:5px;background:var(--navy);color:#fff;font-size:10px;font-weight:700}
.asset-building{border-top:1px solid var(--line)}.asset-building>summary{display:flex;justify-content:space-between;align-items:center;gap:14px;min-height:52px;padding:10px 15px;cursor:pointer;list-style:none;background:#fff}
.asset-building>summary::-webkit-details-marker{display:none}.asset-building>summary:hover{background:#fafbfe}.asset-building[open]>summary{background:#f9fbff;border-bottom:1px solid var(--line)}
.asset-building-title{display:flex;align-items:center;gap:8px}.asset-building-title .chev{font-size:22px;line-height:1;color:#8d96aa;transition:transform .15s}.asset-building[open] .asset-building-title .chev{transform:rotate(90deg)}
.building-rename-link{padding:3px 7px;border:1px solid #d7ddec;border-radius:7px;color:var(--navy2);font-size:10px;font-weight:600;white-space:nowrap}.building-rename-link:hover{background:#eef2fa;text-decoration:none}
.asset-building-stats{display:flex;justify-content:flex-end;gap:13px;flex-wrap:wrap;color:var(--muted);font-size:11px}.asset-building-stats b{color:var(--navy);font-size:13px}.asset-building-stats .warn,.asset-building-stats .warn b{color:#9a6600}.asset-building-stats .danger,.asset-building-stats .danger b{color:var(--danger)}
.asset-building-body{padding:10px 12px 12px;background:#fbfcff}.asset-building-actions{display:flex;justify-content:flex-end;gap:6px;align-items:center;margin-bottom:8px}.asset-building-actions form{margin:0}
.asset-facade-caption{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px;border:1px solid #e2e6ef;border-bottom:0;border-radius:9px 9px 0 0;background:#f5f7fb}.asset-facade-caption strong{font-size:11px;color:var(--navy)}.asset-facade-caption span{font-size:10px;color:var(--muted)}
.floorrow{gap:0;margin:0;border-top:1px solid #e7eaf1;background:#fff}.floorrow:first-of-type{border-top:0}.floortag{flex:0 0 58px;min-height:78px;border-radius:0;background:#f0f3f9;color:#4e5872;font-weight:700;flex-direction:column;gap:2px}
.rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(136px,1fr));align-content:start;gap:7px;padding:7px}.room{position:relative;min-height:68px;padding:8px 9px;border:1px solid transparent;border-radius:8px;text-align:left;font-family:inherit;color:#223047;box-shadow:none;transition:transform .12s,box-shadow .12s,opacity .12s}
.room:hover{transform:translateY(-1px);box-shadow:0 5px 12px rgba(30,39,97,.13)}.room:focus-visible{outline:3px solid rgba(43,58,134,.25);outline-offset:1px}
.room .rcode{color:#18204d;font-size:14px;font-weight:800}.room .rmid{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#37435a}.room .rbot{color:#667085;opacity:1}.room .rrent{color:#263c72}.room .rrent.vacancy{color:#a52b31}
.r-rented{background:#e7f4eb;border-color:#b9ddc4}.r-vacant{background:#f6f7f9;border:1px dashed #b5bdca}.r-reserved{background:#fff3d7;border-color:#eacb83}.r-self{background:#e8f0fb;border-color:#bfd0e9}.r-maint{background:#fff1dc;border-color:#e7c78e}.r-makeready{background:#f0eafd;border-color:#cfc0ed;color:#223047}.r-makeready .rbot,.r-makeready .rmid{color:#5f5275}
.room.has-exp{box-shadow:inset 0 -4px 0 #d99a1d}.room.has-overdue{box-shadow:inset 0 -4px 0 #b4232a}.room.has-exp.has-overdue{box-shadow:inset 0 -4px 0 #b4232a,inset 0 -8px 0 #d99a1d}.room.dim{opacity:.18;filter:grayscale(.8);pointer-events:none}
.addcell{height:auto;min-height:64px;align-self:stretch}.asset-empty{padding:18px;color:var(--muted);text-align:center}.asset-empty.large{padding:42px;border:1px dashed #cbd2e2;border-radius:13px;background:#fff}.asset-table{border:1px solid var(--line);border-radius:12px;background:#fff}
.asset-drawer{width:420px}.drawer-status{display:grid;gap:3px;padding:15px;border-radius:11px;background:#edf1f8;border-left:5px solid #8994aa;margin-bottom:11px}.drawer-status span{font-size:11px;color:var(--muted)}.drawer-status strong{font-size:21px;color:var(--navy)}
.drawer-status.state-rented{background:#eaf6ed;border-color:#4f9b70}.drawer-status.state-overdue{background:#fff0ef;border-color:#b4232a}.drawer-status.state-expiring{background:#fff7e7;border-color:#d99a1d}
.drawer-facts{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:8px}.drawer-facts>div{display:grid;gap:2px;padding:9px 10px;border:1px solid var(--line);border-radius:8px}.drawer-facts span{font-size:11px;color:var(--muted)}.drawer-facts b{font-size:14px;color:var(--ink)}
@media(max-width:820px){
  .asset-overview{grid-template-columns:1fr}.asset-hero{padding:15px 16px}.asset-hero p{font-size:12px}.asset-occupancy{flex-basis:106px;width:106px;height:106px}.asset-kpis{grid-template-columns:repeat(3,1fr)}
  .asset-map-tools{position:static}.asset-task-tabs{overflow-x:auto}.asset-filter-count{display:none}.asset-building>summary{align-items:flex-start;flex-direction:column}.asset-building-stats{justify-content:flex-start}.asset-filter-row .mini{margin-left:0}
}
@media(max-width:560px){
  .asset-hero{align-items:center;padding:12px 14px}.asset-hero h1{font-size:23px}.asset-hero p{display:none}.asset-occupancy{flex:0 0 92px;width:92px;height:92px}.asset-occupancy strong{font-size:19px}.asset-occupancy small{display:none}
  .asset-scope{display:grid;grid-template-columns:1fr 1fr}.asset-scope label,.asset-scope .asset-search{min-width:0}.asset-scope .asset-search{grid-column:1/-1}.asset-scope .btn{text-align:center}
  .asset-kpis{gap:6px}.asset-kpi{grid-template-columns:1fr;padding:9px}.asset-kpi strong{grid-row:auto;grid-column:auto;font-size:18px}.asset-kpi small{display:none}.asset-kpi>span{font-size:10px}
  .asset-viewbar{align-items:flex-start}.viewactions .mini{display:none}.asset-state-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}.asset-state-chips button{flex:0 0 auto}
  .asset-task-tabs{padding-bottom:1px}.asset-task-tabs>button{flex:0 0 auto}.asset-task-tabs button small{display:none}.asset-advanced>summary span{display:none}.asset-axis .mini{display:none}.asset-axis input{order:3;flex-basis:100%;max-width:none}.asset-project-head>div>span:last-child{display:none}.asset-building-body{padding:7px 0 0}.asset-facade-caption{border-left:0;border-right:0;border-radius:0}.asset-facade-caption span{max-width:68%;text-align:right}
  .floorrow{align-items:stretch}.floortag{flex-basis:46px;min-height:72px}.rooms{padding:6px;grid-template-columns:repeat(auto-fill,minmax(124px,1fr))}.room{min-height:64px}.asset-drawer{top:auto;right:0;bottom:0;left:0;width:100%;max-width:none;height:min(82vh,720px);border-radius:18px 18px 0 0;transform:translateY(100%)}.asset-drawer.open{transform:translateY(0)}.asset-drawer .drawer-hd:before{content:"";position:absolute;top:7px;left:50%;width:42px;height:4px;border-radius:4px;background:#c9ced8;transform:translateX(-50%)}.asset-drawer .drawer-hd{position:relative;padding-top:19px}
}

/* ---- 顶栏全局搜索 ---- */
.navsearch{margin:0;flex:1;max-width:420px}
.navsearch input{width:100%;padding:6px 11px;border:none;border-radius:15px;font-size:13px;
  background:rgba(255,255,255,.16);color:#fff}
.navsearch input::placeholder{color:#c9d2f0}
.navsearch input:focus{background:#fff;color:var(--ink);box-shadow:none;outline:2px solid rgba(255,255,255,.4)}
@media(max-width:760px){
  .navsearch{order:5;flex-basis:100%;max-width:none;margin:1px 0 0}
  .navsearch input{width:100%;background:rgba(255,255,255,.22)}
}

/* ---- 新手向导 ---- */
.guide-wrap{max-width:640px;margin:10px auto 40px}
.guide-progress{display:flex;justify-content:center;gap:8px;margin-bottom:22px}
.gdot{width:10px;height:10px;border-radius:50%;background:var(--line);cursor:pointer;transition:all .15s}
.gdot.on{background:var(--navy);transform:scale(1.3)}
.gdot.done{background:var(--ok)}
.guide-step{background:#fff;border:1px solid var(--line);border-radius:16px;padding:32px 28px;text-align:center;
  box-shadow:0 4px 20px rgba(30,39,97,.06)}
.guide-icon{font-size:52px;line-height:1;margin-bottom:8px}
.guide-title{font-size:21px;color:var(--navy);margin:0 0 16px}
.guide-body{text-align:left;font-size:15px;line-height:1.75;color:var(--ink);
  background:#f7f9fd;border-radius:10px;padding:16px 18px;margin-bottom:18px}
.guide-body b{color:var(--navy)}
.guide-step>.btn{font-size:15px;padding:10px 20px}
.guide-nav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:22px;
  border-top:1px solid var(--line);padding-top:16px}
.guide-count{color:var(--muted);font-size:13px}
.guide-skip{text-align:center;margin-top:16px}
.guide-skip a{color:var(--muted);font-size:13px}
@media(max-width:760px){
  .guide-step{padding:24px 16px}
  .guide-title{font-size:18px}
}

/* 工程凭据相：判头没有 PDF，一切靠手机拍手写纸。缩略图要小到能塞进表格，又点得开 */
.snapcell{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.snapwrap{position:relative;display:inline-block;line-height:0}
.snapthumb{width:38px;height:38px;object-fit:cover;border-radius:6px;border:1px solid var(--line)}
.snapwrap form{position:absolute;top:-5px;right:-5px;line-height:0}
.snapdel{border:0;background:#b4232a;color:#fff;width:15px;height:15px;border-radius:50%;
  font-size:11px;line-height:15px;padding:0;cursor:pointer;opacity:0;transition:opacity .12s}
.snapwrap:hover .snapdel{opacity:1}
.snapbtn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;
  border:1px dashed #cfd4e2;border-radius:6px;cursor:pointer;font-size:16px;background:#fff}
.snapbtn:hover{border-color:var(--navy2);background:#f7f9fd}

/* 大列表分页条（账单、收款都只渲染当前页，手机和旧电脑不会被数百行 DOM 拖慢） */
.pager{display:flex;justify-content:space-between;align-items:center;gap:12px;
  flex-wrap:wrap;margin:10px 2px 0}
.pager-links{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.pager .btn.on{background:var(--navy);color:#fff;border-color:var(--navy);cursor:default}

/* ---- 本期抄表：把「这一行有问题」做成看得见的状态，不要只靠一句提示文字 ---- */
/* 波动大＝黄，读数比上期还小＝红。整行上色，员工扫一眼就知道该回头核对哪几行。 */
.grid tr.rd-warn > td{background:#fff6e0}
.grid tr.rd-bad  > td{background:#fdeaea}
.grid tr.rd-warn [data-tip]{color:#8a6d1a}
.grid tr.rd-bad  [data-tip]{color:#b3261e}
.grid tr.rd-warn [data-tip] label{display:inline-block;margin-top:3px;cursor:pointer}
/* 抄表输入框在手机上要够大 —— 员工是拿着手机在楼里走完再录的 */
@media (max-width:900px){
  .grid [data-in]{width:100%!important;min-width:90px}
}

/* ---- 合同页账单表：水电账单一眼认得出（跟租金/服务费区分）---- */
.grid tr.util-row > td{background:#f0f7ff}          /* 淡蓝 = 水电，跟租金那些白底行分开 */
.chip.util-chip{background:#dbeafe;color:#1e40af}   /* 「水电」小标签 */

/* ---- 合同费用：租金与卫生/其他费分开，不再用一个含糊的「月租金」数字 ---- */
.fee-summary>div{display:flex;justify-content:flex-end;gap:10px;white-space:nowrap;font-size:13px}
.fee-summary>div span{color:var(--muted)}
.fee-summary .fee-total{margin-top:3px;padding-top:3px;border-top:1px solid var(--line);color:var(--navy)}

/* ---- 合同原件归档：独立整宽工作区，避免文件、关联合同、上传框挤在基本信息里 ---- */
.contract-archive{margin-top:16px;scroll-margin-top:78px;padding:0;overflow:hidden}
.archive-head{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:20px 22px;
  border-bottom:1px solid var(--line);background:linear-gradient(135deg,#f7f9ff 0%,#fff 72%)}
.archive-head h2{margin:2px 0 3px;font-size:20px}
.archive-head p{margin:0;color:var(--muted);font-size:13px}
.archive-eyebrow{font-size:12px;font-weight:700;letter-spacing:.12em;color:var(--navy2)}
.archive-count{display:flex;align-items:baseline;gap:8px;white-space:nowrap;color:var(--muted)}
.archive-count b{font-size:28px;color:var(--navy)}
.archive-target{margin:18px 22px;padding:16px 18px;border:1px solid #cfd8f5;border-left:5px solid var(--navy2);
  border-radius:10px;background:#f7f9ff;display:grid;grid-template-columns:140px 1fr;gap:7px 14px;align-items:center}
.archive-target-label{grid-row:1/4;font-size:13px;font-weight:700;color:var(--navy2);align-self:start;padding-top:3px}
.archive-target strong{font-size:18px;color:var(--navy);margin-right:12px}
.archive-target>div:nth-child(2) span{color:var(--muted)}
.archive-unit-list{display:flex;gap:6px;flex-wrap:wrap}
.archive-unit-list span{padding:3px 8px;border-radius:999px;background:#e9eefc;color:var(--navy);font-size:12px}
.number-review{margin:0 22px 14px;padding:14px 16px;border:1px solid #e4b94b;border-radius:10px;background:#fff8e5;
  display:grid;grid-template-columns:34px 1fr auto;gap:12px;align-items:center}
.number-review.has-error{border-color:#e6a7aa;background:#fff1f1}
.number-review-icon{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#b77b00;color:#fff;font-weight:800}
.number-review.has-error .number-review-icon{background:#b4232a}
.number-review-copy{display:flex;flex-direction:column;gap:2px;font-size:13px}
.number-review-copy b{font-size:15px;color:var(--ink)}
.number-review-copy span{color:var(--muted)}
.number-review-copy .errtext{color:#a8071a;font-weight:600}
.number-review-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.archive-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;padding:0 22px 20px}
.archive-section-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px;font-size:14px}
.archive-section-title a{font-size:12px}
.archive-file{display:flex;align-items:center;gap:10px;padding:11px 0;border-top:1px solid var(--line)}
.archive-file-icon{flex:0 0 38px;height:38px;border-radius:8px;background:#e9eefc;color:var(--navy2);
  display:grid;place-items:center;font-size:10px;font-weight:800}
.archive-file-name{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}
.archive-file-name b{font-size:13px;overflow-wrap:anywhere}
.archive-file-name span{font-size:12px;color:var(--muted)}
.archive-empty{border:1px dashed #cbd3e7;border-radius:10px;padding:24px;text-align:center;display:flex;flex-direction:column;gap:5px}
.archive-empty span{font-size:12px;color:var(--muted)}
.archive-upload{border:1px solid #d5dcef;border-radius:12px;background:#f8faff;padding:16px;align-self:start}
.archive-upload h3{margin:0 0 12px;font-size:16px}
.archive-upload label{display:block;font-size:12px;font-weight:700;color:var(--muted);margin:0 0 12px}
.archive-upload select,.archive-upload input[type=file]{width:100%;margin-top:5px;background:#fff}
.archive-upload .btn{width:100%}
.archive-upload p{margin:9px 0 0;font-size:11px;line-height:1.55;color:var(--muted)}
.archive-drop{border:1px dashed #aebce0;border-radius:10px;padding:12px;background:#fff;cursor:pointer}
.archive-drop:hover{border-color:var(--navy2);background:#f7f9ff}
.archive-drop .selected-files{display:block;margin-top:7px;font-size:12px;color:var(--navy2);overflow-wrap:anywhere}
.renewal-file-panel{display:grid;grid-template-columns:minmax(240px,1fr) minmax(280px,1fr);gap:12px 22px;align-items:center;border-color:#c7d8f5;background:#f7f9ff}
.renewal-file-panel h3{margin:3px 0 6px}.renewal-file-panel>p{grid-column:2;margin:0}
@media(max-width:720px){.renewal-file-panel{grid-template-columns:1fr}.renewal-file-panel>p{grid-column:1}}
.ocr-status{font-weight:600}.ocr-status.busy{color:#8a6500}.ocr-status.done{color:var(--ok)}.ocr-status.failed{color:#a65b00}
.future-gaps{margin:16px 0;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:#fafbfe}
.future-gaps summary{cursor:pointer;font-weight:700;color:var(--navy2)}
.ocr-wait{max-width:720px;margin:8vh auto;display:grid;grid-template-columns:64px 1fr;gap:20px;padding:28px}
.ocr-wait-mark{width:58px;height:58px;border-radius:50%;display:grid;place-items:center;background:#e3f5e9;color:var(--ok);font-size:28px;font-weight:800}
.ocr-wait h1{margin:4px 0 5px}.ocr-wait p{overflow-wrap:anywhere}
.ocr-progress{height:6px;margin:20px 0 14px;border-radius:999px;background:#e5eaf4;overflow:hidden}
.ocr-progress span{display:block;width:42%;height:100%;border-radius:inherit;background:var(--navy2);animation:ocr-slide 1.5s ease-in-out infinite alternate}
@keyframes ocr-slide{from{transform:translateX(-70%)}to{transform:translateX(210%)}}
.related-archives{margin:0 22px 20px;border-top:1px solid var(--line);padding-top:13px}
.related-archives summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--navy2)}
.related-contract-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:8px;margin-top:10px}
.related-contract-grid a{display:flex;flex-direction:column;gap:3px;border:1px solid var(--line);border-radius:9px;padding:10px 12px;background:#fff}
.related-contract-grid a:hover{background:#f7f9ff;border-color:#aebce8}
.related-contract-grid span,.related-contract-grid small{color:var(--muted)}
@media(max-width:900px){
  .archive-grid{grid-template-columns:1fr}.archive-upload{order:-1}
  .number-review{grid-template-columns:34px 1fr}.number-review-actions{grid-column:2}
}
@media(max-width:560px){
  .archive-head{padding:16px;align-items:flex-start}.archive-head p{display:none}
  .archive-target{margin:14px 16px;grid-template-columns:1fr}.archive-target-label{grid-row:auto}
  .number-review{margin:0 16px 12px;padding:12px;grid-template-columns:1fr}.number-review-icon{display:none}.number-review-actions{grid-column:1}
  .archive-grid{padding:0 16px 16px}.archive-file{align-items:flex-start;flex-wrap:wrap}.archive-file-name{min-width:calc(100% - 50px)}
  .related-archives{margin:0 16px 16px}
  .ocr-wait{margin:20px 0;grid-template-columns:1fr;padding:20px}.ocr-wait-mark{width:46px;height:46px}
}
/* 员工手机工作台与扫码表计卡片 */
.workbench-hero,.meter-scan-card{max-width:1100px;margin:0 auto 18px}.workbench-hero h1{margin:2px 0}.manager-workbench{display:flex;align-items:center;justify-content:space-between;gap:18px}.task-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.task-card h3{display:flex;justify-content:space-between;margin-top:0}.task-card>a{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--line);text-decoration:none}.task-card>a span{color:var(--muted);font-size:13px;text-align:right}.meter-scan-card{max-width:680px}.meter-scan-card h1{font-size:28px}
.manager-lanes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.manager-lane{padding:0;overflow:hidden}.lane-owner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 15px;background:#f2f4fa;border-bottom:1px solid var(--line)}.lane-owner span{color:var(--navy);font-weight:800}.manager-lane>a{display:flex;justify-content:space-between;gap:14px;padding:12px 15px;border-bottom:1px solid var(--line);text-decoration:none}.manager-lane>a:last-child{border-bottom:0}.manager-lane>a:hover{background:#fafbff}.manager-lane>a span{color:var(--muted);font-size:12px;text-align:right}
.manager-lane>a b{display:flex;flex-direction:column;gap:4px}.manager-lane em{align-self:flex-start;padding:2px 6px;border-radius:99px;background:#edf1f8;color:#59637b;font-size:10px;font-style:normal;font-weight:700}.manager-lane em.urgent{background:#fff0ee;color:#b74236}
.manager-activity h3{margin-top:0}.manager-activity>div{display:grid;grid-template-columns:120px 150px 1fr;gap:8px;padding:8px 0;border-top:1px solid var(--line);font-size:12px}.manager-activity time,.manager-activity span{color:var(--muted)}
.exception-hub{margin:0 0 18px;padding:16px 18px;border:1px solid #d8deee;border-radius:14px;background:linear-gradient(135deg,#fff8ed,#f5f8ff)}.exception-head{display:flex;justify-content:space-between;gap:14px;align-items:flex-start;margin-bottom:10px}.exception-head h2{margin:0 0 3px}.exception-head p{margin:0;color:var(--muted);font-size:13px}.exception-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.exception-card{display:flex;flex-direction:column;justify-content:space-between;min-height:145px;padding:12px;border:1px solid #dce1ec;border-radius:11px;background:#fff;color:var(--ink);text-decoration:none}.exception-card:hover{border-color:#aebce8;box-shadow:0 4px 14px rgba(30,39,97,.09)}.exception-card.urgent{border-left:4px solid #d8665b}.exception-card b{display:block;color:var(--navy);margin:7px 0 4px;font-size:14px}.exception-card p{margin:0;color:var(--muted);font-size:12px;line-height:1.5}.exception-card footer{display:flex;justify-content:space-between;gap:8px;margin-top:10px;color:#68718a;font-size:11px}.workflow-status{display:inline-block;padding:2px 6px;border-radius:99px;background:#edf1f8;color:#59637b;font-size:10px;font-weight:800}.workflow-status.urgent{background:#fff0ee;color:#b74236}.empty-state.compact{margin:0;padding:12px 0;background:transparent;border:0}
.portal-readiness{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 10px;padding:11px 12px;border:1px solid #d8deee;border-radius:10px;background:#f8faff}.portal-readiness>div{margin-right:auto}.portal-readiness b{display:block;color:var(--navy);font-size:13px}.portal-readiness span{display:block;color:var(--muted);font-size:12px}.portal-readiness a{padding:5px 8px;border:1px solid #d7ddea;border-radius:99px;background:#fff;color:#68718a;font-size:12px;text-decoration:none}.portal-readiness a.done{border-color:#b9dfc4;background:#f1fbf4;color:#24713a;font-weight:700}
@media(max-width:720px){.task-grid,.manager-lanes,.role-lanes,.cashflow-links,.exception-grid,.decision-strip,.director-decisions{grid-template-columns:1fr}.task-card{padding:14px}.task-card>a{align-items:flex-start}.task-card>a span{max-width:45%}.workbench-hero p{font-size:14px}.manager-workbench,.role-home-head,.staff-role-home{align-items:flex-start;flex-direction:column}.manager-activity>div{grid-template-columns:1fr}.meter-scan-card .grid2{grid-template-columns:1fr 1fr}.exception-head{flex-direction:column}.exception-card{min-height:0}}
/* JS 生成的容器在桌面保持透明；专用手机摘要单元格只在窄屏显示。 */
.mobile-cell-value{display:contents}
.grid td.mobile-card-head{display:none}
.mobile-list-end{display:none}
@media(max-width:720px){
  /* 双保险：旧页面若已创建桌面粘性表头，也不准它扩大手机页面的滚动范围。 */
  .grid-sticky-shell{display:none!important;width:0!important;height:0!important;overflow:hidden!important}
  .guide-prompt summary{align-items:flex-start;flex-direction:column}.guide-prompt span{display:block;margin-top:3px}
  .portal-readiness{align-items:flex-start}.portal-readiness>div{width:100%}.portal-readiness a{flex:1;text-align:center}
  .manager-lane>a span{max-width:52%}.next-step-body{align-items:flex-start;flex-direction:column}.next-step-body .btn{width:100%;text-align:center}
  .work-progress{display:flex;overflow-x:auto;padding-bottom:4px}.work-progress>b{min-width:90px}.work-progress>span{min-width:135px}
  /* 旧桌面规则给账单/收款表保留了 900/1080px min-width，卡片因此伸出手机屏幕。这里必须全部归零。 */
  .tablewrap:has(>.mobile-task-table){overflow-x:visible}
  .mobile-task-table,.action-grid.mobile-task-table,.bills-grid.mobile-task-table,.payments-grid.mobile-task-table{
    display:block!important;width:100%!important;min-width:0!important;max-width:100%!important;background:transparent!important;border:0!important;table-layout:auto!important}
  .mobile-task-table colgroup,.mobile-task-table>thead{display:none!important}.mobile-task-table>tbody{display:block;width:100%}
  .mobile-task-table tr:has(td){display:block!important;position:relative;width:100%;max-width:100%;box-sizing:border-box;margin:0 0 10px;border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden}
  .mobile-task-table tr:has(td)>td{display:none!important;width:auto!important;min-width:0!important;max-width:none!important;padding:10px 12px!important;border:0!important;border-bottom:1px solid #edf0f5!important;white-space:normal!important;text-align:left!important;box-shadow:none!important}
  .mobile-task-table tr:has(td)>td.mobile-card-head{display:grid!important;grid-template-columns:minmax(0,1fr) auto;gap:5px 12px;align-items:start;padding:13px 12px!important;background:#fff!important}
  .mobile-task-table tr:has(td)>td.mobile-card-select-source{display:block!important;position:absolute;z-index:1;left:13px;top:20px;width:22px!important;padding:0!important;border:0!important;background:transparent!important}
  .mobile-card-select-source input{width:20px;height:20px;margin:0}
  .mobile-task-table tr:has(td)>td.mobile-card-head.has-select{padding-left:48px!important}
  .mobile-card-copy{display:flex;min-width:0;flex-direction:column;gap:3px}.mobile-card-copy>a,.mobile-card-copy>b{font-size:16px;font-weight:800;color:var(--navy);overflow-wrap:anywhere}.mobile-card-copy>span{font-size:13px;color:var(--ink);overflow-wrap:anywhere}
  .mobile-card-facts{display:flex;min-width:88px;flex-direction:column;align-items:flex-end;gap:2px;text-align:right}.mobile-card-facts>b{font-size:16px;color:var(--ink);font-variant-numeric:tabular-nums}.mobile-card-facts>small{font-size:10px;color:var(--muted)}.mobile-card-facts>em{margin-top:2px;padding:2px 7px;border-radius:99px;background:#eef1f8;color:var(--navy2);font-size:10px;font-style:normal;font-weight:800}
  .mobile-card-head .mobile-row-toggle{grid-column:1/-1;justify-self:end;margin-top:5px}
  .mobile-task-table tr:has(td)>td.mobile-summary-cell{display:flex!important;align-items:flex-start;justify-content:space-between;gap:12px}
  .mobile-task-table tr.mobile-open>td:not(.mobile-card-head){display:grid!important;grid-template-columns:88px minmax(0,1fr);align-items:start;gap:12px}
  .mobile-task-table tr.mobile-open>td.mobile-card-select-source{display:block!important}
  .mobile-task-table tr.mobile-open>td.mobile-empty-field{display:none!important}
  .mobile-task-table tr.mobile-open>td:not(.mobile-card-head):before{content:attr(data-label);color:var(--muted);font-size:11px;font-weight:700;line-height:1.45}
  .mobile-task-table tr.mobile-open>td.mobile-summary-cell:before{content:attr(data-label)}
  .mobile-task-table tr.mobile-open>td.mobile-card-head{display:grid!important}
  .mobile-cell-value{display:block;min-width:0;overflow-wrap:anywhere;text-align:right;line-height:1.45}
  .mobile-cell-value input:not([type=checkbox]),.mobile-cell-value select{max-width:100%}
  .mobile-cell-value .rowact{justify-content:flex-end;flex-wrap:wrap}.mobile-cell-value .fee-summary>div{justify-content:flex-end}
  .mobile-row-toggle{display:inline-flex;margin-left:auto;padding:6px 10px;border:1px solid #cbd4e5;border-radius:8px;background:#f7f9fd;color:var(--navy2);font-size:11px;font-weight:700;min-height:32px;align-items:center}
  .mobile-task-table tr:not(.mobile-open) .actcol{display:none!important}
  .mobile-list-end{display:flex;align-items:center;gap:10px;margin:12px 0 18px;color:#8a92a5;font-size:11px;text-align:center}
  .mobile-list-end:before,.mobile-list-end:after{content:"";height:1px;flex:1;background:#d9deea}
  .dashboard-expiry-table{display:none}
  .dashboard-expiry-mobile{display:grid;gap:10px;margin-bottom:16px}
  .dashboard-expiry-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 14px;
    padding:14px 15px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--ink);text-decoration:none}
  .dashboard-expiry-card:hover{text-decoration:none;background:#fafbff}
  .dashboard-expiry-main,.dashboard-expiry-money{display:flex;flex-direction:column;gap:2px}
  .dashboard-expiry-main b{color:var(--navy);font-size:17px}.dashboard-expiry-main small{font-size:13px;color:var(--ink)}
  .dashboard-expiry-money{align-items:flex-end}.dashboard-expiry-money b{font-size:17px}.dashboard-expiry-money small{color:var(--muted)}
  .dashboard-expiry-meta{grid-column:1/-1;color:var(--muted);font-size:12px}
}
@media(min-width:721px){.mobile-row-toggle{display:none}.mobile-card-head{display:none!important}}
@media(max-width:720px){.mobile-task-table>tbody>tr:first-child:not(:has(td)){display:none!important}}
.workflow-health{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px}.workflow-health>span{padding:7px 10px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--muted)}.workflow-health>span b{color:var(--ink);font-size:17px}.workflow-health>span.breached{border-color:#efb2b2;background:#fff3f3;color:#a11}.workflow-health>small{color:var(--muted)}
:where(a,button,summary,[tabindex]):focus-visible{outline:3px solid #315fc4;outline-offset:2px;border-radius:4px}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
.biz-insights{margin:18px 0}.biz-insights-head h2{margin-bottom:4px}.biz-insights-head p{margin:0;color:var(--muted);font-size:13px}.biz-insight-grid,.share-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px}.biz-insight{display:block;border:1px solid var(--line);border-left:4px solid var(--navy2);border-radius:10px;padding:13px;text-decoration:none;color:var(--ink);background:#fff}.biz-insight>span{font-size:11px;color:var(--muted)}.biz-insight h3{margin:4px 0 6px;font-size:16px}.biz-insight p{margin:0 0 8px;font-size:13px;color:var(--muted);line-height:1.55}.biz-insight b{font-size:12px;color:var(--navy2)}.biz-insight.alert{border-left-color:var(--danger)}.biz-insight.warn{border-left-color:#e59a2e}.biz-insight.good{border-left-color:var(--ok)}.share-card-head{display:flex;justify-content:space-between;gap:12px;align-items:start}.share-card-head h3{margin:3px 0}.share-url{padding:8px 10px;background:#f5f7fb;border-radius:7px;font-size:12px;overflow-wrap:anywhere;margin:10px 0}.share-card .actions{margin-bottom:0}
@media(max-width:720px){.biz-insight-grid,.share-grid{grid-template-columns:1fr}.biz-insight{padding:12px}.share-card{margin-bottom:0}}

/* ==== 手机端第二轮：一手操作、弱网与小屏基础规范 ==== */
.mobile-filter-summary,.network-banner{display:none}
.upload-progress{display:grid;grid-template-columns:1fr;gap:5px;width:100%;margin-top:9px}.upload-progress>span{display:block;height:5px;overflow:hidden;border-radius:99px;background:#dfe4ef}.upload-progress>span:after{content:"";display:block;width:42%;height:100%;border-radius:inherit;background:var(--navy2);animation:upload-slide 1.2s ease-in-out infinite alternate}.upload-progress small{color:var(--muted)}.submit-slow .upload-progress>span:after{background:var(--warn);animation:none;width:100%}@keyframes upload-slide{from{transform:translateX(-80%)}to{transform:translateX(220%)}}
@media(max-width:760px){
  /* iOS 对小于 16px 的输入框会自动放大；所有录入控件统一为可读、可点尺寸。 */
  input[type=text],input[type=password],input[type=number],input[type=date],input[type=search],input[type=month],input[type=tel],input[type=email],select,textarea{
    min-height:44px;font-size:16px!important;line-height:1.35}
  input[type=file]{min-height:44px;font-size:16px;max-width:100%}
  button,.status-tabs a,.fee-filter{min-height:44px}
  .btn,.btn.sm,.btn.xs,.rowmenu-btn,.navtoggle,.mobile-search-toggle{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center}
  input[type=checkbox],input[type=radio]{min-width:20px;min-height:20px}
  .rowmenu-btn{width:44px;height:44px;font-size:18px}
  .mobile-row-toggle{min-height:44px}
  /* 待办统计保持一行可滑，避免 4–6 张卡把真正列表推到两三屏之后。 */
  .queue{display:flex;grid-template-columns:none;gap:8px;overflow-x:auto;scroll-snap-type:x proximity;padding:1px 1px 7px;margin-right:-12px}
  .q-card{flex:0 0 158px;scroll-snap-align:start;min-height:88px;padding:9px 10px}.q-sub{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  /* 六个列表共用折叠筛选：当前条件留成 chips，默认先让用户看到业务记录。 */
  .mobile-filter-summary{display:flex;align-items:center;gap:7px;min-width:0;margin:0 0 9px}
  .mobile-filter-button{flex:0 0 auto}.mobile-filter-chips{display:flex;gap:5px;min-width:0;overflow-x:auto;white-space:nowrap}
  .mobile-filter-chips>span{padding:4px 7px;border-radius:99px;background:#e9edf8;color:#4e5872;font-size:11px}
  .mobile-filter-clear{flex:0 0 auto;font-size:12px}.filterbar.mobile-filter-collapsed{display:none!important}
  .filterbar{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px 10px;width:100%;max-width:100%;align-items:end}
  .filterbar>div{grid-column:1/-1;min-width:0}.filterbar>div:has(input[type=date]){grid-column:auto}
  .filterbar>div:has(>button[type=submit]){display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.filterbar>div:has(>button[type=submit]) .btn[type=submit]{width:100%}
  .filterbar input,.filterbar select{width:100%!important;max-width:100%}.filter-summary{grid-column:1/-1;padding-top:9px;border-top:1px solid var(--line);line-height:1.55}
  /* 分页只保留上一页、当前页和下一页；其它页码在手机没有决策价值。 */
  .pager{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;padding:10px}.pager>.mini{grid-column:1/-1;text-align:center}.pager-links{display:block;grid-column:2}.pager-links a:not(.on),.pager-links span{display:none}.pager>.btn:last-child{grid-column:3}.pager>.btn{width:100%;text-align:center}
  /* 固定操作条与悬浮入口避开 iPhone Home Indicator。 */
  .sticky-submit,.water-save-bar{bottom:0;padding-bottom:max(10px,env(safe-area-inset-bottom))}
  .ai-fab{bottom:max(10px,env(safe-area-inset-bottom))}
  .ttabs{height:calc(60px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom)}
  .tapp{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
  .drawer{height:100dvh}.ai-panel{max-height:calc(100dvh - 86px)}
  input,select,textarea,button{scroll-margin-bottom:120px}
  /* 卡片摘要控制长文本；整张摘要可点，焦点和按钮仍清晰。 */
  .mobile-card-head{cursor:pointer}.mobile-card-copy>a,.mobile-card-copy>b,.mobile-card-copy>span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .mobile-card-head:focus-visible{outline:3px solid #315fc4;outline-offset:-3px}
  .batch-bar{position:static}.batch-actions{display:grid;grid-template-columns:1fr 1fr}.batch-actions .btn{width:100%}
  /* 当前流程只显示正在做的一步；完整流程仍可从这一步进入。 */
  .revenue-flow{display:block;overflow:visible}.revenue-stage{display:none}.revenue-stage.current{display:flex}.revenue-stage.current:after{content:attr(data-progress);margin-left:auto;color:var(--muted);font-size:11px;white-space:nowrap}
  .work-progress{display:block;overflow:visible}.work-progress>b{display:block;margin-bottom:6px}.work-progress>span{display:none!important}.work-progress>span.current,.work-progress:not(:has(span.current))>span:last-child{display:grid!important;grid-template-columns:auto 1fr auto;min-width:0}.work-progress>span.current:after,.work-progress:not(:has(span.current))>span:last-child:after{content:attr(data-progress);color:var(--muted);font-size:10px;align-self:center}
  .network-banner{position:sticky;top:var(--table-sticky-top);z-index:19;padding:9px 12px;background:#fff2cc;border-bottom:1px solid #dfbd58;color:#624d0b;font-size:12px}
  .network-banner:not([hidden]){display:block}
}
@media(max-width:520px){
  .topbar{padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right));gap:6px}
  .brand{flex:1 1 auto}.brand small{display:none}.brand a{font-size:15px}
  .mobile-search-toggle{display:inline-flex;order:3}.who{order:2;margin-left:0}.navtoggle{order:4}.global-tools{order:1}
  .navsearch{display:none;order:5;flex-basis:100%;margin-top:2px}.navsearch.mobile-open{display:block}
  .navsearch input{border-radius:9px}.who .logout{margin-left:0}.task-link-label{display:none}
  .ai-panel{height:calc(100dvh - 78px)}
}
@media(max-width:360px){
  .filterbar>div:has(input[type=date]){grid-column:1/-1}
  .mobile-task-table tr:has(td)>td.mobile-card-head{grid-template-columns:1fr}.mobile-task-table tr:has(td)>td.mobile-card-head.has-select{padding-left:48px!important}
  .mobile-card-facts{align-items:flex-start;text-align:left;min-width:0}.mobile-card-head .mobile-row-toggle{justify-self:stretch}
}

/* ==== 使用帮助 · 流程手册（app/help_manual.py + help.html） ====
   结构：顶部搜索/统计 → 左侧分类导航 + 频率/岗位筛选 → 右侧每个流程一张可展开的卡
   （步骤 | 岗位×时间线泳道 SVG）。打印时全部展开、隐藏导航。 */
.hm-wrap{max-width:1360px}
.hm-top{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:12px}
.hm-top .sub{margin-bottom:0;max-width:720px}
.hm-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.hm-tools input{width:300px;max-width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:20px;font-size:13.5px}
.hm-stat{font-size:12px;color:var(--muted);white-space:nowrap}
.hm-stat b{color:var(--navy)}
.hm-rolehome{margin-bottom:14px}
.hm-wrap .print-tip{max-width:none;margin:0 0 12px}
.hm-layout{display:grid;grid-template-columns:210px minmax(0,1fr);gap:18px;align-items:start}
.hm-side{position:sticky;top:64px;max-height:calc(100vh - 80px);overflow-y:auto;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 10px 14px}
.hm-side h4{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:12px 0 6px 6px}
.hm-side h4:first-child{margin-top:0}
.hm-cnav{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:5px 8px;border-radius:6px;color:#3a4256;font-size:13px;border-left:2px solid transparent}
.hm-cnav:hover{background:var(--chip);color:var(--navy);text-decoration:none}
.hm-cnav.on{background:#e6f4ea;color:var(--ok);border-left-color:var(--ok)}
.hm-cnav em{font-style:normal;font-size:11px;color:var(--muted)}
.hm-cnav-plain{color:var(--muted)}
.hm-pills{display:flex;flex-wrap:wrap;gap:5px;padding:0 4px}
.hm-fp{font-size:12px;padding:3px 10px;border-radius:14px;border:1px solid var(--line);background:#fff;color:#3a4256;cursor:pointer}
.hm-fp.on{background:var(--navy);border-color:var(--navy);color:#fff}
.hm-legend{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#3a4256;padding:0 6px}
.hm-lg{display:inline-flex;align-items:center;gap:7px}
.hm-lg i{width:10px;height:10px;border-radius:3px;flex:none}
.hm-side-tip{margin:12px 6px 0}
.hm-main{min-width:0}
.hm-cat{padding-top:6px;margin-bottom:22px;scroll-margin-top:70px}
.hm-anchor{display:block;position:relative;top:-70px;visibility:hidden;height:0}
.hm-cathead{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;border-bottom:2px solid #d8deee;padding-bottom:6px;margin-bottom:10px}
.hm-cathead h2{margin:0;font-size:18px}
.hm-cdesc{color:var(--muted);font-size:12.5px}
.hm-proc{background:var(--card);border:1px solid var(--line);border-radius:10px;margin:0 0 8px;overflow:hidden}
.hm-proc[open]{box-shadow:0 4px 18px -10px rgba(30,39,97,.35);border-color:#c7d2ee}
.hm-proc>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:10px 14px;flex-wrap:wrap}
.hm-proc>summary::-webkit-details-marker{display:none}
.hm-proc>summary:hover{background:#f7f8fc}
.hm-pc{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;font-weight:700;color:var(--danger);flex:none;min-width:34px}
.hm-pn{font-weight:700;font-size:14.5px;flex:1;min-width:160px;color:var(--ink)}
.hm-ptags,.hm-pdepts{display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.hm-chip{font-size:11px;padding:2px 8px;border-radius:14px;background:var(--chip);color:#41496a;border:1px solid transparent;white-space:nowrap}
.hm-chip.t{background:#fdf0d9;color:#8a5a00}
.hm-chip.m{white-space:normal}
.hm-role{font-size:9.5px;letter-spacing:.1em;color:var(--muted);font-weight:700}
.hm-role.rc{margin-left:6px}
.hm-dchip{font-size:11px;padding:2px 8px;border-radius:14px;white-space:nowrap;color:var(--c);border:1px solid var(--c);background:color-mix(in srgb,var(--c) 10%,#fff)}
.hm-chev{margin-left:auto;color:var(--muted);transition:transform .2s;font-size:12px}
.hm-proc[open] .hm-chev{transform:rotate(180deg)}
.hm-body{padding:4px 14px 14px;border-top:1px solid #eef1f7}
.hm-purpose{color:#3a4256;font-size:13.5px;margin:10px 0 4px}
.hm-cols{display:grid;grid-template-columns:minmax(260px,380px) minmax(0,1fr);gap:20px;margin-top:8px}
.hm-cols.single,.hm-cols.wide{grid-template-columns:1fr}
.hm-cols.wide .hm-stepcol{max-width:none}
.hm-cols h4{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:6px 0 8px;display:flex;align-items:center;gap:8px}
.hm-steps{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.hm-steps li{display:flex;gap:10px}
.hm-sn{flex:none;width:22px;height:22px;border-radius:50%;background:var(--navy);color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center}
.hm-sn.auto{background:#fff;color:#5a6470;border:1.5px dashed #8b93a5}
.hm-st{font-weight:600;font-size:13.5px;line-height:1.45;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.hm-dot{width:9px;height:9px;border-radius:3px;flex:none;display:inline-block}
.hm-auto{font-weight:400;color:var(--muted);font-size:11px;border:1px dashed #c3c8d4;border-radius:10px;padding:0 6px}
.hm-sd{color:#4b5567;font-size:12.5px;margin-top:1px;line-height:1.5}
.hm-rev{margin-top:12px;background:#e8f4ec;border-left:3px solid var(--ok);border-radius:6px;padding:9px 12px;font-size:12.5px;color:#2b4a36}
.hm-rev .hm-rl{font-weight:700;color:var(--ok);font-size:11.5px;margin-bottom:3px}
.hm-note{margin-top:8px;background:#fdf5f5;border-left:3px solid #e0b4b6;border-radius:6px;padding:9px 12px;font-size:12.5px;color:#5b3a3c}
.hm-note .hm-nl{font-weight:700;color:var(--danger);font-size:11.5px;margin-bottom:3px}
.hm-links{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.hm-zoom{margin-left:auto;font-size:10.5px;letter-spacing:0;text-transform:none;color:var(--muted);background:#fff;border:1px solid var(--line);border-radius:12px;padding:2px 8px;cursor:pointer}
.hm-zoom:hover{background:var(--chip);color:var(--navy)}
.hm-board{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:#fafbfe;cursor:zoom-in}
svg.fc{display:block;width:auto;height:auto;max-width:none}
.hm-board{padding:0 0 2px}
.hm-glossary .kv{grid-template-columns:150px 1fr;font-size:13.5px}
.hm-faq .help-q:first-child{margin-top:0}
.hm-noresult{padding:40px;text-align:center;color:var(--muted)}
/* 流程图放大层 */
.hm-lb[hidden],.hm-noresult[hidden],.hm-proc[hidden],.hm-cat[hidden]{display:none!important}
.hm-lb{position:fixed;inset:0;z-index:100;background:rgba(20,24,48,.82);display:flex;flex-direction:column}
.hm-lbbar{flex:none;display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--navy);color:#fff}
.hm-lbbar .hm-lbt{font-weight:700;font-size:15px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hm-lbbar button{font-size:12.5px;color:#fff;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);border-radius:14px;padding:4px 11px;cursor:pointer;white-space:nowrap}
.hm-lbbar button:hover{background:rgba(255,255,255,.22)}
.hm-lbpct{font-family:ui-monospace,Menlo,monospace;font-size:12px;min-width:48px;text-align:center;opacity:.85}
.hm-lbx{font-size:15px;padding:2px 10px;margin-left:6px}
.hm-lbwrap{flex:1;overflow:auto;padding:20px;cursor:grab}
.hm-lbwrap.drag{cursor:grabbing;user-select:none}
.hm-lbwrap svg.fc{width:auto;min-width:0;height:auto;margin:0 auto;background:#fff;border-radius:8px;box-shadow:0 8px 30px rgba(0,0,0,.35)}
@media(max-width:1000px){
  .hm-layout{grid-template-columns:1fr}
  .hm-side{position:static;max-height:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:2px 10px}
  .hm-side h4{grid-column:1/-1}
  .hm-pills,.hm-legend,.hm-side-tip{grid-column:1/-1}
  .hm-legend{flex-direction:row;flex-wrap:wrap;gap:4px 12px}
  .hm-cols{grid-template-columns:1fr}
}
@media print{
  .hm-top .hm-tools,.hm-side,.hm-rolehome,.hm-chev,.hm-zoom,.hm-lb,.hm-noresult{display:none!important}
  .hm-layout{display:block}
  .hm-cat,.hm-proc{break-inside:auto}
  .hm-proc{box-shadow:none;border:1px solid #ccc;margin-bottom:8px}
  .hm-proc>summary{background:#f0f2f9;break-after:avoid}
  .hm-body{display:block!important}
  .hm-cols{display:block}
  .hm-steps li,.hm-rev,.hm-note{break-inside:avoid}
  .hm-chartcol{margin-top:10px}
  .hm-board{cursor:auto;overflow:visible}
  .hm-board,svg.fc{break-inside:auto;min-width:0}
  svg.fc{max-width:100%;height:auto}
  .hm-links{display:none}
}

/* ==== 右下角「加载中」指示器（_loading.html） ==== */
.page-loading{position:fixed;bottom:16px;right:16px;z-index:90;display:flex;align-items:center;gap:8px;
  padding:8px 14px;border-radius:999px;background:rgba(255,255,255,.96);border:1px solid var(--line);
  box-shadow:0 6px 20px rgba(30,39,97,.14);font-size:12.5px;font-weight:500;color:#41496a;
  max-width:calc(100vw - 32px);white-space:nowrap;pointer-events:none}
/* ⚠️ display:flex 会盖过浏览器自带的 [hidden]{display:none}，必须显式写回去，否则永远「加载中」。 */
.page-loading[hidden]{display:none}
.page-loading .pl-spin{width:14px;height:14px;border-radius:50%;border:2px solid #cdd4ea;border-top-color:var(--navy2);
  animation:pl-spin .8s linear infinite;flex:none}
.page-loading .pl-note{font-size:11px;color:#8a6d1a}
.page-loading.slow{border-color:#f0d9a0;background:#fff8e8;color:#8a6d1a}
.page-loading.slow .pl-spin{border-color:#f0d9a0;border-top-color:#b8860b}
@keyframes pl-spin{to{transform:rotate(360deg)}}
@media print{.page-loading{display:none!important}}
@media (prefers-reduced-motion:reduce){.page-loading .pl-spin{animation-duration:2s}}

/* ==== 系统状态页 /admin/status ==== */
.st-head{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.st-head .mini{margin:0}
.st-banner{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:12px;border:1px solid var(--line);
  background:#fff;font-weight:600;margin:12px 0 16px}
.st-banner .st-dot{width:12px;height:12px}
.st-banner.ok{background:#e6f4ea;border-color:#b6dfc2;color:var(--ok)}
.st-banner.warn{background:#fdf0d9;border-color:#f0d9a0;color:#8a6d1a}
.st-banner.crit{background:#fbe9e9;border-color:#efc2c4;color:var(--danger)}
.st-banner.unknown{background:#f0f2f9;color:#41496a}
.st-dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#b9c0d4;flex:none}
.st-dot.ok{background:#1aa55a}.st-dot.warn{background:#e0a11b}.st-dot.crit{background:#d7373f}
.st-res{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:16px}
.st-res .card .v{font-size:30px;line-height:1.1}
.st-res .card .v.ok{color:var(--ok)}.st-res .card .v.warn{color:#b8860b}.st-res .card .v.crit{color:var(--danger)}
.st-res .card .k{display:flex;align-items:center;gap:6px}
.st-bar{height:6px;border-radius:3px;background:#edf0f7;overflow:hidden;margin-top:10px}
.st-bar i{display:block;height:100%;background:#1aa55a;transition:width .4s}
.st-bar i.warn{background:#e0a11b}.st-bar i.crit{background:#d7373f}
.st-spark{margin-top:10px;height:36px}
.st-spark svg{width:100%;height:36px;display:block}
.st-spark .empty{font-size:11px;color:#9aa3b8;line-height:36px}
.st-checks{padding:0;overflow:hidden}
.st-row{border-bottom:1px solid var(--line)}
.st-row:last-child{border-bottom:none}
.st-row>button{all:unset;display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;padding:11px 16px;cursor:pointer}
.st-row>button:hover{background:#fafbff}
.st-row>button:focus-visible{outline:2px solid var(--navy2);outline-offset:-2px}
.st-row .st-label{font-weight:600;flex:1 1 160px;min-width:0}
.st-row .st-sum{font-size:12.5px;color:#41496a;flex:3 1 260px;text-align:right;min-width:0}
.st-row .st-sum.warn{color:#8a6d1a}.st-row .st-sum.crit{color:var(--danger)}.st-row .st-sum.unknown{color:var(--muted)}
.st-row .st-caret{color:#9aa3b8;transition:transform .15s;flex:none}
.st-row.open .st-caret{transform:rotate(90deg)}
.st-detail{display:none;padding:2px 16px 14px 36px;font-size:12.5px;color:#41496a}
.st-row.open .st-detail{display:block}
.st-detail table{width:100%;border-collapse:collapse;font-size:12px}
.st-detail th{text-align:left;color:var(--muted);font-weight:500;padding:3px 6px 3px 0}
.st-detail td{padding:3px 6px 3px 0;border-top:1px solid #eef0f6;vertical-align:top}
.st-detail td.num{text-align:right;white-space:nowrap}
.st-detail code{font-size:11.5px;background:#f0f2f9;padding:1px 4px;border-radius:4px;word-break:break-all}
.st-kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px 14px}
.st-kv .k{color:var(--muted);font-size:11.5px}
.st-note{color:var(--muted);margin-top:6px}
.st-two{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.st-up{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:10px}
.st-days{display:grid;grid-template-columns:repeat(90,1fr);gap:2px;height:28px}
.st-days i{display:block;border-radius:2px;background:#e4e7ee}
.st-days i.ok{background:#1aa55a}.st-days i.warn{background:#e0a11b}.st-days i.crit{background:#d7373f}
.st-days-lbl{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:4px}
.st-legend{font-size:11.5px;color:var(--muted);margin-top:8px}
@media (max-width:760px){
  .st-res,.st-up,.st-two{grid-template-columns:1fr}
  .st-row>button{flex-wrap:wrap;padding:10px 12px}
  .st-row .st-sum{text-align:left;flex-basis:100%;padding-left:20px}
  .st-detail{padding-left:12px}
  .st-days{height:20px;gap:1px}
}

/* ---- 办理上下文条 / 办理结果 / 流程待办卡（2026-09-18 连续流程） ---- */
.work-context{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:10px 14px;margin:0 0 14px;border:1px solid var(--line);border-left:4px solid var(--navy2);border-radius:10px;background:var(--card);font-size:14px}
.work-context>b{margin-right:4px}
.work-context-item{display:inline-flex;flex-direction:column;line-height:1.25;min-height:44px;justify-content:center}
.work-context-item small{color:var(--muted);font-size:11px}
.work-context-item a{text-decoration:none;font-weight:600;display:inline-block;padding:6px 0}
.work-context-task{border-left:1px dashed var(--line);padding-left:12px}
.work-context-dropped{color:#a15c00}
.work-context-strip{margin:0 0 10px}
.work-context-strip .work-context-task{border-left:0;padding-left:0}
.work-context-back{margin-left:auto;padding:8px 12px;min-height:44px;display:inline-flex;align-items:center;font-weight:600;text-decoration:none}
.workflow-result{border-left:4px solid var(--ok)}
.workflow-result .ok{color:var(--ok);font-weight:600}
.flow-task{margin:10px 0}
.flow-task .task-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.flow-task .task-head h3{margin:0}
.flow-task .btn{margin-top:6px}
.btn.disabled{opacity:.55;cursor:not-allowed;pointer-events:none}
tr.ctx-focus td{background:rgba(47,111,237,.08)}
tr.changed td{background:rgba(255,193,7,.12)}
@media(max-width:720px){.work-context{padding:10px 12px}.work-context-back{margin-left:0;width:100%;justify-content:center;border:1px solid var(--line);border-radius:8px}.work-context-item{min-width:45%}}

.confirm-card h3{margin:4px 0 8px}
.confirm-form{margin-top:8px}
.confirm-options{display:flex;flex-wrap:wrap;gap:8px 18px;margin:6px 0}
.confirm-option{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:16px}
.confirm-form .btn{margin-top:6px}
.confirm-err{margin:6px 0 4px}
.confirm-alt{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line,#ddd)}

/* Staff task continuity: one current decision, readable facts and safe recovery. */
.settlement-choices{padding:18px;background:var(--surface,#f4f7fb);border:1px solid var(--line,#cbd5e1);border-radius:12px;margin:16px 0}
.settlement-choices .btnrow{align-items:center;flex-wrap:wrap}
#staff-handoffs .inline-form{display:flex;flex-wrap:wrap;gap:12px;align-items:end}
#staff-handoffs .field{min-width:180px;margin:0}
.confirm-file-pending{border-left:4px solid #b57905;padding:12px;background:#fff5dd}
@media(max-width:700px){#staff-handoffs .field{width:100%}.settlement-choices .btn{white-space:normal;min-height:44px}}

@media(max-width:720px){.handoff-readings{min-width:0;width:100%}.handoff-readings tr:first-child{display:none}.handoff-readings tr:not(:first-child){display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);border:1px solid var(--line,#cbd5e1);margin:10px 0;padding:10px}.handoff-readings td{display:block;min-width:0;border:0;padding:5px;overflow-wrap:anywhere}.handoff-readings td:first-child,.handoff-readings td:nth-child(3){grid-column:1/-1}.handoff-readings input{width:100%;min-height:44px;font-size:16px}.handoff-readings label{display:block}}

@media(max-width:720px){.filterbar.has-primary-search.mobile-filter-collapsed{display:flex!important;flex-wrap:wrap;gap:10px}.filterbar.has-primary-search.mobile-filter-collapsed>div:not(.primary-search-field){display:none!important}.filterbar.has-primary-search .primary-search-field{flex:1 1 100%;min-width:0}.filterbar.has-primary-search .primary-search-field input{width:100%;min-height:44px;font-size:16px}}

/* Keep routine work visible; optional explanations open beside a question mark. */
.context-help{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400}
.help-trigger{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:1px solid #8996a8;border-radius:50%;background:transparent;color:#42536b;font-size:14px;font-weight:600;line-height:1;cursor:help}
.help-trigger:hover,.help-trigger:focus-visible{background:#eaf1fb;outline:2px solid #356ac3;outline-offset:2px}
.help-copy{position:fixed;inset:auto;margin:0;box-sizing:border-box;width:324px;max-width:calc(100vw - 16px);padding:12px 14px;border:1px solid #bac5d4;border-radius:10px;background:#fff;color:#24344d;box-shadow:0 8px 28px #162b4b26;font:400 14px/1.6 system-ui,sans-serif;overflow-wrap:anywhere}
.help-copy a{display:inline-block;margin-top:6px}
.bill-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.bill-heading h1,.bill-heading .actions{margin:0}
.bill-types{display:flex;gap:24px;border-bottom:1px solid #dbe2ec;margin-bottom:16px}
.bill-types a{padding:10px 2px;border-bottom:3px solid transparent;text-decoration:none;color:#526176;font-weight:600}
.bill-types a.on{border-color:#2862b7;color:#194e99}
.bill-search{display:flex;align-items:center;gap:10px;margin:0 0 16px;flex-wrap:wrap}
.bill-search input[type=search]{width:360px;max-width:100%;min-width:0}
.bill-search .mini{margin-left:auto}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
@media(max-width:600px){.bill-search input[type=search]{flex:1;width:auto}.bill-heading .actions{gap:6px}.bill-heading .btn{font-size:13px}}
@media print{.context-help,.bill-search,.bill-types{display:none!important}}

#bill-batch-bar[hidden]{display:none}

.bill-search input[type=search]{height:40px;padding:8px 12px;border:1px solid #b7c3d4;border-radius:7px;background:#fff;color:#24344d;font:inherit}

.help-trigger{min-width:24px;min-height:24px;flex:none}
@media(max-width:720px){
  .bills-grid.mobile-task-table tr.totrow{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))}
  .bills-grid.mobile-task-table tr.totrow>td:nth-child(2){display:block!important;grid-column:1/-1;font-weight:600}
  .bills-grid.mobile-task-table tr.totrow>td.num{display:flex!important;flex-direction:column;gap:3px}
  .bills-grid.mobile-task-table tr.totrow>td.num:before{content:attr(data-label);font-size:12px;color:#526176}
}

/* Optional help shares the existing row; date help stays visible outside card headers. */
.revenue-flow.has-help{grid-template-columns:repeat(5,minmax(0,1fr)) auto}
.flow-help{display:flex;align-items:center;justify-content:center}
.reading-date-control{display:flex;align-items:center;gap:6px;min-width:0}
@media(min-width:721px) and (max-width:980px){.revenue-flow.has-help{grid-template-columns:repeat(5,minmax(142px,1fr)) auto}}
@media(max-width:720px){.revenue-flow.has-help{display:flex;align-items:center}.revenue-flow.has-help>.revenue-stage.current{flex:1}.revenue-flow.has-help>.flow-help{flex:none}}

/* Daily work surfaces: identity, search and records before optional guidance. */
.work-page-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:2px 0 20px}
.work-page-head h1{margin:0;font-size:25px;letter-spacing:-.4px}
.work-page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.work-page-head .btn{min-height:38px}
.attention-strip{display:flex;align-items:center;flex-wrap:wrap;gap:8px 20px;padding:10px 14px;border:1px solid #e4d7bb;background:#fffcf4;border-radius:9px;margin-bottom:16px;font-size:13px}
.attention-strip>b{color:#775418;font-size:12px}
.attention-strip a{color:#694e1f;display:inline-flex;gap:8px;align-items:center}
.attention-strip strong{background:#f5e8cc;min-width:23px;border-radius:5px;padding:1px 6px;text-align:center;font-variant-numeric:tabular-nums}
.attention-strip [aria-current]{font-weight:700;text-decoration:underline;text-underline-offset:4px}
.worklist-search{border:1px solid var(--line);background:var(--card);padding:16px 18px;border-radius:10px;margin:0 0 16px}
.worklist-search-main{display:flex;align-items:end;gap:10px}
.worklist-search label{margin:0;min-width:0}
.worklist-search label>span{display:block;font-size:12px;color:#535d70;margin-bottom:6px}
.worklist-search input:not([type=checkbox]),.worklist-search select{width:100%;min-height:40px}
.worklist-search input[type=search],.reading-toolbar input[type=search]{border:1px solid #cbd3e5;border-radius:7px;padding:9px 11px;background:#fff;color:var(--ink);font:inherit;min-height:40px}
.work-search-field{flex:1}.worklist-search-main>label:not(.work-search-field){width:140px}
.worklist-search-main>.btn{min-height:40px;white-space:nowrap}
.worklist-options{margin-top:12px;font-size:13px}
.worklist-options>summary{cursor:pointer;color:#4c5670;width:fit-content;padding:4px 0}
.worklist-options>summary .tag{margin-left:8px}
.worklist-options-fields{display:flex;gap:12px;align-items:end;flex-wrap:wrap;border-top:1px solid var(--line);margin-top:10px;padding-top:14px}
.worklist-options-fields>label{flex:1 1 150px}.worklist-options-fields>.context-help{align-self:center}
.worklist-options-fields label.worklist-checkbox{display:flex;gap:7px;align-items:center;min-height:40px;flex-basis:210px;font-size:13px}
.worklist-surface{background:var(--card);border:1px solid var(--line);border-radius:10px}
.worklist-result{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:13px 16px;border-bottom:1px solid var(--line);font-size:13px;color:#596275}
.worklist-result b{color:var(--ink);font-size:15px;font-variant-numeric:tabular-nums}
.worklist-surface>.tablewrap{border:0;border-radius:0 0 10px 10px;margin:0}
.worklist-surface .contracts-grid th{font-size:12px;color:#586174;background:#f8f9fc;padding-top:11px;padding-bottom:11px}
.worklist-surface .contracts-grid td{padding-top:16px;padding-bottom:16px;vertical-align:middle}
.contract-identity{min-width:155px;max-width:260px}.contract-party>b{display:block;color:var(--ink);font-size:15px;margin-bottom:4px}.contract-party>span{display:block;color:#5b6575;font-size:13px}
.contract-dates{white-space:nowrap;font-variant-numeric:tabular-nums;font-size:13px}.contract-term>span{display:block;color:#667083;margin-top:3px}
.worklist-surface .fee-summary>.mobile-cell-value{display:block}
.contracts-grid .fee-summary .mobile-cell-value>div{display:flex;justify-content:flex-end;gap:10px;white-space:nowrap;font-size:13px}
.fee-note{display:block;margin-top:5px}
.fee-basis{display:block;color:#5b6575;font-size:11px;margin-bottom:4px}
.work-tabs{display:flex;align-items:center;gap:20px;border-bottom:1px solid #dce1ed;margin:0 0 16px}
.work-tabs a{padding:10px 2px;color:#596275;font-size:14px;border-bottom:3px solid transparent;margin-bottom:-1px}
.work-tabs a[aria-current]{color:var(--navy);font-weight:700;border-color:var(--navy)}
.work-tabs .work-tabs-home{margin-left:auto;font-size:12px}
.utility-work-choice{margin:0 0 24px;gap:20px}
.utility-work-choice .utility-module{border-radius:12px;box-shadow:none;padding:24px}
.utility-work-choice .utility-module-title{align-items:center}
.utility-work-choice .utility-module-title h2{margin:0}
.utility-work-choice .utility-status{background:#f8f9fc;border:0;border-radius:8px;margin:22px 0}
.utility-work-choice .utility-status small{margin-top:3px;font-size:12px;color:#596275}
.utility-work-actions{display:flex;gap:10px;flex-wrap:wrap}.utility-work-actions>.btn:first-child{flex:1;text-align:center}
.utility-settings{border-top:1px solid var(--line);padding-top:18px}
.utility-settings h2{font-size:15px;color:#586174;margin:0 0 12px}
.utility-settings-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.utility-settings-links a{display:flex;flex-direction:column;gap:5px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:14px 16px;font-weight:600}
.utility-settings-links span{font-size:12px;color:#626d7c;font-weight:400}
.reading-excel{margin:0 0 12px;font-size:13px;color:#4c5670}.reading-excel>summary{cursor:pointer;width:fit-content;padding:3px 0}.reading-excel[open]{padding:12px 16px;border:1px solid var(--line);border-radius:10px;background:#fff}
.reading-save-bar{position:sticky;bottom:0;z-index:6;display:flex;gap:10px 18px;align-items:center;flex-wrap:wrap;justify-content:space-between;margin-top:14px;padding:12px 16px;background:#fff;border:1px solid #d8deeb;box-shadow:0 -4px 18px #1e27610c}
.reading-save-date{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px}.reading-save-date label{margin:0}.reading-save-date input{width:150px}.reading-save-date .mini{font-size:11px}
.reading-save-buttons{display:flex;gap:8px;align-items:center;margin-left:auto}
.entry-dirty-status{font-size:12px;color:#765515}.entry-dirty-status:empty{display:none}
tr.entry-dirty .reading-value{border-color:#7988be;background:#f4f6ff}
.reading-grid td:focus-within{background:#f0f4ff}.reading-grid .reading-value:focus{outline:3px solid #c2ccef;outline-offset:1px;border-color:#475aa0}
@media(max-width:980px){.utility-settings-links{grid-template-columns:repeat(2,minmax(0,1fr))}.work-page-head h1{font-size:22px}}
@media(max-width:720px){
 .work-page-head{align-items:start;margin-bottom:14px;gap:12px}.work-page-head h1{font-size:21px}.work-page-actions{width:100%;gap:6px}.work-page-actions>.btn{flex:1;text-align:center;padding:8px 10px;min-height:44px}
 .attention-strip{gap:8px 12px;padding:10px 12px;font-size:12px}.attention-strip>b{flex-basis:100%}
 .worklist-search{padding:12px}.worklist-search-main{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}.work-search-field{grid-column:1/-1}.worklist-search-main>label:not(.work-search-field){width:auto}.worklist-search-main input,.worklist-search-main select{min-height:44px}.worklist-search-main>.ghost{grid-column:1/-1;justify-self:end}
 .worklist-options-fields{display:grid;grid-template-columns:minmax(0,1fr);gap:12px}.worklist-options-fields>.btn{text-align:center}.worklist-options-fields label.worklist-checkbox{min-height:44px}
 .worklist-result{padding:12px;font-size:12px}.worklist-surface .mobile-task-table{margin:0!important}.worklist-surface .contracts-grid td{padding-top:8px;padding-bottom:8px}
 .work-tabs{gap:14px}.work-tabs a{font-size:13px}.work-tabs .work-tabs-home{font-size:11px}
 .utility-work-choice{grid-template-columns:1fr;gap:14px}.utility-work-choice .utility-module{padding:18px}.utility-settings-links{grid-template-columns:1fr}
 .reading-save-bar{padding:10px 12px}.reading-save-date{gap:6px}.reading-save-date .mini{flex-basis:100%}.reading-save-buttons{width:100%;margin:0}.reading-save-buttons .btn{flex:1;text-align:center;min-height:44px;font-size:12px;padding:9px 5px}.reading-save-bar .entry-dirty-status{order:-1;width:100%}
}

/* Receipt lookup follows the same record-first layout as contracts. */
.receipt-worklist-search .receipt-search{margin:0;gap:12px}.receipt-worklist-search .receipt-search label{font-size:12px;font-weight:400;color:#535d70;margin:0 0 6px}.receipt-worklist-search .receipt-search-input label{display:inline-block}
.receipt-worklist-search .category-bar{margin:14px 0 0;padding:12px 0 0;border-top:1px solid var(--line);border-bottom:0}
.receipt-worklist-search .status-tabs{margin:0;gap:6px;flex-wrap:wrap}.receipt-worklist-search .category-help{font-size:12px}.receipt-worklist-search .status-tabs a{font-size:13px;padding:6px 10px}
.receipt-worklist-search .worklist-options-fields{margin-bottom:4px}.receipt-worklist-search .hint{margin:10px 0 0}
.worklist-surface .payments-grid th{background:#f8f9fc;color:#586174;font-size:12px}.worklist-surface .payments-grid td{padding-top:13px;padding-bottom:13px;vertical-align:middle}.worklist-surface .payments-grid td:nth-child(2){font-weight:600}.worklist-surface .payments-grid td:nth-child(2) .mini{font-weight:400}
.receipt-state-compact{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;padding:16px 20px}
.receipt-state-identity{display:flex;align-items:center;gap:7px 12px;flex-wrap:wrap;min-width:0;flex:1 1 300px}.receipt-state-identity>b{flex-basis:100%;font-size:17px;overflow-wrap:anywhere}.receipt-state-identity>span:not(.chip){font-size:12px;color:#5d677b}
.receipt-balances{display:flex;gap:28px;margin:0;font-variant-numeric:tabular-nums}.receipt-balances dt{font-size:12px;color:#5d677b}.receipt-balances dd{margin:5px 0 0;font-size:19px;font-weight:700;color:var(--navy)}
.receipt-purpose{padding:10px 14px;margin-bottom:14px}.receipt-purpose>summary{cursor:pointer;width:fit-content;font-size:13px;color:#596275}.receipt-purpose[open]{padding:14px}
.daily-reconciliation{grid-template-columns:250px minmax(0,1fr);gap:16px}.daily-reconciliation .rs-who{overflow-wrap:anywhere}.allocation-instructions{display:flex;align-items:center;gap:8px;font-size:12px;color:#596275;margin:-2px 0 12px}
.daily-reconciliation .recon-foot{position:sticky;bottom:0;z-index:6;background:#fff;border-top:1px solid var(--line);padding:12px 0;box-shadow:0 -5px 15px #1e276108}
.daily-reconciliation .bill-context{overflow-wrap:anywhere}.daily-reconciliation .panel>h3{margin-top:0;font-size:16px}
@media(max-width:1100px){.daily-reconciliation{grid-template-columns:1fr}.receipt-balances{gap:20px}}
@media(max-width:720px){
 .receipt-worklist-search .receipt-search>div:not(.receipt-search-input){flex:1;min-width:0}.receipt-worklist-search .receipt-search select{width:100%}.receipt-worklist-search .receipt-search .btn{min-height:44px}
 .receipt-state-compact{padding:13px;gap:14px}.receipt-balances{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.receipt-balances dd{font-size:16px;overflow-wrap:anywhere}.receipt-balances dt{font-size:11px}.receipt-state-identity>b{font-size:16px}
 .receipt-worklist-search .category-bar{display:block}.receipt-worklist-search .status-tabs{margin-top:8px}.worklist-surface .payments-grid td{padding-top:8px;padding-bottom:8px}
}
/* Keep saved bill amounts beside editable amounts without overlapping columns. */
.daily-reconciliation{grid-template-columns:220px minmax(0,1fr)}
#allocation-form{--recon-entry-width:112px;min-width:0;table-layout:fixed}
#allocation-form th:first-child{width:30px}#allocation-form th:nth-child(2){width:16%}#allocation-form th:nth-child(3){width:19%}#allocation-form th:nth-child(4){width:20%}#allocation-form th:nth-child(5){width:12%}
#allocation-form input[type=number]{width:100%;min-width:0}#allocation-form .recon-entry{min-width:112px;width:112px}
#allocation-form .bill-context{min-width:0;max-width:none}#allocation-form .bill-context .fee-chip{white-space:normal;font-size:11px}
.allocation-bill>b{display:block;overflow-wrap:anywhere;font-size:13px}.allocation-period{margin:7px 0;color:#657085;font-size:12px;white-space:nowrap}.allocation-bill>.mobile-cell-value>div:last-child{font-size:12px}
.allocation-fee{margin-top:8px}.allocation-fee .mini{display:block;margin-top:4px}
.allocation-facts dl{margin:0;font-size:12px;font-variant-numeric:tabular-nums}.allocation-facts dl>div{display:flex;justify-content:space-between;gap:5px;margin-bottom:4px}.allocation-facts dt{color:#657085}.allocation-facts dd{margin:0;white-space:nowrap;font-weight:600}
#allocation-form .payment-sources{min-width:0;overflow-wrap:anywhere;margin-top:8px}#allocation-form .payment-sources p{font-size:11px}
@media(min-width:721px) and (max-width:1399px){.daily-reconciliation{grid-template-columns:1fr}.daily-reconciliation .rec-left{position:static;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}#allocation-form{--recon-entry-width:120px}#allocation-form .recon-entry{width:120px;min-width:120px}}
@media(max-width:720px){.daily-reconciliation{grid-template-columns:1fr}#allocation-form{table-layout:auto}#allocation-form .recon-entry{width:auto;min-width:0}.allocation-facts dl{max-width:260px}.daily-reconciliation .rec-left{position:static}}
