/* 调性工坊舞台（全部限定在 .tc-stage 内，不影响工作台其他部分） */
.tc-stage{
  --s-panel:#FFFDF9; --s-ink:#231F1A; --s-ink2:#5A5249; --s-mute:#8C8377; --s-line:#E2D9CB;
  --floor:#E9DCC6; --floor2:#E2D3BA; --wall:#6B5A48; --desk:#8A6441; --desk2:#6E4E32;
  --work:#2C6E91; --worksoft:#E3EEF4; --wait:#B7791F; --waitsoft:#FBF0DC; --done:#2A7F62; --donesoft:#E4F2EB;
  --err:#B83A2E; --errsoft:#FAE5E2; --llm:#6B4FA8; --code:#2F7D5C; --human:#B7791F; --mixed:#2C6E91;
  position:relative;background:var(--s-panel);color:var(--s-ink);border:1px solid var(--s-line);border-radius:16px;overflow:hidden;
  max-width:1440px;margin:16px auto 0;font-size:14px;line-height:1.55}
.stage-wrap{max-width:1440px;margin:0 auto;padding:0 24px}
.tc-stage .hud{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;padding:10px 14px;border-bottom:1px solid var(--s-line)}
.tc-stage .fold{background:none;border:0;font-size:16px;cursor:pointer;color:var(--s-ink2);padding:2px 6px;border-radius:6px}
.tc-stage .now{flex:1 1 300px;font-size:15px;min-width:0}
.tc-stage .now b{font-size:16px}
.tc-stage .go{font:inherit;font-weight:700;border:0;border-radius:8px;padding:6px 14px;cursor:pointer;background:var(--wait);color:#fff}
.tc-stage .kv{font-size:12.5px;color:var(--s-ink2)} .tc-stage .kv b{color:var(--s-ink);font-variant-numeric:tabular-nums;font-size:14px}
.tc-stage .runpill,.tc-stage .modepill{font-size:12px;padding:2px 10px;border-radius:99px;font-weight:600}
.tc-stage .runpill.running{background:var(--worksoft);color:var(--work)} .tc-stage .runpill.waiting_human{background:var(--waitsoft);color:var(--wait)}
.tc-stage .runpill.done{background:var(--donesoft);color:var(--done)} .tc-stage .runpill.failed{background:var(--errsoft);color:var(--err)}
.tc-stage .runpill.idle,.tc-stage .runpill.submitted{background:var(--s-line);color:var(--s-ink2)}
.tc-stage .modepill{border:1.5px solid currentColor}
.tc-stage .modepill.online{color:var(--done)} .tc-stage .modepill.mock{color:var(--wait)} .tc-stage .modepill.replay{color:var(--llm)}
.tc-stage .explain{margin:0;padding:8px 14px 0;font-size:12.5px;color:var(--s-ink2)}
.tc-stage.folded .body{display:none}
.tc-stage .floor{position:relative;padding:16px;background:
  repeating-linear-gradient(0deg,transparent 0 23px,var(--floor2) 23px 24px),
  repeating-linear-gradient(90deg,transparent 0 47px,var(--floor2) 47px 48px),var(--floor);margin-top:8px}
.tc-stage .grid{position:relative;display:grid;grid-template-columns:repeat(6,1fr);gap:14px;z-index:1}
.tc-stage .belt{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}
.tc-stage .belt path{fill:none;stroke:var(--wall);stroke-width:10;stroke-linecap:round;stroke-linejoin:round;opacity:.18}
.tc-stage .belt path.dash{stroke-width:2;stroke-dasharray:4 8;opacity:.35}
.tc-stage .room{position:relative;background:var(--s-panel);border:3px solid var(--wall);border-radius:6px;padding:8px 8px 6px;min-height:168px;
  box-shadow:0 4px 0 var(--wall);transition:transform .2s,box-shadow .2s,opacity .3s;min-width:0}
.tc-stage .rtop{display:flex;justify-content:space-between;align-items:center;gap:4px}
.tc-stage .nm{font-weight:700;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tc-stage .eng{font-size:10.5px;padding:0 5px;border-radius:4px;border:1.5px solid currentColor;font-weight:600;white-space:nowrap}
.tc-stage .eng.llm{color:var(--llm)} .tc-stage .eng.code{color:var(--code)} .tc-stage .eng.human{color:var(--human)} .tc-stage .eng.mixed{color:var(--mixed)}
.tc-stage .scene{position:relative;height:84px;margin:6px 0 4px;display:flex;align-items:flex-end;justify-content:center}
.tc-stage .sprite{width:56px;height:56px;image-rendering:pixelated;position:relative;z-index:1}
.tc-stage .sprite svg{width:100%;height:100%;display:block}
.tc-stage .sprite svg .f2{display:none}
.tc-stage .desk{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:86px;height:20px;background:var(--desk);border-bottom:6px solid var(--desk2);border-radius:2px;z-index:2}
.tc-stage .screen{position:absolute;bottom:20px;left:calc(50% + 16px);width:24px;height:17px;background:#2B2A28;border:2px solid #111;z-index:3}
.tc-stage .screen::after{content:"";position:absolute;inset:3px;background:#4b4a47}
.tc-stage .st{font-size:12.5px;font-weight:600}
.tc-stage .msg{font-size:12px;color:var(--s-ink2);min-height:36px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.tc-stage .meta{font-size:11.5px;color:var(--s-mute);margin-top:2px}
.tc-stage .room.working{border-color:var(--work);box-shadow:0 4px 0 var(--work),0 0 0 4px var(--worksoft);transform:translateY(-3px)}
.tc-stage .room.working .st{color:var(--work)}
.tc-stage .room.working .screen::after{background:var(--work);animation:tcFlick 1s steps(2) infinite}
.tc-stage .room.working .sprite svg .f1{display:none} .tc-stage .room.working .sprite svg .f2{display:inline}
.tc-stage .room.working .sprite{animation:tcBob .6s steps(2) infinite}
.tc-stage .room.waiting{border-color:var(--wait);box-shadow:0 4px 0 var(--wait),0 0 0 4px var(--waitsoft)}
.tc-stage .room.waiting .st{color:var(--wait)}
.tc-stage .room.waiting .scene::before{content:"!";position:absolute;top:22px;left:calc(50% - 42px);width:20px;height:22px;background:var(--wait);color:#fff;font-weight:800;
  display:grid;place-items:center;border:2px solid #6b4a12;animation:tcPop 1s ease-in-out infinite;z-index:4}
.tc-stage .room.done .st{color:var(--done)} .tc-stage .room.done .screen::after{background:var(--done);opacity:.55}
.tc-stage .room.error{border-color:var(--err);box-shadow:0 4px 0 var(--err)} .tc-stage .room.error .st{color:var(--err)}
.tc-stage .room.error .msg{color:var(--err);-webkit-line-clamp:4}
.tc-stage .room.skipped{opacity:.45} .tc-stage .room.skipped .sprite{filter:grayscale(1)}
.tc-stage .room.planned .st{color:var(--s-ink2)} .tc-stage .room.idle .st{color:var(--s-mute)}
.tc-stage .bubble{position:absolute;left:50%;transform:translateX(-50%);top:-6px;max-width:94%;white-space:nowrap;text-overflow:ellipsis;background:var(--s-panel);border:2px solid var(--s-ink);border-radius:8px;padding:1px 7px;font-size:11px;
  z-index:5;box-shadow:2px 2px 0 var(--s-ink);display:none;overflow:hidden}
.tc-stage .room.working .bubble,.tc-stage .room.waiting .bubble{display:block}
.tc-stage .bubble:empty{display:none!important}
.tc-stage .token{position:absolute;z-index:6;padding:3px 8px;background:#FFE08A;border:2px solid #5a4410;border-radius:4px;font-size:11.5px;font-weight:700;color:#3b2d08;
  white-space:nowrap;pointer-events:none;transition:left .9s steps(9),top .9s steps(9),opacity .3s;opacity:0}
.tc-stage .room.board{background:#2B2A28;color:#EDE6D8;border-color:#111;box-shadow:0 4px 0 #111}
.tc-stage .board .nm{color:#FFE08A}
.tc-stage .meterbar{height:10px;background:#44423e;border:2px solid #111;margin:10px 0 6px}
.tc-stage .meterbar i{display:block;height:100%;background:#7CC6A4;width:0;transition:width .4s steps(8)}
.tc-stage .board .big{font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}
.tc-stage .board small{color:#B6AE9F} .tc-stage .board .meta{color:#CFC6B8}
.tc-stage .legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12px;color:var(--s-ink2);padding:8px 14px;border-top:1px solid var(--s-line)}
.tc-stage .replay{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 14px;border-top:1px solid var(--s-line)}
.tc-stage .replay[hidden]{display:none}
.tc-stage .replay button{font:inherit;font-size:13px;border:0;border-radius:8px;padding:4px 12px;cursor:pointer;background:var(--s-line);color:var(--s-ink);font-weight:600}
.tc-stage .replay button[aria-pressed="true"]{background:var(--s-ink);color:var(--s-panel)}
.tc-stage .replay input[type=range]{flex:1 1 180px;accent-color:var(--work)}
.tc-stage .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.tc-stage button:focus-visible{outline:2px solid var(--work);outline-offset:2px}
@keyframes tcBob{50%{transform:translateY(-3px)}}
@keyframes tcFlick{50%{opacity:.6}}
@keyframes tcPop{50%{transform:translateY(-4px)}}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .tc-stage{
  --s-panel:#26231F; --s-ink:#F1ECE4; --s-ink2:#CFC6B8; --s-mute:#9A9185; --s-line:#3A352E;
  --floor:#302A22; --floor2:#2A251E; --wall:#4A3F33; --desk:#6E5037; --desk2:#553C27;
  --worksoft:#1F3340; --waitsoft:#3A2F1C; --donesoft:#1D3329; --errsoft:#3D2220;
}}
@media (prefers-reduced-motion: reduce){.tc-stage .room.working .sprite,.tc-stage .room.working .screen::after,.tc-stage .room.waiting .scene::before{animation:none}
  .tc-stage .token{transition:none;display:none}.tc-stage .room,.tc-stage .meterbar i{transition:none}}
.tc-stage{container-type:inline-size}
@container (max-width:960px){.tc-stage .grid{grid-template-columns:repeat(4,1fr)}.tc-stage .belt{display:none}.tc-stage .room{order:var(--o)}}
@container (max-width:700px){.tc-stage .grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:720px){.stage-wrap{padding:0 16px}}
@container (max-width:520px){.tc-stage .grid{grid-template-columns:repeat(2,1fr);gap:10px}}
@media (max-width:560px){.tc-stage .grid{gap:10px}.tc-stage .floor{padding:10px}.tc-stage .room{min-height:140px;padding:6px}
  .tc-stage .scene{height:58px}.tc-stage .sprite{width:40px;height:40px}.tc-stage .desk{width:64px;height:16px}.tc-stage .screen{bottom:16px;width:18px;height:13px}
  .tc-stage .token{display:none}.tc-stage .explain{display:none}}
/* 用户该做的事：按钮与补充说明 */
.tc-stage .now{display:flex;flex-direction:column;gap:2px}
.tc-stage .hint2{font-size:12.5px;color:var(--s-ink2)}
.tc-stage .acts{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.tc-stage [data-acts]{display:contents}
.tc-stage .act,.tc-mini .act{font:inherit;font-size:13px;font-weight:600;border:1.5px solid var(--s-line,#E2D9CB);border-radius:8px;padding:5px 12px;cursor:pointer;background:transparent;color:inherit}
.tc-stage .act.pri,.tc-mini .act.pri{background:#1F3A5F;border-color:#1F3A5F;color:#fff}
.tc-stage .act:focus-visible,.tc-mini button:focus-visible{outline:2px solid #2C6E91;outline-offset:2px}
/* 工坊滚出屏幕时的迷你状态栏（挂在 body 下，自带配色） */
.tc-mini{position:fixed;left:0;right:0;z-index:15;display:flex;align-items:center;gap:10px;padding:7px 24px;
  background:#FFFDF9;color:#231F1A;border-bottom:1px solid #E2D9CB;box-shadow:0 4px 14px rgba(30,25,15,.08);font-size:13.5px}
.tc-mini[hidden]{display:none}
.tc-mini .dot{width:10px;height:10px;border-radius:50%;background:#2C6E91;flex:none}
.tc-mini.waiting_human .dot{background:#B7791F}.tc-mini.done .dot{background:#2A7F62}.tc-mini.failed .dot{background:#B83A2E}
.tc-mini.running .dot,.tc-mini.submitted .dot{animation:tcPop 1s ease-in-out infinite}
.tc-mini .mnow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tc-mini .macts{display:flex;gap:6px;flex:none}
.tc-mini .mup{font:inherit;font-size:12.5px;border:0;background:none;color:#5A5249;cursor:pointer;flex:none}
.tc-mini.waiting_human{background:#FBF0DC}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .tc-mini{background:#26231F;color:#F1ECE4;border-color:#3A352E}
  :root:not([data-theme="light"]) .tc-mini.waiting_human{background:#3A2F1C} :root:not([data-theme="light"]) .tc-mini .mup{color:#CFC6B8}}
@media (prefers-reduced-motion: reduce){.tc-mini .dot{animation:none!important}}
@media (max-width:720px){.tc-mini{padding:6px 12px;flex-wrap:wrap}.tc-mini .mnow{flex-basis:100%;order:-1}.tc-mini .mup{display:none}}
.tc-stage .room{cursor:pointer}
.tc-stage .room.sel{outline:3px solid #1F3A5F;outline-offset:3px}
.tc-stage .room:focus-visible{outline:3px solid #2C6E91;outline-offset:3px}
