/* ============================================================
   sx-grid.css — 表格操作台（Excel 风格网格）专属样式
   20260917 自 app_pages_misc.js _sheetEnsureCss() 机器提取原样搬运（零改动）。
   20260908 表格操作台改版：Excel 风格网格——全网格线 + 14px 字体 + 表头吸顶
   + 键盘导航（Enter/方向键）+ 右键行列菜单（插删行列）+ 列宽拖拽
   ============================================================ */
/* 20260917 冻结修复：主题CSS的#pageContent table(overflow:hidden)会破坏sticky冻结列，用更高特异度兜底 */
/* B111 备注标签按钮 + 表尾合计行 */
/* 20260916 出勤表左右固定列：日期区横向滚动时，学员/教师信息和统计列始终可见 */
/* B113 A1 空行压实折叠缝 + A2 分组条 */
/* B115e G：缺必要信息课表行标红（浅红底+行号红底+悬浮原因；展示态不落库，数据一改自动更新） */
/* B115f 交接表：状态整行着色（未完成淡红 / 跟进中淡黄 / 已完成淡绿 / 已转交淡灰） */
/* B115g/B116 缴费角标：跟随名字右侧（left 按文字宽度动态），胶囊醒目，不挡输入 */
.sx-wrap{background:#fff;border:1px solid #c9d3e4;border-radius:8px;overflow:auto;height:540px;box-shadow:0 1px 3px rgba(16,24,40,.06);}.sx-wrap.sx-drag-scroll{cursor:grab;}table.sx-grid{border-collapse:separate;border-spacing:0;table-layout:fixed;display:table;width:auto;min-width:100%;font-size:14px;color:var(--text);overflow:visible;}#pageContent table.sx-grid{overflow:visible;}.sx-grid th{position:sticky;top:0;z-index:5;background:#eef2f8;border-right:1px solid #d7deea;border-bottom:1px solid #c9d3e4;padding:7px 9px;font-size:13px;font-weight:600;color:#3a4a63;text-align:left;user-select:none;overflow:hidden;white-space:nowrap;}.sx-grid th.sx-att{text-align:center;cursor:pointer;}.sx-grid th.sx-rn{left:0;z-index:6;text-align:center;width:46px;min-width:46px;max-width:46px;background:#e8edf5;cursor:context-menu;}.sx-grid td{border-right:1px solid #e3e8f1;border-bottom:1px solid #e3e8f1;padding:0;vertical-align:middle;background:#fff;}.sx-grid td.sx-rn{position:sticky;left:0;z-index:4;text-align:center;color:#8592a8;font-size:12px;background:#f6f8fc;cursor:context-menu;border-right:1px solid #c9d3e4;}.sx-grid tbody tr:nth-child(even) td{background:#fbfcfe;}.sx-grid tbody tr:nth-child(even) td.sx-rn{background:#f2f5fa;}.sx-grid tbody tr:hover td{background:#eef5ff;}.sx-grid tbody tr:hover td.sx-rn{background:#e2ecfa;}.sx-grid td:focus-within{box-shadow:inset 0 0 0 2px #2f7ef7;z-index:1;}.sx-grid td.sx-att{text-align:center;cursor:pointer;font-size:16px;font-weight:700;padding:8px 4px;}.sx-grid td.sx-att .sx-mark-circle{display:inline-block;width:22px;height:22px;border:3.4px solid currentColor;border-radius:50%;box-sizing:border-box;vertical-align:-4px;}.sx-grid td.sx-att:hover{background:#e8f1ff;}.sx-grid td.sx-calc{background:#f5f7fb;text-align:center;font-weight:600;color:#3a4a63;}.sx-grid td.sx-calc input{text-align:center;}.sx-grid input.sx-in{width:100%;border:none;background:transparent;padding:9px 10px;font-size:14px;font-family:inherit;outline:none;color:var(--text);}.sx-grid select.sx-sel{width:100%;border:none;background:transparent;padding:8px 6px;font-size:13px;font-family:inherit;outline:none;color:var(--text);cursor:pointer;appearance:auto;}.sx-grid th .sx-flt,.sx-grid th .sx-sort{margin-left:4px;color:#98a2b3;cursor:pointer;font-size:11px;padding:0 2px;}.sx-grid th .sx-flt.on,.sx-grid th .sx-sort.on{color:#2f7ef7;}.sx-grid th .sx-sort:hover{color:#2f7ef7;}.sx-fltpop{position:fixed;z-index:3300;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.16);padding:10px;min-width:170px;max-height:60vh;overflow:auto;}.sx-fltpop label{display:flex;align-items:center;gap:6px;padding:4px 2px;font-size:13px;cursor:pointer;}.sx-fltpop .sx-fltbtns{display:flex;gap:6px;margin-top:8px;}.sx-note{background:#f2faf9;border:1px solid #bfe3df;border-radius:10px;margin-bottom:10px;font-size:13px;color:#2f4f4c;overflow:hidden;}.sx-note-h{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;cursor:pointer;user-select:none;font-weight:600;color:#00897b;}.sx-note-b{padding:0 14px 12px;}.sx-note table{border-collapse:collapse;margin:6px 0 10px;font-size:12.5px;}.sx-note th,.sx-note td{border:1px solid #cfe5e2;padding:4px 10px;background:#fff;}.sx-note th{background:#e0f2f1;color:#00695c;font-weight:600;white-space:nowrap;}.sx-note .sx-tips{white-space:pre-wrap;line-height:1.7;color:#475569;}.sx-note-edit{border-bottom:1px dashed #7fb8b1;cursor:text;padding:0 3px;min-width:40px;display:inline-block;}.sx-note-edit:focus{outline:2px solid #4db6ac;border-radius:4px;background:#fff;}.sx-csw{display:inline-block;width:27px;height:27px;border-radius:7px;cursor:pointer;border:1px solid rgba(0,0,0,.22);margin:3px;box-shadow:0 1px 3px rgba(0,0,0,.12);}.sx-csw:hover{transform:scale(1.14);border-color:#2f7ef7;}.sx-csw.on{outline:2px solid #2f7ef7;outline-offset:1px;}.sx-grid td.sx-filled{box-shadow:inset 0 0 0 2px rgba(47,126,247,.65);}.sx-menu .sx-mrow{display:flex;gap:2px;flex-wrap:wrap;padding:6px 8px;border-bottom:1px solid #f0f2f5;}.sx-grid th .sx-sub{font-size:10px;font-weight:400;color:#8a97ad;margin-top:1px;}.sx-rs{position:absolute;top:0;right:0;width:8px;height:100%;cursor:col-resize;z-index:7;}.sx-rs:hover{background:rgba(47,126,247,.28);border-radius:2px;}.sx-menu{position:fixed;z-index:3200;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.14);padding:6px;min-width:132px;}.sx-menu>div{padding:8px 14px;border-radius:7px;cursor:pointer;font-size:13px;}.sx-menu>div:hover{background:#f2f6fc;}.sx-tagbtn{display:inline-block;padding:3px 10px;margin:2px;border-radius:12px;border:1px solid #c9d3e4;background:#f6f8fc;font-size:12px;cursor:pointer;color:#3a4a63;white-space:nowrap;}.sx-tagbtn:hover{background:#eaf2ff;border-color:var(--primary);color:var(--primary);}.sx-grid tfoot td{position:sticky;bottom:0;background:#eef2f8;border-top:2px solid #c9d3e4;border-right:1px solid #d7deea;padding:7px 9px;font-size:13px;color:#1d3557;}.sx-grid tfoot td.sx-rn{left:0;z-index:6;text-align:center;font-weight:700;color:#1d3557;background:#e8edf5;}.sx-grid th.sx-locked-left{position:-webkit-sticky;position:sticky !important;top:0;z-index:8;background:#e3ecf9;box-shadow:inset -1px 0 0 #c9d3e4;}.sx-grid th.sx-locked-right{position:-webkit-sticky;position:sticky !important;top:0;z-index:8;background:#e3ecf9;box-shadow:inset 1px 0 0 #c9d3e4;}.sx-grid td.sx-locked-left{position:-webkit-sticky;position:sticky !important;z-index:5;background:#fff;box-shadow:inset -1px 0 0 #d7deea;}.sx-grid td.sx-locked-right{position:-webkit-sticky;position:sticky !important;z-index:5;background:#f8fafd;box-shadow:inset 1px 0 0 #d7deea;}.sx-grid td.sx-locked-right.sx-calc{background:#f5f7fb;}.sx-grid tfoot td.sx-locked-left,.sx-grid tfoot td.sx-locked-right{position:-webkit-sticky;position:sticky !important;bottom:0;z-index:8;background:#eef2f8;}.sx-grid tr.sx-gap td{background:#f6f8fc;padding:2px 10px;font-size:12px;color:#8592a8;border-bottom:1px dashed #d7deea;}.sx-grid tr.sx-gap a{cursor:pointer;color:#2f7ef7;text-decoration:underline;margin-right:10px;}.sx-grid tr.sx-grp td{background:#e8edf5;padding:5px 10px;font-size:13px;font-weight:600;color:#3a4a63;border-bottom:1px solid #d7deea;user-select:none;}.sx-grid tr.sx-grp .sx-grp-x{float:right;cursor:pointer;color:#98a2b3;font-weight:400;font-size:12px;}.sx-grid tr.sx-grp .sx-grp-x:hover{color:#d9534f;}.sx-grid td.sx-ro{background:#f2f5fa;color:#64748b;cursor:default;}.sx-grid tr.sx-rowmiss td{background:#fdf0ef;}.sx-grid tr.sx-rowmiss td.sx-rn{background:#e74c3c;color:#fff;font-weight:700;}.sx-grid tr.sx-rowmiss td.sx-att{background:#fdf0ef;}.sx-grid tr.sx-rowmiss:hover td{background:#fbe4e2;}.sx-grid tr.sx-rowmiss:hover td.sx-rn{background:#c0392b;}.sx-grid tr.sx-hov-todo td{background:#fdecec;}.sx-grid tr.sx-hov-todo td.sx-rn{background:#e8837a;color:#fff;font-weight:700;}.sx-grid tr.sx-hov-wait td{background:#fff8e1;}.sx-grid tr.sx-hov-wait td.sx-rn{background:#e0b93f;color:#fff;font-weight:700;}.sx-grid tr.sx-hov-done td{background:#edf9f0;}.sx-grid tr.sx-hov-done td.sx-rn{background:#5fae7d;color:#fff;font-weight:700;}.sx-grid tr.sx-hov-pass td{background:#f4f5f7;}.sx-grid tr.sx-hov-pass td.sx-rn{background:#98a2b3;color:#fff;font-weight:700;}.sx-grid td.sx-paycell{position:relative;}.sx-paycell .sx-pay{position:absolute;top:3px;right:3px;transform:none;font-size:11px;line-height:1;padding:3px 6px 2px;border-radius:999px;color:#fff;font-weight:700;pointer-events:none;letter-spacing:1px;z-index:2;box-shadow:0 1px 4px rgba(0,0,0,.28);white-space:nowrap;opacity:.95;}.sx-paycell .sx-pay.sx-pay-ok{background:#1a9c5b;}.sx-paycell .sx-pay.sx-pay-no{background:#e74c3c;}.sx-paycell input.sx-in{padding-right:34px;}.sx-paybar{margin-left:auto;font-size:12px;display:inline-flex;gap:8px;align-items:center;background:#f6f8fc;border:1px solid #e3e8f1;border-radius:12px;padding:3px 12px;}.sx-paybar b.sx-ok{color:#1a9c5b;}.sx-paybar b.sx-no{color:#e74c3c;}
