:root{--bg: #0d1424;--bg-2: #111a2e;--panel: #131d33;--panel-2: #182340;--line: #22304f;--text: #e6edfa;--text-dim: #93a3c0;--primary: #3fa1ff;--primary-2: #36d6c4;--warn: #ffb84c;--danger: #ff5b5b;--ok: #21d07a;--font-ui: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", "Cascadia Code", "Consolas", ui-monospace, monospace;--font-size-base: 15px;--fs-2xs: calc(var(--font-size-base) * .73);--fs-xs: calc(var(--font-size-base) * .8);--fs-sm: calc(var(--font-size-base) * .87);--fs-md: var(--font-size-base);--fs-lg: calc(var(--font-size-base) * 1.13);--fs-xl: calc(var(--font-size-base) * 1.4);--fs-2xl: calc(var(--font-size-base) * 1.8);--fs-3xl: calc(var(--font-size-base) * 2.4);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 40px;--space-7: 64px;--radius: 10px;--radius-sm: 6px;--radius-xs: 3px;--radius-pill: 999px;--shadow-1: 0 1px 2px rgba(0, 0, 0, .24);--shadow-2: 0 8px 28px rgba(0, 0, 0, .32);--shadow-3: 0 24px 64px rgba(0, 0, 0, .44);--shadow-pop: var(--shadow-2);--dur-fast: .16s;--dur-base: .32s;--dur-slow: .64s;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--primary);--input-bg: color-mix(in srgb, var(--bg) 78%, var(--panel));--input-bg-focus: color-mix(in srgb, var(--panel) 92%, var(--bg));--track-bg: color-mix(in srgb, var(--panel-2) 70%, var(--bg));--track-knob: color-mix(in srgb, var(--text-dim) 60%, var(--text));--on-primary: #06121f;--on-accent: #ffffff;--mask: color-mix(in srgb, var(--bg) 72%, transparent);--hairline: color-mix(in srgb, var(--text) 10%, transparent);--hairline-strong: color-mix(in srgb, var(--text) 16%, transparent);--primary-soft: color-mix(in srgb, var(--primary) 16%, transparent);--primary-mid: color-mix(in srgb, var(--primary) 28%, transparent);--danger-soft: color-mix(in srgb, var(--danger) 16%, transparent);--ok-soft: color-mix(in srgb, var(--ok) 15%, transparent);--warn-soft: color-mix(in srgb, var(--warn) 16%, transparent);--violet-soft: color-mix(in srgb, var(--accent-violet) 20%, transparent);--dim-soft: color-mix(in srgb, var(--text-dim) 16%, transparent);--stage-deep: color-mix(in srgb, var(--bg) 60%, #000);--stage-grid: color-mix(in srgb, var(--primary) 9%, transparent);--gold: #ffd24a;--silver: #c9d4e3;--bronze: #e8924a;--accent-magenta: #e11d48;--accent-violet: #8e7cff;--accent-cyan: #9fc1ff;--glass-bg: color-mix(in srgb, var(--panel) 72%, transparent);--glass-bg-strong: color-mix(in srgb, var(--panel) 88%, transparent);--glass-border: color-mix(in srgb, var(--text) 12%, transparent);--glass-blur: 16px;--highlight: inset 0 1px 0 color-mix(in srgb, var(--text) 9%, transparent);--glow: 0 10px 30px color-mix(in srgb, var(--primary) 26%, transparent);--elev-1: 0 1px 2px rgba(0, 0, 0, .05), 0 2px 10px rgba(0, 0, 0, .06);--elev-2: 0 4px 14px rgba(0, 0, 0, .07), 0 14px 36px rgba(0, 0, 0, .1);--elev-3: 0 12px 34px rgba(0, 0, 0, .12), 0 34px 70px rgba(0, 0, 0, .16);--panel-border: 1px solid color-mix(in srgb, var(--text) 10%, transparent)}html[data-mode=light]{--shadow-1: 0 1px 2px rgba(30, 40, 60, .08);--shadow-2: 0 8px 28px rgba(30, 40, 60, .12);--shadow-3: 0 24px 64px rgba(30, 40, 60, .18);--shadow-pop: var(--shadow-2);--elev-1: 0 1px 2px rgba(30, 40, 60, .06), 0 2px 10px rgba(30, 40, 60, .07);--elev-2: 0 4px 14px rgba(30, 40, 60, .08), 0 14px 36px rgba(30, 40, 60, .1);--elev-3: 0 12px 34px rgba(30, 40, 60, .12), 0 34px 70px rgba(30, 40, 60, .16);--glass-bg: color-mix(in srgb, #ffffff 74%, transparent);--glass-bg-strong: color-mix(in srgb, #ffffff 90%, transparent);--glass-border: color-mix(in srgb, var(--text) 10%, transparent);--highlight: inset 0 1px 0 #ffffff;--stage-deep: color-mix(in srgb, var(--bg) 88%, var(--text));--glow: 0 10px 30px color-mix(in srgb, var(--primary) 20%, transparent)}html[data-mode=light] ::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--line) 80%,var(--text-dim))}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);font-size:var(--font-size-base);line-height:1.6;overflow:hidden;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.mono,[data-num]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:0}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:var(--hairline-strong);border-radius:var(--radius-pill);border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:var(--text-dim);background-clip:content-box}::-webkit-scrollbar-track{background:transparent}:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--radius-sm)}button{font-family:inherit;font-size:var(--fs-sm);color:var(--text);background:var(--panel-2);border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);padding:6px 12px;cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}button:hover:not(:disabled){border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.42;cursor:not-allowed}.btn{padding:8px 16px}.btn.ghost{background:transparent}.btn.danger,.btn-mini.danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 45%,transparent)}.btn-mini{padding:4px 10px;font-size:var(--fs-xs)}.tb-primary{background:linear-gradient(90deg,var(--primary),var(--primary-2));border:none;color:var(--on-primary);font-weight:700;padding:8px 18px;border-radius:var(--radius-sm);letter-spacing:.02em}.tb-primary:hover:not(:disabled){color:var(--on-primary);filter:brightness(1.08)}input,select,textarea{font-family:inherit;font-size:var(--fs-sm);color:var(--text);background:var(--input-bg);border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);padding:6px 10px;outline:none;transition:border-color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}input:focus,select:focus,textarea:focus{border-color:var(--primary);background:var(--input-bg-focus)}input.big{padding:10px 12px;font-size:var(--fs-md)}.ctl-row{display:flex;align-items:center;gap:var(--space-2);padding:5px 0}.ctl-label{width:96px;flex:0 0 96px;color:var(--text-dim);font-size:var(--fs-sm)}.ctl-body{flex:1;min-width:0}.ctl-area{width:100%;resize:vertical;font-family:var(--font-mono);font-size:var(--fs-xs);line-height:1.6}.ctl-inline{display:flex;align-items:center;gap:6px;width:100%}.ctl-inline.wrap{flex-wrap:wrap}.ctl-inline>*{flex:1;min-width:0}.ctl-inline>button{flex:0 0 auto}.ctl-unit,.ctl-num{color:var(--text-dim);font-size:var(--fs-xs);flex:0 0 auto;min-width:26px}.ctl-input{width:100%;min-width:0}.ctl-input.small{width:84px;flex:0 0 84px}.ctl-color{width:32px;height:28px;padding:0;border:1px solid var(--hairline-strong);background:transparent;flex:0 0 32px;cursor:pointer}.ctl-range{width:100%;accent-color:var(--primary);padding:0;background:transparent;border:none}.ctl-switch{position:relative;display:inline-block;width:38px;height:20px;flex:0 0 38px}.ctl-switch input{opacity:0;width:0;height:0}.ctl-slider{position:absolute;cursor:pointer;top:0;right:0;bottom:0;left:0;background:var(--track-bg);border:1px solid var(--hairline-strong);border-radius:var(--radius-pill);transition:background var(--dur-fast) var(--ease-out)}.ctl-slider:before{content:"";position:absolute;width:12px;height:12px;left:3px;top:50%;transform:translateY(-50%);background:var(--track-knob);border-radius:50%;transition:transform var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}.ctl-switch input:checked+.ctl-slider{background:var(--primary);border-color:var(--primary)}.ctl-switch input:checked+.ctl-slider:before{transform:translate(18px,-50%);background:var(--on-primary)}.ctl-group{border:1px dashed var(--hairline-strong);border-radius:var(--radius-sm);padding:6px;margin:6px 0}.ctl-group-title,.ctl-section-title{font-size:var(--fs-sm);color:var(--primary-2);padding:6px 0;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;gap:6px}.ctl-group-body{padding-left:6px;border-left:1px solid var(--hairline);margin-left:4px}.arrow{display:inline-block;transition:transform var(--dur-fast) var(--ease-out);font-size:10px}.arrow.open{transform:rotate(90deg)}.ctl-subtitle{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-sm);color:var(--text-dim);padding:8px 0 4px}.ctl-grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.ctl-grid4 label{font-size:var(--fs-xs);color:var(--text-dim);display:flex;flex-direction:column;gap:3px}.btn-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.btn-grid button{padding:6px 0}.panel{padding:var(--space-2) var(--space-3) var(--space-6)}.panel-head{display:flex;align-items:center;gap:var(--space-2);padding:6px 0 10px;border-bottom:1px solid var(--hairline);margin-bottom:var(--space-2)}.badge{background:var(--panel-2);border:1px solid var(--hairline-strong);border-radius:var(--radius-pill);padding:3px 10px;font-size:var(--fs-xs);white-space:nowrap}.panel-name{flex:1;min-width:0}.panel-search input{width:100%;margin-bottom:var(--space-2)}.panel-empty{padding:var(--space-6) var(--space-4);text-align:center;color:var(--text-dim);line-height:2}.panel-tip{color:var(--text-dim);font-size:var(--fs-xs);line-height:1.7;padding:6px 0}.panel-tip.ok{color:var(--ok)}.panel-tip.error{color:var(--danger)}.ctl-section{border-bottom:1px solid var(--hairline);padding-bottom:var(--space-2);margin-bottom:var(--space-2)}.ctl-section-body{padding-left:4px}.dim{color:var(--text-dim)}.grow{flex:1}.center{text-align:center}.ellipsis{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--mask);display:flex;align-items:center;justify-content:center;z-index:900;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:maskIn var(--dur-base) var(--ease-out)}.modal{width:860px;max-width:92vw;max-height:86vh;background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius);box-shadow:var(--shadow-3);display:flex;flex-direction:column;overflow:hidden;animation:modalIn var(--dur-base) var(--ease-out)}.modal.small{width:420px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--hairline);font-weight:700;font-size:var(--fs-md)}.modal-body{display:flex;gap:var(--space-4);padding:var(--space-4);overflow:auto}.modal-body.column{flex-direction:column}.modal-desc{color:var(--text-dim);line-height:1.8}.modal-actions{display:flex;gap:var(--space-2);padding-top:var(--space-3)}.modal-actions.right{justify-content:flex-end}.ds-form.full{flex:1}.toasts{position:fixed;left:50%;top:18px;transform:translate(-50%);z-index:2000;display:flex;flex-direction:column;gap:var(--space-2);align-items:center}.toast{background:var(--panel-2);border:1px solid var(--hairline-strong);border-left:3px solid var(--primary);padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);box-shadow:var(--shadow-2);animation:fadeDown var(--dur-fast) var(--ease-out)}.toast.ok{border-left-color:var(--ok)}.toast.error{border-left-color:var(--danger)}.toast.warn{border-left-color:var(--warn, #ffb84c)}@keyframes maskIn{0%{opacity:0}}@keyframes modalIn{0%{opacity:0;transform:translateY(12px) scale(.985)}}@keyframes fadeDown{0%{opacity:0;transform:translateY(-8px)}}.vs-list{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.vs-grid{height:100%;min-height:0;overflow:hidden}.vs-flip{transform-style:preserve-3d;animation:vsFlip var(--dur-slow) var(--ease-in-out)}@keyframes vsFlip{0%{transform:rotateX(-90deg);opacity:.2}}.vs-wave{animation:vsWave 3.2s linear infinite}.vs-wave-fast{animation:vsWave 2s linear infinite}@keyframes vsWave{0%{transform:translate(-6%)}to{transform:translate(6%)}}.vs-rotate{animation:vsRotate 8s linear infinite}@keyframes vsRotate{to{transform:rotate(360deg)}}.vs-scan{animation:vsScan 2.6s ease-in-out infinite}@keyframes vsScan{0%{transform:translateY(-100%)}to{transform:translateY(1000%)}}.vs-fade-in{animation:vsFadeIn var(--dur-base) var(--ease-out)}@keyframes vsFadeIn{0%{opacity:0;transform:scale(1.02)}}.reveal{opacity:0;transform:translateY(16px)}.reveal.in{opacity:1;transform:none;transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.reveal{opacity:1;transform:none}}.app{height:100%;display:flex;flex-direction:column}.toolbar{min-height:46px;background:var(--bg-2);border-bottom:1px solid var(--line);display:flex;align-items:center;flex-wrap:wrap;padding:6px var(--space-3);gap:6px var(--space-3)}.tb-left,.tb-mid,.tb-right{display:flex;align-items:center;gap:6px;min-width:0}.tb-left{flex:1 1 auto}.tb-mid{flex:0 1 auto;justify-content:center}.tb-right{flex:1 1 auto;justify-content:flex-end;flex-wrap:wrap;row-gap:6px}.tb-text,.tb-btn,.tb-primary{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:30px;white-space:nowrap}.tb-text{padding:0 10px}.toolbar .side-toggle{width:30px;height:30px;flex:0 0 auto}.logo{font-weight:700;letter-spacing:1px;color:var(--primary);white-space:nowrap}.doc-name{width:180px;min-width:96px;flex:0 1 180px;height:30px}.tb-dim{color:var(--text-dim);font-size:11px;white-space:nowrap}.tb-btn{width:30px;padding:0;background:transparent}.tb-btn.on{color:var(--primary);border-color:var(--primary)}.tb-zoom{width:46px;text-align:center;color:var(--text-dim);font-size:11px}.tb-sep{flex:0 0 auto;width:1px;height:18px;background:var(--line);margin:0 4px}.tb-text{background:transparent;border-color:transparent}.tb-text.on{color:var(--primary);border-color:var(--primary);background:var(--primary-soft)}.tb-text.danger{color:var(--danger)}.tb-menu{position:relative;display:inline-flex;flex:0 0 auto}.tb-menu-panel{position:absolute;right:0;top:calc(100% + 8px);z-index:400;min-width:196px;padding:6px;border-radius:calc(var(--radius) + 2px);background:var(--glass-bg-strong);backdrop-filter:saturate(1.4) blur(18px);-webkit-backdrop-filter:saturate(1.4) blur(18px);border:1px solid var(--glass-border);box-shadow:var(--elev-3);animation:fadeUp var(--dur-fast) var(--ease-out) both}.tb-menu-item{display:flex;align-items:center;justify-content:flex-start;width:100%;height:auto;padding:7px 10px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:var(--fs-sm);text-align:left;box-shadow:none}.tb-menu-item:hover:not(:disabled){background:color-mix(in srgb,var(--primary) 12%,transparent);border-color:color-mix(in srgb,var(--primary) 30%,transparent);color:var(--text);box-shadow:none}.tb-menu-item.danger{color:var(--danger)}.tb-menu-item.danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 12%,transparent);border-color:color-mix(in srgb,var(--danger) 34%,transparent);color:var(--danger)}.tb-menu-sep{display:block;height:1px;margin:5px 4px;background:var(--hairline)}@media (max-width: 1360px){.tb-mid{order:3;flex:1 1 100%;justify-content:flex-start;padding-top:6px;border-top:1px solid var(--hairline)}}@media (max-width: 1100px){.tb-dim,.tb-zoom{display:none}.doc-name{flex:0 1 132px}}.app-body{flex:1;min-height:0;display:flex}.side{width:268px;min-width:268px;background:var(--panel);display:flex;flex-direction:column}.side.left{border-right:1px solid var(--line)}.side.right{width:320px;min-width:320px;border-left:1px solid var(--line)}.side-tabs{display:flex;border-bottom:1px solid var(--line);background:var(--bg-2)}.side-tabs button{flex:1;border:none;border-radius:0;background:transparent;padding:10px 0;color:var(--text-dim)}.side-tabs button.on{color:var(--text);background:var(--panel);box-shadow:inset 0 -2px 0 var(--primary)}.side-body{flex:1;overflow:auto}.stage-area{flex:1;min-width:0;background:var(--stage-deep);overflow:hidden;display:flex}.canvas-wrap{flex:1;min-width:0;position:relative;overflow:auto}.canvas-content{position:relative;display:flex;align-items:flex-start;min-width:100%;min-height:100%;padding:34px 34px 40px;width:max-content}.canvas-main{flex:0 0 auto}.ruler{position:sticky;background:var(--bg-2);color:var(--text-dim);font-size:9px;z-index:6}.ruler-x{top:0;left:0;height:22px;border-bottom:1px solid var(--line)}.ruler-y{left:0;top:0;width:22px;flex:0 0 22px;align-self:stretch;border-right:1px solid var(--line);margin-left:-34px;margin-top:-34px}.ruler span{position:absolute;padding-left:2px;padding-top:2px;white-space:nowrap}.ruler-x span:after{content:"";position:absolute;left:0;top:14px;width:1px;height:6px;background:var(--line)}.ruler-y span{writing-mode:vertical-rl}.canvas-scroll{padding:40px;min-width:100%;min-height:100%;display:inline-block}.stage-outer{position:relative;box-shadow:var(--shadow-3);outline:1px solid color-mix(in srgb,var(--primary) 40%,transparent);outline-offset:0}.stage-badge{position:absolute;left:0;bottom:-20px;font-size:11px;color:var(--text-dim);white-space:nowrap;pointer-events:none}.stage-inner{position:absolute;left:0;top:0;overflow:hidden}.stage-grid{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to right,var(--stage-grid) 1px,transparent 1px),linear-gradient(to bottom,var(--stage-grid) 1px,transparent 1px)}.stage-empty{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;width:60%}.stage-empty-title{font-size:42px;font-weight:700;color:color-mix(in srgb,var(--primary) 20%,transparent);letter-spacing:6px}.stage-empty-tip{font-size:16px;color:var(--text-dim);padding-top:12px;line-height:1.8}.card-node{position:absolute;cursor:move}.card-node.active{outline:1px solid var(--primary);outline-offset:0}.card-node.locked{cursor:not-allowed}.card-label{position:absolute;left:0;top:-18px;font-size:10px;color:var(--on-primary);background:var(--primary);padding:1px 6px;border-radius:3px;white-space:nowrap;pointer-events:none}.card-unknown{width:100%;height:100%;border:1px dashed var(--danger);color:var(--danger);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:color-mix(in srgb,var(--danger) 8%,transparent)}.card-unknown-type{font-size:11px;opacity:.8}.resize-handle{position:absolute;width:10px;height:10px;background:var(--on-accent);border:1px solid var(--primary);border-radius:2px;z-index:10}.handle-nw{left:-5px;top:-5px;cursor:nwse-resize}.handle-n{left:50%;top:-5px;margin-left:-5px;cursor:ns-resize}.handle-ne{right:-5px;top:-5px;cursor:nesw-resize}.handle-e{right:-5px;top:50%;margin-top:-5px;cursor:ew-resize}.handle-se{right:-5px;bottom:-5px;cursor:nwse-resize}.handle-s{left:50%;bottom:-5px;margin-left:-5px;cursor:ns-resize}.handle-sw{left:-5px;bottom:-5px;cursor:nesw-resize}.handle-w{left:-5px;top:50%;margin-top:-5px;cursor:ew-resize}.guide-line{position:absolute;background:var(--accent-magenta);pointer-events:none;z-index:999}.marquee{position:absolute;border:1px dashed var(--primary);background:var(--primary-soft);pointer-events:none;z-index:998}.comp-group-title{color:var(--text-dim);font-size:11px;padding:8px 0 4px}.comp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.comp-item{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 2px;text-align:center;cursor:grab;transition:.15s}.comp-item:hover{border-color:var(--primary);transform:translateY(-1px)}.comp-icon{font-size:18px}.comp-name{font-size:11px;color:var(--text-dim);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layer-item{display:flex;align-items:center;gap:4px;padding:5px 6px;border:1px solid transparent;border-radius:var(--radius-sm);cursor:pointer}.layer-item:hover{background:var(--panel-2)}.layer-item.active{border-color:var(--primary);background:var(--primary-soft)}.layer-item.mini{font-size:11px;justify-content:space-between}.layer-icon{flex:0 0 18px}.layer-name{flex:1;min-width:0;background:transparent;border:1px solid transparent}.layer-name:hover,.layer-name:focus{border-color:var(--line)}.layer-btn{background:transparent;border:none;padding:2px}.layer-ops{display:none;gap:2px}.layer-item:hover .layer-ops{display:flex}.layer-ops button{padding:1px 4px;font-size:10px}.preview-table{max-height:180px;overflow:auto;border:1px solid var(--line);border-radius:var(--radius-sm)}.preview-table table{width:100%;border-collapse:collapse;font-size:11px}.preview-table th,.preview-table td{border-bottom:1px solid var(--line);padding:4px 6px;text-align:left;white-space:nowrap}.preview-table th{background:var(--panel-2);color:var(--text-dim);position:sticky;top:0}.ds-list{flex:1;min-width:0}.ds-form{flex:1;min-width:0;border-left:1px solid var(--line);padding-left:12px}.ds-list-head{display:flex;align-items:center;justify-content:space-between;color:var(--text-dim);font-size:12px;padding:6px 0}.ds-item{display:flex;align-items:center;gap:6px;padding:7px 8px;border:1px solid var(--line);border-radius:var(--radius-sm);margin-bottom:6px;cursor:pointer}.ds-item.active{border-color:var(--primary);background:var(--primary-soft)}.ds-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-type{font-size:11px;color:var(--text-dim);white-space:nowrap}.preview-full{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--stage-deep);z-index:1500;display:flex;flex-direction:column}.preview-bar{display:flex;align-items:center;padding:8px 14px;background:color-mix(in srgb,var(--text) 5%,transparent);font-size:12px}.screen-player{flex:1;min-height:0;overflow:hidden}.screen-player .player-stage{position:relative}.screen-player.fill .player-inner{position:relative;width:100%;height:100%}.work-bar{display:flex;align-items:center;gap:10px;padding:8px 14px;background:linear-gradient(90deg,color-mix(in srgb,var(--primary) 20%,transparent),color-mix(in srgb,var(--primary-2) 14%,transparent));border-bottom:1px solid var(--line)}.work-title{font-weight:700}.side-backdrop{display:none}@media (max-width: 1280px){.side.left{flex-basis:240px;min-width:200px}.side.right{flex-basis:288px;min-width:240px}.toolbar{flex-wrap:wrap;height:auto;min-height:46px;row-gap:6px;padding:4px 10px}.toolbar .tb-text{padding-left:8px;padding-right:8px}.work-bar{flex-wrap:wrap;row-gap:6px;padding:6px 12px}}@media (max-width: 1024px){.app-body{position:relative}.side.left,.side.right{position:absolute;top:0;bottom:0;z-index:50;width:286px;transform:translate(-100%);box-shadow:var(--shadow-3);transition:transform var(--dur-base) var(--ease-out)}.side.right{right:0;transform:translate(100%)}.app[data-show-left] .side.left,.app[data-show-right] .side.right{transform:none}.side-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:49;background:#0408128c;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.toolbar{flex-wrap:wrap;height:auto;padding:6px 10px;gap:6px}.side-toggle{display:inline-flex!important}}@media (min-width: 1025px){.side-toggle{display:none!important}}@media (max-width: 760px){.app:after{content:"本系统为桌面端大屏编辑工具，请在宽度 ≥1024px 的设备上使用。";position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;display:flex;align-items:center;justify-content:center;text-align:center;padding:96px var(--space-6) var(--space-5);background:var(--bg);color:var(--text-dim);font-size:var(--fs-sm);line-height:1.9}.app:before{content:"仅支持桌面端使用";position:fixed;left:0;right:0;top:50%;z-index:10000;transform:translateY(calc(-50% - 56px));padding:0 var(--space-4);text-align:center;color:var(--text);font-size:var(--fs-xl);font-weight:700;letter-spacing:.04em;pointer-events:none}}.teach-root{height:100%;display:flex;flex-direction:column;background:var(--bg)}.teach-topbar{height:52px;display:flex;align-items:center;gap:var(--space-3);padding:0 20px;font-size:var(--fs-sm)}.teach-head{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) 20px}.teach-title{font-size:var(--fs-md);font-weight:700}.teach-tabs{display:flex;gap:var(--space-2)}.teach-tabs button,.teach-tabs span{background:transparent;border:1px solid var(--line);color:var(--text-dim);padding:var(--space-1) var(--space-4);border-radius:var(--radius-sm);font-size:var(--fs-xs)}.teach-tabs button.on,.teach-tabs span.on{color:var(--text);border-color:var(--primary);background:var(--primary-soft)}.teach-body{flex:1;overflow:auto;padding:var(--space-4) var(--space-5) var(--space-6)}.teach-bar{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) 0}.teach-subtitle{font-weight:700}.teach-stat{font-size:var(--fs-xs);color:var(--text-dim);border:1px solid var(--line);border-radius:20px;padding:3px 10px}.empty-box{padding:var(--space-6) var(--space-4);text-align:center;color:var(--text-dim);font-size:var(--fs-sm);line-height:1.7;border:1px dashed var(--line);border-radius:var(--radius)}.sub-grid,.task-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-4)}.sub-card,.task-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2)}.sub-thumb{height:176px;background:var(--stage-deep);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;cursor:zoom-in;position:relative}.thumb-inner{position:absolute;left:0;top:0;pointer-events:none}.thumb-empty{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-dim)}.sub-meta{display:flex;align-items:center;justify-content:space-between}.sub-name{font-weight:700}.sub-ops,.task-ops{display:flex;gap:6px;flex-wrap:wrap}.tag{font-size:var(--fs-2xs);padding:2px var(--space-2);border-radius:20px;border:1px solid transparent}.tag.gray{background:var(--dim-soft);color:var(--text-dim)}.tag.green{background:var(--ok-soft);color:var(--ok)}.tag.orange{background:var(--warn-soft);color:var(--warn)}.grid-table{width:100%;border-collapse:collapse;font-size:var(--fs-xs);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.grid-table th,.grid-table td{padding:var(--space-2) 10px;border-bottom:1px solid var(--line);text-align:left}.grid-table th{background:var(--panel-2);color:var(--text-dim);font-weight:400}.grid-table tr:hover td{background:color-mix(in srgb,var(--primary) 8%,transparent)}.class-wrap{display:flex;gap:14px;align-items:flex-start}.class-list{width:260px;flex:0 0 260px}.class-item{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:var(--space-2);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:var(--space-2);cursor:pointer}.class-item.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}.class-detail{flex:1;min-width:0}.task-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.task-title{font-weight:700;font-size:var(--fs-lg)}.task-meta{font-size:var(--fs-xs);color:var(--text-dim)}.task-req{margin:0;padding:var(--space-2) 10px;background:var(--input-bg);border:1px solid var(--line);border-radius:var(--radius);font-size:var(--fs-xs);line-height:1.7;color:var(--text-dim);white-space:pre-wrap;max-height:150px;overflow:auto;font-family:inherit}.task-feedback{border-left:3px solid var(--ok);padding:6px 10px;background:var(--ok-soft);border-radius:var(--radius-sm);font-size:var(--fs-xs);line-height:1.7}.task-rubric{display:flex;gap:10px;flex-wrap:wrap;color:var(--text-dim);font-size:var(--fs-xs);margin-top:var(--space-1)}.grade-list{display:flex;flex-direction:column;gap:6px}.grade-row{display:flex;align-items:center;gap:10px}.grade-label{width:160px;flex:0 0 160px}.grade-value{width:70px;text-align:right;color:var(--text-dim)}.grade-total{text-align:right;padding-top:6px;border-top:1px dashed var(--line)}.preview-modal{width:92vw;height:88vh;background:var(--stage-deep);border:1px solid var(--line);border-radius:var(--radius);display:flex;flex-direction:column;overflow:hidden}.preview-head{display:flex;align-items:center;padding:10px 14px;border-bottom:1px solid var(--line);font-weight:700}.preview-actions{margin-left:auto;display:flex;gap:var(--space-2);align-items:center}.preview-body{flex:1;min-height:0;display:flex}.login{height:100%;display:flex;align-items:center;justify-content:center;background:radial-gradient(1200px 600px at 50% -10%,var(--panel-2) 0%,var(--bg) 62%)}.login-card{width:720px;max-width:92vw;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:28px;display:flex;flex-direction:column;gap:14px;box-shadow:var(--shadow-3)}.login-title{font-size:var(--fs-xl);font-weight:700;text-align:center}.login-sub{color:var(--text-dim);text-align:center;font-size:var(--fs-xs)}.login-roles{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.role-card{border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-4);text-align:center;cursor:pointer;transition:.15s}.role-card:hover{border-color:var(--primary)}.role-card.on{border-color:var(--primary);background:var(--primary-soft)}.role-icon{font-size:var(--fs-2xl)}.role-name{font-weight:700;padding:var(--space-1) 0}.role-desc{font-size:var(--fs-xs);color:var(--text-dim);line-height:1.6}.login-ops{display:flex;gap:10px;justify-content:center}@media (max-width: 1280px){.teach-topbar{flex-wrap:wrap;height:auto;min-height:52px;row-gap:6px;padding:var(--space-1) var(--space-3)}}.tag.red{background:color-mix(in srgb,var(--accent-magenta) 16%,transparent);color:var(--accent-magenta)}.tag.blue{background:var(--primary-soft);color:var(--primary)}.tag.purple{background:var(--violet-soft);color:var(--accent-violet)}.btn-mini.on{background:color-mix(in srgb,var(--primary) 16%,transparent);border-color:var(--primary);color:var(--primary)}.sub-card.checked{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary) inset}.sub-check{position:absolute;top:14px;left:14px;z-index:3;background:#0006;border-radius:var(--radius-sm);padding:3px 6px;line-height:1}.sub-card{position:relative}.sub-state{display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap;justify-content:flex-end}.miss-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:var(--space-2) 0}.late-text{color:var(--accent-magenta)}.work-bar.review{background:linear-gradient(90deg,color-mix(in srgb,var(--accent-violet) 20%,transparent),color-mix(in srgb,var(--primary) 12%,transparent))}.work-overdue{color:var(--accent-magenta)}.wb-pop-wrap{position:relative}.wb-pop{position:absolute;top:calc(100% + 6px);right:0;min-width:0;max-width:min(420px,90vw);max-height:320px;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--elev-2);padding:10px;z-index:60;display:flex;flex-direction:column;gap:var(--space-2)}.wb-step{display:flex;align-items:flex-start;gap:var(--space-2);font-size:var(--fs-xs);cursor:pointer}.wb-step-label{line-height:1.5}.wb-step-label em{color:var(--text-dim);font-style:normal;margin-left:6px}.wb-res{display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-xs)}.wb-res-name{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hand-fab{position:fixed;right:22px;bottom:26px;width:52px;height:52px;border-radius:50%;border:2px solid var(--line);background:var(--panel);font-size:var(--fs-xl);cursor:pointer;z-index:80;box-shadow:var(--elev-2);transition:transform .15s}.hand-fab.on{border-color:var(--warn);background:var(--warn-soft);transform:scale(1.12)}.push-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:310;background:var(--stage-deep);display:flex;flex-direction:column}.push-banner{height:44px;display:flex;align-items:center;gap:10px;padding:0 14px;background:linear-gradient(90deg,color-mix(in srgb,var(--primary) 25%,transparent),color-mix(in srgb,var(--accent-violet) 20%,transparent));font-weight:700}.push-stage{flex:1;min-height:0}.poll-question{font-weight:700;margin-bottom:10px}.poll-options{display:flex;flex-direction:column;gap:var(--space-2)}.poll-option{text-align:left;padding:10px var(--space-3);border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);cursor:pointer}.poll-option:hover{border-color:var(--primary)}.vote-done{position:fixed;right:22px;bottom:26px;z-index:80;background:var(--ok-soft);border:1px solid var(--ok);color:var(--ok);padding:var(--space-2) 14px;border-radius:20px;font-size:var(--fs-xs)}.demo-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:310;background:var(--stage-deep);display:flex;flex-direction:column}.demo-bar{height:46px;display:flex;align-items:center;gap:var(--space-2);padding:0 14px;background:var(--bg-2);border-bottom:1px solid var(--line)}.demo-title{font-weight:700}.demo-pos{color:var(--text-dim);font-size:var(--fs-xs)}.demo-stage{position:relative;flex:1;min-height:0}.demo-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:64px;font-size:var(--fs-2xl);color:#fff;background:#00000073;border:1px solid rgba(255,255,255,.25);border-radius:var(--radius);cursor:pointer;z-index:3}.demo-nav:hover{background:#ffffff2e}.demo-nav.left{left:16px}.demo-nav.right{right:16px}.demo-compare{flex:1;min-height:0;display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);padding:var(--space-2)}.demo-pane{display:flex;flex-direction:column;gap:6px;min-height:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--stage-deep)}.teach-body.classroom{display:flex;flex-direction:column;gap:18px}.cls-section{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-3) 14px}.cls-push-grid{display:flex;flex-wrap:wrap;gap:var(--space-2)}.cls-push-item{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:var(--radius);padding:6px 10px;font-size:var(--fs-xs)}.cls-push-name em{font-style:normal;font-size:var(--fs-2xs)}.cls-hands{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;font-size:var(--fs-xs)}.cls-picked{margin-top:var(--space-2);padding:14px;border:1px dashed var(--warn);border-radius:var(--radius);text-align:center;font-size:var(--fs-xl);font-weight:700;color:var(--warn)}.cls-poll-form{display:flex;flex-direction:column;gap:var(--space-2);max-width:560px}.cls-poll-result{margin-top:10px;display:flex;flex-direction:column;gap:6px;max-width:640px}.cls-poll-q{font-weight:700;margin-bottom:var(--space-1)}.cls-poll-row{display:flex;align-items:center;gap:10px;font-size:var(--fs-xs)}.cls-poll-label{width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cls-poll-bar-wrap{flex:1;height:14px;background:var(--dim-soft);border-radius:7px;overflow:hidden}.cls-poll-bar{height:100%;background:linear-gradient(90deg,var(--primary),var(--accent-violet));border-radius:7px;transition:width .4s}.cls-poll-num{width:56px;text-align:right;color:var(--text-dim)}.ana-stats{display:flex;gap:var(--space-3);flex-wrap:wrap;margin-bottom:14px}.ana-stat{flex:1;min-width:110px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-3);text-align:center}.ana-stat b{display:block;font-size:var(--fs-xl)}.ana-stat span{font-size:var(--fs-xs);color:var(--text-dim)}.ana-charts{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.ana-chart{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px;height:260px;display:flex;flex-direction:column}.ana-chart.wide{grid-column:1 / -1}.ana-title{font-weight:700;font-size:var(--fs-xs);margin-bottom:6px}.ana-chart .echarts,.ana-chart>div:last-child{flex:1;min-height:0}.ana-cols{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin-top:var(--space-3)}.ana-col{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px}.ana-chips{display:flex;gap:6px;flex-wrap:wrap}.ana-dup{display:flex;flex-direction:column;gap:6px}.ana-dup-row{display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-xs)}.bell-wrap{position:relative}.bell-btn{position:relative;background:transparent;border:1px solid var(--line);border-radius:var(--radius);font-size:var(--fs-md);padding:var(--space-1) 9px;cursor:pointer}.bell-badge{position:absolute;top:-6px;right:-6px;background:var(--accent-magenta);color:var(--on-accent);font-size:var(--fs-2xs);font-style:normal;min-width:16px;height:16px;line-height:16px;border-radius:var(--radius);text-align:center;padding:0 3px}.bell-panel{position:absolute;top:calc(100% + 8px);right:0;width:340px;max-height:420px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--elev-2);z-index:70;display:flex;flex-direction:column;overflow:hidden}.bell-head{display:flex;align-items:center;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line)}.bell-list{overflow:auto}.bell-item{display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line);font-size:var(--fs-xs)}.bell-item.unread{background:color-mix(in srgb,var(--primary) 8%,transparent)}.bell-icon{font-size:var(--fs-md)}.bell-body{flex:1;min-width:0}.bell-title{font-weight:600}.bell-sub{color:var(--text-dim);margin-top:2px}.bell-time{color:var(--text-dim);font-size:var(--fs-2xs);margin-top:2px}.ver-list{display:flex;flex-direction:column;gap:6px;max-height:420px;overflow:auto}.ver-item{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-2) 10px;font-size:var(--fs-xs)}.ver-item.current{border-color:var(--primary)}.ver-viewer{display:flex;flex-direction:column;gap:var(--space-2)}.ver-stage{height:56vh;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--stage-deep)}.peer-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-3)}.peer-item{border:1px solid var(--line);border-radius:var(--radius);padding:10px;display:flex;flex-direction:column;gap:var(--space-2)}.peer-thumb{height:150px;background:var(--stage-deep);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;cursor:zoom-in;position:relative}.peer-name{font-weight:700}.task-card.wide{grid-column:1 / -1}.task-req-md{max-height:260px;overflow:auto;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);padding:10px var(--space-3)}.task-steps,.task-res{display:flex;flex-direction:column;gap:6px}.task-steps .ctl-subtitle,.task-res .ctl-subtitle{margin-bottom:2px}.md-body{font-size:var(--fs-xs);line-height:1.8;color:var(--text)}.md-body .md-h{margin:var(--space-2) 0 var(--space-1);font-size:var(--fs-lg)}.md-body .md-p{margin:var(--space-1) 0}.md-body .md-list{margin:var(--space-1) 0;padding-left:20px}.md-body .md-quote{margin:6px 0;padding:var(--space-1) 10px;border-left:3px solid var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent);border-radius:4px;color:var(--text-dim)}.md-body .md-pre{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--space-2) 10px;overflow:auto;font-size:var(--fs-xs);margin:6px 0}.md-body .md-code{background:var(--dim-soft);border-radius:4px;padding:1px 5px;font-size:var(--fs-xs)}.md-body .md-a{color:var(--primary)}.md-body .md-img{max-width:100%;border-radius:var(--radius-sm)}.md-body .md-hr{border:none;border-top:1px dashed var(--line);margin:var(--space-2) 0}.snap-list{display:flex;flex-direction:column;gap:6px;max-height:380px;overflow:auto}.snap-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-2) 10px;font-size:var(--fs-xs)}.snap-info{display:flex;flex-direction:column;gap:2px;min-width:0}.ctl-checks{display:flex;gap:var(--space-2);flex-wrap:wrap}.ctl-check{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-xs);border:1px solid var(--line);border-radius:var(--radius);padding:5px 10px;cursor:pointer;-webkit-user-select:none;user-select:none}.ctl-check.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}.modal.wide{width:720px;max-width:94vw}.modal-body.scroll{max-height:62vh;overflow:auto}.modal-mask.dark{background:color-mix(in srgb,var(--bg) 86%,#000)}.thumb-img{width:100%;height:100%;object-fit:cover;object-position:top left;display:block}@media (max-width: 1024px){.teach-body{padding:10px var(--space-3) 32px}.teach-head{flex-direction:column;gap:var(--space-2);align-items:flex-start}.teach-tabs{flex-wrap:wrap}.sub-grid,.task-grid,.peer-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.class-wrap{flex-direction:column}.class-list{width:100%;flex:none}.ana-charts,.ana-cols{grid-template-columns:1fr}.ana-chart{height:220px}.demo-compare{grid-template-columns:1fr}.grid-table{display:block;overflow-x:auto;white-space:nowrap}.grade-label{width:110px;flex-basis:110px}.cls-poll-label{width:120px}.wb-pop{right:auto;left:0}.bell-panel{width:300px}}.anno-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:30;cursor:crosshair;touch-action:none}.anno-layer.eraser{cursor:cell}.anno-layer svg{display:block;width:100%;height:100%;pointer-events:none}.anno-toolbar{position:absolute;top:10px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-3);background:#141822e0;border:1px solid rgba(255,255,255,.14);border-radius:var(--radius-pill);pointer-events:auto;box-shadow:0 4px 16px #00000059}.anno-toolbar .btn-mini{display:inline-flex;align-items:center;gap:4px}.anno-dot{width:18px;height:18px;border-radius:50%;cursor:pointer;border:2px solid rgba(255,255,255,.35);display:inline-block}.anno-dot.on{border-color:#fff;box-shadow:0 0 0 2px #ffffff59}.anno-width{width:22px;height:22px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;border:1px solid transparent}.anno-width i{background:#dfe3ea;border-radius:50%;display:inline-block}.anno-width.on{border-color:#fff}.anno-sep{width:1px;height:18px;background:#ffffff38}.anno-toolbar .btn-mini{color:#eef1f6}.anno-toolbar .btn-mini.on{background:var(--primary);border-color:var(--primary)}.pra-box{margin-top:18px}.pra-dismissed td{opacity:.5;text-decoration:line-through}.pra-dismissed td .btn-mini{text-decoration:none}.gb-scroll{overflow-x:auto;max-height:60vh}.gb-table th,.gb-table td{text-align:center;white-space:nowrap}.gb-table .gb-sticky{position:sticky;left:0;background:var(--panel);text-align:left;z-index:2;min-width:88px}.gb-table .gb-sticky-r{position:sticky;right:0;background:var(--panel);z-index:2}.gb-table thead .gb-sticky,.gb-table thead .gb-sticky-r{z-index:3}.gb-th{max-width:140px;display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.gb-ok{color:var(--ok);font-weight:600}.gb-late{margin-left:var(--space-1)}.dm-layer{position:absolute;left:0;right:0;top:0;height:140px;overflow:hidden;pointer-events:none}.dm-item{position:absolute;left:100%;white-space:nowrap;padding:3px var(--space-3);border-radius:var(--radius-pill);background:#0a0e168c;color:#fff;font-size:var(--fs-sm);line-height:20px;animation:dm-fly linear forwards;will-change:transform;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.dm-item .dm-name{color:var(--accent-cyan);margin-right:6px}@keyframes dm-fly{0%{transform:translate(0)}to{transform:translate(calc(-100vw - 100%))}}.dm-global{position:fixed;top:44px;left:0;right:0;height:140px;pointer-events:none;z-index:315}.dm-root-layer{position:absolute;top:52px;left:0;right:0;height:140px;pointer-events:none;z-index:40}.dm-fab{position:fixed;right:22px;bottom:92px;width:46px;height:46px;border-radius:50%;border:2px solid var(--line);background:var(--panel);font-size:var(--fs-xl);cursor:pointer;z-index:84;box-shadow:var(--elev-2)}.dm-fab.on{border-color:var(--primary);transform:scale(1.08)}.dm-composer{position:fixed;right:22px;bottom:148px;display:flex;gap:var(--space-2);align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px;z-index:84;box-shadow:var(--elev-2)}.dm-composer input{width:220px}.gw-list{display:flex;flex-direction:column;gap:var(--space-3)}.gw-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);overflow:hidden}.gw-head{display:flex;align-items:center;gap:10px;padding:10px var(--space-3);background:var(--dim-soft);flex-wrap:wrap}@media (max-width: 768px){.teach-body{padding:10px!important}.teach-head{flex-direction:column;align-items:stretch;gap:var(--space-2)}.teach-tabs{overflow-x:auto;flex-wrap:nowrap}.sub-grid,.task-grid,.ana-charts,.demo-compare{grid-template-columns:1fr}.grid-table{font-size:var(--fs-xs)}.hand-fab{width:44px;height:44px}}.gw-groups{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;padding:var(--space-3)}.gw-group{border:1px solid var(--line);border-radius:8px;padding:10px;display:flex;flex-direction:column;gap:6px}.gw-g-name{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.gw-members{font-size:var(--fs-xs);color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.gw-log{font-size:var(--fs-xs);min-height:52px;border-top:1px dashed var(--line);padding-top:6px;display:flex;flex-direction:column;gap:2px}.gw-banner{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);padding:var(--space-3);margin-bottom:14px;display:flex;flex-direction:column;gap:var(--space-2)}.gw-banner-title{font-weight:700}.gw-banner-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px dashed var(--line);padding-top:var(--space-2)}.gw-banner-item:first-of-type{border-top:none;padding-top:0}.teach{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.teach-body>*{max-width:1440px;margin-inline:auto;width:100%}.teach-bar.section{padding-bottom:var(--space-2);border-bottom:1px solid var(--line);margin-bottom:var(--space-3)}.sub-card,.task-card,.peer-item,.gw-card,.gw-banner,.cls-section,.ana-chart,.class-item,.snap-item{background-image:linear-gradient(180deg,color-mix(in srgb,var(--panel-2) 45%,transparent),transparent 42%);border-color:color-mix(in srgb,var(--text) 9%,transparent);box-shadow:var(--elev-1),var(--highlight);border-radius:calc(var(--radius) + 2px);transition:transform var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}.sub-card:hover,.task-card:hover,.peer-item:hover,.gw-card:hover,.class-item:hover{transform:translateY(-2px);box-shadow:var(--elev-2),var(--highlight);border-color:color-mix(in srgb,var(--primary) 42%,transparent)}.teach>.page{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.teach>.page>.page-head{flex:0 0 auto;width:100%;max-width:calc(1440px + var(--space-5) * 2);margin:0 auto;padding:var(--space-4) var(--space-5) 0}.teach .btn,.teach .btn-mini{display:inline-flex;align-items:center;gap:6px}.hand-fab,.dm-fab{display:inline-flex;align-items:center;justify-content:center}.push-banner>span{display:inline-flex;align-items:center;gap:6px}.admin{height:100%;display:flex;background:var(--bg)}.admin-side{width:252px;min-width:252px;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:0;overflow:hidden}.admin-brand{padding:16px 16px 12px;border-bottom:1px solid var(--hairline);flex:none}.admin-logo{font-weight:700;color:var(--primary);font-size:var(--fs-lg);letter-spacing:1px;display:flex;align-items:center;gap:8px}.admin-sub{font-size:var(--fs-xs);padding:3px 0 0}.admin-nav{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:10px 10px 16px;scrollbar-width:thin;scrollbar-color:var(--hairline-strong) transparent}.admin-nav::-webkit-scrollbar{width:6px}.admin-nav::-webkit-scrollbar-thumb{background:var(--hairline-strong);border-radius:3px}.admin-group{margin-bottom:6px}.admin-group-head{width:100%;display:flex;align-items:baseline;gap:8px;padding:9px 8px 6px;background:none;border:0;cursor:pointer;color:var(--text-dim);text-align:left;border-radius:var(--radius-sm)}.admin-group-head:hover{background:var(--panel-2)}.admin-group-title{font-size:var(--fs-xs);font-weight:700;letter-spacing:.12em;color:var(--text-dim)}.admin-group-desc{font-size:var(--fs-2xs, 11px);color:var(--text-dim);opacity:.75;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-group-caret{flex:none;transition:transform var(--dur-fast) var(--ease-out);opacity:.7}.admin-group.collapsed .admin-group-caret{transform:rotate(-90deg)}.admin-group.collapsed .admin-group-items{display:none}.admin-group-items{display:flex;flex-direction:column;gap:2px}.admin-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:var(--radius-sm);cursor:pointer;font-size:var(--fs-sm);color:var(--text-dim);position:relative;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}.admin-item:hover{background:var(--panel-2);color:var(--text)}.admin-item.on{background:var(--primary-soft);color:var(--primary);font-weight:600}.admin-item.on:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;border-radius:0 3px 3px 0;background:var(--primary)}.admin-item-icon{width:20px;flex:none;display:inline-flex;align-items:center;justify-content:center;opacity:.9}.admin-item.on .admin-item-icon{opacity:1}.admin-item-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-foot{flex:none;font-size:var(--fs-xs);padding:10px 16px 12px;border-top:1px solid var(--hairline);color:var(--text-dim)}.admin-main{flex:1;min-width:0;display:flex;flex-direction:column}.admin-top{height:52px;min-height:52px;display:flex;align-items:center;gap:8px;padding:0 20px;background:var(--bg-2);border-bottom:1px solid var(--line);font-size:var(--fs-sm)}.admin-nav-btn{display:none;align-items:center;justify-content:center;width:34px;height:34px;padding:0;background:var(--panel-2);border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);color:var(--text)}.admin-body{flex:1;min-height:0;overflow:auto;padding:20px 24px 60px}.admin-body>*{max-width:1440px;margin-inline:auto}.page-head{display:flex;align-items:flex-end;gap:14px;margin-bottom:18px;flex-wrap:wrap}.page-title{font-size:var(--fs-2xl);font-weight:700;line-height:1.2;letter-spacing:-.01em}.page-desc{color:var(--text-dim);font-size:var(--fs-sm);padding-top:5px;max-width:70ch;line-height:1.6}.page-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.empty-page{margin:80px auto;width:460px;text-align:center;display:flex;flex-direction:column;gap:12px;align-items:center}.empty-title{font-size:var(--fs-xl);font-weight:700}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(224px,1fr));gap:14px;margin-bottom:16px}.stat-grid.compact .stat-card{padding:12px 14px}.stat-card{display:flex;align-items:center;gap:14px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;transition:border-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}.stat-card:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow-2)}.stat-icon{width:44px;height:44px;min-width:44px;border-radius:var(--radius);display:flex;align-items:center;justify-content:center}.stat-body{min-width:0}.stat-value{font-size:var(--fs-2xl);font-weight:700;line-height:1.15}.stat-unit{font-size:var(--fs-sm);color:var(--text-dim);margin-left:4px;font-weight:400}.stat-label{font-size:var(--fs-sm);color:var(--text-dim)}.stat-desc{font-size:var(--fs-xs);color:var(--text-dim);opacity:.8;padding-top:3px}.panel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:14px}.panel-grid.two{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.panel-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;margin-bottom:14px}.panel-card.flex1{flex:1;min-width:0}.panel-card-title{display:flex;align-items:center;gap:10px;font-weight:700;font-size:var(--fs-lg);padding-bottom:12px;border-bottom:1px solid var(--line);margin-bottom:14px}.panel-card-title .btn-mini{margin-left:auto}.trend{display:flex;align-items:flex-end;gap:10px;height:150px;padding-top:10px}.trend-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px}.trend-bar{width:62%;min-height:3px;background:linear-gradient(180deg,var(--primary),var(--primary-mid));border-radius:4px 4px 0 0;transition:filter var(--dur-fast) var(--ease-out)}.trend-col:hover .trend-bar{filter:brightness(1.15)}.trend-day,.trend-num{font-size:var(--fs-xs);color:var(--text-dim)}.trend-num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.prog-row{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:var(--fs-sm)}.prog-name{width:140px;flex:0 0 140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prog-track{flex:1;height:8px;background:var(--input-bg);border-radius:4px;overflow:hidden}.prog-fill{height:100%;background:linear-gradient(90deg,var(--primary),var(--primary-2));border-radius:4px}.prog-num{width:52px;text-align:right;color:var(--text-dim);font-size:var(--fs-xs);font-family:var(--font-mono);font-variant-numeric:tabular-nums}.prog-inline{display:flex;align-items:center;gap:8px}.prog-inline .prog-track{width:110px;flex:0 0 110px}.rank-row{display:flex;align-items:center;gap:12px;padding:8px 0;font-size:var(--fs-sm)}.rank-no{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--fs-xs);font-weight:700;background:var(--track-bg);color:var(--text-dim);font-family:var(--font-mono)}.rank-no.rank-0{background:var(--gold);color:#3a2a00}.rank-no.rank-1{background:var(--silver);color:#232d3d}.rank-no.rank-2{background:var(--bronze);color:#3a2109}.rank-name{flex:1}.rank-score{color:var(--ok);font-family:var(--font-mono);font-variant-numeric:tabular-nums}.log-row{display:flex;align-items:center;gap:10px;padding:7px 0;font-size:var(--fs-sm);border-bottom:1px dashed var(--line)}.log-dot{width:8px;height:8px;border-radius:50%;background:var(--primary);flex:0 0 8px}.log-dot.warn{background:var(--warn)}.log-dot.danger{background:var(--danger)}.log-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-time{color:var(--text-dim);font-size:var(--fs-xs);white-space:nowrap;font-family:var(--font-mono)}.quick-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.quick-grid button{padding:14px 0;background:var(--panel-2);font-size:var(--fs-md)}.tpl-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px;display:flex;flex-direction:column;gap:8px;transition:border-color var(--dur-fast) var(--ease-out)}.tpl-card:hover{border-color:var(--primary)}.tpl-name{font-weight:700;font-size:var(--fs-md)}.tpl-desc{font-size:var(--fs-sm);color:var(--text-dim);min-height:36px;line-height:1.6}.tpl-foot{display:flex;align-items:center;gap:8px}.dt{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.dt-bar{display:flex;align-items:center;gap:10px;padding-bottom:12px;font-size:var(--fs-sm)}.dt-search{width:260px}.dt-pager{display:flex;align-items:center;justify-content:center;gap:14px;padding-top:12px;font-size:var(--fs-sm)}.dt-pager .ctl-input{padding:2px 6px;font-size:var(--fs-sm)}.dt-batch{display:flex;align-items:center;gap:10px;padding:8px 12px;margin-bottom:10px;font-size:var(--fs-sm);border:1px solid color-mix(in srgb,var(--danger, #ff5470) 45%,transparent);background:color-mix(in srgb,var(--danger, #ff5470) 8%,var(--panel));border-radius:var(--radius-sm)}.grid-table tr.row-sel>td{background:color-mix(in srgb,var(--primary) 7%,transparent)}.grid-table input[type=checkbox]{width:14px;height:14px;cursor:pointer;accent-color:var(--primary)}.td-ops{display:flex;gap:5px;flex-wrap:wrap}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}.setting-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(390px,1fr));gap:14px}.field{display:flex;flex-direction:column;gap:6px;font-size:var(--fs-sm);color:var(--text-dim);padding:6px 0}.field-row{display:flex;gap:12px}.field-row .field{flex:1}.switch-field{display:flex;align-items:center;justify-content:space-between;padding:10px 0;font-size:var(--fs-sm);color:var(--text-dim)}.center-switch{display:inline-block;position:relative}.inline-form{display:flex;gap:10px;align-items:flex-start;padding-bottom:12px}.inline-form .ctl-area{flex:1}.canvas-preview{width:100%;max-height:150px;border:1px dashed var(--line);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;color:var(--text-dim);font-size:var(--fs-sm);margin-top:8px}.class-admin{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap}.class-admin .panel-card:first-child{width:320px;flex:0 0 320px}.class-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);margin-bottom:8px;cursor:pointer;font-size:var(--fs-sm);transition:border-color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}.class-row.on{border-color:var(--primary);background:var(--primary-soft)}.usage{padding-bottom:10px;font-size:var(--fs-xs)}.usage-bar{height:8px;background:var(--input-bg);border-radius:4px;overflow:hidden;margin-bottom:6px}.usage-fill{height:100%;background:linear-gradient(90deg,var(--primary-2),var(--primary))}.danger-zone{border-color:color-mix(in srgb,var(--danger) 45%,transparent);background:color-mix(in srgb,var(--danger) 6%,transparent)}.login-card.wide{width:900px}.login-roles.three{grid-template-columns:repeat(3,1fr)}.ds-brief{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 12px;margin:8px 0;border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in srgb,var(--primary) 6%,transparent);font-size:var(--fs-sm)}.ds-fields{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.panel-tip.warn{border-left:3px solid var(--warn);background:color-mix(in srgb,var(--warn) 9%,transparent)}.drv-group{margin-bottom:14px}.drv-group-title{font-size:var(--fs-sm);color:var(--text-dim);margin-bottom:8px}.drv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:10px}.drv-card{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}.drv-card:hover{border-color:var(--primary)}.drv-card.on{border-color:var(--primary);background:var(--primary-soft)}.drv-name{font-weight:600;font-size:var(--fs-md);margin-top:2px}.drv-desc{font-size:var(--fs-xs);color:var(--text-dim);line-height:1.5;margin-top:3px}.schema-list{display:flex;flex-direction:column;gap:10px}.schema-table{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}.schema-table.on{border-color:var(--primary)}.schema-table-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(272px,1fr));gap:14px;align-items:start}.theme-item{border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;background:var(--panel);transition:border-color var(--dur-fast) var(--ease-out)}.theme-item:hover{border-color:var(--primary)}.theme-item.on{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary) inset}.theme-item-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px;font-size:var(--fs-md)}.theme-item-ops{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.theme-preview{display:flex;height:62px;margin-bottom:10px;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}.theme-preview .tp-side{flex:0 0 34px;display:flex;flex-direction:column;gap:5px;padding:8px 6px;border-right:1px solid var(--line)}.theme-preview .tp-side span{display:block;width:100%;height:4px}.theme-preview .tp-side .tp-dot{width:8px;height:8px}.theme-preview .tp-body{flex:1;display:flex;flex-direction:column;justify-content:center;gap:6px;padding:8px 10px}.theme-preview .tp-body span{display:block}.theme-preview .tp-body .tp-title{height:5px}.theme-preview .tp-body .tp-panel{height:16px}.theme-preview .tp-body .tp-btn{width:42px;height:12px}.theme-sec{margin:2px 0;font-size:var(--fs-sm);font-weight:700;color:var(--text)}.theme-colors{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin-bottom:12px}.theme-color-field{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 10px;background:var(--panel-2)}.theme-color-field input[type=color]{width:34px;height:26px;padding:0;border:none;background:none;cursor:pointer;flex:none}.theme-color-field span{font-size:var(--fs-sm);color:var(--text-dim);white-space:nowrap}.theme-color-field code{font-size:var(--fs-xs);color:var(--text-dim);margin-left:auto;font-family:var(--font-mono)}.login-brand{display:flex;justify-content:center;margin-bottom:12px}.login-foot{margin-top:16px;font-size:var(--fs-xs);text-align:center}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--mask);z-index:300;display:flex;justify-content:flex-end}.drawer{width:680px;max-width:94vw;height:100%;background:var(--panel);border-left:1px solid var(--line);display:flex;flex-direction:column;box-shadow:var(--shadow-3)}.drawer-head,.drawer-foot{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--line);font-weight:600;font-size:var(--fs-md)}.drawer-foot{border-bottom:none;border-top:1px solid var(--line);font-weight:400}.drawer-body{flex:1;overflow-y:auto;padding:14px 16px}@media (max-width: 1024px){.admin-side{position:fixed;left:0;top:0;bottom:0;z-index:120;width:264px;transform:translate(-100%);box-shadow:var(--shadow-3);transition:transform var(--dur-base) var(--ease-out)}.admin[data-nav=open] .admin-side{transform:none}.admin[data-nav=open]:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:110;background:var(--mask);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.admin-top{padding-left:12px}.admin-nav-btn{display:inline-flex}}@media (max-width: 768px){.stat-grid,.panel-grid{grid-template-columns:1fr}.admin-body{padding:14px}.admin-top{flex-wrap:wrap;gap:8px;height:auto;min-height:52px;padding:8px 12px}.page-head{flex-wrap:wrap;align-items:flex-start}}.cam-warn{position:absolute;left:8px;right:8px;bottom:8px;font-size:11px;line-height:1.5;color:var(--warn, #ffb84c);background:#0000008c;border:1px solid rgba(255,184,76,.35);border-radius:4px;padding:4px 6px}.cam-tip{position:absolute;left:6px;top:6px;max-width:calc(100% - 90px);font-size:11px;color:#e8f0ffb3;background:#00000073;border-radius:3px;padding:2px 6px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.cam-mini-btn{font-size:11px;line-height:1;padding:2px 5px;border-radius:4px;background:#ffffff1f;border:1px solid rgba(255,255,255,.2);color:var(--text);cursor:pointer}.cam-mini-btn:hover{background:#3fa1ff59}.cam-ptz{position:absolute;right:8px;bottom:8px;display:grid;grid-template-columns:repeat(3,22px);grid-template-rows:repeat(3,22px);gap:2px;padding:4px;border-radius:6px;background:#00000073}.cam-ptz-btn{display:flex;align-items:center;justify-content:center;font-size:12px;padding:0;border-radius:4px;background:#ffffff1a;border:1px solid rgba(255,255,255,.18);color:var(--text);cursor:pointer}.cam-ptz-btn:hover{background:#3fa1ff66}.check-row{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}.check-row .chk{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-dim, #93a3c0);background:var(--panel-2, #182340);border:1px solid var(--line, #22304f);border-radius:6px;padding:3px 8px;cursor:pointer}.check-row .chk.on{color:var(--on-accent);background:#3fa1ff38;border-color:#3fa1ff8c}.check-row .chk input{margin:0}html[data-mode=dark] body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background:radial-gradient(48rem 32rem at 8% -8%,color-mix(in srgb,var(--primary) 14%,transparent),transparent 60%),radial-gradient(40rem 30rem at 100% 0%,color-mix(in srgb,var(--primary-2) 10%,transparent),transparent 58%)}html[data-mode=dark] body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;opacity:.5;background-image:linear-gradient(color-mix(in srgb,var(--text) 4%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--text) 4%,transparent) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:radial-gradient(ellipse 80% 70% at 50% 30%,#000 30%,transparent 80%);mask-image:radial-gradient(ellipse 80% 70% at 50% 30%,#000 30%,transparent 80%)}html[data-mode=light] body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background:radial-gradient(44rem 30rem at 10% -10%,color-mix(in srgb,var(--primary) 10%,transparent),transparent 60%),radial-gradient(38rem 28rem at 100% 0%,color-mix(in srgb,var(--primary-2) 8%,transparent),transparent 58%)}#root{position:relative;z-index:1}.login{position:relative;overflow:hidden}.login:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background:radial-gradient(40rem 28rem at 18% 12%,color-mix(in srgb,var(--primary) 22%,transparent),transparent 60%),radial-gradient(36rem 26rem at 92% 8%,color-mix(in srgb,var(--primary-2) 16%,transparent),transparent 58%);pointer-events:none}.login:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-image:linear-gradient(color-mix(in srgb,var(--text) 5%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--text) 5%,transparent) 1px,transparent 1px);background-size:48px 48px;-webkit-mask-image:radial-gradient(ellipse 70% 60% at 50% 40%,#000 20%,transparent 85%);mask-image:radial-gradient(ellipse 70% 60% at 50% 40%,#000 20%,transparent 85%);opacity:.6;pointer-events:none}.login-card{position:relative;z-index:2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--hairline-strong);overflow:hidden;animation:loginIn var(--dur-slow) var(--ease-out) both}.login-card:before{content:"";position:absolute;left:0;top:18%;bottom:18%;width:3px;background:linear-gradient(180deg,var(--primary),var(--primary-2));border-radius:var(--radius-pill)}.login-title{font-family:var(--font-mono);font-weight:700;letter-spacing:-.02em;font-size:var(--fs-2xl)}.login-brand,.login-title,.login-sub,.login .ctl-input,.login-ops,.login-foot{animation:fadeUp var(--dur-base) var(--ease-out) both}.login-brand{animation-delay:60ms}.login-title{animation-delay:.12s}.login-sub{animation-delay:.18s}.login .ctl-input{animation-delay:.24s}.login-ops{animation-delay:.32s}.login-foot{animation-delay:.38s}@keyframes loginIn{0%{opacity:0;transform:translateY(20px) scale(.985)}}.sci-bg{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.sci-orb{position:absolute;border-radius:50%;filter:blur(90px)}.sci-orb-a{width:560px;height:560px;left:-160px;top:-180px;background:radial-gradient(circle,color-mix(in srgb,var(--primary) 55%,transparent),transparent 70%);animation:sciOrbA 16s ease-in-out infinite alternate}.sci-orb-b{width:480px;height:480px;right:-150px;bottom:-160px;background:radial-gradient(circle,color-mix(in srgb,var(--primary-2) 45%,transparent),transparent 70%);animation:sciOrbB 13s ease-in-out infinite alternate}@keyframes sciOrbA{to{transform:translate(70px,50px) scale(1.18)}}@keyframes sciOrbB{to{transform:translate(-60px,-40px) scale(1.12)}}.sci-scan{position:absolute;left:0;right:0;height:140px;top:-160px;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--primary) 9%,transparent),transparent);animation:sciScan 9s linear infinite}@keyframes sciScan{to{transform:translateY(130vh)}}.sci-particle{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--primary) 55%,#ffffff 45%);box-shadow:0 0 6px color-mix(in srgb,var(--primary) 60%,transparent);opacity:0;animation:sciFloat linear infinite}@keyframes sciFloat{0%{transform:translateY(0);opacity:0}12%{opacity:.65}88%{opacity:.4}to{transform:translateY(-46vh);opacity:0}}.login-card.sci{width:min(940px,94vw);display:grid;grid-template-columns:330px 1fr;gap:0;padding:0;overflow:hidden;border:1px solid color-mix(in srgb,var(--primary) 28%,var(--hairline-strong));box-shadow:0 24px 70px color-mix(in srgb,var(--primary) 14%,rgba(0,0,0,.4))}.login-side{position:relative;padding:36px 30px;display:flex;flex-direction:column;gap:10px;overflow:hidden;background:linear-gradient(168deg,color-mix(in srgb,var(--primary) 24%,var(--panel) 76%),color-mix(in srgb,var(--primary-2) 14%,var(--panel) 86%));border-right:1px solid color-mix(in srgb,var(--primary) 26%,transparent)}.login-side .login-brand{justify-content:flex-start;margin-bottom:4px}.sci-name{font-family:var(--font-mono);font-weight:800;font-size:15px;letter-spacing:.16em;color:var(--text)}.sci-tag{font-size:var(--fs-xs);color:var(--text-dim);margin-bottom:18px}.sci-feats{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.sci-feats li{font-size:var(--fs-sm);color:var(--text-dim);padding-left:16px;position:relative}.sci-feats li:before{content:"▸";position:absolute;left:0;color:var(--primary)}.sci-ring{position:absolute;right:-78px;bottom:-78px;width:230px;height:230px;border-radius:50%;border:1px solid color-mix(in srgb,var(--primary) 38%,transparent);box-shadow:inset 0 0 44px color-mix(in srgb,var(--primary) 16%,transparent);animation:sciSpin 18s linear infinite}.sci-ring:before{content:"";position:absolute;top:20px;right:20px;bottom:20px;left:20px;border-radius:50%;border:1px dashed color-mix(in srgb,var(--primary) 30%,transparent);animation:sciSpin 12s linear infinite reverse}@keyframes sciSpin{to{transform:rotate(360deg)}}.login-main{padding:38px 40px;display:flex;flex-direction:column;gap:12px;min-width:0}.login-main .login-title,.login-main .login-sub{text-align:left}.sci-field{display:flex;align-items:center;gap:9px;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--input-bg);transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}.sci-field:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 15%,transparent),0 0 20px color-mix(in srgb,var(--primary) 10%,transparent)}.sci-ico{font-size:13px;width:18px;text-align:center;color:var(--primary);flex:none;opacity:.9}.sci-field input,.sci-field select{flex:1;min-width:0;height:100%;border:none;background:transparent;outline:none;font-size:var(--fs-md);color:var(--text);font-family:inherit}.sci-field input::placeholder{color:var(--text-dim);opacity:1}.sci-field select{cursor:pointer}.login-btn{width:100%;height:40px;font-size:var(--fs-md);font-weight:700;letter-spacing:.3em;border:none;border-radius:var(--radius-sm);color:var(--on-primary, #fff);background:linear-gradient(90deg,var(--primary),var(--primary-2));box-shadow:0 6px 18px color-mix(in srgb,var(--primary) 35%,transparent);transition:transform var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}.login-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 26px color-mix(in srgb,var(--primary) 48%,transparent)}.login-btn:active:not(:disabled){transform:translateY(0)}.login-main .login-ops{justify-content:flex-start}.login-remember{display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-sm);color:var(--text-dim);cursor:pointer;-webkit-user-select:none;user-select:none}.login-remember input{width:14px;height:14px;accent-color:var(--primary);cursor:pointer}@media (max-width: 880px){.login-card.sci{grid-template-columns:1fr;width:min(480px,94vw)}.login-side{display:none}}@media (prefers-reduced-motion: reduce){.sci-orb-a,.sci-orb-b,.sci-scan,.sci-particle,.sci-ring,.sci-ring:before{animation:none!important}}@keyframes fadeUp{0%{opacity:0;transform:translateY(14px)}}.reveal:nth-child(1){transition-delay:0ms}.reveal:nth-child(2){transition-delay:80ms}.reveal:nth-child(3){transition-delay:.16s}.reveal:nth-child(4){transition-delay:.24s}.reveal:nth-child(5){transition-delay:.32s}.reveal:nth-child(6){transition-delay:.4s}.stat-card{border:1px solid var(--hairline);background:color-mix(in srgb,var(--panel) 88%,transparent);transition:transform var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}.stat-card:hover{transform:translateY(-2px);border-color:var(--hairline-strong);box-shadow:var(--shadow-2)}.stat-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.panel-card{border:1px solid var(--hairline);background:var(--panel)}.admin-item{border-left:2px solid transparent;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}.admin-item:hover{background:var(--hairline)}.admin-item.on{border-left-color:var(--primary)}.side-toggle{width:34px;height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);color:var(--text-dim)}.side-toggle:hover{color:var(--primary);border-color:var(--primary);background:var(--primary-soft)}.admin-nav-btn{width:38px;height:38px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);color:var(--text-dim)}.tb-primary{letter-spacing:.04em;font-family:var(--font-mono)}.admin-group-title,.page-title{letter-spacing:.02em}.tb-user{display:inline-flex;align-items:center;gap:6px;padding:3px 4px 3px 10px;border:1px solid var(--hairline-strong);border-radius:var(--radius-pill);color:var(--text-dim);font-size:var(--fs-sm);white-space:nowrap}.tb-user-name{color:var(--text);max-width:130px;overflow:hidden;text-overflow:ellipsis}.tb-logout{padding:3px 10px;border-radius:var(--radius-pill);font-size:var(--fs-xs)}html:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:9999;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}html[data-mode=light]:after{opacity:.05}.toolbar,.teach-topbar,.admin-top,.preview-bar,.display-top{background:var(--glass-bg)!important;backdrop-filter:saturate(1.5) blur(var(--glass-blur));-webkit-backdrop-filter:saturate(1.5) blur(var(--glass-blur));border-bottom:1px solid var(--glass-border)!important}.toolbar,.teach-topbar,.preview-bar{position:relative;z-index:200}.admin-top{position:relative;z-index:90}.side,.admin-side,.drawer{background:var(--glass-bg)!important;backdrop-filter:saturate(1.4) blur(var(--glass-blur));-webkit-backdrop-filter:saturate(1.4) blur(var(--glass-blur));border-color:var(--glass-border)!important}.modal{background:var(--glass-bg-strong);backdrop-filter:saturate(1.4) blur(20px);-webkit-backdrop-filter:saturate(1.4) blur(20px)}.stat-card,.panel-card,.tpl-card,.theme-item,.class-row,.dt,.ds-brief,.schema-table{background-image:linear-gradient(180deg,color-mix(in srgb,var(--panel-2) 45%,transparent),transparent 42%);border-color:color-mix(in srgb,var(--text) 9%,transparent);box-shadow:var(--elev-1),var(--highlight);transition:transform var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out),border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.stat-card:hover,.tpl-card:hover,.theme-item:hover{transform:translateY(-3px);box-shadow:var(--elev-2),var(--highlight);border-color:color-mix(in srgb,var(--primary) 42%,transparent)}.stat-card,.panel-card,.dt{border-radius:calc(var(--radius) + 2px)}.stat-icon{box-shadow:var(--highlight),0 6px 16px color-mix(in srgb,currentColor 26%,transparent)}.tb-primary,.btn.primary,button.btn.primary{background-image:linear-gradient(135deg,var(--primary),var(--primary-2));box-shadow:0 6px 18px color-mix(in srgb,var(--primary) 30%,transparent),var(--highlight);border:none}.tb-primary:hover:not(:disabled),.btn.primary:hover:not(:disabled){box-shadow:var(--glow),var(--highlight);transform:translateY(-1px)}.admin-item{border-radius:calc(var(--radius-sm) + 2px);margin-bottom:2px}.admin-item.on{background-image:linear-gradient(90deg,color-mix(in srgb,var(--primary) 22%,transparent),color-mix(in srgb,var(--primary) 6%,transparent));box-shadow:var(--highlight)}.teach-tabs button.on,.teach-tabs span.on{background-image:linear-gradient(135deg,color-mix(in srgb,var(--primary) 22%,transparent),color-mix(in srgb,var(--primary-2) 14%,transparent));box-shadow:var(--highlight)}.badge,.tag{border-radius:var(--radius-pill);box-shadow:var(--highlight)}.grid-table thead th{background-image:linear-gradient(180deg,color-mix(in srgb,var(--panel-2) 70%,transparent),color-mix(in srgb,var(--panel-2) 30%,transparent));font-weight:600;letter-spacing:.02em}.grid-table tbody tr{transition:background-color var(--dur-fast) var(--ease-out)}.grid-table tbody tr:hover{background:color-mix(in srgb,var(--primary) 7%,transparent)}.dt-search .ctl-input,.dt .ctl-input{border-radius:var(--radius-pill)}input:focus,select:focus,textarea:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 20%,transparent)}button{box-shadow:var(--highlight)}button:hover:not(:disabled){box-shadow:var(--highlight),0 4px 12px color-mix(in srgb,var(--primary) 16%,transparent)}.ctl-slider{box-shadow:inset 0 1px 2px #0003}.ctl-switch input:checked+.ctl-slider{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text) 22%,transparent);background-clip:content-box;border-radius:var(--radius-pill)}::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--primary) 55%,transparent);background-clip:content-box}::selection{background:color-mix(in srgb,var(--primary) 28%,transparent)}.theme-quick{position:relative;display:inline-flex}.theme-quick-panel{position:absolute;right:0;top:calc(100% + 8px);z-index:400;width:268px;max-height:60vh;overflow:auto;padding:8px;border-radius:calc(var(--radius) + 2px);background:var(--glass-bg-strong);backdrop-filter:saturate(1.4) blur(18px);-webkit-backdrop-filter:saturate(1.4) blur(18px);border:1px solid var(--glass-border);box-shadow:var(--elev-3);animation:fadeUp var(--dur-fast) var(--ease-out) both}.theme-quick-group{font-size:var(--fs-xs);color:var(--text-dim);padding:6px 8px 4px;letter-spacing:.06em}.theme-quick-item{display:flex;align-items:center;gap:10px;width:100%;padding:7px 9px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:var(--fs-sm);text-align:left;box-shadow:none}.theme-quick-item:hover:not(:disabled){background:color-mix(in srgb,var(--primary) 12%,transparent);border-color:color-mix(in srgb,var(--primary) 30%,transparent);color:var(--text);box-shadow:none}.theme-quick-item.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 14%,transparent);font-weight:600}.theme-quick-dots{display:inline-flex;gap:3px;flex:0 0 auto}.theme-quick-dots i{width:12px;height:12px;border-radius:3px;border:1px solid color-mix(in srgb,var(--text) 16%,transparent);display:block}.theme-quick-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin{--font-size-base: 16px;--fs-xs: calc(var(--font-size-base) * .8);--fs-sm: calc(var(--font-size-base) * .87);--fs-md: var(--font-size-base);--fs-lg: calc(var(--font-size-base) * 1.13);--fs-xl: calc(var(--font-size-base) * 1.4);--fs-2xl: calc(var(--font-size-base) * 1.8);--fs-3xl: calc(var(--font-size-base) * 2.4)}.admin .grid-table{font-size:var(--fs-md);line-height:1.5}.admin .grid-table th,.admin .grid-table td{padding:11px 14px}.admin .grid-table th{font-size:var(--fs-sm);font-weight:600;white-space:nowrap}.admin .grid-table td{word-break:break-word}.admin .grid-table tbody tr:nth-child(2n) td{background:color-mix(in srgb,var(--panel-2) 42%,transparent)}.admin .dt{overflow-x:auto}.admin .dt-bar{font-size:var(--fs-md);padding-bottom:14px}.admin .dt-search{width:300px}.admin .dt-pager{font-size:var(--fs-md)}.admin .td-ops{gap:6px;flex-wrap:wrap;justify-content:flex-end}.admin .tag{font-size:var(--fs-xs);padding:3px 10px}.admin .btn-mini{font-size:var(--fs-sm);padding:6px 12px}.admin .empty-page{width:min(520px,92vw)}.admin .page-desc,.admin .stat-label{font-size:var(--fs-md)}.admin .stat-desc,.admin .stat-unit{font-size:var(--fs-sm)}.admin .admin-item{font-size:var(--fs-md);padding:10px 12px}.admin .admin-group-title{font-size:var(--fs-sm)}.admin .admin-group-desc{font-size:var(--fs-xs)}.admin .admin-foot,.admin .admin-sub{font-size:var(--fs-sm)}.admin .drawer-mask{z-index:900;align-items:center}.admin .drawer{width:min(760px,94vw);height:auto;max-height:min(92vh,980px);border-radius:calc(var(--radius) + 8px) 0 0 calc(var(--radius) + 8px);animation:edvDrawerIn .22s var(--ease-out)}@keyframes edvDrawerIn{0%{transform:translate(28px);opacity:0}}.admin .drawer-head{font-size:var(--fs-lg);padding:16px 20px}.admin .drawer-foot{padding:14px 20px}.admin .drawer-body{padding:18px 20px 22px}.admin-body:has(.drawer-mask),.admin-main:has(.drawer-mask){overflow:hidden}.admin .drawer .ctl-row{gap:12px;padding:7px 0}.admin .drawer .ctl-label{width:150px;flex:0 0 150px;font-size:var(--fs-md);line-height:1.5}.admin .drawer .ctl-body{flex:1;min-width:0}.admin .drawer .ctl-input{font-size:var(--fs-md)}.admin .drawer .ctl-area{font-size:var(--fs-sm)}.admin .drawer .ctl-section-title{font-size:var(--fs-lg)}.admin .drawer .ctl-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}.admin .drawer .ctl-body .ctl-input,.admin .drawer .ctl-body .ctl-area{width:100%}.admin .ctl-switch-line{display:inline-flex;align-items:center;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.admin .ctl-switch-state{font-size:var(--fs-md);color:var(--text-dim)}.admin .ctl-switch-state.on{color:var(--primary);font-weight:600}.admin .edv-num{display:inline-flex;align-items:center;gap:8px}.admin .ctl-hint{font-size:var(--fs-sm);color:var(--text-dim);line-height:1.5}.admin .drawer-foot{gap:10px}.acct-form{display:flex;flex-direction:column;gap:18px;padding:4px 2px 2px}.acct-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px 18px;align-items:start}.acct-field{display:flex;flex-direction:column;gap:6px;min-width:0}.acct-field-wide{grid-column:1 / -1}.acct-label{font-size:var(--fs-sm);color:var(--text-dim);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.acct-label i{color:var(--danger);font-style:normal}.acct-label em{font-style:normal;font-size:var(--fs-xs);opacity:.75}.acct-roles{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.acct-role{padding:7px 16px;border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--panel);color:var(--text-dim);font-size:var(--fs-sm);cursor:pointer;transition:all var(--dur-fast) var(--ease-out)}.acct-role:hover{border-color:var(--primary);color:var(--primary)}.acct-role.on{background:var(--primary-soft);border-color:var(--primary);color:var(--primary);font-weight:600}.acct-role-tip{font-size:var(--fs-xs)}.chip-select{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.chip-select .chip{padding:6px 14px;border-radius:var(--radius-pill);border:1px dashed var(--line);background:var(--panel);color:var(--text-dim);font-size:var(--fs-sm);cursor:pointer;transition:all var(--dur-fast) var(--ease-out)}.chip-select .chip:hover{border-color:var(--primary);color:var(--primary)}.chip-select .chip.on{border-style:solid;background:var(--primary-soft);border-color:var(--primary);color:var(--primary);font-weight:600}.acct-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:14px}.acct-actions .btn.primary{margin-left:auto}.acct-hint{font-size:var(--fs-xs)}.import-way{display:flex;gap:10px;flex-wrap:wrap}.import-file-ok{font-size:var(--fs-sm);color:var(--ok, #3fbf7f);padding:8px 12px;border:1px dashed color-mix(in srgb,var(--ok, #3fbf7f) 45%,transparent);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--ok, #3fbf7f) 8%,transparent)}.import-divider{font-size:var(--fs-sm);color:var(--text-dim);display:flex;align-items:center;gap:12px;margin-top:2px}.import-divider:before,.import-divider:after{content:"";flex:1;height:1px;background:var(--line)}@media (max-width: 760px){.admin .drawer{width:100vw;max-width:100vw;height:100vh;max-height:100vh;border-radius:0}.admin .drawer .ctl-row{flex-direction:column;align-items:stretch;gap:4px}.admin .drawer .ctl-label{width:auto;flex:none}}.scene-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:950;display:flex;align-items:center;justify-content:center;padding:20px;background:color-mix(in srgb,var(--bg) 55%,transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.scene-win{width:min(1280px,96vw);height:min(840px,92vh);display:flex;flex-direction:column;overflow:hidden;background:var(--panel);border:1px solid var(--line);border-radius:calc(var(--radius) + 6px);box-shadow:0 24px 70px color-mix(in srgb,var(--text) 22%,transparent);animation:sceneWinIn .22s var(--ease-out)}@keyframes sceneWinIn{0%{transform:scale(.97);opacity:0}}.scene-head{display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--line);font-size:var(--fs-lg);flex-wrap:wrap}.scene-body{flex:1;display:flex;min-height:0}.scene-view{flex:1;position:relative;min-width:0;overflow:hidden;background:radial-gradient(120% 90% at 50% 0%,color-mix(in srgb,var(--primary) 7%,transparent),transparent 60%),color-mix(in srgb,var(--bg) 94%,var(--panel2))}.scene-view canvas{display:block}.scene-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:var(--fs-lg);color:var(--text-dim);pointer-events:none}.scene-loading.err{color:var(--danger, #e5534b);pointer-events:auto}.scene-hint{position:absolute;left:12px;bottom:10px;padding:5px 10px;font-size:var(--fs-xs);color:var(--text-dim);background:color-mix(in srgb,var(--panel) 72%,transparent);border:1px solid var(--line);border-radius:var(--radius-pill);pointer-events:none}.scene-labels{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none}.scene-label{position:absolute;left:0;top:0;display:inline-flex;align-items:center;gap:6px;padding:3px 9px;white-space:nowrap;font-size:var(--fs-xs);color:var(--text);background:color-mix(in srgb,var(--panel) 82%,transparent);border:1px solid var(--line);border-radius:var(--radius-pill);box-shadow:0 4px 14px color-mix(in srgb,var(--text) 14%,transparent);transform:translate(-50%,-100%);pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none}.scene-label:hover{border-color:color-mix(in srgb,var(--primary) 60%,var(--line))}.scene-label.on{border-color:var(--primary);background:var(--primary-soft);font-weight:600}.scene-label.cab{cursor:default;opacity:.9}.scene-dot{width:8px;height:8px;border-radius:50%;flex:none;box-shadow:0 0 6px currentColor}.scene-val{font-style:normal;color:var(--primary);font-weight:600}.scene-side{width:330px;flex:0 0 330px;border-left:1px solid var(--line);overflow-y:auto;padding:14px 16px 20px;display:flex;flex-direction:column;gap:14px;background:color-mix(in srgb,var(--panel2) 45%,transparent)}.scene-sec{display:flex;flex-direction:column;gap:8px;padding-bottom:12px;border-bottom:1px dashed var(--line)}.scene-sec:last-child{border-bottom:none}.scene-points{display:flex;flex-direction:column;gap:6px}.scene-point{display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel)}.scene-point.on{border-color:var(--primary);background:var(--primary-soft)}.scene-point-btn{flex:1;min-width:0;display:flex;align-items:center;gap:6px;background:none;border:none;color:var(--text);font-size:var(--fs-sm);cursor:pointer;text-align:left;padding:0}.scene-point-btn b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 900px){.scene-body{flex-direction:column}.scene-side{width:auto;flex:none;max-height:46%;border-left:none;border-top:1px solid var(--line)}}@property --vss-fx-angle{syntax: "<angle>"; inherits: false; initial-value: 0deg;}.vss-fx{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;border-radius:inherit;pointer-events:none}.vss-fx-ring{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box;border-radius:inherit;padding:var(--fx-w, 2px);overflow:hidden;opacity:var(--fx-op, 1);filter:var(--fx-glow, none);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude}.vss-fx-breath .vss-fx-ring{background:var(--fx-grad, #3fa1ff);animation:vss-fx-breath var(--fx-dur, 3s) ease-in-out infinite}.vss-fx-breath.vss-fx-rev .vss-fx-ring{animation-direction:reverse}@keyframes vss-fx-breath{0%,to{opacity:calc(var(--fx-op, 1) * var(--fx-min, .25))}50%{opacity:var(--fx-op, 1)}}.vss-fx-loop .vss-fx-ring{background:var(--fx-conic, #3fa1ff);animation:vss-fx-spin var(--fx-dur, 3s) linear infinite}.vss-fx-loop .vss-fx-ring:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--fx-grad, #3fa1ff);opacity:var(--fx-base, .22)}.vss-fx-loop.vss-fx-rev .vss-fx-ring{animation-direction:reverse}.vss-fx-both.vss-fx-loop .vss-fx-ring{background:var(--fx-conic, #3fa1ff);animation:vss-fx-spin var(--fx-dur, 3s) linear infinite,vss-fx-breath var(--fx-dur, 3s) ease-in-out infinite}.vss-fx-both.vss-fx-loop.vss-fx-rev .vss-fx-ring{animation-direction:reverse,reverse}@keyframes vss-fx-spin{to{--vss-fx-angle: 360deg}}.vss-text-flow :not(input):not(textarea):not(select):not(option):not(iframe):not([contenteditable=true]):not(:empty){color:transparent!important;background-image:linear-gradient(100deg,var(--tf-base, #e8f0ff) 40%,var(--tf-light, #ffffff) 50%,var(--tf-base, #e8f0ff) 60%)!important;background-size:250% 100%!important;background-repeat:no-repeat!important;-webkit-background-clip:text!important;background-clip:text!important;animation:vss-text-flow 3.2s linear infinite!important}@keyframes vss-text-flow{0%{background-position:0% 0}to{background-position:100% 0}}@media (prefers-reduced-motion: reduce){.vss-fx-ring,.vss-text-flow,.vss-text-flow :not(input):not(textarea):not(select):not(option):not(iframe):not([contenteditable=true]){animation:none!important}.vss-fx-loop .vss-fx-ring{background:var(--fx-grad, #3fa1ff)!important}.vss-text-flow :not(input):not(textarea):not(select):not(option):not(iframe):not([contenteditable=true]):not(:empty){background-position:50% 0!important}}.display-page{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:flex;flex-direction:column;background:#000;color:var(--text)}.display-top{flex:0 0 auto;height:46px;min-height:46px;display:flex;align-items:center;gap:var(--space-3);padding:0 var(--space-3);background:var(--bg-2);border-bottom:1px solid var(--line);font-size:var(--fs-sm);z-index:2}.dt-left{display:flex;align-items:center;gap:var(--space-2);flex:0 0 auto;white-space:nowrap}.dt-date,.dt-week{color:var(--text-dim);font-size:var(--fs-xs)}.dt-time{font-family:var(--font-mono);font-size:var(--fs-md);color:var(--text);letter-spacing:.02em}.dt-title{flex:1 1 auto;min-width:0;text-align:center;font-size:var(--fs-lg);font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-right{display:flex;align-items:center;gap:6px;flex:0 0 auto}.dt-user{display:inline-flex;align-items:center;gap:4px;color:var(--text-dim);font-size:var(--fs-xs);white-space:nowrap}.dt-select{max-width:200px}.display-stage{position:relative;flex:1 1 auto;min-height:0;overflow:hidden;background:#000}.display-chip,.display-exit{position:absolute;z-index:3;display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:var(--radius-pill);border:1px solid var(--glass-border);background:var(--glass-bg-strong);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));color:var(--text);font-size:var(--fs-xs);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--dur-base) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}.display-chip.show,.display-exit.show{opacity:1;pointer-events:auto}.display-chip:hover,.display-exit:hover{border-color:var(--primary);color:var(--primary)}.display-chip.left{left:var(--space-4);top:var(--space-4)}.display-exit{right:var(--space-4);top:var(--space-4)}.display-empty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:var(--space-5);text-align:center}.display-empty .de-title{font-size:var(--fs-lg);font-weight:700}.display-empty .de-desc{color:var(--text-dim);max-width:560px}.display-empty .de-actions{display:flex;gap:var(--space-2);margin-top:6px}@media (max-width: 900px){.dt-date,.dt-week,.dt-user{display:none}.display-top{gap:var(--space-2);padding:0 var(--space-2)}.dt-title{font-size:var(--fs-md)}.dt-select{max-width:120px}}
