:root{
  --bg:#f4f6fb; --panel:#fff; --line:#e3e8f0; --ink:#1f2733; --muted:#7a8699;
  --brand:#1f4ed8; --brand2:#0ea5e9; --ok:#16a34a; --warn:#d97706; --bad:#dc2626; --soft:#eef3ff;
  color-scheme: light;   /* 强制浅色渲染：避免深色系统下 select 弹出层白底白字 */
}
*{box-sizing:border-box}
html{font-size:14px}
html,body{height:100%;margin:0;padding:0;overflow:hidden}   /* v7：禁止整页回弹，滚动统一交给内容区 */
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--ink);font-size:1rem;overscroll-behavior:none}
.hidden{display:none!important}
button{cursor:pointer;border:none;border-radius:8px;padding:8px 14px;background:var(--brand);color:#fff;font-size:13px;font-weight:600}
button:hover{filter:brightness(1.05)}
button.ghost{background:var(--soft);color:var(--brand)}
button.danger{background:var(--bad)}
input,select,textarea{font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);width:100%}
/* 下拉选项：显式给定前景/背景色，深浅色系统下都清晰可读 */
select{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 15px) 50%,calc(100% - 10px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:28px}
select option,select optgroup{background:#fff;color:var(--ink)}
select option:checked,select option:hover{background:var(--soft);color:var(--ink)}
select:invalid,select option[value=""]{color:var(--muted)}
select:has(option[value=""]:checked){color:var(--muted)}   /* 未选择时用浅灰提示色，仍清晰可见 */
input[readonly],input:disabled,select:disabled{background:#f6f8fc;color:#48546b}
label{display:block;font-size:12px;color:var(--muted);margin:10px 0 4px}

/* 登录（v7：emoji 顶部 + 名称中英文 + 表单横排） */
.login-view{height:100%;min-height:100dvh;overflow:auto;display:flex;align-items:flex-start;justify-content:center;background:linear-gradient(135deg,#1f4ed8,#0ea5e9);padding:16px}   /* v9/v167：flex-start + 卡片 margin:auto 居中——内容超高时靠顶可滚，顶部不被裁 */
.login-card{background:#fff;padding:30px 28px;border-radius:18px;width:520px;max-width:96vw;box-shadow:0 20px 60px rgba(0,0,0,.25);margin:auto}
.login-card h1{margin:0 0 6px;font-size:22px}
.login-card .sub{color:var(--muted);margin:0 0 18px;font-size:12px}
.login-card input{margin-bottom:10px}
.login-card button{width:100%;margin-top:8px;padding:11px}
.login-hero{text-align:center;margin-bottom:18px}
.login-emoji{font-size:42px;line-height:1}
.login-hero h1{margin:6px 0 2px;font-size:24px}
.login-hero .sub{color:var(--muted);margin:0;font-size:13px;letter-spacing:.5px}
.login-hero .tiny{color:var(--muted);margin:6px 0 0;font-size:12px;opacity:.75}
.login-row{display:flex;gap:8px;align-items:stretch}
.login-row input{margin-bottom:0;flex:1;min-width:0}
.login-row button{width:auto;margin-top:0;padding:0 22px;flex:0 0 auto}
.err{color:var(--bad);font-size:12px;min-height:16px;margin-top:6px}

/* 布局：工具栏置顶（员工端与管理端一致，内容区更宽） */
.app-view{display:flex;flex-direction:column;height:100%;max-height:100vh;overflow:hidden}   /* v9：用 100% 对齐内嵌浏览器实际可视高度，避免顶部被窗口标题栏遮住 */
/* v9：顶部两行 —— 第一行店名 + 通知/名字/退出，第二行横向菜单（窄窗口横向滚动，不换行、不被截断） */
.topbar{background:#0f1830;color:#cdd6ea;flex:0 0 auto;position:relative;z-index:10;box-shadow:0 1px 6px rgba(0,0,0,.18)}
.topbar-row{display:flex;align-items:center;gap:12px;padding:8px 14px}
.topbar-title-row{padding-bottom:6px}
.topbar-nav-row{padding-top:0;padding-bottom:8px}
.topbar .brand{font-size:16px;font-weight:800;color:#fff;white-space:nowrap;letter-spacing:.3px}
.topbar nav{display:flex;gap:4px;flex:1;min-width:0;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-bottom:2px}
.topbar nav::-webkit-scrollbar{height:5px}
.topbar nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.22);border-radius:3px}
.topbar nav a{display:inline-block;padding:6px 12px;border-radius:9px;color:#cdd6ea;text-decoration:none;font-size:13px;white-space:nowrap;flex:0 0 auto}
.topbar nav a:hover{background:rgba(255,255,255,.1)}
.topbar nav a.active{background:var(--brand);color:#fff;font-weight:700}
.top-right{display:flex;align-items:center;gap:10px;margin-left:auto;flex:0 0 auto}
.top-right .who{font-size:12px;color:#9fb0d0;white-space:nowrap}
.top-right .ghost{background:rgba(255,255,255,.12);color:#fff;border:none}
.bell{position:relative;background:rgba(255,255,255,.12);color:#fff;border:none;border-radius:9px;padding:6px 10px;cursor:pointer;font-size:14px}
.bell .badge{position:absolute;top:-6px;right:-6px;background:#e03131;color:#fff;border-radius:9px;padding:0 5px;font-size:10px;line-height:16px;min-width:16px;text-align:center}
.bell .badge.warn-dot{background:#e03131;animation:pulse 1.6s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(224,49,49,.6)}50%{box-shadow:0 0 0 6px rgba(224,49,49,0)}}
.content{flex:1 1 auto;min-height:0;overflow:auto;padding:20px 22px;-webkit-overflow-scrolling:touch}
/* 菜单红点（请假等待审批等） */
.badge-dot{display:inline-block;min-width:16px;height:16px;line-height:16px;text-align:center;background:#e03131;color:#fff;border-radius:9px;font-size:10px;margin-left:5px;padding:0 4px;vertical-align:middle}
h2{margin:0 0 4px;font-size:20px}
.view-sub{color:var(--muted);margin:0 0 18px;font-size:13px}

/* 卡片/表格 */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:16px}
.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px}
.card .k{color:var(--muted);font-size:12px}
.card .v{font-size:24px;font-weight:800;margin-top:6px}
table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
th,td{padding:9px 10px;text-align:left;border-bottom:1px solid var(--line);font-size:13px}
th{background:#f7f9fd;color:var(--muted);font-weight:600}
tr:hover td{background:#fafcff}
.row-actions button{margin-right:6px;padding:5px 10px;font-size:12px}

/* 工具栏 */
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar .spacer{flex:1}

/* v49：班表页固定视口布局 —— 整条链用 flex（不依赖 height:100%，避免 flex 项上百分比高度失效）：
   content 变 flex 列 → #view 占满 → sch-bar 固定顶部 → sched-wrap 占满剩余并内部滚动。
   这样横向滚动条固定在「菜单栏下方那一整块的底部」，始终可见；名字列 sticky 真正生效。 */
.content.sch-page{display:flex;flex-direction:column;overflow:hidden;padding-bottom:12px}
.content.sch-page #view{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;width:100%}
.content.sch-page .sch-bar{flex:0 0 auto;margin-bottom:10px;z-index:20}
.content.sch-page .multibar{flex:0 0 auto;margin-bottom:10px}
.content.sch-page .sched-wrap{flex:1 1 auto;min-height:0;overflow:auto}
.content.sch-page .sch-foot{flex:0 0 auto;margin-top:10px}
.content.sch-page .pastebar{flex:0 0 auto}

/* 班表网格 */
.sched-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px;background:#fff}
/* v49：横向滚动条始终可见、加粗、固定在表格底部（菜单栏下方那一块），不随系统「滚动时显示」被隐藏 */
.sched-wrap::-webkit-scrollbar{height:13px;width:13px}
.sched-wrap::-webkit-scrollbar-track{background:#f1f4f9;border-radius:8px}
.sched-wrap::-webkit-scrollbar-thumb{background:#b9c6da;border-radius:8px;border:3px solid #f1f4f9}
.sched-wrap::-webkit-scrollbar-thumb:hover{background:#8ea3c0}
.sched-wrap::-webkit-scrollbar-corner{background:#f1f4f9}
/* v38：collapse 会让 th/td 的 position:sticky 失效（尤其 rowspan 姓名列），改用 separate+单线边框模拟 */
.sched{border-collapse:separate;border-spacing:0;width:max-content;border-top:1px solid var(--line);border-left:1px solid var(--line)}
/* v84：尺寸与字号一律走 CSS 变量，桌面/手机/不同浏览器渲染出的格子完全一致 */
.sched th,.sched td{border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:4px;text-align:center;font-size:var(--cellfs,12px);min-width:var(--cellw,112px);height:var(--cellh,80px);vertical-align:middle}
.sched thead th{position:sticky;top:0;background:#f1f5ff;z-index:2}
.sched thead th.name{position:sticky;left:0;top:0;z-index:6;background:#f1f5ff}
.sched tbody th.name{position:sticky;left:0;background:#f7f9fd;z-index:3;text-align:left;padding-left:10px;min-width:var(--namew,120px);font-weight:600;box-shadow:2px 0 0 var(--line)}
.sched tfoot th.name{position:sticky;left:0;background:#f7f9fd;z-index:3;box-shadow:2px 0 0 var(--line)}
/* v45：信息行的名字占位（去 rowspan 后，保证名字列在 Safari/Chrome 都能横向冻结） */
.sched tbody th.info-name{height:calc(var(--cellh,80px)*0.5);vertical-align:top}
.sched .cell.work{background:#eaf6ee}
.sched .cell.off{background:#f3f4f6;color:var(--muted)}
.sched .cell.late{background:#fff4e5}
.sched .cell.missing{background:#fde8e8;color:var(--bad);font-weight:700}
.sched .cell.leave{background:#eef2ff}
.sched .cell{cursor:pointer;border-radius:6px}
.cell .sh{font-weight:700}
.cell .meta{font-size:10px;color:var(--muted)}

/* v78：权限面板 accordion（每个模块可点开/折叠） */
.perm-accs{display:flex;flex-direction:column;gap:8px}
.perm-acc{border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}
.perm-acc[open]{border-color:#c7d4ec}
.perm-acc summary{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;list-style:none;background:#f7f9ff;user-select:none}
.perm-acc summary::-webkit-details-marker{display:none}
.perm-acc summary::before{content:'▸';color:var(--brand);font-size:13px;transition:transform .15s}
.perm-acc[open] summary::before{transform:rotate(90deg)}
.perm-acc[open] summary{background:#f0f4ff}
.perm-acc .acc-title{font-size:13px;font-weight:700;flex:1}
.perm-acc .acc-badge{font-size:11px;padding:2px 9px;border-radius:999px;background:#eef1f6;color:var(--muted)}
.perm-acc .acc-badge.on{background:#e8f6ee;color:#16a34a;font-weight:700}
.perm-acc .acc-body{padding:12px 14px;border-top:1px solid var(--line);background:#fff}

/* 模态 */
#modal-root:not(.hidden){position:fixed;inset:0;background:rgba(15,24,48,.45);display:flex;align-items:center;justify-content:center;z-index:50}
.modal{background:#fff;border-radius:16px;width:560px;max-width:94vw;max-height:90vh;overflow:auto;padding:20px 22px}
.modal h3{margin:0 0 14px}
.modal .grid2{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px}
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}
.tag{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;background:var(--soft);color:var(--brand)}
.tag.ok{background:#eaf6ee;color:var(--ok)}
.tag.bad{background:#fde8e8;color:var(--bad)}
.tag.warn{background:#fff4e5;color:var(--warn)}
/* v61 营业数据部门范围提示 + 授权里的部门勾选 */
.rev-scope-tip{margin:0 0 12px;padding:8px 12px;border-radius:10px;background:var(--soft);color:var(--brand);font-size:12px;border:1px dashed var(--line)}
.rev-dept-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border:1px solid var(--line);border-radius:999px;font-size:11px;background:var(--panel)}
.rev-auth-row .rev-dept-chip input{margin:0}
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#0f1830;color:#fff;padding:10px 18px;border-radius:10px;z-index:99;font-size:13px}
.pill{display:inline-flex;align-items:center;gap:6px}
.muted{color:var(--muted)}
.right{text-align:right}
.flex{display:flex;gap:10px}
.flex.wrap{flex-wrap:wrap}
.legend{display:flex;gap:14px;flex-wrap:wrap;margin:6px 0 12px;font-size:12px;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:5px}
.dot{width:11px;height:11px;border-radius:3px;display:inline-block}

/* 分享给员工 */
.share-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-top:10px}
.share-grid .card{border:1px solid var(--line);border-radius:12px;padding:16px;background:#fff}
.share-grid .card h3{margin:0 0 6px}
.share-grid .qr{display:block;margin:12px auto 0;width:200px;height:200px;border:1px solid var(--line);border-radius:8px;background:#fff}
/* v54/v167：员工登记页字段配置（v167 内嵌到分享与合同页：多行 + 提醒文字 + 双语） */
.jf-list{max-height:60vh;overflow:auto}
.jf-row{display:block;padding:10px 12px;border:1px solid var(--line);border-radius:8px;margin:8px 0;background:var(--bg, #f6f7fb)}
.jf-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.jf-head b{font-size:13px}
.jf-fields{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.jf-fields > div:last-child{grid-column:1/-1}
.jf-fields input{width:100%;box-sizing:border-box}
.jf-opt{display:inline-flex;align-items:center;gap:5px;font-size:12px;white-space:nowrap}
.jf-opt input[type="checkbox"]{width:auto}
.jf-opt input[type="number"]{width:56px}
.linkbox{display:flex;align-items:center;gap:8px;margin:8px 0;background:var(--bg, #f6f7fb);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.linkbox code{flex:1;word-break:break-all;font-size:13px}
.panel{border:1px solid var(--line);border-radius:10px;padding:10px 14px;background:#fffdf5}
.kv{display:flex;flex-direction:column;gap:2px;padding:6px 0;border-bottom:1px dashed var(--line)}
.kv b{font-size:14px}

/* ===== v2 双语与新版式 ===== */
/* v15：界面只显示一种语言（中文 / English 由右上角切换），不再上下并排双语 */
.bi{display:inline;line-height:inherit;vertical-align:baseline}
.bi i{font-style:normal}
.bi em{display:none}
/* 语言切换（登录页 + 顶栏右上角） */
.lang-switch{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:#fff}
.lang-switch .lang-opt{border:0;background:transparent;color:var(--muted);font:inherit;font-size:12px;padding:3px 10px;cursor:pointer;line-height:1.5}
.lang-switch .lang-opt.active{background:var(--brand);color:#fff;font-weight:700}
.login-lang{margin-top:12px;display:flex;justify-content:center}.login-lang .lang-switch{background:#fff;border-color:#c9d2e0;box-shadow:0 1px 4px rgba(15,24,48,.10)}
.tabbar{display:flex;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:8px;margin-bottom:12px}
.tab-btn{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:8px;padding:6px 14px;cursor:pointer;font:inherit}
.tab-btn.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.tab-btn .bi em{color:var(--muted)}
.tab-btn.active .bi em{color:rgba(255,255,255,.75)}
.sched .cell .sh{white-space:nowrap;font-weight:600}
.sched .cell .me{font-size:calc(var(--cellfs,12px)*0.83);color:var(--muted);line-height:1.2}
.sched .cell .no{font-size:calc(var(--cellfs,12px)*0.83);color:#8a6d3b;line-height:1.2}
.sched.grid .cell{font-size:calc(var(--cellfs,12px)*0.83);padding:2px 3px;text-align:center}
.sched.grid .cell .bi em{font-size:calc(var(--cellfs,12px)*0.67)}
.pastebar{position:sticky;bottom:10px;z-index:30;display:flex;gap:10px;align-items:center;background:#fffbe6;border:1px solid #e8d48a;border-radius:10px;padding:8px 14px;margin-top:10px;box-shadow:0 4px 14px rgba(0,0,0,.08)}
.notice{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:10px}
.notice.pinned{border-color:#e8d48a;background:#fffdf3}
.notice .n-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.notice .n-body{margin-top:6px;color:var(--ink)}
.notice-list{margin-top:8px}
.chip{display:inline-flex;gap:6px;align-items:center;background:#eef2ff;border-radius:14px;padding:3px 10px;margin:2px;font-size:13px}
.chip b{cursor:pointer;color:var(--bad)}
.set-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;align-items:start}
.set-grid .panel h3{margin:0 0 8px}
.ev-item{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:6px}
.ev-item .ev-label{font-weight:600;margin-bottom:4px}
.ev-extra select,.ev-extra input{width:auto;max-width:46%}
.kv{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;padding:6px 10px}
.kv span{font-size:11px;color:var(--muted)}
.kv b{font-size:14px}
.cell.nodata{background:#fafafa;color:#bbb}
button.primary{background:var(--brand);color:#fff;border:none}
button.primary:hover{filter:brightness(.95)}
tr[data-eid]{cursor:pointer}
tr[data-eid]:hover{background:#f8faff}
/* 任务布置 v3 */
.task-overdue{border-color:#e03131!important;background:#fff5f5}
tr.row-bad td{background:#fdecec}
.task-overdue h3{color:#c92a2a}
/* v5 奖金标注：班表红色小字 */
.bd{color:#d64545;font-size:10px;line-height:1.2;font-weight:600}
.cell .bd{white-space:nowrap}
.legend .bd{display:inline-block}

/* ---------- v6 ---------- */
/* 班表：加班 / 还休 标注（文字代替符号） */
.bd.ot{color:#b45309}      /* 加班（非异常，暖橙；红色只留给异常打卡） */
.bd.ow{color:#2b6cb0}      /* 还休 */
.bd.pt{color:#b06a1f}      /* v26 兼职工时（单独计酬） */
.bd.triple{color:#b8860b;font-weight:800}   /* 三薪日三倍补贴 */
.name .sub2{display:block;font-size:10px;color:#6b7a99;line-height:1.25;font-weight:400}
.sched th.name .sub2{font-weight:400}
/* 员工姓名下的职位/职责层级 */
.name-stack{display:flex;flex-direction:column;line-height:1.3}
/* 提醒中心 */
.rem-group{margin-bottom:14px}
.rem-group h4{margin:0 0 6px;font-size:13px;color:#41506b}
.rem-item{display:flex;gap:10px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:10px;padding:9px 12px;margin-bottom:7px}
.rem-item.warn{border-left-color:#e03131;background:#fff8f8}
.rem-item .t{font-weight:600;font-size:13px}
.rem-item .d{font-size:12px;color:var(--muted);margin-top:2px}
.rem-item .act{margin-left:auto;display:flex;gap:6px;flex-shrink:0}
/* 多选分组下拉 */
.grp-picker{position:relative}
.grp-picker>button{min-width:150px;text-align:left}
.grp-panel{position:absolute;z-index:40;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 10px;box-shadow:0 8px 24px rgba(0,0,0,.12);min-width:200px;max-height:320px;overflow:auto}
.grp-panel label{display:flex;align-items:center;gap:6px;font-size:13px;padding:3px 0;white-space:nowrap}
.grp-panel label input{width:auto}
/* v28：界面配置面板的勾选项多列布局 */
.ui-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:2px 14px}
.ui-grid label{font-size:13px}
.grp-panel .org-branch .d-pick-l{font-weight:700;color:var(--ink)}
.grp-panel .org-children{padding-left:16px;border-left:2px solid var(--line);margin:2px 0 6px 6px}
.grp-panel .org-children label{color:#41506b;font-weight:400}
.grp-panel .org-children .sub,.grp-panel .sub-h{font-size:11px;color:var(--muted)}
/* 人事状态徽标 */
.hr-tag{display:inline-block;font-size:10px;border-radius:6px;padding:1px 6px;margin-right:4px;border:1px solid transparent}
.hr-tag.ok{background:#eaf6ee;color:#1e7a45;border-color:#b8e0c6}
.hr-tag.warn{background:#fff4e5;color:#b05a00;border-color:#f0cf9a}
.hr-tag.bad{background:#fdecec;color:#c92a2a;border-color:#f3bcbc}
.hr-tag.info{background:#eef2ff;color:#3b4ea0;border-color:#c6cdf5}
/* 图片通知 */
.notice img.n-img{max-width:100%;border-radius:10px;margin-top:8px;display:block}
/* 上传落区 */
.dropzone{border:2px dashed var(--line);border-radius:12px;padding:16px;text-align:center;color:var(--muted);font-size:13px;background:#fbfcff}
.dropzone.on{border-color:var(--brand);background:#f2f6ff;color:var(--ink)}
/* 登录页底部登记入口 */
.login-foot{margin-top:14px;font-size:13px;text-align:center;color:#6b7a99}
.login-foot a{color:var(--brand);font-weight:600;text-decoration:none}
.login-foot a:hover{text-decoration:underline}
/* v7 待审批请假 / 兼职标记 */
.sched .cell.pend{background:#fff8e1;border:1px dashed #e8b84a}
.sched .cell.pend .bd{color:#b07d00}
.name .tag-pt{background:#eef2ff;color:#3b4ea0;border-radius:6px;padding:0 4px;font-size:9px;margin-left:4px}
.sched .cell.changed{outline:2px solid #e8590c;outline-offset:-2px}
.chg-before{color:#8a94a6;text-decoration:line-through;font-size:10px}
/* v7 班表：打卡对比行 / 异常红色 */
.sched .cell .pk{font-size:calc(var(--cellfs,12px)*0.82);line-height:1.25;color:#5b6b86;white-space:nowrap}
.sched .cell .pk.bad{color:#dc2626;font-weight:700}
/* v77：正常加班（自动计入）用暖橙醒目，区别于红色异常 */
.sched .cell .pk.ot{color:#b45309;font-weight:700}
.sched .cell.pend .bd{color:#dc2626}
.sched .cell.pend{background:#fff1f1;border:1px dashed #f0a5a5}
.bd, .bd.ot, .bd.ow{font-weight:700}

/* ---------- v8 ---------- */
/* 班表姓名格：部门-职位 / 职责 用红色（与用户给的模板一致） */
.name-stack .sub2.role{color:#d64545;font-weight:500}
.sched th.name{min-width:var(--namew,120px)}
/* 打卡对比与加班/异常统一红色小字 */
.sched .cell .pk{font-size:calc(var(--cellfs,12px)*0.82);line-height:1.3;color:#5b6b86;white-space:nowrap}
.sched .cell .pk.bad{color:#dc2626;font-weight:700}
/* 物料页：库存优先展示 */
.stock-qty{font-weight:800;font-size:15px}
.stock-qty.low{color:#dc2626}
/* 收档清单 */
.close-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;margin-bottom:7px;background:#fff}
.close-item.done{background:#f2fbf5;border-color:#b8e0c6}
.close-item input{width:auto;transform:scale(1.25)}
.close-item .lab{flex:1;font-size:14px}
.close-item.done .lab{color:#1e7a45;text-decoration:line-through}
.close-item .who{font-size:11px;color:var(--muted)}
/* 提交/确认按钮行 */
.ot-actions{display:flex;gap:6px;margin-top:4px}
.ot-actions button{padding:2px 8px;font-size:11px}

/* ---------- v9 ---------- */
/* 特殊日期 / 节日：只标在表头，不用「三倍」字样 */
.sched th.wknd{background:#f4f6fb}
.sched th.spd-th{background:#fff7e6}
.sched th .spd{font-size:calc(var(--cellfs,12px)*0.83);color:#b45309;font-weight:700;white-space:nowrap;margin-top:1px}
/* 岗位行 */
.sched .cell .stn{font-size:calc(var(--cellfs,12px)*0.83);color:#3b4ea0;line-height:1.25;white-space:nowrap}
/* 请假：已批准=绿色实心，醒目；待审批=黄色虚线+红字 */
.sched .cell.leave-ok{background:#e7f7ee;border:1px solid #86cf9f}
.sched .cell.leave-ok .sh{color:#116b3b;font-weight:800}
.sched .cell .lv-ok{font-size:calc(var(--cellfs,12px)*0.83);color:#116b3b;font-weight:700}
.sched .cell .lv-pend{font-size:calc(var(--cellfs,12px)*0.83);color:#dc2626;font-weight:800}
.sched .cell.pend{background:#fff8e1;border:1px dashed #e8b84a}
/* 姓名可点击查看职责 */
.sched th.name.clickable{cursor:pointer}
.sched th.name.clickable:hover{background:#eef2ff}
/* 表尾收档行 */
.sched tfoot .closing-row th,.sched tfoot .closing-row td{background:#f7f9ff;border-top:2px solid var(--line);font-size:calc(var(--cellfs,12px)*0.92);vertical-align:top}
.sched .cl-td{cursor:pointer}
.sched .cl-td.ok{color:#116b3b}
.sched .cl-td.todo{color:#b45309}
.sched .cl-td .cl-h{font-weight:700}
.sched .cl-td .cl-w{color:var(--muted);font-size:calc(var(--cellfs,12px)*0.83);white-space:nowrap}
/* 排序弹窗 */
.ro-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid var(--line)}
.ro-idx{width:24px;color:var(--muted);font-size:12px}
.ro-name{font-weight:600}
/* 简化：职位/职责用柔和绿灰，不再抢眼 */
.name-stack .sub2.role{color:#4f7a68;font-weight:500}

/* ---------- v10 排班页 ---------- */
/* 职位 / 负责人：绿色（员工端同样可见） */
.name-stack .sub2.pos{color:#177245;font-weight:700}
.name-stack .sub2.owner{color:#177245;font-weight:600}
.my-head{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:6px 0 10px;font-size:13px}
.my-head .pos{color:#177245;font-weight:800}
.my-head .owner{color:#177245;font-weight:700}
/* 打卡记录：灰色；异常 / 申请状态：红色 */
.sched .cell .pk{font-size:calc(var(--cellfs,12px)*0.82);line-height:1.3;color:#8a94a6;white-space:nowrap}
.sched .cell .pk-bad,.sched .cell .lv-pend{font-size:calc(var(--cellfs,12px)*0.82);line-height:1.3;color:var(--bad);font-weight:800}
.sched .cell .cl-line{font-size:calc(var(--cellfs,12px)*0.82);line-height:1.3;color:#b45309;white-space:nowrap}
/* 多选编辑 */
.multibar{background:#eef4ff;border:1px dashed var(--brand);border-radius:10px;padding:8px 10px}
.sched td.cell.sel{outline:3px solid var(--brand);outline-offset:-3px;background:#e8f0ff!important}
.sched th.name .sub2{white-space:nowrap}

/* ---------- v11 申请审核 ---------- */
.sched .cell .lv-tip{font-size:calc(var(--cellfs,12px)*0.83);color:#c92a2a;font-weight:700;background:#fff1f1;border-radius:5px;padding:0 3px;margin-top:1px;display:inline-block}
.sched .cell.pend{border:1px dashed #e8b84a;background:#fff8e1}
.sched .cell.pend .sh{font-weight:800}
.perm-note{font-size:12px;color:var(--muted);line-height:1.7}
.perm-note b{color:var(--ink)}
/* v47：功能权限卡片式选择 */
.perm-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:4px}
.perm-item{display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;cursor:pointer;transition:border-color .12s,background .12s}
.perm-item input{width:auto;flex-shrink:0}
.perm-item.on{border-color:var(--brand);background:#f4f7ff}
.perm-item .perm-icon{font-size:18px;line-height:1}
.perm-item .perm-body{display:flex;flex-direction:column;line-height:1.3}
.perm-item .perm-body b{font-size:13px}
.perm-item .perm-desc{font-size:11px;color:var(--muted);margin-top:2px}
@media(max-width:640px){.perm-grid{grid-template-columns:1fr}}

/* ============================================================
   v12 换桌服务 Queue service
   ============================================================ */
/* ---------- 客人扫码页（手机优先） ---------- */
.q-body{background:linear-gradient(160deg,#0f1830,#16233f 55%,#1b2c4d);min-height:100vh}
.q-page{max-width:520px;margin:0 auto;padding:8px 10px 16px}
.q-head{display:flex;align-items:center;gap:10px;padding:6px 4px 8px}
.q-brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.q-logo{width:38px;height:38px;border-radius:11px;background:linear-gradient(150deg,#f5c451,#d69a1f);display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:0 4px 14px rgba(214,154,31,.35)}
.q-shop{color:#fff;font-weight:800;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.q-sub{color:#9fb0d0;font-size:11px}
.q-lang{border:none;border-radius:9px;padding:7px 8px;font-size:12px;background:rgba(255,255,255,.14);color:#fff}
.q-lang option{color:#111}
.q-card{background:#fff;border-radius:16px;padding:10px 12px 12px;margin-bottom:10px;box-shadow:0 8px 26px rgba(6,14,30,.22)}
.q-h2{margin:0 0 8px;font-size:15px;color:#0f1830;display:flex;align-items:center;gap:6px}
.q-h3{margin:14px 0 6px;font-size:13px;color:#41506b}
.q-notice{margin:0;padding-left:22px;color:#33415c;font-size:13px;line-height:1.75}
.q-notice li{margin-bottom:5px}
.q-notice li::marker{color:#d69a1f;font-weight:800}
/* v21fix：删登记页后 —— 座位醒目标题 / 排队放大 / 须知变大 */
.q-seat-title{font-weight:900;color:#0f1830;margin-bottom:12px;text-align:center;line-height:1.3}
#l-persons.q-seat-title{font-size:30px}
#l-seat.q-seat-title{font-size:37px}
.q-zone-letter{font-size:48px;font-weight:900;color:#1b3a8f;text-align:center;line-height:1;margin:2px 0 6px}
.q-notice-big{font-size:24px;line-height:1.7}
.q-notice-big li{margin-bottom:9px}
.q-qnow-big{background:#fff7e6;border:1px solid #f0d59a;padding:14px 10px;margin-bottom:14px}
.q-qnow-big b{font-size:26px;font-weight:900;color:#d69a1f}
.q-qnow-big .q-k{font-size:14px}
.q-seatline{display:inline-flex;align-items:baseline;gap:6px;margin:0 auto 12px;padding:6px 16px;border-radius:10px;background:#f0f6ff;border:1px solid #cfe0ff}
.q-seatline b{font-size:18px;font-weight:800;color:#1b3a8f}
.q-field{margin-bottom:8px}
.q-field>label{display:block;font-size:12px;color:#41506b;margin-bottom:5px;font-weight:600}
.q-field input{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:11px;font-size:15px;background:#fbfcff}
.q-field input:focus{outline:none;border-color:var(--brand);background:#fff}
.q-stepper{display:flex;align-items:center;justify-content:center;gap:14px;margin:4px 0 2px;border:2px solid #dbe4f5;border-radius:18px;padding:12px 8px;background:#fbfcff}
.q-stepper button{width:48px;height:48px;border-radius:14px;border:1px solid var(--line);background:#f4f7fd;color:#0f1830;font-size:26px;font-weight:800;cursor:pointer;line-height:1;flex:0 0 auto}
.q-stepper button:active{background:#e8eefb}
.q-stepper span#q-persons{font-size:40px;font-weight:900;min-width:56px;text-align:center;color:#0f1830;line-height:1}
.q-unit{font-size:13px;color:#6b7a99}
/* 座位选择：左侧提示（左面角）+ 座位格 */
.q-seats{min-width:0}
.q-zone{margin-bottom:8px}
.q-zone-t{font-size:11px;color:#6b7a99;margin-bottom:5px;font-weight:700}
.q-chips{display:grid;grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:8px}
.q-chip{min-width:0;padding:13px 8px;border-radius:11px;border:1px solid var(--line);background:#f8fafd;color:#26324a;font-size:16px;font-weight:800;cursor:pointer;text-align:center}
.q-chip.on{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 4px 12px rgba(31,78,216,.3)}
.q-chip.busy{opacity:.45;text-decoration:line-through}
.q-chip i{font-style:normal;color:#c92a2a}
.q-submit{width:100%;padding:14px;border-radius:12px;border:none;background:linear-gradient(135deg,#f5c451,#d69a1f);color:#3a2600;font-size:16px;font-weight:800;cursor:pointer;box-shadow:0 8px 20px rgba(214,154,31,.35)}
.q-submit:disabled{opacity:.6}
.q-err{color:#c92a2a;font-size:12px;margin-top:8px;min-height:16px}
.q-closed{text-align:center;color:#8a5a00;font-size:14px;padding:16px 6px}
/* 票 */
.q-ticket{text-align:center}
.q-ok-title{font-size:16px;font-weight:800;color:#177245;margin-bottom:8px}
.q-mine-label{font-size:12px;color:#6b7a99}
.q-code{font-size:42px;font-weight:900;letter-spacing:2px;color:#0f1830;line-height:1.15;margin:2px 0 6px}
.q-status{display:inline-block;font-size:13px;font-weight:800;padding:4px 12px;border-radius:20px;background:#eef2ff;color:#3b4ea0;margin-bottom:12px}
.q-status.st-called{background:#fff0f0;color:#c92a2a;animation:pulse 1.6s infinite}
.q-status.st-seated{background:#eaf6ee;color:#1e7a45}
.q-status.st-terrace{background:#e7f7ee;color:#116b3b}
.q-status.st-done{background:#f1f3f5;color:#5b6b86}
.q-grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px;text-align:left}
.q-grid2>div{background:#f7f9fd;border-radius:10px;padding:8px 10px}
.q-k{display:block;font-size:11px;color:#6b7a99;margin-bottom:2px}
.q-grid2 b{font-size:14px;color:#0f1830}
.q-tip{font-size:12px;color:#41506b;background:#f4f7fd;border-radius:10px;padding:9px 11px;margin-top:10px;text-align:left;line-height:1.6}
.q-tip-warn{background:#fff8e6;color:#7a5a20;border-left:4px solid #d69a1f}
.q-timeline{list-style:none;margin:0;padding:0;text-align:left}
.q-timeline li{display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;font-size:12px;padding:6px 0;border-bottom:1px dashed var(--line)}
.q-timeline li:last-child{border-bottom:none}
.q-timeline .q-t{color:#8a94a6;font-variant-numeric:tabular-nums}
.q-timeline .q-a{font-weight:700;color:#26324a}
.q-timeline .q-to{color:#177245;font-weight:700}
.q-timeline .q-by{color:#8a94a6;margin-left:auto}
.q-ghost{width:100%;margin-top:12px;padding:11px;border-radius:11px;border:1px solid var(--line);background:#fff;color:#26324a;font-size:13px;cursor:pointer}
.q-now{background:rgba(255,255,255,.96)}
.q-nowrow{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;text-align:center}
.q-nowrow b{display:block;font-size:15px;color:#0f1830;margin-top:2px}
.q-foot{text-align:center;color:#7d8db0;font-size:11px;padding:8px 0 0}
.q-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:rgba(15,24,48,.94);color:#fff;padding:10px 16px;border-radius:20px;font-size:13px;z-index:99;max-width:88vw;text-align:center}
@media (max-width:380px){ .q-code{font-size:36px} }

/* ---------- 员工端「换桌服务」页 ---------- */
.q-head-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.q-sub-h{font-size:13px;color:#41506b;margin:14px 0 6px}
.q-qrbox{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;background:#f7f9ff;border:1px solid var(--line);border-radius:12px;padding:12px}
.q-qr{flex:0 0 auto;text-align:center}
.q-qr img{width:132px;height:132px;image-rendering:pixelated;background:#fff;border-radius:10px;border:1px solid var(--line);padding:5px}
.q-qr-fallback{width:132px;height:132px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px dashed var(--line);border-radius:10px;font-size:12px;color:var(--muted)}
.q-qr-t{font-size:12px;color:#41506b;margin-top:5px;font-weight:600}
.q-qrinfo{flex:1;min-width:240px}
.q-url{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:#26324a;background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px 8px;word-break:break-all}
.q-notices{margin-top:8px}
.q-notice-li{font-size:12px;color:#41506b;line-height:1.6;margin-bottom:3px}
.q-notice-li b{color:#d69a1f}
.q-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
@media (max-width:900px){ .q-cols{grid-template-columns:1fr} }
.q-col{min-width:0}
.q-col-h{font-size:13px;font-weight:700;color:#41506b;margin-bottom:8px;border-bottom:2px solid var(--line);padding-bottom:5px}
.q-card2{border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:11px;padding:9px 11px;margin-bottom:9px;background:#fff}
.q-card2.st-called{border-left-color:#e03131;background:#fffafa}
.q-card2.st-terrace{border-left-color:#177245;background:#f7fdf9}
.q-card2.st-seated{border-left-color:#1e7a45}
.q-card2-top{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.q-card2-code{font-family:ui-monospace,Menlo,monospace;font-weight:800;color:#0f1830;font-size:15px}
.q-card2-size{font-size:12px;color:#6b7a99}
.q-card2-info{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:#41506b;margin-top:5px}
.q-card2-note{font-size:12px;color:#8a5a00;background:#fff8e6;border-radius:7px;padding:4px 7px;margin-top:5px}
.q-card2-last{font-size:11px;color:#8a94a6;margin-top:4px}
.q-card2-acts{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.q-card2-acts button{padding:5px 10px;font-size:12px}
.seat-pick{padding:8px 12px;border-radius:9px;border:1px solid var(--line);background:#f8fafd;color:#26324a;font-weight:700;font-size:13px;cursor:pointer}
.seat-pick.cur{background:#e8eefb;border-color:var(--brand);color:var(--brand)}
.q-zb{display:inline-block;font-size:10px;border-radius:6px;padding:1px 6px;border:1px solid transparent}
.q-zb.z-terrace{background:#e7f7ee;color:#116b3b;border-color:#a9dcc0}
.q-zb.z-indoor{background:#eef2ff;color:#3b4ea0;border-color:#c6cdf5}
.q-zb.z-bar{background:#f5efff;color:#6741a8;border-color:#d9c8f2}
.q-act{font-weight:700;color:#26324a}

/* ---------- v13 班表精简 ---------- */
/* 姓名下面除姓名外一律绿色（职位 / 部门·分组 / 职责 / 负责人） */
.sched th.name .name-stack b{color:var(--ink);font-size:calc(var(--cellfs,12px)*1.17)}
.sched th.name .sub2{color:#177245}
.sched th.name .sub2.pos{color:#177245;font-weight:600}
.sched th.name .sub2.owner{color:#177245;font-weight:700}
/* 班表页的图例条已整体移除（考勤统计页的图例保留，不要全局隐藏） */
/* 临时修改只保留红色框，不显示文字 */
.sched td.cell.changed{outline:2px solid #e03131;outline-offset:-2px;background:#fff6f6!important}
.chg-before{display:none}
/* 收档工作表尾行 */
.sched .closing-row th.name{font-size:calc(var(--cellfs,12px)*0.92);line-height:1.3;color:#41506b;white-space:nowrap}
.sched .closing-row .cl-en{font-size:calc(var(--cellfs,12px)*0.75);color:var(--muted);font-weight:400}
.sched .closing-row .cl-td .cl-h{font-weight:800;font-size:calc(var(--cellfs,12px)*1)}
.sched .closing-row .cl-td.ok{background:#eaf6ee}
.sched .closing-row .cl-td.todo{background:#fff8e6}
.sched .closing-row .cl-td.ok .cl-h{color:#116b3b}
.sched .closing-row .cl-td.todo .cl-h{color:#b45309}

/* ---------- v14 换桌服务：三步流程 ---------- */
.q-steps{display:flex;gap:6px;margin:2px 0 8px}
.q-step{flex:1;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.10);border-radius:10px;padding:7px 8px;color:#9fb0d0;font-size:11px;min-width:0}
.q-step i{width:18px;height:18px;border-radius:50%;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;font-style:normal;font-size:11px;flex:0 0 auto}
.q-step b{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.q-step.on{background:rgba(245,196,81,.22);color:#fff}
.q-step.on i{background:#f5c451;color:#3a2600;font-weight:800}
.q-step.done{color:#a8dcbe}
.q-step.done i{background:#177245;color:#fff}
/* 须知勾选 */
.q-agree{display:flex;align-items:flex-start;gap:9px;margin:12px 0 10px;padding:11px 12px;background:#fff8e6;border:1px solid #f0d59a;border-radius:11px;cursor:pointer}
.q-agree input{width:20px;height:20px;flex:0 0 auto;margin-top:1px;accent-color:#d69a1f}
.q-agree span{font-size:13px;color:#7a5a20;font-weight:700;line-height:1.5}
#q-confirm:disabled{opacity:.45;cursor:not-allowed}
/* 大组 / 小组 */
.q-gtype{display:flex;align-items:center;gap:8px;margin-top:7px}
.q-gtag{font-size:12px;font-weight:800;border-radius:8px;padding:2px 9px}
.q-gtag.lg{background:#eef2ff;color:#3b4ea0}
.q-gtag.sm{background:#eaf6ee;color:#1e7a45}
.q-gtip{font-size:11px;color:#8a94a6}
/* 升舱中 */
.q-up{display:flex;align-items:center;gap:11px;justify-content:center;margin-bottom:10px}
.q-up-badge{width:46px;height:46px;border-radius:14px;background:linear-gradient(150deg,#f5c451,#d69a1f);display:flex;align-items:center;justify-content:center;font-size:24px;color:#3a2600;box-shadow:0 6px 18px rgba(214,154,31,.35);animation:q-up 1.8s ease-in-out infinite}
@keyframes q-up{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
.q-up-t{font-size:20px;font-weight:900;color:#0f1830;text-align:left}
.q-up-s{font-size:11px;color:#8a94a6;letter-spacing:.6px;text-align:left}
.q-upmsg{font-size:13px;line-height:1.65;color:#33415c;background:#f4f7fd;border-left:4px solid #d69a1f;border-radius:10px;padding:10px 12px;margin-bottom:12px;text-align:left}
.q-codewrap{margin-bottom:12px}
.q-qnow{display:flex;gap:8px;justify-content:center;align-items:center;background:#f7f9fd;border-radius:10px;padding:8px;margin-bottom:10px}
.q-qnow>div{display:flex;align-items:baseline;gap:5px}
.q-qnow b{font-size:15px;color:#0f1830}
.q-countdown{margin-top:10px;display:flex;flex-direction:column;gap:6px}
.q-cd{font-size:13px;color:#41506b}
.q-cd-end b{color:#177245;font-size:15px}
.q-notice-sm{font-size:12px;line-height:1.6}
.q-find{margin-top:10px;text-align:center}
/* ---------- v14 员工端：安排表 + 结束时间 ---------- */
.q-tbl{width:100%;border-collapse:collapse;font-size:13px}
.q-tbl th{font-size:11px;color:#6b7a99;font-weight:600;text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.q-tbl td{padding:7px 8px;border-bottom:1px solid #eef1f7;vertical-align:middle}
.q-tbl tr.terrace-row{background:#f7fdf9}
.q-tbl tr.waiting-row{background:#fffdf7}
.q-tbl .q-name{font-weight:800;color:#0f1830}
.q-tbl .q-seat{font-family:ui-monospace,Menlo,monospace;font-weight:800;color:#26324a}
.q-tbl .q-g{font-size:11px;border-radius:6px;padding:1px 6px;background:#eef2ff;color:#3b4ea0;font-weight:700}
.q-tbl .q-g.small{background:#eaf6ee;color:#1e7a45}
.q-tbl .q-left{font-weight:700}
.q-tbl .q-left.warn{color:#b45309}
.q-tbl .q-left.bad{color:#c92a2a}
.q-tbl .q-done{color:#8a94a6}
.q-acts{display:flex;gap:5px;flex-wrap:wrap}
.q-acts button{padding:4px 9px;font-size:12px;white-space:nowrap}
.q-adjust{display:flex;align-items:center;gap:4px}
.q-adjust button{width:28px;height:28px;border-radius:8px;border:1px solid var(--line);background:#f4f7fd;color:#26324a;font-weight:800;cursor:pointer;line-height:1}
.q-adjust button:hover{background:#e8eefb}
.q-adjust .q-adjv{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:#41506b;min-width:34px;text-align:center}
.q-viewtabs{display:flex;gap:4px}
.q-viewtabs button{padding:5px 12px;font-size:12px}
.q-room{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:900px){ .q-room{grid-template-columns:1fr} }
.q-roombox{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:#fff}
.q-roombox h4{margin:0 0 8px;font-size:13px;color:#41506b}
.q-roombox.indoor{border-left:4px solid #3b4ea0}
.q-roombox.terrace{border-left:4px solid #177245}
.q-move-list{list-style:none;margin:0;padding:0}
.q-move-list li{display:flex;align-items:baseline;gap:8px;font-size:12.5px;padding:6px 0;border-bottom:1px dashed #eef1f7}
.q-move-list li:last-child{border-bottom:none}
.q-move-list .nm{font-weight:700;color:#0f1830}
.q-move-list .to{font-family:ui-monospace,Menlo,monospace;font-weight:800;color:#177245}
.q-move-list .ago{color:#8a94a6;margin-left:auto;white-space:nowrap}
.q-endrow{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:6px 0;border-bottom:1px dashed #eef1f7}
.q-endrow:last-child{border-bottom:none}
.q-endrow .et{font-family:ui-monospace,Menlo,monospace;font-weight:800;color:#0f1830}

/* ================= v15 ================= */
/* 班表工具栏：四列 + 人数在最右上角 */
.sch-bar{align-items:stretch}
/* v76：工具栏拆成「核心操作」与「次要操作」两组；桌面端两组并排成一行，☰ 按钮隐藏 */
.sch-bar .sch-core{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sch-bar .sch-secondary{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto}
.sch-bar .sch-more-btn{display:none}
.sch-bar .tb-col{display:flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line);border-radius:10px;background:#fff}
.sch-bar .tb-col + .tb-col{margin-left:2px}
.sch-bar .tb-c2,.sch-bar .tb-c3,.sch-bar .tb-c4{flex-wrap:wrap}
.sch-bar .headcount{font-weight:800;font-size:13px}
/* v165：视图切换从下拉改成了三个按钮（预览/排班/调整），.view-select 已弃用 */
.sch-bar [data-schview]{padding:4px 10px;font-size:12px}
/* v59：「只看自己」小按钮 */
.sch-bar button.only-me{padding:4px 8px;font-size:12px;line-height:1.2;border-radius:8px;white-space:nowrap}
.sch-bar button.only-me.primary{box-shadow:0 0 0 2px rgba(31,78,216,.18)}
/* 待审核单元格：整格红色 + 大字「待审核」 */
.sched .cell.pend{background:#ffd9d9;border:1px solid #e03131}
.sched .cell.pend .sh{color:#a61b1b;font-weight:800}
.sched .cell .lv-pend.big{font-size:calc(var(--cellfs,12px)*1.04);font-weight:900;color:#c92a2a;letter-spacing:.5px;line-height:1.3}
.sched .cell .lv-tip{font-size:calc(var(--cellfs,12px)*0.75)}

/* ================= v16 换桌服务：卡片式安排 ================= */
.q-managebar{align-items:center}
.q-sect{margin-bottom:16px}
.q-sect-h{display:flex;align-items:center;gap:10px;margin:0 0 8px;font-size:13px;color:#41506b}
.q-sect-h b{font-size:14px;color:#0f1830}
/* v26：大组/小组左右并排 */
.q-split2{display:flex;gap:16px;align-items:flex-start}
.q-split2 .q-sect{flex:1;min-width:0;margin-bottom:0}
@media (max-width:900px){ .q-split2{flex-direction:column} }
.q-cards{display:grid;grid-template-columns:1fr;gap:10px}
@media (min-width:1100px){ .q-cards{grid-template-columns:1fr 1fr} }
.q-card{border:1px solid var(--line);border-radius:14px;background:#fff;padding:10px 12px;box-shadow:0 1px 3px rgba(15,24,48,.04)}
.q-card.lg{border-left:5px solid #3b4ea0}
.q-card.sm{border-left:5px solid #1e7a45}
.q-card .q-r1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.q-card .q-r2{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed #eef1f7}
.q-card .q-r3{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed #eef1f7}
.q-card .q-name{font-weight:800;color:#0f1830;font-size:14px}
.q-card .q-name .q-code{font-style:normal;font-size:10px;color:#8a94a6;margin-left:6px;font-weight:600}
.q-card .q-pax{font-size:12px;color:#41506b}
.q-card .q-pax b{font-size:15px;color:#0f1830;font-weight:800}
.q-card .q-g{font-size:10px;border-radius:6px;padding:1px 6px;background:#eef2ff;color:#3b4ea0;font-weight:700;margin-left:4px}
.q-card .q-g.small{background:#eaf6ee;color:#1e7a45}
.q-card .q-seat{font-family:ui-monospace,Menlo,monospace;font-weight:800;font-size:13px;border:1px solid #dfe6f3;background:#f7f9fe;border-radius:8px;padding:3px 9px;color:#26324a;cursor:pointer}
.q-card .q-seat:hover{background:#eef3ff;border-color:#b9c8ee}
.q-card .q-seat i{font-style:normal;font-size:10px;color:#8a94a6;margin-left:5px;font-weight:600}
.q-card .q-arrow{color:#8a94a6;font-weight:800}
.q-card .q-target{font-family:ui-monospace,Menlo,monospace;font-weight:800;font-size:13px;color:#116b3b}
.q-card .q-target.none{color:#8a94a6;font-weight:600;font-family:inherit;font-size:12px}
.q-card .q-actbtn{border:1px solid var(--brand);background:var(--brand);color:#fff;border-radius:8px;padding:4px 12px;cursor:pointer;font:inherit;font-size:12px;font-weight:700}
.q-card .q-actbtn.ghost{background:#fff;color:#c92a2a;border-color:#f0a5a5}
.q-card .q-actbtn.ghost:hover{background:#fff1f1}
.q-card .q-time{display:inline-flex;align-items:baseline;gap:6px;font-size:12px;color:#41506b;white-space:nowrap}
.q-card .q-time i{font-style:normal;color:#8a94a6;font-size:11px}
.q-card .q-time b{font-family:ui-monospace,Menlo,monospace;font-size:14px;color:#0f1830}
.q-card .q-dur{color:#8a94a6;font-size:11px}
.q-card .q-adjust{display:inline-flex;align-items:center;gap:3px;margin-left:4px}
.q-card .q-adjust button{width:22px;height:22px;border-radius:6px;border:1px solid var(--line);background:#f4f7fd;color:#26324a;font-weight:800;cursor:pointer;line-height:1;font-size:12px}
.q-card .q-adjust button:hover{background:#e8eefb}
.q-card .q-adjust .q-adjv{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:#41506b;min-width:26px;text-align:center}
.q-card .q-rel{font-size:12px;color:#3b4ea0;font-weight:700}
.q-card .q-left{font-size:12px;font-weight:800;color:#116b3b}
.q-card .q-left.bad{color:#c92a2a}
.q-card .q-detail{margin-left:auto;border:1px solid var(--line);background:#fff;border-radius:8px;padding:3px 12px;cursor:pointer;font:inherit;font-size:12px;color:#41506b}
.q-card .q-detail:hover{background:#f4f7fd;color:#0f1830}
/* v103：待换桌卡片——已点餐 / 未点餐 整框颜色区分 + 点餐切换按钮 */
.q-card.q-move{border-left:5px solid #b9c2d4}
.q-card.q-move.q-unordered{background:#fbfcfe}
.q-card.q-move.q-ordered{border-left-color:#1e9e5f;background:#eefaf3;border-color:#bfe5cd}
.q-card .q-order{border:1px solid var(--line);background:#fff;border-radius:8px;padding:3px 10px;cursor:pointer;font:inherit;font-size:12px;color:#41506b;font-weight:700;white-space:nowrap}
.q-card .q-order:hover{background:#f4f7fd}
.q-card .q-order.on{background:#eaf6ee;border-color:#a9dcc0;color:#116b3b}
/* v105：待换桌卡片内容结构完全固定（任何屏幕不换行、不缩放） */
.q-card.q-move{width:100%;box-sizing:border-box}
.q-card.q-move .q-r1,
.q-card.q-move .q-r2,
.q-card.q-move .q-r3{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;white-space:nowrap}
.q-card.q-move .q-r3 .q-detail{margin-left:0}
/* v120：待换桌人数与桌号字体一致（大小/粗细/颜色/等宽） */
.q-card.q-move .q-pax{font-size:13px;font-weight:800;color:#26324a;font-family:ui-monospace,Menlo,monospace}
.q-card.q-move .q-dash{color:#8a94a6;font-weight:700;font-size:12px}
.q-card.q-move .q-adj-btn{width:24px;height:24px;line-height:1;border-radius:6px;border:1px solid var(--line);background:#f4f7fd;color:#26324a;font-weight:800;cursor:pointer;font-size:13px;padding:0;flex:0 0 auto}
.q-card.q-move .q-adj-btn:hover{background:#e8eefb}
.q-card.q-move .q-adj-btn:disabled{opacity:.4;cursor:default}
/* v120：等待时间预估横幅 */
.q-est{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:7px 12px;margin:0 0 8px;border:1px solid var(--line);border-radius:10px;background:#f6f8fc;font-size:13px;color:#26324a}
.q-est b{font-size:15px;font-weight:800;color:#1b3a8f}
.q-est .muted{font-size:11px}
/* v105：已换座筛选——两排 mini 按钮（第一排区域多选、第二排点单状态） */
.q-filter{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 8px}
.q-mini{border:1px solid var(--line);background:#fff;color:#41506b;border-radius:999px;padding:2px 11px;font:inherit;font-size:11.5px;font-weight:700;cursor:pointer;line-height:1.6;white-space:nowrap}
.q-mini:hover{background:#f4f7fd}
.q-mini.on{background:var(--brand);color:#fff;border-color:var(--brand)}

/* ================= v17 班表：姓名列 / 统一单元格 / 部门工时表尾 ================= */
/* 姓名后面紧跟部门（深蓝色） */
.sched th.name .dept-inline{margin-left:6px;color:#1b3a8f;font-weight:800;font-size:calc(var(--cellfs,12px)*0.92);vertical-align:baseline}
/* 所有格子尺寸统一 + 内容不换行（超出省略）
   v84：默认值写在这里（未自定义时按设备默认：桌面 112/80/12，手机见 mobile.css）。
        管理员在「设置 → 班表界面」存过数值时，table 上会带行内变量，行内优先级更高 → 跨端一致。 */
.sched.fixed{--cellw:112px;--cellh:80px;--cellfs:12px;--cellcolor:#0f1830;--namew:120px;table-layout:fixed}
.sched.fixed th,.sched.fixed td{padding:3px 4px;overflow:hidden}
.sched.fixed thead th{height:42px;font-size:calc(var(--cellfs,12px)*0.9);white-space:nowrap;vertical-align:middle}
.sched.fixed th.name,.sched.fixed td.name{white-space:nowrap;overflow:visible}
.sched.fixed th.name .name-stack{display:block;overflow:hidden}
.sched.fixed th.name .name-stack > *{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sched.fixed td.cell{height:var(--cellh,80px);vertical-align:top;font-size:var(--cellfs,12px);line-height:1.3;color:var(--cellcolor)}
.sched.fixed td.cell > div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* v29：每个员工下方新增「信息行」—— 专门显示打卡 / 提醒 / 加班（占单元格下半部分） */
.sched.fixed td.info-cell{height:calc(var(--cellh,80px)*0.5);vertical-align:top;background:#fafbfe;border-radius:4px;font-size:calc(var(--cellfs,12px)*0.86);line-height:1.3;color:#5b6b86;overflow:hidden}
.sched.fixed td.info-cell > div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sched.fixed td.info-cell .pk-time{font-size:calc(var(--cellfs,12px)*0.92);font-weight:700;color:#6b7280}
.sched.fixed td.info-cell .bd,.sched.fixed td.info-cell .pk,.sched.fixed td.info-cell .no,.sched.fixed td.info-cell .pk-bad{font-size:calc(var(--cellfs,12px)*0.78)}
.sched.fixed td.cell .sh{font-size:calc(var(--cellfs,12px)*1.0);font-weight:800}
.sched.fixed td.cell .me{font-size:calc(var(--cellfs,12px)*0.82)}
.sched.fixed td.cell .stn{font-size:calc(var(--cellfs,12px)*0.82)}
.sched.fixed td.cell .pk,.sched.fixed td.cell .pk-bad,.sched.fixed td.cell .bd,.sched.fixed td.cell .no{font-size:calc(var(--cellfs,12px)*0.82)}
/* v29：已调整 —— 右下角一个小圆点符号（不再显示文字，悬停/点击可看详情） */
.sched.fixed .cell .chg-dot{position:absolute;right:3px;bottom:3px;width:7px;height:7px;border-radius:50%;background:#e8590c;border:1px solid #fff;box-shadow:0 0 0 1px rgba(232,89,12,.35);cursor:pointer;z-index:2}
/* 表尾：出勤小时（按部门） */
.dh-row th,.dh-row td{background:#f7f9fe;border-top:2px solid var(--line);padding:8px 8px;font-size:12px;vertical-align:middle}
.dh-row th.name{text-align:left;font-weight:800;line-height:1.25}
.dh-row th.name .cl-en{font-size:10px;color:var(--muted);font-weight:600}
.dh-cell{white-space:normal}
.dh-chip{display:inline-flex;align-items:baseline;gap:5px;margin:3px 10px 3px 0;padding:3px 10px;border:1px solid #dfe6f3;border-radius:999px;background:#fff;white-space:nowrap}
.dh-chip b{color:#1b3a8f;font-size:12px}
.dh-total{text-align:center;font-weight:800;white-space:nowrap;color:#116b3b}

/* ================= v18 换桌服务：客人端四步 + 员工端子菜单 ================= */
/* --- 客人端：第二步「先选区域再选桌号」 --- */
.q-zonebar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:9px}
.q-zonebar-t{font-size:11px;color:#6b7a99;font-weight:700;margin-right:2px}
.q-ztab{padding:9px 16px;border-radius:22px;border:1px solid var(--line);background:#f8fafd;color:#41506b;font-size:14px;font-weight:700;cursor:pointer}
.q-ztab.on{background:#0f1830;border-color:#0f1830;color:#fff}
.q-notice-l{text-align:left}
.q-notice-l li{text-align:left}
/* --- 客人端：升舱中的大提示（替代编号） --- */
.q-upbig{text-align:center;margin-bottom:12px}
.q-upbig .q-up-badge{margin:0 auto 8px}
.q-upbig .q-up-t{text-align:center;font-size:17px;color:#8a94a6;font-weight:800;letter-spacing:1px}
.q-up-big{font-size:20px;line-height:1.6;font-weight:800;color:#0f1830;text-align:center;
  background:#fffaf0;border:2px solid #f0d59a;border-radius:14px;padding:16px 14px;margin:10px 0 6px}
.q-who{display:flex;align-items:center;gap:8px;justify-content:center;flex-wrap:wrap;margin:10px 0 12px}
.q-who-t{font-size:15px}
.q-who b{font-size:16px;color:#0f1830}
.q-who-s{font-size:12px;color:#6b7a99}
.q-who-s-big{font-size:24px;font-weight:900;color:#0f1830}
.q-danger{color:#c92a2a;border-color:#f0a5a5;font-weight:700}
/* --- 员工端：顶部子菜单 --- */
.q-tabs{display:flex;gap:2px;flex-wrap:wrap;border-bottom:2px solid var(--line);margin:0 0 14px}
.q-tab{border:none;background:transparent;padding:9px 16px;font:inherit;font-size:13.5px;font-weight:700;color:#5b6b86;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;border-radius:8px 8px 0 0}
.q-tab:hover{background:#f2f5fb;color:#0f1830}
.q-tab.on{color:#1b3a8f;border-bottom-color:#1b3a8f;background:#f4f7ff}
/* --- 员工端：换桌卡片里的座位框（与「原座位号」同款） --- */
.q-card .q-seat.now{border-color:#a9dcc0;background:#eefaf3;color:#116b3b;cursor:default}
.q-card .q-seat.now:hover{background:#eefaf3;border-color:#a9dcc0}
.q-card .q-seat.big{font-size:20px;padding:6px 14px;border-radius:11px}
.q-card .q-seat.big i{font-size:12px;margin-left:7px}
.q-card .q-seat.big.now{background:#eefaf3;border-color:#a9dcc0;color:#116b3b}
/* --- 员工端：查看视图（原桌号 → 新桌号 放大） --- */
.q-cards-v{grid-template-columns:1fr}
.q-vcard{padding:12px 14px}
.q-vbig{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding-bottom:10px;margin-bottom:10px;border-bottom:1px dashed #eef1f7}
.q-vbig-arrow{font-size:22px;font-weight:900;color:#8a94a6}
.q-vbig .big-none{font-size:14px}
.q-vinfo{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:12px}
.q-vcard.q-lefted{background:#f4f5f7;border-color:#e3e6ec;opacity:.72}
.q-vcard.q-lefted .q-seat{background:#eceef2;border-color:#dfe2e8;color:#7a8397}
.q-vcard.q-lefted .q-vbig-arrow{color:#b6bcc8}
/* --- 员工端：设置 --- */
.q-set .grid2 label{display:block;font-size:12px;color:#41506b;margin:0 0 4px;font-weight:600}
.q-set .grid2 select,.q-set .grid2 input{width:100%}
.q-set>label{display:block;font-size:12px;color:#41506b;margin:14px 0 5px;font-weight:600}
.q-ops{display:flex;flex-wrap:wrap;gap:6px;max-height:190px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px}
.q-op{display:inline-flex;align-items:center;gap:5px;font-size:12px;background:#f7f9fd;border:1px solid var(--line);border-radius:8px;padding:5px 9px;cursor:pointer}
.q-op input{width:auto}
.q-histbar{margin-bottom:10px}

/* ================= v19 班表重做（姓名列 / 时间加粗 / 已调整小字 / 出勤小时按部门） ================= */
/* 姓名列：① 名字(聘用) 黑+深蓝  ② 部门(职位) 绿+红  ③ duties 绿 */
.sched th.name .nm-l1{display:block;line-height:1.25}
.sched th.name .nm-main{color:#0f1830;font-weight:800;font-size:calc(var(--cellfs,12px)*1.12)}
.sched th.name .nm-emp{margin-left:5px;color:#1b3a8f;font-weight:700;font-size:calc(var(--cellfs,12px)*0.96)}
.sched th.name .nm-l2{display:block;font-size:calc(var(--cellfs,12px)*0.96);line-height:1.3;font-weight:700;margin-top:1px}
.sched th.name .nm-dept{color:#177245}
.sched th.name .nm-pos{color:#d64545;margin-left:3px}
.sched th.name .nm-l3{display:block;font-size:calc(var(--cellfs,12px)*0.92);line-height:1.3;color:#177245;font-weight:600;margin-top:1px}
.sched th.name .nm-l3.owner{color:#5b6b86;font-size:calc(var(--cellfs,12px)*0.88)}
.sched th.name .nm-grp{color:#177245}
/* v154：姓名栏第三行 = 组织框架的「额外职责」（原「特别职责」自由文本已合并进来，沿用同一配色） */
.sched th.name .nm-duty{color:#1b3a8f}
/* 自定义顺序的 ↑ ↓ */
.sched th.name .ord-btns{display:inline-flex;gap:2px;margin-left:6px;vertical-align:middle}
.sched th.name .ord-btn{border:1px solid var(--line);background:#fff;border-radius:6px;font-size:calc(var(--cellfs,12px)*0.92);line-height:1;padding:2px 4px;cursor:pointer;color:#41506b}
.sched th.name .ord-btn:hover{background:#eef2ff;border-color:#b9c7ea;color:#1b3a8f}
/* 班次时间：加大、加粗 */
.sched .cell .sh.big-time{font-size:calc(var(--cellfs,12px)*1.25);font-weight:800;line-height:1.35;white-space:nowrap;letter-spacing:.2px}
/* v26：打卡时间（中度灰） */
.sched .cell .pk-time{font-size:calc(var(--cellfs,12px)*1.05);font-weight:800;line-height:1.35;white-space:nowrap;letter-spacing:.2px;color:#6b7280}
.sched .cell .sh.off-red{color:#d64545}
.sched .cell.off .sh.big-time{color:#d64545}
.sched .cell .lv-apply{font-size:calc(var(--cellfs,12px)*0.82);color:#b07d00;font-weight:800;line-height:1.2}
/* 兼职标记（兼 / PT） */
.sched .cell .pt-tag{display:inline-block;margin-right:4px;padding:0 4px;border-radius:5px;background:#fff1f1;border:1px solid #f0a5a5;color:#c92a2a;font-size:calc(var(--cellfs,12px)*0.92);font-weight:800;vertical-align:1px}
/* v26：兼职段——加「兼」标记、字体自适应变小（比正职 15px 小） */
.sched .cell .sh.pt-sh{font-size:calc(var(--cellfs,12px)*1);font-weight:700;color:#b06a1f;white-space:nowrap;line-height:1.3;overflow:visible;text-overflow:clip}
/* 已调整：右下角符号（样式见上 chg-dot） */
.sched .cell{position:relative}
.sched.fixed .cell .chg-dot:hover{transform:scale(1.25)}
/* 工具栏右侧：打卡 / 设置 / 人数 横向并排 */
.sch-bar .tb-far{display:flex;flex-direction:row;align-items:center;gap:8px}
.sch-bar .hc-line{display:flex;align-items:center;gap:6px}
/* 部门分组标题行 */
.sched .dept-sep-row .dept-sep{background:#eef2ff;color:#1b3a8f;text-align:left;font-weight:800;font-size:calc(var(--cellfs,12px)*1.04);padding:5px 10px;border-left:3px solid var(--brand);letter-spacing:.3px}
.sched .dept-sep-row .dept-sep .dept-num{margin-left:8px;font-size:calc(var(--cellfs,12px)*0.92);font-weight:600;color:#5b6b86}
/* ON（在岗）标记 */
.sched .cell.on-duty-cell{background:#e8f6ec}
.sched .cell .sh.on-duty{color:#0a7a2f;font-weight:900;font-size:calc(var(--cellfs,12px)*1.25);letter-spacing:1px}
.sched .cell .on-sub{font-size:calc(var(--cellfs,12px)*0.83);color:#0a7a2f;margin-top:1px}
/* 班表底部公告 */
.sch-foot{padding:8px 12px;font-size:12px;line-height:1.8}
.sched-wrap + .sch-foot{margin-top:10px}
/* 表尾出勤小时：每个部门一行，每天一列 */
.dh-row .dh-h{text-align:center;font-weight:700;color:#1b3a8f}
.dh-row.dh-all th,.dh-row.dh-all td{background:#eef3ff;font-weight:800;border-top:2px solid #c9d6f2}
.dh-row th.name .dh-tot{margin-left:6px;font-size:11px;color:#1b3a8f}
/* v26：兼职工时行（单独计酬、不计月考勤）用暖色区分 */
.dh-row.dh-pt th,.dh-row.dh-pt td{background:#fff7ee;color:#b06a1f;font-weight:700}
.dh-row.dh-pt .dh-h{color:#c07a28}
.dh-row.dh-pt th.name{color:#b06a1f}
/* 登录页语言切换：与顶栏完全一致的等高胶囊按钮 */
.lang-switch .lang-opt{height:28px;line-height:28px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center}
/* 单元格高度由 --cellh 控制（设置 → 班表界面里可调） */

/* ================= v20 云端存储状态灯 ================= */
.cloud-dot{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;cursor:pointer;
  padding:0 9px;height:26px;border-radius:13px;border:1px solid var(--line);background:#fff;white-space:nowrap;user-select:none}
.cloud-dot i{font-style:normal;font-size:11px;line-height:1}
.cloud-dot.ok{color:#177245;border-color:#b7e2c6;background:#f2fbf5}
.cloud-dot.sync{color:#8a6100;border-color:#ecc980;background:#fffaf0}
.cloud-dot.sync i{animation:cloudspin 1.1s linear infinite}
.cloud-dot.off{color:#b3261e;border-color:#f0b7b2;background:#fff5f4}
.cloud-dot.conflict{color:#a35a00;border-color:#f0c48a;background:#fff7ec}
@keyframes cloudspin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.cloud-dot:hover{filter:brightness(.96)}

/* ================= v75 跨日计时标识 =================
   顶栏常驻，全站统一口径一眼可辨（08:00 换日）。
   注意：顶栏底色是深色，这里用浅底深字 + 高对比，避免看不清。 */
.day-chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;cursor:default;
  padding:0 9px;height:26px;border-radius:13px;white-space:nowrap;user-select:none;
  color:#ffe6a8;border:1px solid rgba(255,214,102,.55);background:rgba(255,214,102,.14)}
.day-chip:hover{background:rgba(255,214,102,.22)}
/* 页面内的「跨日计时」说明条（浅色正文区域使用） */
.day-note{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;
  padding:3px 9px;border-radius:999px;color:#8a6100;border:1px solid #f0d9a8;background:#fffaf0}
/* 员工列表：栏目标题与内容居中（姓名列左对齐） */
.emp-list th,.emp-list td{text-align:center}
.emp-list th:nth-child(3),.emp-list td:nth-child(3){text-align:left}

/* 智能助手聊天窗口 */
.chat-msg{max-width:82%;padding:8px 12px;border-radius:12px;font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.chat-bot{align-self:flex-start;background:#eef2ff;color:#1b3a8f}
.chat-user{align-self:flex-end;background:#eaf6ee;color:#0f1830}
.chat-msg .err{color:#c0392b}
/* v47：助手操作确认卡片 */
.chat-action{white-space:normal;background:#fff8f1;border:1px solid #f0c99a;max-width:92%;padding:10px 12px}
.chat-action .ca-title{font-weight:800;color:#b45f06;font-size:13px;margin-bottom:6px}
.chat-action .ca-desc{font-size:13px;color:#3b2c17;margin-bottom:6px}
.chat-action .ca-params{background:#fff;border:1px solid #f0d9bc;border-radius:8px;padding:6px 10px;margin-bottom:8px}
.chat-action .ca-row{display:flex;gap:10px;padding:2px 0;font-size:12.5px}
.chat-action .ca-k{color:#a06a2a;min-width:72px;flex-shrink:0}
.chat-action .ca-v{color:#2b1f0e;font-weight:600;word-break:break-all}
.chat-action .ca-btns{display:flex;gap:8px;margin-top:2px}
.chat-action .ca-btns button{padding:5px 14px;font-size:13px}
.chat-action .ca-btns .ca-ok{background:#2b6cb0;color:#fff;border:none;border-radius:7px;cursor:pointer}
.chat-action .ca-btns .ca-ok:disabled{opacity:.6;cursor:not-allowed}
.chat-action .ca-result{font-size:13px;padding:6px 0}
.chat-action .ca-result.ok{color:#1a7f37;font-weight:700}
.chat-action .ca-result.err{color:#c0392b;font-weight:700}
.chat-action .ca-result.muted{color:#8a93a6}
.chat-action .ca-opt{display:block;width:100%;text-align:left;background:#fbf4e8;border:1px solid #f0d9bc;border-radius:8px;padding:7px 10px;margin:3px 0;font-size:13px;color:#2b1f0e;cursor:pointer}
.chat-action .ca-opt:hover{background:#f6e3c4;border-color:#e0bd8a}

/* ================= v84 打卡异常统一红色 + 时间感知 =================
   规则：只有「异常打卡」用红色 —— 迟到 / 早退 / 漏卡 / 旷工 / 未打下班卡；
        正常打卡时间用中度灰；加班（正常）用暖橙。进行中 / 未开始不做异常提示。 */
.sched.fixed td.info-cell .pk-time.bad{color:var(--bad);font-weight:800}
.sched.fixed td.info-cell .pk-bad{
  display:inline-block;max-width:100%;padding:0 3px;border-radius:3px;
  background:#fdecec;color:var(--bad);font-weight:800;
}
.sched .cell .pk-bad{display:inline-block;max-width:100%;padding:0 3px;border-radius:3px;background:#fdecec;color:var(--bad);font-weight:800}
/* 迟到但还没打上班卡时的小字补充说明 */
.sched .pk-sub{display:block;color:var(--muted);font-weight:600}
/* v127：打卡后显示当月累计迟到/漏卡次数（小字、温和色） */
.sched .cell .pk-stat,.sched.fixed td.info-cell .pk-stat{font-size:calc(var(--cellfs,12px)*0.74);line-height:1.3;color:var(--muted);font-weight:600;margin-top:1px}
/* 进行中：打卡时间保持中性灰，绝不显示成异常 */
.sched.fixed td.info-cell .pk-time.live{color:#8a94a6;font-weight:600}
/* 班表设置里的「尺寸预览」样例格（不是真实格子，只用于配置页预览） */
.cell-preview{display:inline-block;border:1px solid var(--line);border-radius:6px;background:#eaf6ee;overflow:hidden;text-align:center;vertical-align:top}
.cell-preview .pv-sh{font-weight:800;line-height:1.3}
.cell-preview .pv-pk{color:#6b7280;font-weight:700;line-height:1.3}
.cell-preview .pv-bad{line-height:1.3}

/* ============================================================
   v90 画中画（PiP）浮层 —— 设置等面板以「悬浮小窗」呈现
   不遮罩页面、可拖动、可最小化；手机上自动占满宽度
   ============================================================ */
.pip-root{position:fixed;inset:0;pointer-events:none;z-index:60}
.pip-root.hidden{display:none}
.pip{position:absolute;right:20px;top:70px;width:min(520px,92vw);max-height:min(78vh,720px);
  display:flex;flex-direction:column;pointer-events:auto;
  background:var(--panel,#fff);border:1px solid var(--line);border-radius:14px;
  box-shadow:0 12px 40px rgba(15,24,48,.22),0 2px 8px rgba(15,24,48,.10);overflow:hidden}
.pip-head{display:flex;align-items:center;gap:6px;padding:8px 10px;cursor:move;
  background:linear-gradient(180deg,rgba(15,24,48,.04),rgba(15,24,48,.01));border-bottom:1px solid var(--line);
  user-select:none}
.pip-head .pip-title{font-weight:700;font-size:13px}
.pip-head button{padding:2px 9px;font-size:12px;line-height:1.5}
.pip-body{padding:10px 12px;overflow:auto;flex:1}
.pip.pip-min .pip-body{display:none}
.pip.pip-min{width:230px;max-height:none}
@media (max-width:820px){
  .pip{left:6px!important;right:6px!important;top:auto!important;bottom:8px;width:auto;max-height:70vh}
}

/* ================= v100 预订紧凑摘要卡片（手机端预订列表 / 今日页） ================= */
.bk-cards { display: flex; flex-direction: column; gap: 8px; }
.bk-card {
  background: #fff; border: 1px solid var(--line); border-left: 4px solid var(--brand);
  border-radius: 10px; padding: 8px 10px; box-shadow: 0 1px 3px rgba(15,24,48,.04);
}
.bk-c-top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.bk-c-time { font-family: ui-monospace, Menlo, monospace; font-weight: 800; color: #0f1830; font-size: 13px; }
.bk-c-name { font-size: 14px; font-weight: 800; color: #0f1830; }
.bk-c-pax { font-size: 12px; color: #41506b; }
.bk-c-status { margin-left: auto; }
.bk-c-mid { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 12px; color: #41506b; margin-top: 4px; }
.bk-c-seat { font-weight: 700; color: #26324a; }
.bk-c-assign { font-size: 11px; color: #6b7a99; margin-top: 4px; line-height: 1.6; }
.bk-c-acts { display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap; }
.bk-c-acts button { padding: 4px 10px; font-size: 12px; min-height: 0; }

/* ================= v109 / v145 预订信息框（表头与内容逐列精确对齐） =================
   ⚠️ v145 关键改动：从 flex 换成 **grid**。
   原因：「今日」与「预订」两个列表里，表头与数据行是两个独立的容器；
   用 flex（flex-basis:0 + min-width + nowrap）时，表头文字短、行内容长，
   两侧的 min-content 不同 → 同一列的最终宽度算出来不一样 → **表头与内容错位**（手机端尤其明显）。
   grid 用同一份 grid-template-columns，列宽只由容器与模板决定、与内容无关，
   所以无论内容多长多短、字号多大，表头与内容都逐列对准。
   —— 列模板集中在 .bk-rows 的 --bk-cols 上，表头与行共用；
   —— 手机端只需换一份模板（去掉定金列）即可，不必改任何 DOM。 */
.bk-rows { display: flex; flex-direction: column; gap: 6px; overflow-x: auto; }
/* 列模板：① 全部用 minmax(0,…) —— 纯 fr 的隐含最小值是 min-content，长文本会把列撑宽；
   ② 最后「操作」列必须是**固定宽度**，不能用 auto —— 表头那格是空的、数据行那格有按钮，
      auto 会让表头与行算出不同列宽（这正是错位的第二个来源）。 */
.bk-rows { --bk-cols: minmax(0,1.15fr) minmax(0,1.35fr) minmax(0,.6fr) minmax(0,1.05fr) minmax(0,.95fr) minmax(0,.8fr) 30px; }  /* 列表：时/名/人/桌/定金/备注/操作 */
.bk-rows.bk-ops-rows { --bk-cols: minmax(0,1.15fr) minmax(0,1.35fr) minmax(0,.6fr) 340px; }                                      /* 操作页：时/名/人/操作 */
.bk-head, .bk-row {
  display: grid; grid-template-columns: var(--bk-cols);
  align-items: center; column-gap: 10px; white-space: nowrap;
  background: #fff; border: 1px solid var(--line); border-radius: 10px; padding: 7px 12px;
  /* 让字体尺寸不受手机系统字号 / 文本自动放大影响 */
  -webkit-text-size-adjust: 100%; text-size-adjust: 100%;
}
.bk-head { background: #f6f8fc; color: var(--muted); font-size: 12px; font-weight: 700; }
.bk-h { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bk-row { box-shadow: 0 1px 3px rgba(15,24,48,.04); }
/* 字段：标签始终隐藏（靠表头），值垂直居中、左对齐；
   min-width:0 + overflow:hidden 让长内容省略而不是把列撑宽（撑宽就会破坏对齐） */
.bk-f { display: flex; flex-direction: column; gap: 2px; align-items: flex-start; justify-content: center; min-width: 0; overflow: hidden; }
.bk-f .bk-fk { font-size: 10.5px; color: var(--muted); line-height: 1; display: none; }
.bk-f .bk-fv { font-size: 14px; font-weight: 700; color: #0f1830; line-height: 1.15; white-space: nowrap; }
.bk-f .bk-fv .bk-dur { color: var(--ok); font-weight: 800; }
.bk-c-name .bk-fv, .bk-c-seat .bk-fv { overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.bk-c-time .bk-fv { overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.bk-acts { display: flex; gap: 6px; align-items: center; flex-wrap: nowrap; justify-content: flex-end; }
/* 操作页按钮多 → 允许换行（列宽固定，换行不会破坏对齐；比横向滚动更好按） */
.bk-ops-rows .bk-acts { flex-wrap: wrap; justify-content: flex-start; }
.bk-c-btn { border: 1px solid var(--line); background: #fff; border-radius: 7px; padding: 3px 10px; font: inherit; font-size: 12px; color: #41506b; cursor: pointer; flex: 0 0 auto; white-space: nowrap; min-height: 0; }
.bk-c-btn.primary { background: var(--brand); color: #fff; border-color: var(--brand); }
.bk-c-btn:hover { background: #f4f7fd; }
.bk-assign { font-size: 11px; color: #6b7a99; padding: 2px 10px 6px; margin: -4px 0 6px; line-height: 1.6; white-space: normal; }



/* ================= v110 预订录入表单（每行一个字段：标题在前、录入在后，标签宽度统一） ================= */
.bkf-form { display: flex; flex-direction: column; gap: 10px; }
.bkf-row { display: flex; align-items: center; gap: 10px; }
.bkf-row > label { flex: 0 0 76px; width: 76px; margin: 0; font-size: 13px; font-weight: 600; color: #41506b; text-align: right; line-height: 1.2; }
.bkf-ctl { flex: 1; display: flex; align-items: center; gap: 6px; min-width: 0; }
/* v163：同一行里的第二个字段标题（「预订人 + 客户类型」这种双字段行） */
.bkf-ctl .bkf-in2 { color: var(--muted); font-size: 12px; font-weight: 600; white-space: nowrap; margin-left: 10px; }
.bkf-ctl input, .bkf-ctl select, .bkf-ctl textarea { width: auto; margin: 0; }
.bkf-ctl input[type="date"], .bkf-ctl textarea,
.bkf-ctl #bkf-name, .bkf-ctl #bkf-contact, .bkf-ctl #bkf-deposit-order,
.bkf-ctl #bkf-seats, .bkf-ctl #bkf-backup,
.bkf-ctl #bkf-pay, .bkf-ctl #bkf-usage, .bkf-ctl #bkf-pkg,
.bkf-ctl #bkf-source, .bkf-ctl #bkf-operator { flex: 1; }

/* ================= v113 预订详情（无标题）+ 圆圈信息按钮 ================= */
.bk-i-btn { border-radius: 50% !important; width: 24px; height: 24px; padding: 0 !important; line-height: 1; font-size: 13px; font-weight: 800; display: inline-flex !important; align-items: center; justify-content: center; }
.bk-detail { display: flex; flex-direction: column; gap: 6px; }
.bk-d-name { font-size: 16px; font-weight: 800; color: #0f1830; padding-bottom: 4px; }
.bk-d-row { display: flex; gap: 8px; align-items: baseline; }
.bk-d-k { flex: 0 0 64px; font-size: 12px; color: var(--muted); }
.bk-d-v { font-size: 13px; color: #0f1830; font-weight: 600; word-break: break-all; }

/* ================= v132 工资表：兼职子行（全职+兼职两排显示） ================= */
.payroll-table { border-collapse: collapse; width: 100%; }
.payroll-table th, .payroll-table td { border-bottom: 1px solid var(--line, #e6e9f0); padding: 5px 8px; text-align: left; vertical-align: top; white-space: nowrap; }
.payroll-table thead th { background: #f5f7fb; font-weight: 700; font-size: 12px; line-height: 1.25; }
.payroll-table th, .payroll-table td { font-size: 13px; }
.payroll-table .pt-row td { background: #fffaf0; color: #8a6d1a; }
.payroll-table .pt-row td:first-child { padding-left: 22px; }

/* ================= v164：预订「📖 菜单」标签页已删除 =================
   （用户反馈没有实际用处；菜单仍由「营业 → ⚙️设置 → 菜品分类」维护）
   原 v142 的菜单栏样式（大类折叠块 / 小类标题 / 品项行 / 名称·英文·规格·单位·价格）
   随页面一并删除，别再恢复。 */

/* ================= v143 营业 → 设置 → 菜品分类：全系统菜单框架编辑器 ================= */
.rc-cat { border-bottom: 1px solid var(--line); padding: 8px 0; }
.rc-crow, .rc-srow { display: flex; align-items: center; gap: 8px; }
.rc-srow { padding: 4px 0 4px 18px; }
.rc-orig { font-size: 12px; word-break: break-all; flex: 0 0 auto; max-width: 26%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rc-crow .rc-orig { font-size: 13px; }
.rc-name { flex: 1; font-size: 12px; word-break: break-all; }
.rc-dept { flex: 0 0 22%; font-size: 12px; }
.rc-srow .rc-name { font-size: 12px; }
.rc-crow input.rc-display, .rc-srow input.rsub-display { flex: 1; min-width: 120px; padding: 5px 8px; font-size: 12px; }
.rc-crow input.rc-display { padding: 5px 8px; font-size: 13px; }
.rc-crow select.rc-dept, .rc-srow select.rsub-dept { flex: 0 0 22%; padding: 5px 6px; font-size: 12px; }
.rc-addsub { padding: 2px 8px !important; font-size: 12px; line-height: 1.2; }
.rmi-cols, .rmi-row { display: grid; grid-template-columns: 1.5fr 1.1fr .7fr .6fr .7fr .8fr 34px; gap: 6px; align-items: center; }
.rmi-cols { padding: 6px 4px 4px; border-bottom: 1px solid var(--line); font-size: 11px; color: var(--muted); }
.rmi-row { padding: 3px 0 3px 34px; }
.rmi-row input, .rmi-row select { padding: 4px 6px; font-size: 12px; min-width: 0; }
.rmi-row .rmi-price { text-align: right; font-variant-numeric: tabular-nums; }
.rmi-row .rmi-del { padding: 2px 6px !important; font-size: 12px; line-height: 1.2; }
.rmi-row.static { font-size: 12px; }
.rmi-c { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rc-addsub:hover, .rmi-del:hover { filter: brightness(.96); }

/* ================= v143b 选菜品浮层（独立容器，叠在主弹窗之上） ================= */
#picker-root:not(.hidden){position:fixed;inset:0;background:rgba(15,24,48,.35);display:flex;align-items:center;justify-content:center;z-index:70}
.picker-card{background:#fff;border-radius:16px;width:660px;max-width:94vw;max-height:86vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 18px 48px rgba(15,24,48,.24)}
.picker-head{display:flex;align-items:center;gap:8px;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.picker-title{font-size:15px;font-weight:800;color:#0f1830}
.picker-search{flex:1;min-width:160px;padding:6px 10px;font-size:13px}
.picker-body{padding:8px 18px 16px;overflow:auto}
.picker-cat{font-weight:800;font-size:12px;color:#41506b;margin:12px 0 4px}
.picker-items{display:flex;flex-wrap:wrap;gap:6px}
.picker-item{border:1px solid var(--line);border-radius:8px;background:#fff;color:#0f1830;cursor:pointer;text-align:left;padding:6px 10px;display:inline-flex;flex-direction:column;gap:2px;align-items:flex-start}
.picker-item:hover{background:#f3f7ff;border-color:#a9c2ff}
.picker-empty{padding:22px 0;text-align:center}

/* ================= v144 预订列表：状态用行底色表达 + 备注（预点/常规）+ 餐饮内容 ================= */
/* 状态底色（用户口径）：绿=已确认 / 白底半透明=未完成 / 橙=已入座 / 红=已结束 */
.bk-row { position: relative; }
.bk-row.bk-st-confirmed { background: #e3f6e8; border-color: #9ed8ae; box-shadow: inset 4px 0 0 #22a04a; }
.bk-row.bk-st-open { background: #fff; border-style: dashed; }
.bk-row.bk-st-open .bk-f .bk-fv,
.bk-row.bk-st-open .bk-f .bk-fv .bk-dur { color: rgba(15, 24, 48, .42); }
.bk-row.bk-st-open .bk-kind-txt { color: rgba(15, 24, 48, .4); }
.bk-row.bk-st-seated { background: #fff2df; border-color: #f0c68c; box-shadow: inset 4px 0 0 #e8890c; }
.bk-row.bk-st-ended { background: #fdeaea; border-color: #efadad; box-shadow: inset 4px 0 0 #d64545; }
.bk-row.bk-st-cancelled { background: #f4f5f8; border-color: #dfe3ec; box-shadow: inset 4px 0 0 #a9b1c4; }
/* v145：列宽统一由 .bk-rows 的 --bk-cols 决定（这里是 grid，flex 属性已失效，故删掉旧规则） */
.bk-kind-txt { font-size: 13px; font-weight: 700; color: var(--muted); }
.bk-kind-btn { border: 1px dashed var(--brand); background: #eef4ff; color: var(--brand); border-radius: 7px; padding: 2px 9px; font: inherit; font-size: 12px; font-weight: 800; cursor: pointer; white-space: nowrap; min-height: 0; }
.bk-kind-btn:hover { background: #e2ecff; }
/* 餐饮内容（套餐 / 预点餐饮品）表格 */
.food-sec { font-size: 12.5px; font-weight: 800; color: #29344e; margin: 12px 0 4px; }
.food-sec:first-child { margin-top: 2px; }
.food-tb { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.food-tb th, .food-tb td { border-bottom: 1px solid var(--line); padding: 5px 8px; text-align: left; white-space: nowrap; }
.food-tb thead th { background: #f5f7fb; font-size: 11.5px; color: var(--muted); }
.food-tb td:first-child { white-space: normal; word-break: break-word; }

/* v144 多选浮层（预点餐饮品）：选中态 + 数量加减 */
.picker-item.on { background: #eef4ff; border-color: var(--brand); box-shadow: 0 0 0 1px var(--brand) inset; }
.picker-qty { display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; font-size: 11px; color: #41506b; }
.picker-qty b { min-width: 14px; text-align: center; }
.picker-qty .q-mini { padding: 0 5px; min-width: 18px; line-height: 1.5; }

/* v163 选桌号浮层（画中画）：桌号块更大更好点，多选高亮 */
.picker-item.seat-pick { min-width: 58px; min-height: 38px; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; }
.picker-item.seat-pick.on { background: var(--brand); border-color: var(--brand); color: #fff; }

/* ================= v146 预订工作分配（安排 / 准备桌 / 服务） ================= */
.bkw { display: flex; flex-direction: column; gap: 8px; }
.bkw-row { border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; background: #fff; }
.bkw-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.bkw-who { font-weight: 800; color: #0f1830; }
.bkw-sub { font-size: 12px; }
.bkw-list { margin: 5px 0 0; padding-left: 20px; font-size: 12.5px; color: #29344e; line-height: 1.6; }
.bkw-extra { font-size: 12px; margin-top: 4px; }
.bkw-modes { display: flex; flex-direction: column; gap: 6px; }
.bkw-mode { display: flex; align-items: center; gap: 8px; border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; cursor: pointer; }
.bkw-mode.on { border-color: var(--brand); background: #eef4ff; }
.bkw-mode b { font-size: 13px; }
.bkw-mode .muted { font-size: 12px; }
.bkw-pick { display: flex; align-items: center; gap: 8px; padding: 5px 0; }
.bkw-pick select { flex: 1; }
/* 准备桌：红色圆圈感叹号 */
.bk-alert { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
  border-radius: 50%; background: #d64545; color: #fff; font-size: 12px; font-weight: 900; line-height: 1;
  border: none; padding: 0; flex: 0 0 auto; }
.bk-alert-btn { cursor: pointer; }
.bk-alert-btn:hover { background: #b93434; }

/* ================= v151 工具 · 新品成本模拟（配方行） ================= */
.nc-row select.nc-mat { min-width: 0; }
.nc-row .nc-qty { text-align: right; }
.nc-manual input { min-width: 0; }

/* ================= v155 预订「确认申请」标识 ================= */
/* 无「确认/发布」权限的人录入/修改后 → 待确认；行底色仍是白底未完成（见 .bk-row.bk-st-open） */
.bk-cf-badge { display: inline-flex; align-items: center; gap: 3px; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
  font-size: 11px; font-weight: 800; line-height: 1.6; white-space: nowrap;
  background: #fff4e5; color: #b45309; border: 1px solid #f3d3a0; }
.bk-cf-badge.mine { background: #fdecec; color: #b3261e; border-color: #f0b6b2; }
.bk-cf-chg { margin-top: 4px; font-size: 12px; color: #41506b; line-height: 1.7; }

/* ================= v161 预定工作分配（部门 → 任务 → 事项） ================= */
.wk-row { border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; margin-bottom: 6px; background: #fff; }
.wk-row .wk-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.wk-row .wk-head input[data-wt-label], .wk-row .wk-head input[data-wt-labelen] { padding: 4px 8px; font-size: 12px; }
.wk-row textarea { font-size: 12px; }
.wk-dept { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; background: #fbfcfe; cursor: default; }
.wk-dept-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }

/* ================= v157 预定工作分配（独立页面） ================= */
.wk-cond { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 7px;
  padding-top: 7px; border-top: 1px dashed var(--line); font-size: 12px; }
.wk-cond .wk-cond-title { font-weight: 700; color: var(--primary, #41506b); font-size: 11.5px; }
.wk-cond .wk-cond-f { color: var(--muted); font-size: 11.5px; }
.wk-cond input[type="number"] { padding: 3px 6px; font-size: 12px; }
.wk-cond select { padding: 3px 6px; font-size: 12px; }
.wk-cond .wk-cond-hint { color: var(--muted); font-size: 11px; }
.wk-dept-chips { display: inline-flex; gap: 4px; flex-wrap: wrap; align-items: center; }
.wk-chips { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.wk-chip { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--line);
  border-radius: 999px; padding: 2px 10px; font-size: 12px; cursor: pointer; background: #fff; }
.wk-chip input { width: auto; margin: 0; }
/* 人员配置：部门 → 分工 → 岗位 */
.wg-dept { border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; margin-bottom: 8px; background: #fbfcfe; }
.wg-dept-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.wg-row { border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; margin-bottom: 6px; background: #fff; }
.wg-row .wg-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.wg-row .wg-head input { padding: 4px 8px; font-size: 12px; }
@media (max-width: 820px) {
  .wk-cond .wk-cond-hint { display: none; }
  .wk-row .wk-head input[data-wt-label], .wk-row .wk-head input[data-wt-labelen] { width: 88px !important; }
}
