* { box-sizing: border-box; margin: 0; padding: 0; }
body {
  font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
  background: #0f172a;
  color: #e2e8f0;
  min-height: 100vh;
}
.wrap { max-width: 720px; margin: 0 auto; padding: 32px 16px 64px; }
.wrap.narrow { max-width: 480px; }
h1 { font-size: 22px; text-align: center; margin-bottom: 8px; }
.sub { text-align: center; color: #94a3b8; margin-bottom: 24px; font-size: 14px; }
.cards { display: flex; gap: 16px; flex-wrap: wrap; justify-content: center; margin-bottom: 16px; }
.card {
  background: #1e293b;
  border: 1px solid #334155;
  border-radius: 12px;
  padding: 20px;
  text-align: center;
  flex: 1 1 240px;
}
.card.wide { flex-basis: 100%; margin-bottom: 16px; }
.card h2 { font-size: 16px; margin-bottom: 14px; }
.qr { display: inline-block; background: #fff; padding: 10px; border-radius: 8px; }
.url { font-size: 12px; color: #64748b; margin-top: 10px; word-break: break-all; }
.warn {
  background: #451a03;
  border: 1px solid #b45309;
  color: #fbbf24;
  border-radius: 10px;
  padding: 12px 16px;
  font-size: 13px;
  line-height: 1.7;
  margin-bottom: 20px;
}
.warn code { background: #292524; padding: 1px 6px; border-radius: 4px; }
.label { display: block; text-align: left; font-size: 14px; color: #94a3b8; margin-bottom: 8px; }
input[type="text"] {
  width: 100%;
  padding: 12px 14px;
  border-radius: 8px;
  border: 1px solid #475569;
  background: #0f172a;
  color: #e2e8f0;
  font-size: 16px;
  margin-bottom: 14px;
  outline: none;
}
input[type="text"]:focus { border-color: #3b82f6; }
.btn {
  display: inline-block;
  width: 100%;
  padding: 13px 0;
  border: none;
  border-radius: 8px;
  background: #3b82f6;
  color: #fff;
  font-size: 16px;
  cursor: pointer;
  margin-top: 6px;
}
.btn:disabled { background: #475569; cursor: not-allowed; }
.btn.link { text-decoration: none; margin-top: 14px; background: #16a34a; }
.cam {
  position: relative;
  width: 100%;
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 12px;
  background: #000;
}
.cam video, .cam canvas { display: block; width: 100%; }
.cam canvas { position: absolute; top: 0; left: 0; }
.mirror video, .mirror canvas { transform: scaleX(-1); }
.status { text-align: center; font-size: 14px; color: #94a3b8; min-height: 22px; }
.status.err { color: #f87171; }
.success { border-color: #16a34a; }
.big { font-size: 48px; margin-bottom: 10px; }
.users { list-style: none; text-align: left; }
.users li { padding: 8px 4px; border-bottom: 1px solid #334155; font-size: 14px; }
.users li:last-child { border-bottom: none; }
.muted { color: #64748b; font-size: 13px; }
.center { text-align: center; margin-top: 16px; }
a { color: #60a5fa; }
a.muted { color: #64748b; }
