/* 台账与批次表单：沿用既有token、44px命中区和原生dialog。 */
.ledger-tabs { max-width: 100%; overflow-x: auto; }
.ledger-tabs button { white-space: nowrap; }
.ledger-panel { margin-top: 20px; }
.conversion-ledger { display: grid; gap: 16px; min-width: 0; }
.batch-list-head { gap: 12px; flex-wrap: wrap; }
.batch-year { display: flex; gap: 12px; align-items: end; flex-wrap: wrap; }
.batch-year .field { margin: 0; width: 9rem; }
.batch-year .field-error { flex-basis: 100%; }
.batch-actions { display: flex; flex-wrap: wrap; }
.batch-mobile-list { display: grid; gap: 12px; }
.batch-mobile-list .panel { padding: 16px; }
dialog.account-dialog.batch-dialog { width: min(620px, calc(100vw - 32px)); }
.batch-dialog fieldset { border: 0; display: grid; gap: 12px; margin: 0; padding: 0; }
.batch-dialog legend { padding: 8px 0; font-weight: 600; }
.batch-field-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.batch-impact { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.batch-impact li { padding: 10px; border: 0.5px solid var(--border); border-radius: var(--radius-md); }
.batch-impact label { display: flex; align-items: start; gap: 10px; min-height: 44px; cursor: pointer; }
.batch-impact input { flex: 0 0 auto; margin-top: 4px; width: 18px; height: 18px; accent-color: var(--accent); }
.batch-impact span { display: grid; gap: 4px; overflow-wrap: anywhere; }
.batch-impact small { font-size: var(--text-label); color: var(--fg-2); }
.batch-impact input:disabled + span { cursor: default; }
.batch-dialog dl { margin: 0; }
@media (max-width: 640px) { .batch-field-grid { grid-template-columns: minmax(0, 1fr); } }

/* 宗地台账沿用已确认原型：待查询条、局部横滚表、非模态卡片与手机紧凑列表。
   宗地卡片抽屉由 dom.mjs 的 openDrawer 打开，挂在 body 下层：宗地台账、年度明细、年度计划清单与供应记录共用同一容器
   （宽 460、上右下各 14px、22px 圆角；非模态、无遮罩；从右侧 24px 入退场由 Web Animations 完成，动画中不动画布局属性）。 */
.parcel-ledger { min-width: 0; }
.drawer.parcel-drawer { z-index: 55; }
.parcel-ledger .ledger-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 12px; margin: 16px 0; }
.parcel-ledger .ledger-query { display: flex; flex-wrap: wrap; align-items: end; gap: 10px; flex: 1 1 30rem; min-width: 0; }
.parcel-ledger .ledger-search { flex: 1 1 16rem; min-width: min(12rem, 100%); max-width: 30rem; }
.parcel-query-field { display: grid; gap: 4px; max-width: 100%; color: var(--fg-2); font-size: var(--text-label); }
.parcel-ledger .ledger-query-actions { display: inline-flex; gap: 8px; }
.parcel-ledger .query-pending { flex-basis: 100%; color: var(--fg-2); }
.parcel-ledger .gap-bar, .parcel-applied { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin-bottom: 14px; }
.parcel-ledger .gap-label { font-size: var(--text-label); color: var(--fg-2); }
.parcel-ledger .gap-bar b { font-variant-numeric: tabular-nums; }
.parcel-ledger .gap-bar .chip:not([aria-pressed="true"]):not(:disabled) b { color: var(--warn-ink); }
.parcel-applied .chip { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
.parcel-result-head { flex-wrap: wrap; gap: 10px; margin: 12px 0; }
.parcel-result-head label { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.parcel-ledger .parcel-table { table-layout: fixed; min-width: 76rem; }
.parcel-table th:nth-child(1) { width: 9rem; }
.parcel-table th:nth-child(2) { width: 12rem; }
.parcel-table th:nth-child(3), .parcel-table th:nth-child(4) { width: 7rem; }
.parcel-table th:nth-child(5) { width: 12rem; }
.parcel-table th:nth-child(6) { width: 9rem; }
.parcel-table th:nth-child(7) { width: 10rem; }
.parcel-table th:nth-child(8) { width: 12rem; }
.parcel-table th:nth-child(9) { width: 15rem; }
.parcel-table td { overflow-wrap: anywhere; }
.parcel-table th .sort { min-height: 36px; }
.parcel-table th[aria-sort="ascending"] .sort, .parcel-table th[aria-sort="descending"] .sort { color: var(--fg); }
.parcel-source, .parcel-region-note { display: block; font-size: var(--text-caption); color: var(--fg-2); overflow-wrap: anywhere; }
.parcel-ledger .ledger-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 16px; margin-top: 12px; }
.parcel-ledger .pager-size { display: inline-flex; align-items: center; gap: 8px; color: var(--fg-2); font-size: var(--text-label); }
.parcel-ledger .pg-of { display: none; }
.parcel-ledger [data-parcel-results].is-refreshing { opacity: .55; }
.parcel-drawer { position: fixed; z-index: 60; inset: 14px 14px 14px auto; width: min(460px, calc(100vw - 28px)); display: flex; flex-direction: column; border-radius: var(--radius-panel); overflow: hidden; }
.parcel-drawer .dw-head { position: relative; min-height: 64px; padding: 12px 64px 12px 22px; border-bottom: .5px solid var(--glass-border); overflow-wrap: anywhere; }
.parcel-drawer .dw-head h2 { margin: 0; border-radius: var(--radius-sm); }
.parcel-drawer .dw-x { position: absolute; top: 10px; right: 10px; }
.parcel-drawer .dw-body { flex: 1; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 14px 22px 20px; }
.parcel-drawer .dw-foot:empty { display: none; }
.parcel-drawer .dw-foot { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; padding: 12px 22px 16px; border-top: .5px solid var(--glass-border); }
.parcel-drawer.is-leaving { pointer-events: none; }
.parcel-ledger .m-list { display: grid; gap: 10px; }
.parcel-ledger .m-row { display: grid; gap: 8px; min-width: 0; width: 100%; padding: 12px 14px; border: 0; border-radius: var(--radius-lg); background: var(--dashboard-card-bg); box-shadow: var(--elev-ring); text-align: left; color: var(--fg); }
.parcel-ledger .m-row .between { align-items: start; flex-wrap: wrap; gap: 8px; }
.parcel-ledger .m-row b { font-weight: 600; overflow-wrap: anywhere; }
.parcel-ledger .m-fields { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(8rem, 100%), 1fr)); gap: 6px 12px; font-size: var(--text-caption); }
.parcel-ledger .m-f { display: grid; gap: 1px; min-width: 0; }
.parcel-ledger .m-f > span:last-child { overflow-wrap: anywhere; color: var(--fg-2); }
.parcel-ledger .m-row:active { background: var(--fill-soft); }
.parcel-ledger.is-mobile :is(select, .pager button) { min-height: 44px; min-width: 44px; }
.parcel-ledger.is-mobile .ledger-search { flex-basis: 100%; max-width: 100%; }
.parcel-ledger.is-mobile .pg-num { display: none; }
.parcel-ledger.is-mobile .pg-of { display: inline; }
@media (max-width: 640px) { .parcel-ledger .pg-num { display: none; } .parcel-ledger .pg-of { display: inline; } }
@media (pointer: coarse) and (max-width: 1023px), (max-width: 640px) { .parcel-table th .sort { min-height: 44px; } }

/* ── 手机台账类模态底部面板（AD-09）：从底边以临界阻尼升起、标题区可下滑关闭（几何与手势在 dom.mjs 的 openSheet） ── */
.m-layer { position: fixed; inset: 0; z-index: 70; }
.m-layer .scrim { position: absolute; inset: 0; }
/* 面板位移与遮罩透明度由脚本逐帧写入，不做 CSS 过渡：减少动态效果时 base.css 给所有元素 1ms 过渡（transition-property 默认 all），
   拖动写入的位移会晚一帧才呈现 */
.m-layer .scrim, .m-lsheet { transition: none; }
.m-lsheet { position: absolute; left: 0; right: 0; bottom: 0; max-height: calc(100% - 64px); display: flex; flex-direction: column; border-radius: var(--radius-panel) var(--radius-panel) 0 0; border-width: 0.5px 0 0; padding-bottom: env(safe-area-inset-bottom); outline: none; will-change: transform; touch-action: none; } /* 面板只在按住标题区时获得焦点（tabindex=-1，不在 Tab 顺序里），不画焦点环；同原型 */
.m-lsheet-h { position: relative; flex-shrink: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-content: start; gap: 2px 8px; min-height: 64px; padding: 16px 12px 8px 20px; touch-action: none; cursor: grab; -webkit-user-select: none; user-select: none; }
.m-lsheet-h:active { cursor: grabbing; }
/* 拖动提示，不是独立焦点：同地图面板抓手，顶 6px、在整个标题区宽度内居中。只作用于台账面板——手机入口里本文件晚于 mobile.css 加载，
   不加限定会改写地图面板的 .m-grab（AD-16 a2） */
.m-lsheet .m-grab { position: absolute; top: 6px; left: 0; right: 0; width: 36px; height: 5px; margin: 0 auto; border-radius: var(--radius-pill); background: var(--border); }
.m-lsheet-title { display: grid; gap: 2px; min-width: 0; align-content: center; }
.m-lsheet-title > b { font-size: var(--text-dialog-title); font-weight: 600; line-height: 1.35; overflow-wrap: anywhere; }
.m-lsheet-title [data-sheet-hint] { color: var(--muted); font-size: var(--text-caption); }
.m-lsheet .m-ic { align-self: center; }
.m-lsheet-b { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; touch-action: pan-y; padding: 4px 20px 20px; }
.m-lsheet-form { display: grid; gap: 14px; }
.m-lsheet-form .field { margin: 0; }
.m-lsheet .btn-block { width: 100%; justify-content: center; }
