/* sigstation 基础样式（教师端 + 学生端共用） */
* { box-sizing: border-box; }
body {
	margin: 0;
	font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
	color: #1f2328;
	background: #f6f8fa;
}
.wrap { max-width: 1080px; margin: 0 auto; padding: 20px 16px 48px; }
.narrow { max-width: 560px; }

label { display: block; margin: 12px 0 4px; font-weight: 500; }
input[type="text"], input[type="password"], input[type="number"], select, textarea {
	width: 100%; padding: 8px 10px; border: 1px solid #d0d7de; border-radius: 6px; font: inherit;
	background: #fff;
}
textarea { min-height: 120px; resize: vertical; }
fieldset { border: 1px solid #d0d7de; border-radius: 8px; margin: 16px 0; padding: 4px 16px 16px; background: #fff; }
legend { font-weight: 600; padding: 0 6px; }

button, .btn {
	margin-top: 8px; padding: 8px 18px; border: 1px solid #1f6feb; border-radius: 6px;
	background: #1f6feb; color: #fff; font: inherit; cursor: pointer;
}
button:disabled { opacity: .45; cursor: not-allowed; }
.btn.ghost { background: #fff; color: #1f6feb; }
.btn.danger { background: #cf222e; border-color: #cf222e; }
.btn.ghost.danger { background: #fff; color: #cf222e; border-color: #cf222e; }
.btn.sm { padding: 4px 10px; font-size: 13px; margin-top: 0; }
.btn.big { padding: 12px 28px; font-size: 17px; }

.error { color: #cf222e; }
.hint { color: #57606a; font-size: 13px; }
.ok-text { color: #1a7f37; }
.inline { display: inline; }
.row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.grow { flex: 1; }

/* 顶栏 */
.topbar {
	display: flex; justify-content: space-between; align-items: center;
	background: #fff; border-bottom: 1px solid #d0d7de; padding: 10px 16px;
}
.brand { font-weight: 700; font-size: 16px; }

/* 卡片 */
.card { background: #fff; border: 1px solid #d0d7de; border-radius: 10px; padding: 16px; margin: 14px 0; }
.card h3 { margin-top: 0; }
.badge { display: inline-block; padding: 2px 10px; border-radius: 99px; font-size: 13px; background: #eaeef2; }
.badge.open { background: #dafbe1; color: #116329; }
.badge.closed { background: #eaeef2; color: #57606a; }
.badge.done { background: #dafbe1; color: #116329; }
.badge.now { background: #ddf4ff; color: #0969da; }
.badge.lock { background: #eaeef2; color: #8c959f; }

/* 标签页 */
.tabs { display: flex; gap: 8px; margin: 12px 0; }
.tabs button { background: #fff; color: #1f2328; border-color: #d0d7de; }
.tabs button.active { background: #1f6feb; color: #fff; border-color: #1f6feb; }

/* 课堂控制台布局 */
.console-grid { display: grid; grid-template-columns: 1fr 320px; gap: 14px; align-items: start; }
@media (max-width: 900px) { .console-grid { grid-template-columns: 1fr; } }

/* 名单灯 */
.roster { display: flex; flex-wrap: wrap; gap: 8px; }
.stu-chip {
	display: flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 8px;
	border: 1.5px solid #d0d7de; background: #fff; cursor: pointer; font-size: 15px;
}
.stu-chip.selected { border-color: #1f6feb; background: #ddf4ff; }
.stu-chip .dot { font-size: 13px; }
.stu-chip .prog { font-size: 12px; color: #57606a; }

/* 信息流 */
.feed { max-height: 480px; overflow-y: auto; }
.feed-item { padding: 7px 4px; border-bottom: 1px solid #eaeef2; font-size: 14px; display: flex; gap: 8px; }
.feed-item .t { color: #8c959f; font-size: 12px; white-space: nowrap; }

/* 关卡进度条（学生端） */
.stage-rail { display: flex; gap: 8px; flex-wrap: wrap; margin: 14px 0; }
.stage-rail .stage-btn {
	flex: 1; min-width: 96px; padding: 10px 8px; text-align: center; border-radius: 10px;
	border: 1.5px solid #d0d7de; background: #fff; cursor: pointer; font-size: 14px;
}
.stage-btn.done { border-color: #1a7f37; background: #dafbe1; }
.stage-btn.now { border-color: #1f6feb; background: #ddf4ff; }
.stage-btn.lock { color: #8c959f; cursor: not-allowed; background: #f6f8fa; }

/* 学生端大字号 */
.student { font-size: 17px; max-width: 860px; }
.student h1, .student h2 { font-size: 22px; }
.name-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 10px; }
.name-btn { padding: 14px 6px; font-size: 18px; border-radius: 10px; }
.name-btn.joined { background: #1a7f37; border-color: #1a7f37; }

/* 匹配游戏 */
.match-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 700px) { .match-grid { grid-template-columns: 1fr; } }
.match-card {
	border: 1.5px solid #d0d7de; border-radius: 10px; background: #fff; padding: 12px;
	cursor: pointer; min-height: 64px;
}
.match-card.picked { border-color: #bf8700; background: #fff8c5; }
.match-card.matched { border-color: #1a7f37; background: #dafbe1; cursor: default; }
.match-card.wrong { border-color: #cf222e; background: #ffebe9; }
.match-label { display: flex; align-items: center; justify-content: center; text-align: center; font-weight: 600; }

/* 二进制展示 */
.bin-chips { display: flex; gap: 4px; flex-wrap: wrap; font-family: ui-monospace, Menlo, monospace; font-size: 15px; }
.bin-chips span { background: #eaeef2; border-radius: 4px; padding: 2px 6px; }

/* 传话/信号动画 */
.signal-stage { border: 1.5px solid #d0d7de; border-radius: 10px; background: #fff; padding: 10px; }
.signal-stage canvas { width: 100%; height: 110px; display: block; }
.pkts { display: flex; gap: 3px; flex-wrap: wrap; font-family: ui-monospace, Menlo, monospace; font-size: 14px; margin: 8px 0; }
.pkts b { font-weight: 400; background: #eaeef2; border-radius: 3px; padding: 2px 4px; }
.pkts b.flip { background: #ffebe9; color: #cf222e; }
.pkts.noise-wait b { cursor: pointer; }
.pkts.noise-wait b:hover { outline: 2px solid #cf222e; }
.noise-tip {
	border-left: 4px solid #cf222e; background: #ffebe9; border-radius: 0 8px 8px 0;
	padding: 10px 14px; margin: 8px 0; font-size: 16px; font-weight: 600; color: #cf222e;
	animation: noise-blink 1.2s ease-in-out infinite;
}
@keyframes noise-blink { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }
.pkts b.good { background: #dafbe1; }
.result-line { font-size: 18px; margin: 8px 0; }

/* 方案/场景 */
.plan-list { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
@media (max-width: 700px) { .plan-list { grid-template-columns: 1fr; } }
.plan-item { border: 1.5px solid #d0d7de; border-radius: 10px; padding: 10px; cursor: pointer; background: #fff; }
.plan-item.picked { border-color: #1f6feb; background: #ddf4ff; }
.plan-item.tried { border-color: #1a7f37; background: #dafbe1; }
.loss-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.loss-table th, .loss-table td { border: 1px solid #d0d7de; padding: 6px 8px; text-align: left; }
.loss-table th { background: #f6f8fa; }

/* 表格 */
.data-table { width: 100%; border-collapse: collapse; font-size: 15px; background: #fff; }
.data-table th, .data-table td { border: 1px solid #d0d7de; padding: 6px 10px; text-align: left; }
.data-table th { background: #f6f8fa; }

/* 证书 */
.cert {
	border: 3px double #bf8700; border-radius: 12px; background: #fffdf5;
	padding: 24px; text-align: center; margin-top: 16px;
}
.cert h2 { color: #7d4e00; }
.cert-chain { text-align: left; display: inline-block; font-size: 16px; line-height: 2; }
.kcard {
	display: inline-block; margin: 4px; padding: 10px 14px; border: 1.5px solid #bf8700;
	border-radius: 10px; background: #fff; font-size: 14px; max-width: 300px; vertical-align: top;
}

/* 知识点结论框 */
.conclude {
	border-left: 4px solid #1f6feb; background: #ddf4ff; border-radius: 0 8px 8px 0;
	padding: 10px 14px; margin: 12px 0; font-size: 16px;
}
.quiz-opt { display: block; margin: 8px 0; padding: 10px 14px; border: 1.5px solid #d0d7de; border-radius: 8px; cursor: pointer; background: #fff; }
.quiz-opt.picked { border-color: #1f6feb; background: #ddf4ff; }
.quiz-opt.right { border-color: #1a7f37; background: #dafbe1; }
.quiz-opt.wrong { border-color: #cf222e; background: #ffebe9; }

/* 课堂链接展示 */
.joinlink { display: flex; gap: 8px; align-items: center; }
.joinlink input { font-family: ui-monospace, Menlo, monospace; font-size: 16px; font-weight: 700; min-width: 220px; }

/* 空态 */
.empty { color: #8c959f; text-align: center; padding: 24px 0; }
