/* 3D 人物卡片 · 会议室/教室外框 · 研课八步进程条 · 发言信息包动画 · 智能体中心。与主体红金 + 象牙白风格一致。 */
:root { --rf-bg1: #fffaf5; --rf-bg2: #f3e3d8; --rf-ink: #2f2f2f; --ag-card1: rgba(255, 255, 255, .96); --ag-card2: rgba(255, 241, 234, .9); }
:root:not([data-theme="light"]) { --rf-bg1: #2a1b22; --rf-bg2: #150e14; --rf-ink: #f2e6dc; --ag-card1: rgba(58, 34, 44, .95); --ag-card2: rgba(30, 20, 28, .92); }

/* ---------- 外框：会议室 / 教室 ---------- */
.room-frame { position: relative; isolation: isolate; border-radius: 22px; padding: 24px 12px 10px; border: 2px solid transparent;
  background: radial-gradient(ellipse at 50% -10%, rgba(255, 255, 255, .85), transparent 55%) padding-box, linear-gradient(180deg, var(--rf-bg1), var(--rf-bg2)) padding-box,
    linear-gradient(135deg, #f3cf93 0%, #b3263a 22%, #8e1426 50%, #b3263a 78%, #f3cf93 100%) border-box;
  box-shadow: 0 0 0 1px rgba(214, 163, 74, .35), 0 0 0 7px rgba(166, 25, 46, .06), 0 18px 42px rgba(107, 58, 42, .26), inset 0 0 44px rgba(214, 163, 74, .14); }
:root:not([data-theme="light"]) .room-frame { background: radial-gradient(ellipse at 50% -10%, rgba(214, 163, 74, .18), transparent 55%) padding-box, linear-gradient(180deg, var(--rf-bg1), var(--rf-bg2)) padding-box, linear-gradient(135deg, #f3cf93, #b3263a 22%, #5c0e1c 50%, #b3263a 78%, #f3cf93) border-box; box-shadow: 0 0 0 1px rgba(214, 163, 74, .3), 0 0 26px rgba(179, 38, 58, .35), inset 0 0 50px rgba(0, 0, 0, .45); }
.rf-c { position: absolute; width: 30px; height: 30px; border: 3px solid #e7b865; z-index: 3; pointer-events: none; filter: drop-shadow(0 0 4px rgba(235, 196, 107, .8)); }
.rf-c.tl { left: -4px; top: -4px; border-right: 0; border-bottom: 0; border-radius: 16px 0 0 0; }
.rf-c.tr { right: -4px; top: -4px; border-left: 0; border-bottom: 0; border-radius: 0 16px 0 0; }
.rf-c.bl { left: -4px; bottom: -4px; border-right: 0; border-top: 0; border-radius: 0 0 0 16px; }
.rf-c.br { right: -4px; bottom: -4px; border-left: 0; border-top: 0; border-radius: 0 0 16px 0; }
.rf-c::after { content: ""; position: absolute; width: 6px; height: 6px; border-radius: 50%; background: #fff3d6; box-shadow: 0 0 8px #ebc46b; }
.rf-c.tl::after { left: 5px; top: 5px; } .rf-c.tr::after { right: 5px; top: 5px; } .rf-c.bl::after { left: 5px; bottom: 5px; } .rf-c.br::after { right: 5px; bottom: 5px; }
.rf-sweep { position: absolute; left: 24px; right: 24px; top: -2px; height: 2px; overflow: hidden; z-index: 2; pointer-events: none; }
.rf-sweep::before { content: ""; position: absolute; top: 0; left: -30%; width: 30%; height: 100%; background: linear-gradient(90deg, transparent, #fff6d8, #ebc46b, transparent); animation: rf-sweep 5.5s linear infinite; }
@keyframes rf-sweep { to { left: 100%; } }
.rf-plate { position: absolute; left: 50%; top: -15px; transform: translateX(-50%); z-index: 4; display: flex; align-items: center; gap: 8px; padding: 4px 16px; border-radius: 999px; white-space: nowrap;
  color: #fff4e2; background: linear-gradient(180deg, #c62a3d, #8e1426); border: 1px solid #e7b865; box-shadow: 0 4px 12px rgba(142, 20, 38, .4), inset 0 1px 0 rgba(255, 255, 255, .35); font-size: calc(12.5px * var(--fs)); }
.rf-plate b { letter-spacing: .18em; font-size: calc(13.5px * var(--fs)); }
.rf-plate span { opacity: .85; } .rf-plate em { font-style: normal; color: #ffe0a3; }
.rf-plate em:empty { display: none; }
.rf-led { width: 8px; height: 8px; border-radius: 50%; background: #8a6f73; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .4); }
.rf-led.on { background: #5dff9a; box-shadow: 0 0 8px #5dff9a; animation: rf-blink 1.6s ease-in-out infinite; }
@keyframes rf-blink { 50% { opacity: .45; } }

/* ---------- 研讨圆桌（3D 人物卡） ---------- */
.sw-room .sw-table { border: 0; border-radius: 16px; height: clamp(236px, 29vh, 300px); background: radial-gradient(ellipse at 50% 55%, rgba(255, 255, 255, .9) 0%, rgba(250, 238, 230, .6) 45%, transparent 75%); overflow: visible; }
:root:not([data-theme="light"]) .sw-room .sw-table { background: radial-gradient(ellipse at 50% 55%, rgba(91, 50, 66, .6), transparent 70%); }
.sw-room .sw-floor { left: 12%; right: 12%; top: 18%; bottom: 8%; border: 1px solid rgba(214, 163, 74, .55); background: radial-gradient(ellipse at 50% 50%, rgba(214, 163, 74, .16), rgba(166, 25, 46, .05) 60%, transparent 72%); box-shadow: 0 0 0 16px rgba(214, 163, 74, .06), inset 0 0 50px rgba(61, 126, 255, .1), 0 22px 30px -18px rgba(107, 58, 42, .35); }
.sw-beam { position: absolute; left: 50%; top: 50%; width: 38%; height: 70%; transform: translate(-50%, -50%); pointer-events: none; background: radial-gradient(ellipse at 50% 50%, rgba(73, 165, 255, .16), transparent 65%); }
.sw-agent.ag3 { width: 124px; padding: 8px 6px 12px; gap: 3px; border-radius: 16px; overflow: visible;
  background: linear-gradient(165deg, var(--ag-card1), var(--ag-card2)); border: 1px solid rgba(214, 163, 74, .6);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), inset 0 -4px 8px rgba(166, 25, 46, .07), 0 3px 0 rgba(200, 150, 90, .55), 0 12px 22px rgba(107, 58, 42, .24);
  transform: translate(-50%, -50%) perspective(700px) rotateX(7deg); transition: transform .35s cubic-bezier(.2, .8, .2, 1), box-shadow .35s, border-color .35s; }
.sw-agent.ag3:hover:not(:disabled), .sw-agent.ag3:focus-visible { transform: translate(-50%, -56%) perspective(700px) rotateX(0deg) scale(1.04); box-shadow: inset 0 1px 0 #fff, 0 3px 0 rgba(200, 150, 90, .6), 0 18px 30px rgba(107, 58, 42, .3); }
.ag3 .sw-ring { width: 64px; height: 64px; border-radius: 50%; padding: 3px; background: conic-gradient(from 210deg, #f3cf93, #b3263a, #8e1426, #d6a34a, #f3cf93); box-shadow: 0 6px 14px rgba(107, 58, 42, .3); }
.ag3 .sw-ring::after { content: ""; position: absolute; inset: 3px; border-radius: 50%; background: radial-gradient(circle at 32% 22%, rgba(255, 255, 255, .55), transparent 38%); pointer-events: none; }
.ag3 .sw-ava { width: 58px !important; height: 58px !important; border: 0; background: radial-gradient(circle at 50% 30%, #fff, #ecdcd2); box-shadow: inset 0 -4px 8px rgba(0, 0, 0, .12); }
.sw-ava .av3d, .sw-ava .av-img, .cl-ava .av3d, .cl-ava .av-img { width: 100%; height: 100%; display: block; object-fit: cover; }
.ag3 .sw-an b { font-size: calc(14px * var(--fs)); letter-spacing: .06em; display: inline-flex; align-items: center; gap: 4px; }
.ag3 .sw-an b em { order: 2; margin: 0; }
.ag3 .sw-an small { display: block; color: var(--sw-red); font-weight: 600; }
.ag3.custom { border-style: dashed; }
.ag3-halo { position: absolute; left: 50%; top: 34px; width: 110px; height: 110px; transform: translate(-50%, -50%); border-radius: 50%; z-index: -1; opacity: 0; transition: opacity .4s; pointer-events: none; }
.ag3-base { position: absolute; left: 50%; bottom: -14px; width: 104px; height: 16px; transform: translateX(-50%); border-radius: 50%; z-index: -1; pointer-events: none; background: radial-gradient(ellipse at 50% 50%, rgba(107, 58, 42, .35), transparent 70%); }
.ag3.st-speaking { border-color: #d73a49; transform: translate(-50%, -58%) perspective(700px) rotateX(0deg) scale(1.08); z-index: 6; box-shadow: inset 0 1px 0 #fff, 0 3px 0 #b3263a, 0 18px 34px rgba(166, 25, 46, .38), 0 0 0 4px rgba(215, 58, 73, .16); }
.ag3.st-speaking .ag3-halo { opacity: 1; background: radial-gradient(circle, rgba(215, 58, 73, .38), transparent 65%); animation: ag3-halo 1.8s ease-in-out infinite; }
.ag3.st-speaking .ag3-base { background: radial-gradient(ellipse at 50% 50%, rgba(215, 58, 73, .55), transparent 70%); }
.ag3.st-speaking .sw-ring { background: conic-gradient(from 0deg, #ff8aa3, #d73a49, #8e1426, #ffd6a0, #ff8aa3); animation: ag3-spin 3.2s linear infinite; }
.ag3.st-speaking .sw-ava { animation: ag3-counter 3.2s linear infinite; }
.ag3.st-thinking .ag3-halo { opacity: 1; background: radial-gradient(circle, rgba(214, 163, 74, .3), transparent 65%); }
.ag3.st-alert .ag3-halo { opacity: 1; background: radial-gradient(circle, rgba(232, 155, 53, .32), transparent 65%); }
@keyframes ag3-halo { 50% { transform: translate(-50%, -50%) scale(1.15); opacity: .7; } }
@keyframes ag3-spin { to { transform: rotate(360deg); } }
@keyframes ag3-counter { to { transform: rotate(-360deg); } }
.ag3-typing { position: absolute; right: -8px; top: -6px; display: flex; gap: 2px; padding: 4px 6px; border-radius: 10px 10px 10px 2px; background: #fff; border: 1px solid rgba(214, 163, 74, .7); box-shadow: 0 3px 8px rgba(0, 0, 0, .15); }
.ag3-typing i { width: 4px; height: 4px; border-radius: 50%; background: #b7862f; animation: sw-dot 1.2s ease-in-out infinite; }
.ag3-typing i:nth-child(2) { animation-delay: .2s; } .ag3-typing i:nth-child(3) { animation-delay: .4s; }
.ag3 .sw-wave { right: -4px; bottom: 0; }
.sw-room .sw-core { width: 190px; min-height: 92px; background: linear-gradient(180deg, rgba(255, 255, 255, .92), rgba(236, 244, 255, .88)); box-shadow: 0 10px 30px rgba(61, 126, 255, .2), inset 0 1px 0 #fff; }
:root:not([data-theme="light"]) .sw-room .sw-core { background: linear-gradient(180deg, rgba(40, 32, 58, .92), rgba(22, 20, 40, .9)); }
.sw-room .sw-link.speaking { stroke-width: 2.4; filter: drop-shadow(0 0 3px rgba(215, 58, 73, .7)); }

/* ---------- 研课八步进程条 ---------- */
.stg-wrap { display: flex; align-items: center; gap: 12px; padding: 6px 6px 2px; }
.stg { list-style: none; margin: 0; padding: 0; flex: 1; display: grid; grid-template-columns: repeat(var(--n, 8), minmax(0, 1fr)); gap: 6px; }
.stg-wrap .stg { grid-template-columns: repeat(8, minmax(0, 1fr)); }
.stg li { position: relative; display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto; column-gap: 6px; align-items: center; padding: 5px 8px; border-radius: 10px; background: rgba(255, 255, 255, .6); border: 1px solid var(--sw-line); min-width: 0; }
:root:not([data-theme="light"]) .stg li { background: rgba(255, 255, 255, .04); }
.stg li:not(:last-child)::after { content: ""; position: absolute; right: -6px; top: 50%; width: 6px; height: 2px; background: var(--sw-line); }
.stg-n { grid-row: span 2; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; font-size: 11px; font-weight: 800; color: var(--sw-ink-2); background: var(--sw-line); }
.stg-t { min-width: 0; display: flex; flex-direction: column; line-height: 1.2; }
.stg-t b { font-size: calc(12.5px * var(--fs)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.stg-t small { font-size: max(11px, calc(10.5px * var(--fs))); color: var(--sw-ink-2); font-variant-numeric: tabular-nums; }
.stg-bar { grid-column: 2; height: 3px; border-radius: 3px; background: var(--sw-line); overflow: hidden; margin-top: 2px; }
.stg-bar em { display: block; height: 100%; background: linear-gradient(90deg, #a6192e, #d6a34a); transition: width .6s; }
.stg-done { border-color: rgba(57, 169, 107, .45) !important; } .stg-done .stg-n { background: #39a96b; color: #fff; }
.stg-running { border-color: #d73a49 !important; background: linear-gradient(180deg, #fff, #fff1f2) !important; box-shadow: 0 0 0 3px rgba(215, 58, 73, .12); }
:root:not([data-theme="light"]) .stg-running { background: rgba(166, 25, 46, .25) !important; }
.stg-running .stg-n { background: #a6192e; color: #fff; animation: sw-pulse 1.8s ease-out infinite; }
.stg-running .stg-t b { color: var(--sw-red); }
.stg-eta { flex: none; font-size: calc(12.5px * var(--fs)); color: var(--sw-ink-2); white-space: nowrap; font-variant-numeric: tabular-nums; padding: 4px 10px; border-radius: 999px; background: rgba(214, 163, 74, .12); border: 1px solid rgba(214, 163, 74, .4); }
.stg-empty { flex: 1; font-size: calc(12.5px * var(--fs)); color: var(--sw-ink-2); padding: 6px 4px; }
.sw-log td, .sw-log th { font-size: calc(12.5px * var(--fs)); padding: 4px 6px; }
.sw-log tr.stg-running td { color: var(--sw-red); font-weight: 600; }
.sw-h4 { margin: 12px 0 6px; font-size: calc(13px * var(--fs)); color: var(--sw-red); }
.sw-seat-list { display: grid; gap: 4px; max-height: 260px; overflow: auto; }
.sw-seats-pop { width: 290px; }

/* ---------- 信息包动画 ---------- */
.pkt, .pkt-trail { position: absolute; left: 0; top: 0; z-index: 30; pointer-events: none; }
.pkt i { position: absolute; left: -8px; top: -8px; width: 16px; height: 16px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #fff, var(--pk, #d73a49) 55%, transparent 72%); box-shadow: 0 0 14px 4px var(--pk, #d73a49); }
.pkt b { position: absolute; left: 12px; top: -22px; padding: 1px 8px; border-radius: 999px; font-size: 11px; white-space: nowrap; color: #fff; background: var(--pk, #d73a49); box-shadow: 0 2px 8px rgba(0, 0, 0, .2); }
.pkt-trail { width: 0; height: 0; }
.pkt-trail::before { content: ""; position: absolute; left: -4px; top: -4px; width: 8px; height: 8px; border-radius: 50%; background: var(--pk, #d73a49); opacity: .45; filter: blur(1px); }
.pkt-ripple { position: absolute; z-index: 29; width: 90px; height: 90px; border-radius: 50%; border: 2px solid var(--pk, #d73a49); pointer-events: none; box-shadow: 0 0 16px var(--pk, #d73a49); }
.pkt-talk { --pk: #d73a49; } .pkt-question { --pk: #3d7eff; } .pkt-challenge { --pk: #7a5ce0; } .pkt-ideology { --pk: #d6a34a; } .pkt-evidence { --pk: #e8892d; } .pkt-human { --pk: #1d9f9f; } .pkt-teacher { --pk: #a6192e; } .pkt-report { --pk: #4285d4; }

/* ---------- 演课场：教室外框与 3D 小组卡 ---------- */
.cl-room { padding-top: 22px; }
.cl-room.room-frame { display: grid; grid-template-columns: 150px minmax(0, 1fr); overflow: visible; }
.cl-room .cl-main { position: relative; }
.cl-teacher { position: relative; }
.cl-teacher .cl-ava { width: 56px; height: 56px; padding: 0; border: 3px solid transparent; background: linear-gradient(#fff, #fff) padding-box, conic-gradient(from 200deg, #f3cf93, #b3263a, #8e1426, #d6a34a, #f3cf93) border-box; }
.cl-group { background: linear-gradient(165deg, var(--ag-card1), var(--ag-card2)); border: 1px solid rgba(214, 163, 74, .45); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), 0 2px 0 rgba(200, 150, 90, .45), 0 10px 20px rgba(107, 58, 42, .16); transform: perspective(800px) rotateX(4deg); }
.cl-group:hover:not(:disabled) { transform: perspective(800px) rotateX(0) translateY(-3px); }
.cl-grep > .cl-ava { width: 48px; height: 48px; border: 2px solid transparent; background: linear-gradient(#fff, #f1e5dd) padding-box, conic-gradient(from 200deg, #f3cf93, #b3263a, #d6a34a, #f3cf93) border-box; box-shadow: 0 4px 10px rgba(107, 58, 42, .25); }
.cl-grep > .cl-ava.st-speaking { background: linear-gradient(#fff, #fff) padding-box, conic-gradient(#ff8aa3, #d73a49, #8e1426, #ff8aa3) border-box; }
.cl-mem .cl-ava { width: 36px; height: 36px; }
.cl-focus .cl-ava { width: 30px; height: 30px; }
.cl-ava.s, .cl-ava.h { display: grid; place-items: center; }
.cl-stg { margin: 0 12px 6px; }
.cl-stg .stg { grid-template-columns: repeat(var(--n, 6), minmax(0, 1fr)); }

/* ---------- 智能体中心 ---------- */
.agp { display: grid; gap: 14px; }
.agp-head { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
.agp-head h1 { margin: 0; letter-spacing: .12em; }
.agp-head p { margin: 0; color: var(--muted); }
.agp-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); }
.agp-tabs button { border: 0; background: none; padding: 8px 14px; border-radius: 0; color: var(--muted); position: relative; font-size: calc(14px * var(--fs)); }
.agp-tabs button.on { color: var(--red); font-weight: 700; }
.agp-tabs button.on::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2px; background: var(--red); }
.agp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 16px; }
.agc { position: relative; display: flex; flex-direction: column; border-radius: 18px; overflow: hidden; background: linear-gradient(165deg, var(--ag-card1), var(--ag-card2)); border: 1px solid rgba(214, 163, 74, .55);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), 0 3px 0 rgba(200, 150, 90, .5), 0 14px 28px rgba(107, 58, 42, .2); transition: transform .3s, box-shadow .3s; }
.agc:hover { transform: translateY(-4px); box-shadow: inset 0 1px 0 #fff, 0 3px 0 rgba(200, 150, 90, .55), 0 20px 34px rgba(107, 58, 42, .26); }
.agc-portrait { position: relative; height: 200px; background: radial-gradient(ellipse at 50% 20%, #fff 0%, #f5e7de 50%, #e3cbbd 100%); overflow: hidden; }
:root:not([data-theme="light"]) .agc-portrait { background: radial-gradient(ellipse at 50% 20%, #5b3a48, #2a1b22 70%); }
.agc-portrait .av3d { position: absolute; left: 50%; bottom: -2px; width: 180px; height: 210px; transform: translateX(-50%); filter: drop-shadow(0 8px 12px rgba(0, 0, 0, .18)); }
.agc-portrait .av-img { width: 100%; height: 100%; object-fit: cover; }
.agc-portrait::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 70%, rgba(142, 20, 38, .18)); pointer-events: none; }
.agc-badge { position: absolute; left: 10px; top: 10px; z-index: 2; display: flex; gap: 4px; flex-wrap: wrap; }
.agc-badge span { font-size: 11px; padding: 1px 8px; border-radius: 999px; color: #fff; background: rgba(142, 20, 38, .85); }
.agc-badge span.gold { background: rgba(183, 134, 47, .9); } .agc-badge span.green { background: rgba(47, 138, 91, .9); }
.agc-body { padding: 10px 14px 12px; display: flex; flex-direction: column; gap: 4px; flex: 1; }
.agc-body h3 { margin: 0; font-size: calc(17px * var(--fs)); letter-spacing: .08em; }
.agc-body h3 small { margin-left: 6px; font-size: calc(12.5px * var(--fs)); color: var(--red); font-weight: 600; letter-spacing: 0; }
.agc-body p { margin: 0; font-size: calc(12.5px * var(--fs)); color: var(--muted); line-height: 1.6; }
.agc-style { font-size: calc(12px * var(--fs)); padding: 6px 8px; border-radius: 8px; background: rgba(214, 163, 74, .12); color: var(--text); }
.agc-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; padding-top: 6px; }
.agc-actions button { font-size: calc(12.5px * var(--fs)); padding: 5px 10px; }
.agc.agc-off .agc-portrait { filter: grayscale(.6) opacity(.7); }
.principles { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.principles li { padding: 6px 10px; border-radius: 10px; border: 1px solid var(--line); font-size: calc(12.5px * var(--fs)); line-height: 1.55; }
.principles li b { color: var(--red); margin-right: 4px; }
/* 训练可视化 */
.trv { display: grid; gap: 12px; }
.trv-pipe { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 8px; position: relative; }
.trv-pipe::before { content: ""; position: absolute; left: 4%; right: 4%; top: 22px; height: 3px; background: var(--line); border-radius: 3px; }
.trv-pipe li { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center; }
.trv-node { width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; font-weight: 800; color: var(--muted); background: var(--surface-2, #fff); border: 2px solid var(--line); box-shadow: 0 3px 8px rgba(0, 0, 0, .08); transition: all .3s; }
.trv-pipe li.running .trv-node { color: #fff; border-color: #d73a49; background: radial-gradient(circle at 35% 30%, #ff8aa3, #b3263a); animation: sw-pulse 1.4s ease-out infinite; }
.trv-pipe li.done .trv-node { color: #fff; border-color: #39a96b; background: radial-gradient(circle at 35% 30%, #7fd8a6, #2f8a5b); }
.trv-pipe li.error .trv-node { color: #fff; border-color: #e8892d; background: #e8892d; }
.trv-pipe li b { font-size: calc(12.5px * var(--fs)); }
.trv-pipe li small { font-size: max(11px, calc(10.5px * var(--fs))); color: var(--muted); line-height: 1.45; min-height: 2.9em; }
.trv-flow { position: absolute; top: 20px; left: 4%; height: 7px; border-radius: 7px; background: linear-gradient(90deg, #a6192e, #d6a34a); box-shadow: 0 0 10px rgba(214, 163, 74, .6); transition: width .6s ease; z-index: 0; }
.trv-flow::after { content: ""; position: absolute; right: -4px; top: -3px; width: 13px; height: 13px; border-radius: 50%; background: #fff; box-shadow: 0 0 10px #ebc46b; }
.trv-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px; }
.trv-stats div { padding: 8px 10px; border-radius: 12px; border: 1px solid var(--line); background: rgba(255, 255, 255, .5); }
.trv-stats b { display: block; font-size: calc(20px * var(--fs)); font-variant-numeric: tabular-nums; color: var(--red); }
.trv-stats span { font-size: calc(12px * var(--fs)); color: var(--muted); }
.trv-charts { display: grid; grid-template-columns: 1.2fr 1fr; gap: 12px; }
.trv-box { padding: 10px 12px; border-radius: 12px; border: 1px solid var(--line); }
.trv-box h4 { margin: 0 0 6px; font-size: calc(13px * var(--fs)); color: var(--red); }
.trv-bar { display: grid; grid-template-columns: 88px minmax(0, 1fr) 42px; gap: 8px; align-items: center; font-size: calc(12px * var(--fs)); padding: 2px 0; }
.trv-bar i { height: 9px; border-radius: 9px; background: var(--line); overflow: hidden; }
.trv-bar em { display: block; height: 100%; border-radius: 9px; background: linear-gradient(90deg, #a6192e, #d6a34a); transition: width .8s cubic-bezier(.2, .7, .2, 1); }
.trv-bar.blue em { background: linear-gradient(90deg, #245ea8, #49a5ff); }
.trv-bar span:last-child { text-align: right; font-variant-numeric: tabular-nums; color: var(--muted); }
.trv-note { font-size: calc(12px * var(--fs)); color: var(--muted); }
.stu-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 10px; }
.stu-card { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 8px 4px 6px; border-radius: 14px; border: 1px solid rgba(214, 163, 74, .4); background: linear-gradient(165deg, var(--ag-card1), var(--ag-card2)); box-shadow: 0 2px 0 rgba(200, 150, 90, .35), 0 6px 12px rgba(107, 58, 42, .12); cursor: pointer; }
.stu-card .cl-ava { width: 60px; height: 60px; border: 2px solid transparent; background: linear-gradient(#fff, #f1e5dd) padding-box, conic-gradient(from 200deg, #f3cf93, #b3263a, #d6a34a, #f3cf93) border-box; }
.stu-card b { font-size: calc(13px * var(--fs)); } .stu-card small { font-size: 11px; color: var(--muted); }
.cp-assign { max-height: 260px; overflow: auto; }
.cp-assign td { font-size: calc(12px * var(--fs)); padding: 3px 6px; }
@media (max-width: 1100px) { .trv-pipe { grid-template-columns: repeat(4, minmax(0, 1fr)); } .trv-pipe::before, .trv-flow { display: none; } .trv-charts, .principles { grid-template-columns: 1fr; } .stg-wrap .stg { grid-template-columns: repeat(4, minmax(0, 1fr)); } .cl-room.room-frame { grid-template-columns: 1fr; } }
@media (prefers-reduced-motion: reduce) { .rf-sweep::before, .rf-led.on, .ag3.st-speaking .ag3-halo, .ag3.st-speaking .sw-ring, .ag3.st-speaking .sw-ava, .stg-running .stg-n, .trv-pipe li.running .trv-node { animation: none !important; } }

/* ---------- 版式：会议室需要足够高度；矮屏时页面上下滚动，保证研讨区与圆桌都清楚 ---------- */
body.is-sw .sw { height: auto; grid-template-rows: auto auto minmax(330px, 44vh) auto auto; }
.sw-room .sw-table { height: 318px !important; }
.sw-agent.ag3 { width: 116px; padding: 7px 6px 10px; gap: 2px; }
.ag3 .sw-ring { width: 56px; height: 56px; padding: 3px; }
.ag3 .sw-ava { width: 50px !important; height: 50px !important; }
.ag3 .sw-an small { display: block !important; font-size: max(11px, calc(11px * var(--fs))); }
.ag3 .sw-an b { font-size: calc(13.5px * var(--fs)); }
.ag3 .sw-st { font-size: max(11px, calc(10.5px * var(--fs))); padding: 0 7px; }
body.is-cl .cl { height: auto; grid-template-rows: auto auto minmax(300px, 40vh) auto; }
@media (min-width: 1100px) and (min-height: 1000px) { body.is-cl .cl { height: calc(100vh - 88px); grid-template-rows: auto auto minmax(0, .85fr) minmax(0, 1.15fr); } }
body.is-cl .cl-stage { min-height: 460px; }
/* 窄于 1480px：顶栏收起英文副题；工具栏允许换行（页面有纵向滚动条时不溢出） */
@media (max-width: 1480px) { .brand small { display: none; } .nav a { padding: 8px 9px; } .sw-top.stage-top, .cl-top.stage-top { flex-wrap: wrap; row-gap: 6px; } .sw-top #st-badges, .cl-top #st-badges { order: 2; flex-basis: 100%; } }
.sw > *, .cl > * { min-width: 0; }
body.is-sw .sw { height: auto !important; grid-template-rows: auto auto clamp(380px, 50vh, 560px) auto auto !important; }

/* ---------- 3D 水晶圆球头像 ---------- */
.av-orb { display: block; width: 100%; height: 100%; overflow: visible; }
.sw-ava, .cl-ava { background: transparent !important; }
.sw-ava .av-orb, .cl-ava .av-orb { filter: drop-shadow(0 2px 3px rgba(60, 20, 30, .22)); }
.av-orbimg { position: relative; display: block; width: 100%; height: 100%; border-radius: 50%; overflow: hidden; box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, .75); }
.av-orbimg img { width: 100%; height: 100%; object-fit: cover; display: block; }
.av-orbimg::after { content: ""; position: absolute; inset: 0; border-radius: 50%; pointer-events: none;
  background: radial-gradient(ellipse 30% 18% at 34% 20%, rgba(255, 255, 255, .8), rgba(255, 255, 255, 0) 100%), radial-gradient(circle at 50% 47%, transparent 66%, rgba(40, 20, 30, .42) 100%), radial-gradient(ellipse 60% 30% at 50% 100%, rgba(255, 214, 150, .45), transparent 100%);
  box-shadow: inset 0 0 0 2px rgba(255, 255, 255, .55), inset 0 -6px 14px rgba(255, 220, 170, .35); }
/* 智能体中心大卡片：水晶球 + 金色底座光 */
.agc-portrait .av3d.av-orb { width: 164px; height: 164px; bottom: 18px; filter: drop-shadow(0 12px 16px rgba(80, 30, 40, .28)); }
.agc-portrait .av-orbimg { position: absolute; left: 50%; bottom: 18px; width: 164px; height: 164px; transform: translateX(-50%); }
.agc-portrait::before { content: ""; position: absolute; left: 50%; bottom: 6px; width: 170px; height: 26px; transform: translateX(-50%); border-radius: 50%; background: radial-gradient(ellipse at 50% 50%, rgba(214, 163, 74, .6), rgba(214, 163, 74, 0) 70%); z-index: 0; }
.stu-card .cl-ava { border: 0 !important; background: transparent !important; }
