*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:radial-gradient(circle at 50% -10%,#252734 0,#0b0c10 42%,#08090c 100%);color:#f7f7f8}.app,.admin-shell{width:min(980px,calc(100% - 24px));margin:0 auto;padding:22px 0 50px}.brand{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px}.brand h1{margin:4px 0 5px;font-size:clamp(1.8rem,6vw,2.8rem)}.brand p{margin:0;color:#aeb1bb}.eyebrow{font-size:.75rem;letter-spacing:.16em;font-weight:900;color:#9ea4ff}.card{background:rgba(22,23,29,.96);border:1px solid #2b2d36;border-radius:22px;padding:18px;box-shadow:0 24px 70px rgba(0,0,0,.28)}.scanner-card{padding:14px}.scanner-top,.section-head,.project-row,.meter-row,.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.scanner-top{margin:2px 2px 12px}.scanner-top h2,.card h2{margin:0}.muted{color:#aeb1bb;line-height:1.45}.badge{display:inline-flex;align-items:center;padding:7px 10px;border-radius:999px;background:#2a2c34;color:#cbd0db;font-size:.78rem;white-space:nowrap}.badge.ready{background:#15371e;color:#b8f3c4}.badge.warn{background:#4a3412;color:#ffd994}.camera-wrap{position:relative;width:100%;aspect-ratio:4/3;overflow:hidden;border-radius:18px;background:#030305;border:1px solid #2d3039}.camera-wrap video.camera-feed{width:100%;height:100%;display:block;object-fit:fill}.guide{position:absolute;inset:0;pointer-events:none;display:grid;place-items:center}.guide-box{width:84%;height:70%;border:2px solid rgba(255,255,255,.86);border-radius:13px;box-shadow:0 0 0 999px rgba(0,0,0,.08)}.guide-label{position:absolute;bottom:12px;background:rgba(0,0,0,.62);padding:7px 10px;border-radius:9px;font-size:.8rem}.ar-layer{position:absolute;inset:0;overflow:hidden;pointer-events:none}.ar-video{position:absolute;left:0;top:0;transform-origin:0 0;object-fit:cover;background:#000;display:none;will-change:transform}.match-pill{position:absolute;left:50%;top:12px;transform:translateX(-50%);background:rgba(24,132,64,.96);padding:8px 12px;border-radius:999px;font-size:.82rem;font-weight:900;z-index:5;display:none}.toolbar{margin-top:12px;flex-wrap:wrap}.toolbar-left,.toolbar-right{display:flex;gap:9px;flex-wrap:wrap}.primary,.secondary,.link-button{appearance:none;border-radius:12px;padding:11px 15px;font:inherit;font-weight:850;text-decoration:none;cursor:pointer}.primary{border:0;background:#f7f7f9;color:#0b0c0e}.secondary,.link-button{border:1px solid #3a3d47;background:#24262d;color:#f7f7f8}.compact{padding:8px 11px}.full{width:100%;margin-top:16px}.sound-btn{display:none}.meter{margin-top:14px}.track{height:9px;background:#292c34;border-radius:999px;overflow:hidden;margin-top:7px}.fill{height:100%;width:0;background:linear-gradient(90deg,#f4f4f7,#9da3ff);transition:width .15s}.status{margin:12px 1px 0;color:#d4d6dc;line-height:1.45}.status.error{color:#ffaaaa}.status.ok{color:#b9f4c7}.library-note{margin:0 0 14px}.admin-grid{display:grid;gap:14px}.admin-card{align-self:start}.field{display:grid;gap:8px;margin-top:15px;font-weight:750}.field small{font-weight:500;color:#8e929d}.field input{width:100%;padding:12px;border-radius:12px;background:#0d0e12;color:#fff;border:1px solid #393c45;font:inherit}.project-list{display:grid;gap:10px;margin-top:14px}.project-row{padding:10px;border:1px solid #2d3038;background:#101116;border-radius:14px}.project-meta{display:grid;grid-template-columns:66px 1fr;gap:11px;align-items:center;min-width:0}.project-meta img{width:66px;height:52px;border-radius:9px;object-fit:cover}.project-meta strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-meta small{display:block;color:#8f939d;margin-top:4px}.danger{border-color:#563036;color:#ffb8bd}.empty{padding:24px;text-align:center;color:#979ba6;border:1px dashed #343741;border-radius:14px}.scan-home{display:grid;gap:14px}.intro-card{text-align:center;padding:20px}.intro-card .brand-title{font-size:clamp(1.8rem,7vw,3rem);font-weight:950;letter-spacing:-.03em}.intro-card p{color:#aeb1bb}.recognition-name{font-weight:900;margin-left:7px}@media(min-width:780px){.admin-grid{grid-template-columns:.82fr 1.18fr}.scanner-card{padding:18px}.camera-wrap{max-height:72vh}}

/* =========================================================
   v2.1 CLIENT FULLSCREEN SCANNER
   Admin page keeps the original card layout.
   ========================================================= */
html, body.scanner-body, body.scanner-body #root {
  width: 100%;
  height: 100%;
  min-height: 100%;
  margin: 0;
  overflow: hidden;
  background: #000;
}

body.scanner-body {
  overscroll-behavior: none;
  touch-action: manipulation;
}

.fullscreen-scanner {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100dvh;
  background: #000;
  overflow: hidden;
}

.fullscreen-camera {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  background: #000;
  overflow: hidden;
}

.fullscreen-camera .camera-feed {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #000;
}

.fullscreen-camera .ar-layer {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 2;
}

.fullscreen-camera .ar-video {
  position: absolute;
  left: 0;
  top: 0;
  display: none;
  object-fit: cover;
  transform-origin: 0 0;
  background: #000;
  will-change: transform;
  backface-visibility: hidden;
}

.start-screen {
  position: absolute;
  inset: 0;
  z-index: 20;
  display: grid;
  place-items: center;
  padding: max(24px, env(safe-area-inset-top))
           max(20px, env(safe-area-inset-right))
           max(24px, env(safe-area-inset-bottom))
           max(20px, env(safe-area-inset-left));
  background: #000;
}

.start-screen.hidden {
  display: none;
}

.start-camera-button {
  appearance: none;
  border: 0;
  border-radius: 999px;
  padding: 16px 26px;
  min-width: 210px;
  font: inherit;
  font-size: 1rem;
  font-weight: 900;
  background: #fff;
  color: #000;
  box-shadow: 0 8px 32px rgba(0,0,0,.28);
}

.start-camera-button:disabled {
  opacity: .5;
}

.start-message {
  position: absolute;
  left: 24px;
  right: 24px;
  bottom: max(28px, env(safe-area-inset-bottom));
  text-align: center;
  color: rgba(255,255,255,.82);
  font-size: .9rem;
  line-height: 1.45;
}

.sound-fab {
  position: absolute;
  z-index: 15;
  right: max(16px, env(safe-area-inset-right));
  bottom: max(18px, env(safe-area-inset-bottom));
  border: 0;
  border-radius: 999px;
  padding: 12px 16px;
  font: inherit;
  font-weight: 850;
  background: rgba(0,0,0,.72);
  color: #fff;
  backdrop-filter: blur(8px);
  display: none;
}

.sound-fab.visible {
  display: block;
}

.scanner-error {
  position: absolute;
  z-index: 30;
  left: 18px;
  right: 18px;
  bottom: max(24px, env(safe-area-inset-bottom));
  padding: 12px 14px;
  border-radius: 12px;
  background: rgba(0,0,0,.78);
  color: #fff;
  text-align: center;
  font-size: .9rem;
  display: none;
}

.scanner-error.visible {
  display: block;
}

/* no client cards, titles, counters, recognition meter or guide box */
body.scanner-body .brand,
body.scanner-body .card,
body.scanner-body .guide,
body.scanner-body .match-pill,
body.scanner-body .toolbar,
body.scanner-body .meter,
body.scanner-body .status,
body.scanner-body .intro-card {
  display: none !important;
}
