.tkb {
  --bg:#081527; --panel:#122A4C; --panel2:#14304F; --line:#1E4266;
  --tx:#DDEBFA; --tx2:#9FB8D4; --tx3:#7FA6C9;
  --blue:#2FA8F2; --green:#2fbf71; --yellow:#F5B40A; --red:#E5484D; --cyan:#2FD8F2;
  --r:10px;
}
.tkb,.tkb * {box-sizing:border-box;margin:0;padding:0}
.tkb {
  background:linear-gradient(180deg,#081527,#0B2140 55%,#081A33); color:var(--tx); min-height:100vh;
  font-family:"Microsoft YaHei","PingFang SC","Segoe UI",system-ui,sans-serif; font-size:14px;
  -webkit-font-smoothing:antialiased;
}
.tkb button,.tkb input,.tkb select,.tkb textarea {font-family:inherit;font-size:inherit;color:inherit}
.tkb button {cursor:pointer;border:none;background:none}
.tkb ::-webkit-scrollbar {width:8px;height:8px}
.tkb ::-webkit-scrollbar-thumb {background:rgba(47,216,242,.35);border-radius:6px}
.tkb ::-webkit-scrollbar-track {background:transparent}
.tkb .topbar {
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:11px 18px;background:var(--panel);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:50;
}
.tkb .logo {display:flex;align-items:center;gap:8px;font-size:16px;font-weight:700;letter-spacing:.4px;white-space:nowrap}
.tkb .logo .dot {width:9px;height:9px;border-radius:50%;background:var(--blue);box-shadow:0 0 9px var(--blue)}
.tkb .robadge {font-size:11px;color:var(--yellow);background:rgba(240,180,41,.13);border:1px solid rgba(240,180,41,.3);padding:2px 8px;border-radius:20px;font-weight:600}
.tkb .spacer {flex:1}
.tkb .btn {padding:6px 12px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);color:var(--tx2);font-size:13px;transition:.15s;white-space:nowrap}
.tkb .btn:hover {background:#17395F;color:var(--tx);border-color:#2A5580}
.tkb .btn.on {background:rgba(76,141,255,.15);border-color:var(--blue);color:var(--blue);font-weight:600}
.tkb .btn.pri {background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.tkb .btn.pri:hover {background:#3d7ef0;color:#fff}
.tkb .seg {display:flex;background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:3px;gap:2px}
.tkb .seg button {padding:5px 13px;border-radius:6px;color:var(--tx3);font-size:13px;transition:.15s;white-space:nowrap}
.tkb .seg button:hover {color:var(--tx)}
.tkb .seg button.on {background:#17395F;color:var(--tx);font-weight:600}
.tkb .seg button.on.g-civ {color:var(--blue)}
.tkb .seg button.on.g-out {color:var(--green)}
.tkb .search {padding:6px 11px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);width:180px;outline:none;transition:.15s}
.tkb .search:focus {border-color:var(--blue);width:210px}
.tkb .kpis {display:flex;gap:12px;padding:14px 18px 0;flex-wrap:wrap}
.tkb .kpi {flex:1;min-width:150px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:11px 14px}
.tkb .kpi .lb {color:var(--tx3);font-size:12px;margin-bottom:4px}
.tkb .kpi .vl {font-size:26px;font-weight:700;line-height:1.15;font-variant-numeric:tabular-nums}
.tkb .kpi .sub {color:var(--tx3);font-size:11.5px;margin-top:4px}
.tkb .kpi .sub b {font-weight:600}
.tkb .kpi .s-civ {color:var(--blue)}
.tkb .kpi .s-out {color:var(--green)}
.tkb .k1 .vl {color:var(--blue)}
.tkb .k2 .vl {color:var(--red)}
.tkb .k3 .vl {color:var(--yellow)}
.tkb .k4 .vl {color:var(--green)}
.tkb .board {padding:14px 18px 26px}
.tkb .lane {margin-bottom:14px}
.tkb .lane-h {display:flex;align-items:center;gap:9px;margin-bottom:9px}
.tkb .lane-h .ldot {width:8px;height:8px;border-radius:50%;flex:none}
.tkb .lane-h .lnm {font-size:14px;font-weight:700}
.tkb .lane-h .lc {color:var(--tx3);font-size:12px;font-weight:400}
.tkb .lane-h .lbar {flex:1;height:1px;background:var(--line)}
.tkb .cols {display:flex;gap:11px;align-items:flex-start;overflow-x:auto;padding-bottom:6px}
.tkb .col {
  width:236px;flex:none;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--r);display:flex;flex-direction:column;max-height:calc(100vh - 150px);
}
.tkb .chead {padding:9px 12px;background:#17395F;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:7px;flex:none}
.tkb .chead .cd {width:8px;height:8px;border-radius:50%;flex:none}
.tkb .chead .cn {font-size:12.5px;font-weight:700;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tkb .chead .cc {background:#17395F;color:var(--tx2);font-size:11.5px;font-weight:700;padding:1px 8px;border-radius:20px;font-variant-numeric:tabular-nums}
.tkb .chead .cw {font-size:11px;color:var(--red);font-weight:600}
.tkb .clist {padding:8px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:7px;min-height:56px}
.tkb .empty {text-align:center;color:#52799F;font-size:11.5px;padding:12px 0}
.tkb .card {
  background:#14304F;border:1px solid #1E4266;border-left:3px solid #23A55A;
  border-radius:8px;padding:9px 10px;cursor:pointer;transition:.15s;
}
.tkb .card:hover {border-color:#2A5580;background:#1A3D66}
.tkb .card.r-over {border-left-color:var(--red);background:#14304F;box-shadow:0 0 0 1px rgba(229,72,77,.35) inset}
.tkb .card.r-soon {border-left-color:var(--yellow)}
.tkb .card.r-done {opacity:.62;border-left-color:#2d5c43}
.tkb .card .r1 {display:flex;align-items:center;gap:6px;margin-bottom:4px}
.tkb .card .no {font-size:11.5px;font-weight:700;color:var(--tx3);font-family:Consolas,monospace;flex:none}
.tkb .card .nm {font-size:13px;font-weight:600;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tkb .gp {font-size:10.5px;padding:1.5px 6px;border-radius:4px;font-weight:600;flex:none;display:inline-block}
.tkb .gp.civ {background:rgba(76,141,255,.15);color:var(--blue)}
.tkb .gp.out {background:rgba(47,191,113,.15);color:var(--green)}
.tkb .cat {font-size:10.5px;padding:1.5px 6px;border-radius:4px;font-weight:600;flex:none;display:inline-block;border:1px solid transparent}
.tkb .cat.cust {background:rgba(160,107,255,.16);color:var(--purple);border-color:rgba(160,107,255,.3)}
.tkb .cat.pre {background:rgba(255,140,66,.16);color:#ff8c42;border-color:rgba(255,140,66,.3)}
.tkb .cat.none {background:rgba(120,130,145,.12);color:var(--tx3);border-color:rgba(120,130,145,.25)}
.tkb .card .r2 {font-size:11.5px;color:var(--tx2);display:flex;gap:6px;align-items:center;margin-bottom:6px;flex-wrap:wrap}
.tkb .card .r2 .br {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}
.tkb .card .r3 {display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:10.5px}
.tkb .tag {padding:1.5px 6px;border-radius:4px;background:#17395F;color:var(--tx3)}
.tkb .tag.t-due.late {background:rgba(242,85,90,.16);color:var(--red);font-weight:600}
.tkb .tag.t-due.soon {background:rgba(240,180,41,.16);color:var(--yellow);font-weight:600}
.tkb .tag.t-urg {background:rgba(242,85,90,.16);color:var(--red);font-weight:600}
.tkb .tag.t-done {background:rgba(47,191,113,.14);color:var(--green)}
.tkb .col.dcol {width:172px;border-style:dashed;border-color:#2b4a38;background:rgba(47,191,113,.05);cursor:pointer}
.tkb .col.dcol:hover {border-color:var(--green)}
.tkb .col.dcol .chead {border-bottom-color:#2b4a38}
.tkb .dsum {padding:14px 13px;text-align:center;flex:1;display:flex;flex-direction:column;justify-content:center}
.tkb .dsum .dn {font-size:38px;font-weight:700;color:var(--green);line-height:1;font-variant-numeric:tabular-nums}
.tkb .dsum .dl {color:var(--tx3);font-size:11.5px;margin-top:5px}
.tkb .dsum .dr {margin-top:9px;font-size:12px;display:flex;align-items:center;justify-content:center;gap:6px;color:var(--tx2)}
.tkb .dsum .dr b {font-size:13.5px;font-variant-numeric:tabular-nums}
.tkb .dsum .dm {margin-top:10px;font-size:11px;color:var(--yellow);line-height:1.5}
.tkb .dsum .db {margin-top:11px;padding:5px 10px;border-radius:7px;background:#17395F;border:1px solid var(--line);color:var(--tx2);font-size:11.5px}
.tkb .col.dcol:hover .db {background:#1A3D66;color:var(--tx)}
.tkb .srow {display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid #1E4266;font-size:12px}
.tkb .srow:last-child {border-bottom:none}
.tkb .srow .sno {width:42px;color:var(--tx3);font-family:Consolas,monospace;font-size:11.5px;flex:none}
.tkb .srow .snm {flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tx)}
.tkb .bar {display:flex;align-items:center;gap:8px;margin-bottom:7px;font-size:12px}
.tkb .bar .nm {width:52px;color:var(--tx2);text-align:right;flex:none}
.tkb .bar .tr {flex:1;height:13px;background:#0A1E3A;border-radius:4px;overflow:hidden}
.tkb .bar .fl {height:100%;border-radius:4px}
.tkb .bar .ct {width:44px;color:var(--tx);font-weight:600;text-align:right;flex:none;font-variant-numeric:tabular-nums;font-size:11.5px}
.tkb .mask {position:fixed;inset:0;background:rgba(3,12,26,.66);z-index:100;display:none;align-items:center;justify-content:center;padding:20px}
.tkb .mask.show {display:flex}
.tkb .modal {background:var(--panel);border:1px solid var(--line);border-radius:12px;width:540px;max-width:100%;max-height:90vh;overflow-y:auto}
.tkb .modal.wide {width:800px}
.tkb .mh {padding:13px 17px;border-bottom:1px solid var(--line);display:flex;align-items:center}
.tkb .mh h3 {font-size:15px;font-weight:700;flex:1}
.tkb .mh .x {color:var(--tx3);font-size:20px;line-height:1;padding:0 4px}
.tkb .mh .x:hover {color:var(--tx)}
.tkb .mb {padding:15px 17px}
.tkb .mf {padding:11px 17px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.tkb .fg {margin-bottom:11px}
.tkb .fg label {display:block;color:var(--tx3);font-size:12px;margin-bottom:4px}
.tkb .fg input,.tkb .fg select,.tkb .fg textarea {width:100%;padding:7px 10px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);outline:none}
.tkb .fg input:focus,.tkb .fg select:focus,.tkb .fg textarea:focus {border-color:var(--blue)}
.tkb .grid2 {display:grid;grid-template-columns:1fr 1fr;gap:0 13px}
.tkb .proc {display:grid;grid-template-columns:1fr 1fr;gap:9px}
.tkb .pitem {border:1px solid var(--line);border-radius:9px;padding:9px 11px;background:var(--panel2)}
.tkb .pitem .ph {display:flex;align-items:center;gap:7px;margin-bottom:4px}
.tkb .pitem .pi {width:18px;height:18px;border-radius:5px;background:#17395F;color:var(--tx3);font-size:10.5px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.tkb .pitem .pn {font-size:13px;font-weight:700}
.tkb .pitem .pd {color:var(--tx3);font-size:11.5px;line-height:1.6}
.tkb .hint {color:var(--tx3);font-size:12.5px;line-height:1.75}
.tkb .hint b {color:var(--tx2)}
.tkb .hint code {background:#17395F;padding:1px 5px;border-radius:4px;color:var(--blue);font-family:Consolas,monospace;font-size:12px}
.tkb .toast {position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(80px);background:var(--green);color:#06210f;padding:9px 18px;border-radius:8px;font-weight:600;z-index:200;transition:.3s;opacity:0;font-size:13px}
.tkb .toast.show {transform:translateX(-50%) translateY(0);opacity:1}
.tkb.big .topbar,body.big .kpis,body.big .board {padding-left:22px;padding-right:22px}
.tkb.big .card {padding:12px 13px}
.tkb.big .card .nm {font-size:15px}
.tkb.big .card .r2 {font-size:13px}
.tkb.big .kpi .vl {font-size:34px}
.tkb.big .chead {padding:12px 14px}
.tkb.big .chead .cn {font-size:14.5px}
.tkb.big .col {width:268px}
.tkb .mainseg {display:flex;background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:3px;gap:2px}
.tkb .mainseg button {padding:6px 16px;border-radius:6px;color:var(--tx3);font-size:13.5px;font-weight:600;transition:.15s;white-space:nowrap}
.tkb .mainseg button:hover {color:var(--tx)}
.tkb .mainseg button.on {background:#17395F;color:var(--blue)}
.tkb .dgsec {color:var(--tx3);font-size:12.5px;margin:4px 0 10px}
.tkb .dperson {background:var(--panel);border:1px solid var(--line);border-radius:var(--r);margin-bottom:12px;overflow:hidden}
.tkb .dph {display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--line);background:var(--panel2)}
.tkb .dph .avatar {width:30px;height:30px;border-radius:50%;background:#17395F;color:var(--tx2);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.tkb .dph .dnm {font-weight:700;font-size:14.5px}
.tkb .dph .dsum2 {margin-left:auto;display:flex;gap:14px;font-size:11.5px;color:var(--tx3);align-items:center;flex-wrap:wrap}
.tkb .dph .dsum2 b {font-variant-numeric:tabular-nums;font-weight:700}
.tkb .dtask {display:flex;gap:10px;padding:10px 14px;border-bottom:1px solid #1E4266;align-items:flex-start;flex-wrap:wrap}
.tkb .dtask:last-child {border-bottom:none}
.tkb .dtask .dtxt {flex:1;min-width:200px;font-size:13px;line-height:1.55}
.tkb .dtask .dmeta {display:flex;gap:6px;flex-wrap:wrap;align-items:center;flex:none}
.tkb .pri {font-size:10.5px;padding:1.5px 7px;border-radius:4px;font-weight:600;flex:none;display:inline-block}
.tkb .pri.p-ei {background:rgba(242,85,90,.16);color:var(--red)}
.tkb .pri.p-ii {background:rgba(76,141,255,.15);color:var(--blue)}
.tkb .pri.p-in {background:rgba(255,140,66,.16);color:#ff8c42}
.tkb .pri.p-ni {background:rgba(120,130,145,.14);color:var(--tx3)}
.tkb .pri.p-none {background:transparent;border:1px dashed #2A5580;color:var(--tx3)}
.tkb .st {font-size:10.5px;padding:1.5px 7px;border-radius:4px;font-weight:600}
.tkb .st.s-todo {background:rgba(120,130,145,.14);color:var(--tx2)}
.tkb .st.s-doing {background:rgba(76,141,255,.16);color:var(--blue)}
.tkb .st.s-done {background:rgba(47,191,113,.15);color:var(--green)}
.tkb .dhrs {font-size:11px;color:var(--tx3);font-variant-numeric:tabular-nums;background:#17395F;padding:1.5px 7px;border-radius:4px}
.tkb .drem {color:var(--tx3);font-size:11.5px;margin-top:3px}
.tkb .dempty {border:1px dashed #1E4266;border-radius:var(--r);padding:26px;text-align:center;color:#52799F;font-size:12.5px}
.tkb .duty {
  position:fixed;right:18px;bottom:18px;z-index:60;
  min-width:176px;padding:12px 15px 11px;border-radius:14px;cursor:default;
  background:linear-gradient(135deg,rgba(76,141,255,.20),rgba(34,193,195,.12));
  border:1px solid rgba(76,141,255,.45);
  box-shadow:0 10px 30px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.04);
}
.tkb .duty:hover {border-color:rgba(76,141,255,.7)}
.tkb .duty .dh {display:flex;align-items:center;gap:6px;color:#9fb2cc;font-size:11.5px;letter-spacing:1.2px;font-weight:700}
.tkb .duty .dh .ic {width:19px;height:19px;border-radius:6px;background:rgba(76,141,255,.24);display:flex;align-items:center;justify-content:center;font-size:11px}
.tkb .duty .dn {margin-top:7px;font-size:27px;font-weight:800;line-height:1.08;color:#fff;letter-spacing:1.5px;text-shadow:0 0 16px rgba(76,141,255,.55)}
.tkb .duty .dt {margin-top:6px;font-size:11px;color:#7d8998}
.tkb .duty .dt b {color:var(--cyan);font-weight:600}
.tkb .duty .dfold {position:absolute;top:7px;right:8px;color:#6c7785;font-size:13px;line-height:1;padding:3px 5px;border-radius:6px;cursor:pointer}
.tkb .duty .dfold:hover {color:#e8ecf2;background:rgba(255,255,255,.08)}
.tkb .duty.folded {min-width:0;padding:6px 10px;cursor:pointer}
.tkb .duty.folded .dh,.tkb .duty.folded .dn,.tkb .duty.folded .dt {display:none}
.tkb .duty.folded .dfold {position:static;display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:#9fb2cc;font-weight:700}
.tkb .duty.folded .dfold::after {content:"值日生"}
@keyframes dutyPulse {
  0%,100%{box-shadow:0 10px 30px rgba(0,0,0,.45),0 0 0 0 rgba(240,180,41,.5)}
  50%{box-shadow:0 10px 30px rgba(0,0,0,.45),0 0 0 12px rgba(240,180,41,0)}
}
.tkb .duty.alert {
  min-width:198px;
  background:linear-gradient(135deg,rgba(240,180,41,.28),rgba(242,85,90,.16));
  border-color:rgba(240,180,41,.8);
  animation:dutyPulse 1.9s ease-out infinite;
}
.tkb .duty.alert:hover {border-color:#ffd166}
.tkb .duty.alert .dh {color:var(--yellow)}
.tkb .duty.alert .dh .ic {background:rgba(240,180,41,.28)}
.tkb .duty.alert .dn {font-size:31px;text-shadow:0 0 20px rgba(240,180,41,.65)}
.tkb .duty.alert .dgo {
  margin-top:8px;font-size:12.5px;font-weight:700;color:#ffcf5c;text-align:center;
  background:rgba(240,180,41,.15);border:1px solid rgba(240,180,41,.4);
  border-radius:7px;padding:5px 9px;letter-spacing:.5px;animation:dutyBlink 1.4s ease-in-out infinite;
}
@keyframes dutyBlink {0%,100%{opacity:1}50%{opacity:.55}}
.tkb .duty.alert .dt {margin-top:6px}
@media (max-width:900px) {.tkb .topbar {padding:10px 12px;gap:9px}
.tkb .logo {font-size:14.5px}
.tkb .search {width:100%;flex:1}
.tkb .seg {width:100%}
.tkb .seg button {flex:1;text-align:center}
.tkb .kpis {padding:12px 12px 0;gap:9px}
.tkb .kpi {min-width:calc(50% - 5px);flex:none;padding:9px 11px}
.tkb .kpi .vl {font-size:21px}
.tkb .board {padding:12px}
.tkb .cols {flex-direction:column;overflow-x:visible;gap:9px}
.tkb .col {width:100%;max-height:none}
.tkb .clist {flex-direction:row;overflow-x:auto;overflow-y:hidden}
.tkb .clist .card {width:200px;flex:none}
.tkb .clist .empty {width:100%;flex:none;padding:9px 0}
.tkb .card {cursor:default}
.tkb .card:hover {background:#1A3D66}
.tkb .modal {width:100%;max-height:94vh}
.tkb .grid2,.tkb .proc {grid-template-columns:1fr}
.tkb .mb {padding:12px 14px}
.tkb .mf {padding:10px 14px}
.tkb .editonly,.tkb .nophone {display:none !important}
.tkb .duty {right:10px;bottom:10px;min-width:0;padding:9px 12px 8px}
.tkb .duty .dn {font-size:21px;margin-top:5px}
.tkb .duty .dt {font-size:10px;margin-top:4px}
}

/* —— 内嵌进库存系统的适配覆盖（不改大屏配色，只调容器适配） —— */
.tkb{margin:-16px -20px -52px;min-height:calc(100vh - 116px)}
.tkb .topbar{position:relative;z-index:5}
.tkb .col{max-height:calc(100vh - 320px)}
.tkb .mask{z-index:1200}

/* ---- 泳道行视图（行=工序，一屏 11 道全显；2026-10-21 新增） ---- */
.tkb .tklanes {display:flex;flex-direction:column;gap:4px;height:calc(100vh - 226px);min-height:430px;overflow-y:auto}
.tkb .tlane {flex:1 1 auto;min-height:52px;display:flex;align-items:stretch;gap:8px;position:relative}
.tkb .tlh {flex:0 0 122px;background:#17395F;border:1px solid var(--line);border-radius:8px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:3px 6px;text-align:center}
.tkb .tlh b {font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.tkb .tlh i {font-style:normal;font-size:11px;color:var(--tx3);font-variant-numeric:tabular-nums}
.tkb .tlh em {font-style:normal;font-size:10.5px;color:var(--red);font-weight:700}
.tkb .tlrow {flex:1;min-width:0;display:flex;align-items:stretch;gap:9px;overflow-x:auto;overflow-y:hidden;
  background:rgba(18,42,76,.5);border:1px solid var(--line);border-radius:8px;padding:5px 6px}
.tkb .tlrow::-webkit-scrollbar {height:5px}
.tkb .tlrow .card {flex:0 0 302px;padding:7px 11px;display:flex;flex-direction:column;justify-content:center;align-items:stretch}
.tkb .tlrow .card .r1 {margin-bottom:3px}
.tkb .tlrow .card .r2 {margin-bottom:3px}
.tkb .tlrow .card .nm {font-size:14.5px}
.tkb .tlrow .card .r2 .br {max-width:180px}
.tkb .tlane.ovf::after {content:'';position:absolute;left:130px;right:0;top:0;bottom:0;pointer-events:none;
  background:linear-gradient(90deg,rgba(10,28,54,0) 86%,rgba(10,28,54,.94) 100%);border-radius:8px}
.tkb .tlane.empty .tlrow {border-style:dashed;justify-content:center;align-items:center;color:var(--tx3);font-size:11.5px}
.tkb .tlane.donelane {flex:0 0 auto;min-height:0}
.tkb .tlane.donelane .tlh {background:rgba(47,191,113,.1);border-color:#2b4a38}
.tkb .tlane.donelane .tlh b {color:var(--green)}
.tkb .tlane.donelane .tlrow {justify-content:flex-start;align-items:center;padding:7px 12px;font-size:12.5px;color:var(--tx3);cursor:pointer}
.tkb .tlane.donelane .tlrow b {color:var(--green);font-size:15px;font-variant-numeric:tabular-nums;margin:0 4px}
.tkb .tkflash {animation:tkflash 1s ease}
@keyframes tkflash {0%,100%{box-shadow:none}30%{box-shadow:0 0 0 2px var(--cyan) inset}}
/* 泳道视图右下角小地图 */
.tkb .tkmap {position:fixed;right:26px;bottom:16px;z-index:40;display:flex;gap:3px;padding:5px;
  background:rgba(8,21,39,.94);border:1px solid var(--cyan);border-radius:9px;box-shadow:0 6px 20px rgba(0,0,0,.55)}
.tkb .tkmap .m {width:30px;height:42px;border-radius:4px;background:rgba(23,57,95,.75);border:1px solid rgba(30,66,102,.7);
  display:flex;flex-direction:column;justify-content:flex-end;gap:2px;padding:3px;cursor:pointer;transition:.15s}
.tkb .tkmap .m:hover {background:rgba(35,80,130,.85)}
.tkb .tkmap .m.cur {outline:1.5px solid var(--cyan);background:rgba(35,80,130,.85)}
.tkb .tkmap .m i {display:block;height:3.5px;border-radius:2px}

/* 泳道模式：压缩顶部 KPI 与卡内间距，保证 3 行卡片放得下且尽量一屏 */
.tkb.lanemode .kpis {padding:8px 18px 0;gap:9px}
.tkb.lanemode .kpi {padding:6px 12px;min-width:110px}
.tkb.lanemode .kpi .lb {font-size:11px;margin-bottom:2px}
.tkb.lanemode .kpi .vl {font-size:21px}
.tkb.lanemode .kpi .sub {font-size:10.5px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tkb .tklanes {gap:4px}
.tkb .tlane {min-height:58px}
.tkb .tlrow .card {padding:5px 10px;line-height:1.2}
.tkb .tlrow .card .r1 {margin-bottom:2px}
.tkb .tlrow .card .r2 {margin-bottom:2px}
.tkb .tlrow .card .nm {font-size:13.5px}
.tkb .tlrow .card .r2 {font-size:11px}
.tkb .tlrow .card .r3 {font-size:10.5px}
.tkb .tlrow .card .tag {padding:1px 5px}

/* 泳道模式·二轮收紧（3 行卡片控制在 ~52px 内，11 行一屏不裁切） */
.tkb.lanemode .tlrow {padding:3px 6px}
.tkb.lanemode .tlrow .card {padding:4px 9px}
.tkb.lanemode .tlrow .card .r1 {margin-bottom:1px}
.tkb.lanemode .tlrow .card .r2 {margin-bottom:1px}
.tkb.lanemode .tlrow .card .nm {font-size:13px}
.tkb.lanemode .tlrow .card .r2 {font-size:10.5px}
.tkb.lanemode .tlrow .card .r3 {font-size:10px}
.tkb.lanemode .tlh b {font-size:12.5px}
.tkb.lanemode .tlh i {font-size:10.5px}

/* 泳道模式·二轮收紧（3 行卡片控制在 ~52px 内，11 行一屏不裁切） */
.tkb.lanemode .tlrow {padding:3px 6px}
.tkb.lanemode .tlrow .card {padding:4px 9px}
.tkb.lanemode .tlrow .card .r1 {margin-bottom:1px}
.tkb.lanemode .tlrow .card .r2 {margin-bottom:1px}
.tkb.lanemode .tlrow .card .nm {font-size:13px}
.tkb.lanemode .tlrow .card .r2 {font-size:10.5px}
.tkb.lanemode .tlrow .card .r3 {font-size:10px}
.tkb.lanemode .tlh b {font-size:12.5px}
.tkb.lanemode .tlh i {font-size:10.5px}

/* 泳道模式·三轮：最后 2px 级挤压，彻底不裁切 */
.tkb.lanemode .tlrow .card .r1 {margin-bottom:0}
.tkb.lanemode .tlrow .card .r3 .tag {padding:0 5px;line-height:1.35}
.tkb.lanemode .tlrow .card .r2 .br {line-height:1.25}

/* 泳道模式·三轮：最后 2px 级挤压，彻底不裁切 */
.tkb.lanemode .tlrow .card .r1 {margin-bottom:0}
.tkb.lanemode .tlrow .card .r3 .tag {padding:0 5px;line-height:1.35}
.tkb.lanemode .tlrow .card .r2 .br {line-height:1.25}

/* 泳道模式·定稿尺寸（11 行 + 已结案行在 1080p 一屏放完，卡片 3 行不裁切） */
.tkb.lanemode .tlane {min-height:54px}
.tkb.lanemode .tlrow {padding:2px 6px}
.tkb.lanemode .tlrow .card {align-self:stretch;justify-content:center}
.tkb.lanemode .tklanes {gap:3px}

/* 泳道模式·定稿尺寸（11 行 + 已结案行在 1080p 一屏放完，卡片 3 行不裁切） */
.tkb.lanemode .tlane {min-height:54px}
.tkb.lanemode .tlrow {padding:2px 6px}
.tkb.lanemode .tlrow .card {align-self:stretch;justify-content:center}
.tkb.lanemode .tklanes {gap:3px}
.tkb.lanemode .tlrow .card .r3 {flex-wrap:nowrap;overflow:hidden}
.tkb.lanemode .tlrow .card .r1 {overflow:hidden}
.tkb.lanemode .tlrow .card .r3 {flex-wrap:nowrap;overflow:hidden}
.tkb.lanemode .tlrow .card .r1 {overflow:hidden}

/* 泳道模式：KPI 压成细带，把高度让给工序列 */
.tkb.lanemode .kpis {gap:8px;padding:6px 18px 0;flex-wrap:nowrap}
.tkb.lanemode .kpi {display:flex;align-items:baseline;gap:7px;padding:3px 11px;min-width:0;border-radius:8px}
.tkb.lanemode .kpi .lb {margin:0;font-size:11.5px;white-space:nowrap}
.tkb.lanemode .kpi .vl {font-size:19px;line-height:1.1}
.tkb.lanemode .kpi .sub {display:none}
.tkb.lanemode .tlane.donelane {min-height:0}
.tkb.lanemode .tlane.donelane .tlrow {padding:4px 12px}

/* 泳道模式：KPI 压成细带，把高度让给工序列 */
.tkb.lanemode .kpis {gap:8px;padding:6px 18px 0;flex-wrap:nowrap}
.tkb.lanemode .kpi {display:flex;align-items:baseline;gap:7px;padding:3px 11px;min-width:0;border-radius:8px}
.tkb.lanemode .kpi .lb {margin:0;font-size:11.5px;white-space:nowrap}
.tkb.lanemode .kpi .vl {font-size:19px;line-height:1.1}
.tkb.lanemode .kpi .sub {display:none}
.tkb.lanemode .tlane.donelane {min-height:0}
.tkb.lanemode .tlane.donelane .tlrow {padding:4px 12px}

/* 泳道模式：空工序行压成细条，把高度让给有卡的工序（卡片 3 行不再溢出） */
.tkb.lanemode .tlane.empty {flex:0 0 28px;min-height:28px}
.tkb.lanemode .tlane.empty .tlh {flex-direction:row;gap:6px;padding:0 8px}
.tkb.lanemode .tlane.empty .tlh b {font-size:11.5px}
.tkb.lanemode .tlane.empty .tlh i {font-size:10px}
.tkb.lanemode .tlane.empty .tlrow {padding:0 10px;font-size:10.5px}
.tkb.lanemode .tlane[data-i]:not(.empty) {max-height:76px}

/* 泳道模式：空工序行压成细条，把高度让给有卡的工序（卡片 3 行不再溢出） */
.tkb.lanemode .tlane.empty {flex:0 0 28px;min-height:28px}
.tkb.lanemode .tlane.empty .tlh {flex-direction:row;gap:6px;padding:0 8px}
.tkb.lanemode .tlane.empty .tlh b {font-size:11.5px}
.tkb.lanemode .tlane.empty .tlh i {font-size:10px}
.tkb.lanemode .tlane.empty .tlrow {padding:0 10px;font-size:10.5px}
.tkb.lanemode .tlane[data-i]:not(.empty) {max-height:76px}

/* ============ 真全屏大屏（2026-10-21，与车间看板同款） ============
   点「全屏」→ #tkb 进浏览器全屏，侧栏/顶栏/面包屑全部消失，看板铺满整块屏；
   字号/卡宽整体上调一档（电视墙远看），布局结构不变。Esc 或再点按钮退出。 */
.tkb:fullscreen {
  position:fixed;left:0;top:0;width:100vw;height:100vh;min-height:0;
  display:flex;flex-direction:column;overflow:hidden;z-index:99990;
  border:none;border-radius:0;
}
.tkb:fullscreen .topbar {position:relative;flex:none;padding:12px 22px}
.tkb:fullscreen .kpis {flex:none;padding:12px 22px 0}
.tkb:fullscreen .board {flex:1;min-height:0;overflow:auto;padding:12px 22px 14px}
/* 顶栏 / KPI 放大一档 */
.tkb:fullscreen .logo {font-size:18px}
.tkb:fullscreen .btn,.tkb:fullscreen .search,.tkb:fullscreen .seg button {font-size:14px}
.tkb:fullscreen .search {width:200px}
.tkb:fullscreen .search:focus {width:232px}
.tkb:fullscreen .kpi .lb {font-size:13px}
.tkb:fullscreen .kpi .vl {font-size:30px}
.tkb:fullscreen .kpi .sub {font-size:12.5px}
/* 按阶段 / 按组别视图 */
.tkb:fullscreen .lane-h .lnm {font-size:16px}
.tkb:fullscreen .lane-h .lc {font-size:13px}
.tkb:fullscreen .chead .cn {font-size:15px}
.tkb:fullscreen .col {width:278px}
.tkb:fullscreen .card {padding:11px 13px}
.tkb:fullscreen .card .nm {font-size:15.5px}
.tkb:fullscreen .card .r2 {font-size:13px}
.tkb:fullscreen .card .r3 {font-size:12.5px}
/* 全屏下每块看板只保留 .board 一个滚动容器：列区横向溢出交给它，
   横向滚动条才会贴在屏幕最底部，而不是在内容中间悬空多出一条 */
.tkb:fullscreen .cols {overflow:visible}
.tkb:fullscreen .col {max-height:none}
/* 按阶段（单排 8 列）：列撑满一屏高，卡多时列内自己纵向滚动 */
.tkb:fullscreen .board > .cols {height:100%;align-items:stretch;padding-bottom:0}
.tkb:fullscreen .board > .cols > .col {height:100%}
/* 泳道视图：卡宽与字号同步放大，行高交给 flex 均分（不封顶，屏越高越舒展） */
.tkb:fullscreen .tlh {flex:0 0 148px}
.tkb:fullscreen .tlh b {font-size:14.5px}
.tkb:fullscreen .tlh i {font-size:12.5px}
.tkb:fullscreen .tlrow {gap:11px;padding:4px 8px}
.tkb:fullscreen .tlrow .card {flex:0 0 332px;padding:6px 11px}
.tkb:fullscreen .tlrow .card .nm {font-size:15.5px}
.tkb:fullscreen .tlrow .card .r2 {font-size:12.5px}
.tkb:fullscreen .tlrow .card .r3 {font-size:12px}
.tkb:fullscreen .tlane {min-height:64px}
.tkb:fullscreen .tlane[data-i]:not(.empty) {max-height:none}
.tkb:fullscreen .tkmap {right:30px;bottom:22px}
/* 泳道模式下全屏：KPI 细带同步放大一点，仍保持单行不抢高度 */
.tkb:fullscreen.lanemode .kpi {padding:4px 13px}
.tkb:fullscreen.lanemode .kpi .lb {font-size:12.5px}
.tkb:fullscreen.lanemode .kpi .vl {font-size:23px}
/* 全屏按钮定宽：文案在「全屏/退出全屏」间切换时不推挤其他按钮 */
.tkb #btnBig {min-width:86px;text-align:center}
