*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--brand: #C00000;--brand-dark: #900000;--bg: #f4f4f5;--card: #ffffff;--text: #111827;--sub: #6b7280;--border: #e5e7eb;--radius: 12px;--nav-h: 64px}html,body,#root{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}.page{padding:16px 16px calc(var(--nav-h) + 16px);min-height:100vh}.page-header{margin-bottom:20px}.page-header h1{font-size:22px;font-weight:700;color:var(--brand)}.page-header p{font-size:13px;color:var(--sub);margin-top:2px}.refresh-badge{display:inline-block;margin-top:4px;font-size:11px;color:var(--sub);background:var(--border);padding:2px 8px;border-radius:20px}.app-header{position:fixed;top:0;left:0;right:0;height:52px;background:var(--brand);display:flex;align-items:center;justify-content:space-between;padding:0 16px;z-index:110;box-shadow:0 2px 8px #00000026}.app-header-logo{height:26px;width:auto;display:block;filter:brightness(0) invert(1)}.app-header-profile{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;border-radius:20px;transition:background .15s}.app-header-profile:hover{background:#ffffff26}.app-header-avatar{width:32px;height:32px;border-radius:50%;background:#ffffff40;color:#fff;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;border:2px solid rgba(255,255,255,.5)}.app-header-name{color:#fff;font-size:14px;font-weight:600}.app-header-chevron{color:#fffc;font-size:11px}.profile-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:120}.profile-menu{position:absolute;top:56px;right:12px;background:var(--card);border-radius:var(--radius);box-shadow:0 8px 32px #00000026;padding:16px;min-width:220px;z-index:130;border:1px solid var(--border)}.profile-menu-name{font-size:15px;font-weight:700;color:var(--text)}.profile-menu-role{font-size:12px;color:var(--brand);font-weight:600;margin-top:2px}.profile-menu-email{font-size:12px;color:var(--sub);margin-top:2px}.profile-menu-divider{border:none;border-top:1px solid var(--border);margin:12px 0}.profile-menu-logout{width:100%;padding:10px;background:#fef2f2;color:#dc2626;border:1px solid #fecaca;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.profile-menu-logout:hover{background:#fee2e2}.splash-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:#fff;display:flex;align-items:center;justify-content:center;opacity:1;transition:opacity .55s ease}.splash-out{opacity:0;pointer-events:none}.splash-logo{width:78%;max-width:300px;object-fit:contain}.install-banner{position:fixed;bottom:calc(var(--nav-h) + 8px);left:12px;right:12px;background:#1e293b;color:#fff;border-radius:12px;padding:14px 16px;display:flex;align-items:center;gap:12px;z-index:500;box-shadow:0 4px 20px #00000040;font-size:14px;font-weight:500}.install-banner span{flex:1}.install-banner-btn{padding:8px 18px;background:var(--brand);color:#fff;border:none;border-radius:8px;font-weight:700;font-size:14px;cursor:pointer;white-space:nowrap}.install-banner-close{background:none;border:none;color:#fff9;font-size:18px;cursor:pointer;padding:4px;line-height:1}.bottom-nav{position:fixed;bottom:0;left:0;right:0;height:var(--nav-h);display:flex;background:var(--card);border-top:1px solid var(--border);z-index:100;padding-bottom:env(safe-area-inset-bottom)}.nav-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-decoration:none;color:var(--sub);gap:3px;transition:color .15s}.nav-tab.active{color:var(--brand)}.nav-icon{font-size:22px}.nav-label{font-size:10px;font-weight:600;letter-spacing:.3px}.App-wrapper{width:100vw;height:100vh;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);display:flex;justify-content:center;align-items:center}.login-container{background:#ffffffd9;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:20px;box-shadow:0 10px 40px #0000001a;padding:48px;width:100%;max-width:420px;display:flex;flex-direction:column;align-items:center;border:1px solid rgba(255,255,255,.5);animation:fadeIn .5s ease-out forwards;margin:16px}.logo{width:220px;height:auto;margin-bottom:40px;object-fit:contain;filter:drop-shadow(0 2px 4px rgba(0,0,0,.1))}.login-form{width:100%}.input-group{margin-bottom:24px;width:100%}.input-group label{display:block;margin-bottom:8px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#666}.input-group input{width:100%;padding:14px 16px;border:1px solid rgba(0,0,0,.1);border-radius:10px;font-size:16px;background:#f0f2f5cc;transition:all .3s ease;color:#000;font-family:inherit}.input-group input:focus{outline:none;background:#fff;border-color:#c00000;box-shadow:0 0 0 3px #c000001a}.password-wrapper{position:relative;width:100%}.password-wrapper input{padding-right:48px}.password-toggle{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:0;color:#888;display:flex;align-items:center;transition:color .2s}.password-toggle:hover{color:#c00000}.login-button{width:100%;padding:16px;background:linear-gradient(135deg,#c00000,#a00000);color:#fff;border:none;border-radius:10px;font-size:16px;font-weight:600;cursor:pointer;transition:transform .2s,box-shadow .2s;margin-top:10px;box-shadow:0 4px 12px #c000004d}.login-button:hover{transform:translateY(-2px);box-shadow:0 6px 16px #c0000066}.login-button:disabled{opacity:.7;cursor:not-allowed;transform:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.install-form{display:flex;flex-direction:column;gap:16px}.field-group{display:flex;flex-direction:column;gap:6px}.field-group label{font-size:13px;font-weight:600;color:var(--text)}.field-row{display:flex;gap:12px}.flex1{flex:1}input[type=text],input[type=email],input[type=password],select,textarea{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:8px;font-size:15px;color:var(--text);background:var(--card);outline:none;transition:border-color .15s;-webkit-appearance:none}input:focus,select:focus{border-color:var(--brand)}.input-row{display:flex;gap:8px;align-items:stretch}.input-row input{flex:1}.pw-wrap{position:relative}.pw-wrap input{padding-right:44px}.pw-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:18px;padding:4px}.file-input{padding:10px;border:1.5px dashed var(--border);border-radius:8px;background:#fafafa;font-size:14px;cursor:pointer}.photo-preview{width:100%;max-height:180px;object-fit:cover;border-radius:8px;margin-top:4px}.btn-primary{padding:14px;background:var(--brand);color:#fff;border:none;border-radius:10px;font-size:16px;font-weight:700;cursor:pointer;transition:background .15s}.btn-primary:active{background:var(--brand-dark)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{padding:12px;background:transparent;color:var(--sub);border:1.5px solid var(--border);border-radius:10px;font-size:15px;font-weight:600;cursor:pointer;text-align:center}.btn-icon{padding:0 14px;background:var(--brand);color:#fff;border:none;border-radius:8px;font-size:20px;cursor:pointer;flex-shrink:0}.btn-submit{margin-top:8px}.sensor-activation-container{padding:20px 16px calc(var(--nav-h) + 20px);background-color:#f4f6f8;min-height:100vh}.page-header-container{margin-bottom:20px}.page-title-text{font-size:22px;font-weight:700;color:var(--brand);margin:0}.activation-toolbar{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:20px;background:#fff;padding:14px;border-radius:12px;box-shadow:0 2px 4px #0000000a;border:1px solid #e9ecef}.activation-search{flex:2;min-width:200px;padding:10px 14px;border:1px solid #e0e0e0;border-radius:8px;font-size:.9rem;color:#495057;background-color:#fcfcfc;transition:all .2s}.activation-search:focus{outline:none;border-color:var(--brand);background-color:#fff;box-shadow:0 0 0 3px #c000001a}.activation-filter{flex:1;min-width:130px;padding:10px 14px;border:1px solid #e0e0e0;border-radius:8px;font-size:.9rem;color:#495057;background-color:#fcfcfc;cursor:pointer}.activation-filter:focus{outline:none;border-color:var(--brand)}.sensors-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px}.sensor-card{background:#fff;border-radius:12px;box-shadow:0 4px 6px #0000000a;transition:all .3s ease;overflow:hidden;border:1px solid #e9ecef;display:flex;flex-direction:column}.sensor-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px #0000001a}.sensor-card-header{background:linear-gradient(135deg,#c00000,#a00000);padding:14px 18px;display:flex;justify-content:space-between;align-items:center;color:#fff}.sensor-id{font-family:Consolas,monospace;font-weight:700;font-size:.9rem;letter-spacing:.5px;background:#fff3;padding:2px 8px;border-radius:4px}.sensor-batch{font-size:.8rem;opacity:.9;font-weight:500}.sensor-card-body{padding:20px;flex-grow:1}.sensor-card-body h3{margin:0 0 14px;font-size:1.1rem;color:#2c3e50;font-weight:700;line-height:1.4}.sensor-location-wrapper{margin-bottom:16px;padding:10px 12px;background-color:#f8f9fa;border-radius:8px;border:1px solid #e9ecef;font-size:.85rem;color:#495057}.sensor-meta{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding-top:14px;border-top:1px solid #f1f3f5}.sensor-meta span{font-size:.82rem;color:#6c757d;display:flex;flex-direction:column;gap:3px}.sensor-meta span:before{content:attr(data-label);font-size:.68rem;text-transform:uppercase;font-weight:700;color:#adb5bd;letter-spacing:.5px}.sensor-card-footer{padding:14px;background-color:#fcfcfc;border-top:1px solid #e9ecef;display:flex;flex-direction:column;gap:8px}.activate-btn{width:100%;padding:11px;background-color:#28a745;color:#fff;border:none;border-radius:8px;font-weight:600;font-size:.95rem;cursor:pointer;transition:all .2s;box-shadow:0 2px 4px #28a74533}.activate-btn:hover:not(:disabled){background-color:#218838;transform:translateY(-1px)}.activate-btn:disabled{background-color:#e9ecef;color:#adb5bd;cursor:not-allowed}.delete-btn{width:100%;padding:11px;background-color:#ef4444;color:#fff;border:none;border-radius:8px;font-weight:600;font-size:.95rem;cursor:pointer;transition:background-color .2s}.delete-btn:hover:not(:disabled){background-color:#dc2626}.no-sensors{grid-column:1 / -1;text-align:center;padding:60px 24px;background:#fff;border-radius:12px;border:2px dashed #dee2e6}.install-card{background:#fff;border-radius:12px;padding:20px;box-shadow:0 4px 6px #0000000a;border:1px solid #e9ecef}.modal-overlay-center{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;padding:16px}.activation-modal{background:#fff;border-radius:12px;width:100%;max-width:480px;box-shadow:0 4px 20px #00000026;display:flex;flex-direction:column;overflow:hidden;animation:slideIn .25s ease-out}@keyframes slideIn{0%{transform:translateY(-16px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{padding:16px 20px;border-bottom:1px solid #e9ecef;display:flex;justify-content:space-between;align-items:center}.modal-header h3{margin:0;color:#c00000;font-size:1.1rem}.modal-body{padding:20px;color:#495057}.modal-body p{margin:0 0 8px}.modal-footer{padding:14px 20px;border-top:1px solid #e9ecef;display:flex;justify-content:flex-end;gap:10px;background:#f8f9fa}.sensor-summary{background:#f8f9fa;padding:12px;border-radius:6px;margin:12px 0;font-size:.9rem;border:1px solid #e9ecef}.summary-row{margin-bottom:4px}.confirmation-checkbox-wrapper{margin-top:16px;padding:10px;background:#fff3bf;border:1px solid #ffec99;border-radius:6px}.checkbox-label{display:flex;align-items:flex-start;gap:10px;cursor:pointer}.checkbox-label input{margin-top:3px;width:16px;height:16px;cursor:pointer;flex-shrink:0}.checkbox-text{font-weight:500;color:#856404;font-size:.88rem}.cancel-btn{padding:8px 16px;background:#fff;border:1px solid #ced4da;border-radius:6px;color:#495057;cursor:pointer;font-weight:500}.cancel-btn:hover{background:#f1f3f5}.confirm-activate-btn{padding:8px 16px;background:#28a745;color:#fff;border:none;border-radius:6px;font-weight:600;cursor:pointer;transition:all .2s}.confirm-activate-btn:hover:not(:disabled){background:#218838;transform:translateY(-1px)}.confirm-activate-btn:disabled{background:#adb5bd;cursor:not-allowed;opacity:.7}.card-list,.monitor-list{display:flex;flex-direction:column;gap:12px}.monitor-card{background:var(--card);border-radius:var(--radius);padding:16px;border:1px solid var(--border);box-shadow:0 1px 4px #0000000f}.monitor-card.alerting{border-color:#ef4444;background:#fff8f8}.monitor-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.monitor-desc{font-size:15px;font-weight:700}.monitor-id{font-family:monospace;font-size:11px;color:var(--sub);margin-top:2px}.status-pill{padding:3px 10px;border-radius:20px;color:#fff;font-size:11px;font-weight:700;white-space:nowrap}.monitor-stats{display:flex;gap:0;border-top:1px solid var(--border);padding-top:12px}.stat{flex:1;display:flex;flex-direction:column;gap:3px;padding:0 4px}.stat:not(:last-child){border-right:1px solid var(--border)}.stat-label{font-size:10px;color:var(--sub);font-weight:600;text-transform:uppercase}.stat-value{font-size:13px;font-weight:700}.alert-banner{display:block;width:100%;margin-top:12px;background:#ef4444;color:#fff;text-align:center;padding:8px 12px;border-radius:8px;font-weight:700;font-size:13px;border:none;cursor:pointer;animation:pulse 1.2s infinite}.alert-banner:active{opacity:.85}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}.search-bar{width:100%;margin-bottom:16px}.loading-state,.empty-state{text-align:center;padding:60px 24px;color:var(--sub);font-size:15px;line-height:1.8}.empty-state{font-size:18px}.empty-state small{font-size:13px;color:var(--sub)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:flex-end;justify-content:center;z-index:200;padding:0}.qr-modal{background:var(--card);width:100%;border-radius:var(--radius) var(--radius) 0 0;padding:20px 20px 40px;max-height:90vh;overflow-y:auto}.qr-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.qr-header h3{font-size:18px;font-weight:700}.close-btn{background:none;border:none;font-size:22px;cursor:pointer;color:var(--sub);padding:4px}.qr-hint{font-size:13px;color:var(--sub);margin-bottom:16px}.qr-error{color:#ef4444;font-size:13px;margin-top:12px;text-align:center}.confirm-modal{background:var(--card);border-radius:var(--radius) var(--radius) 0 0;padding:24px 20px 40px;width:100%;text-align:center}.confirm-modal h3{font-size:18px;font-weight:700;margin-bottom:12px}.confirm-modal p{font-size:15px}.confirm-sub{font-size:13px;color:var(--sub);margin-top:4px}.confirm-actions{display:flex;gap:12px;margin-top:20px}.confirm-actions .btn-ghost,.confirm-actions .btn-primary{flex:1}.toast{position:fixed;bottom:calc(var(--nav-h) + 12px);left:16px;right:16px;padding:14px 18px;border-radius:10px;font-size:14px;font-weight:600;text-align:center;z-index:300;animation:slideUp .2s ease;color:#fff}.toast.success{background:#16a34a}.toast.error{background:#dc2626}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.addsensors{width:100%;min-height:100vh;background-color:#f4f6f8;padding-bottom:calc(var(--nav-h) + 16px);padding-top:0}.add-sensor-container{max-width:800px;margin:20px auto;padding:24px;background-color:#e5e5e5;border-radius:12px;box-shadow:0 4px 20px #0000001a}.sensor-form{display:flex;flex-direction:column;gap:20px}.form-group{display:flex;flex-direction:column}.form-group label{font-size:14px;font-weight:500;color:#333;margin-bottom:8px}.form-group input,.form-group select{padding:12px 15px;border:1px solid #ddd;border-radius:6px;font-size:16px;font-family:inherit;background:#fff;transition:border-color .3s}.form-group input:focus,.form-group select:focus{outline:none;border-color:#c00000}.form-group input:disabled,.form-group select:disabled{background-color:#f0f0f0;color:#888;cursor:not-allowed}.tab-container{display:flex;gap:0;margin-bottom:24px;border-bottom:2px solid #ddd}.tab-button{flex:1;padding:14px 30px;background:transparent;color:#666;border:none;border-bottom:3px solid transparent;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s;margin-bottom:-2px}.tab-button:hover{background:#f5f5f5;color:#333}.tab-button.active{color:#c00000;border-bottom-color:#c00000;background:#fff5f5}.button-row{display:flex;gap:10px}.qr-scan-btn,.edit-btn{flex:1;padding:14px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:16px;font-weight:600;cursor:pointer;transition:background-color .3s;display:flex;align-items:center;justify-content:center;gap:8px}.qr-scan-btn:hover,.edit-btn:hover{background-color:#900}.qr-scan-btn:disabled,.edit-btn:disabled{background:#ccc;color:#666;cursor:not-allowed}.location-input-wrapper{display:flex;gap:10px;align-items:center}.location-input-wrapper input{flex:1;cursor:pointer}.location-btn{padding:12px 16px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:20px;cursor:pointer;min-width:50px;display:flex;align-items:center;justify-content:center}.location-btn:hover{background-color:#900}.location-btn:disabled{background:#ccc;cursor:not-allowed}.photo-capture-section{display:flex;flex-direction:column;align-items:center;padding:28px;border:2px dashed #ddd;border-radius:8px;background:#f9f9f9}.camera-btn{padding:14px 24px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:16px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px}.camera-btn:hover{background-color:#900}.photo-preview-section{display:flex;flex-direction:column;gap:12px}.photo-preview{width:100%;max-height:300px;object-fit:contain;border-radius:8px;border:2px solid #ddd;background:#f5f5f5}.photo-actions{display:flex;gap:10px}.retake-btn,.remove-btn{flex:1;padding:12px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:15px;font-weight:600;cursor:pointer;transition:background-color .3s}.retake-btn:hover,.remove-btn:hover{background-color:#900}.confirm-batch-btn{width:100%;padding:14px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:16px;font-weight:600;cursor:pointer;transition:background-color .3s;display:flex;align-items:center;justify-content:center}.confirm-batch-btn:hover{background-color:#900}.batch-queue-container{border:1px solid #e2e8f0;border-radius:8px;max-height:250px;overflow-y:auto;background:#f8fafc}.batch-queue-item{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid #e2e8f0;transition:background .2s}.batch-queue-item:hover{background:#f1f5f9}.queue-item-info{flex:1;cursor:pointer;display:flex;gap:10px;align-items:center}.queue-index{font-weight:700;color:#64748b}.queue-id{font-weight:600;color:#1e293b;font-family:monospace;font-size:13px}.queue-desc{color:#64748b;font-size:.88rem}.queue-delete-btn{background:#c00000;border:none;font-size:1rem;cursor:pointer;padding:6px 10px;border-radius:6px;color:#fff;transition:all .2s}.queue-delete-btn:hover{background-color:#900;transform:scale(1.05)}.empty-queue-msg{padding:20px;text-align:center;color:#94a3b8;font-style:italic}.form-submit-row{display:flex;gap:10px;margin-top:4px}.next-sensor-btn{flex:1;padding:14px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:16px;font-weight:600;cursor:pointer;transition:background-color .3s}.next-sensor-btn:hover{background-color:#900}.next-sensor-btn:disabled{background:#ccc;color:#666;cursor:not-allowed}.submit-sensor-btn{flex:1;padding:14px;background-color:#c00000;color:#fff;border:none;border-radius:6px;font-size:16px;font-weight:600;cursor:pointer;transition:background-color .3s}.submit-sensor-btn:hover{background-color:#900}.submit-sensor-btn:disabled{background:#ccc;color:#666;cursor:not-allowed}
