:root{font-family:Inter,Segoe UI,sans-serif;color:#0f172a;background:#f8fafc}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%;width:100%}body{background:#f1f5f9}.app-layout{width:100%;max-width:560px;margin:0 auto;min-height:100vh;background:#fff;display:flex;flex-direction:column}.page{padding:16px}.card{background:#fff;border:1px solid #e2e8f0;border-radius:14px;padding:14px}.title{margin:0;font-size:22px;font-weight:700}.subtitle{margin:8px 0 0;color:#475569;font-size:14px;line-height:1.4}.button{width:100%;border:none;border-radius:12px;min-height:48px;padding:0 14px;font-size:16px;font-weight:600;cursor:pointer}.button:disabled{opacity:.55;cursor:not-allowed}.button-primary{background:#2563eb;color:#fff}.button-secondary{background:#0f172a;color:#fff}.button-muted{background:#e2e8f0;color:#0f172a}.stack{display:flex;flex-direction:column;gap:12px}.row{display:flex;align-items:center;justify-content:space-between}.badge{border-radius:999px;padding:4px 10px;font-size:12px;font-weight:600}.badge-online{background:#dcfce7;color:#15803d}.badge-offline{background:#fee2e2;color:#b91c1c}.stats-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat-value{margin:6px 0 0;font-size:28px;font-weight:700}.muted{color:#64748b;font-size:13px}.top-gap{margin-top:16px}.scanner-page{width:100%;min-height:100vh;background:#020617;color:#f8fafc;display:flex;flex-direction:column}.scanner-header{padding:12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #1e293b}.scanner-video-wrap{flex:1;display:grid;place-items:center;padding:16px}.scanner-video{width:100%;max-width:540px;border-radius:18px;border:2px solid #2563eb;background:#000}.scanner-status{padding:10px 16px 16px;color:#cbd5e1;font-size:14px;text-align:center}.modal-backdrop{position:fixed;inset:0;background:#02061799;display:grid;place-items:center;padding:14px;z-index:1000}.modal-card{width:100%;max-width:420px;background:#fff;border-radius:16px;padding:16px}.list{display:flex;flex-direction:column;gap:10px}.log-item{border:1px solid #dbeafe;border-radius:12px;padding:12px;background:#f8fbff}.status-success{color:#15803d}.status-error{color:#b91c1c}.status-pending{color:#b45309}.error-box{background:#fee2e2;border:1px solid #fecaca;color:#991b1b;border-radius:12px;padding:10px 12px;font-size:14px}
