*,:before,:after{box-sizing:border-box}body{background:#0d0d1a;margin:0}:root{--bg:#f0f4ff;--surface:#ffffffd9;--surface-2:#f8fafff2;--border:#00000012;--border-bright:#00000024;--text:#1a1a2e;--text-muted:#7a85a0;--clr-emg:#e53e3e;--clr-hr:#d63384;--clr-spo2:#07c;--clr-temp:#d97706;--clr-motion:#0891b2;--clr-risk-low:#16a34a;--clr-risk-med:#d97706;--clr-risk-hi:#dc2626;--clr-contraction:#dc2626;--clr-moving:#16a34a;--clr-accent:#6d28d9;--blur:blur(14px);--shadow-sm:0 1px 4px #00000014, 0 4px 16px #0000000f;--shadow-md:0 4px 20px #0000001a, 0 8px 32px #00000012}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:Segoe UI,system-ui,sans-serif;overflow-x:hidden}body:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(at 10% 15%,#6d28d91f 0%,#0000 50%),radial-gradient(at 90% 80%,#0077cc1f 0%,#0000 50%),radial-gradient(#dc262612 0%,#0000 55%),radial-gradient(at 25% 85%,#16a34a14 0%,#0000 45%);animation:18s ease-in-out infinite alternate bg-drift;position:fixed;inset:0}body:after{content:"";pointer-events:none;z-index:0;background-image:radial-gradient(#6d28d912 1px,#0000 1px);background-size:28px 28px;position:fixed;inset:0}@keyframes bg-drift{0%{opacity:1;transform:scale(1)translate(0)translateY(0)}50%{opacity:.85;transform:scale(1.06)translate(-2%)translateY(1.5%)}to{opacity:.95;transform:scale(1.03)translate(1.5%)translateY(-1%)}}.dashboard{z-index:1;max-width:1320px;margin:0 auto;padding:0 0 48px;position:relative}.dash-header{border-bottom:1px solid var(--border);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);z-index:100;background:#ffffffeb;justify-content:space-between;align-items:center;padding:18px 28px;display:flex;position:sticky;top:0;box-shadow:0 1px #0000000f,0 4px 20px #0000000f}.dash-header:after{content:"";background:linear-gradient(90deg, transparent, var(--clr-accent), var(--clr-spo2), transparent);opacity:.5;height:2px;position:absolute;bottom:0;left:0;right:0}.dash-title{align-items:center;gap:12px;display:flex}.dash-title-icon{background:linear-gradient(135deg, var(--clr-accent), #07c);border-radius:10px;justify-content:center;align-items:center;width:38px;height:38px;display:flex;box-shadow:0 4px 14px #6d28d959}.dash-title h1{letter-spacing:.01em;background:linear-gradient(90deg, #1a1a2e 0%, var(--clr-accent) 55%, #07c 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:1.2rem;font-weight:800}.dash-title p{color:var(--text-muted);letter-spacing:.1em;text-transform:uppercase;font-size:.68rem}.conn-badge{letter-spacing:.04em;border-radius:24px;align-items:center;gap:8px;padding:7px 14px;font-size:.78rem;font-weight:600;display:flex}.conn-dot{border-radius:50%;width:8px;height:8px}.conn-ok{color:#15803d;background:#16a34a1a;border:1px solid #16a34a66}.conn-ok .conn-dot{background:#16a34a;animation:2s ease-in-out infinite dot-blink;box-shadow:0 0 7px #16a34ab3}.conn-err{color:#dc2626;background:#dc262614;border:1px solid #dc262659}.conn-err .conn-dot{background:#dc2626;animation:.6s ease-in-out infinite dot-blink}@keyframes dot-blink{0%,to{opacity:1}50%{opacity:.3}}.global-alert{color:#b91c1c;text-align:center;letter-spacing:.05em;background:linear-gradient(90deg,#dc262614,#dc262626,#dc262614);border-bottom:1px solid #dc26264d;justify-content:center;align-items:center;gap:10px;padding:14px;font-size:.95rem;font-weight:700;animation:1.2s ease-in-out infinite global-pulse;display:flex}@keyframes global-pulse{0%,to{background:linear-gradient(90deg,#dc262612,#dc26261f,#dc262612)}50%{background:linear-gradient(90deg,#dc26261f,#dc262638,#dc26261f)}}.status-row{grid-template-columns:1fr 1fr;gap:16px;padding:20px 24px 4px;display:grid}.status-card{border:1px solid var(--border);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);box-shadow:var(--shadow-sm);background:var(--surface);border-radius:16px;align-items:center;gap:18px;padding:20px 24px;transition:transform .2s,box-shadow .2s;display:flex;position:relative;overflow:hidden}.status-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.status-card-contraction{background:#fff8f8f2;border-color:#dc262633}.status-card-contraction.active{background:#fff2f2f7;border-color:#dc26268c;animation:.9s ease-in-out infinite contraction-glow}@keyframes contraction-glow{0%,to{box-shadow:0 0 0 0 #dc262600, var(--shadow-sm)}50%{box-shadow:0 0 0 4px #dc262626,0 8px 32px #dc26262e}}.status-card-moving{background:#f8fffbf2;border-color:#16a34a2e}.status-card-moving.active{box-shadow:0 0 0 3px #16a34a1a, var(--shadow-sm);background:#f2fff8f7;border-color:#16a34a80}.status-icon-wrap{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:56px;height:56px;font-size:1.6rem;display:flex;position:relative}.status-icon-wrap-contraction{background:#dc262614;border:1.5px solid #dc262640}.status-card-contraction.active .status-icon-wrap-contraction{background:#dc262621;border-color:#dc262680;animation:.9s ease-in-out infinite icon-pulse}.status-icon-wrap-moving{background:#16a34a14;border:1.5px solid #16a34a40}.status-card-moving.active .status-icon-wrap-moving{background:#16a34a1f;border-color:#16a34a80}@keyframes icon-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.ripple-ring{border:2px solid var(--clr-moving);opacity:0;border-radius:50%;position:absolute;inset:-4px}.ripple-ring-1{animation:2s ease-out infinite ripple-expand}.ripple-ring-2{animation:2s ease-out .67s infinite ripple-expand}.ripple-ring-3{animation:2s ease-out 1.34s infinite ripple-expand}@keyframes ripple-expand{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(2.4)}}.status-info{flex:1}.status-label-text{text-transform:uppercase;letter-spacing:.12em;color:var(--text-muted);margin-bottom:4px;font-size:.68rem;font-weight:600}.status-state{letter-spacing:.02em;font-size:1.05rem;font-weight:800}.status-contraction-active{color:#dc2626}.status-contraction-inactive{color:#c4c9d8}.status-moving-active{color:#16a34a}.status-moving-inactive{color:#c4c9d8}.status-sub{color:var(--text-muted);margin-top:3px;font-size:.72rem}.status-pill{letter-spacing:.06em;text-transform:uppercase;border-radius:20px;flex-shrink:0;padding:4px 12px;font-size:.72rem;font-weight:700}.pill-contraction-on{color:#dc2626;background:#dc26261a;border:1px solid #dc262666}.pill-contraction-off{color:#c4c9d8;background:#0000000a;border:1px solid #0000001a}.pill-moving-on{color:#16a34a;background:#16a34a1a;border:1px solid #16a34a66}.pill-moving-off{color:#c4c9d8;background:#0000000a;border:1px solid #0000001a}.sensor-grid{grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:16px;padding:20px 24px;display:grid}.sensor-card{background:var(--surface);border:1px solid var(--border);text-align:center;-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);box-shadow:var(--shadow-sm);border-radius:16px;flex-direction:column;align-items:center;gap:6px;padding:20px 16px 16px;transition:transform .2s,box-shadow .2s;display:flex;position:relative;overflow:hidden}.sensor-card:hover{box-shadow:var(--shadow-md), 0 0 0 1px var(--border-bright);transform:translateY(-4px)}.sensor-card:before{content:"";background:var(--card-accent,#6d28d9);border-radius:16px 16px 0 0;height:3px;position:absolute;top:0;left:0;right:0}.sensor-card:after{content:"";background:linear-gradient(180deg, var(--card-accent-alpha,#6d28d90f), transparent);width:60%;height:40px;position:absolute;top:0;left:50%;transform:translate(-50%)}.sensor-card.pulsing{animation:.9s ease-in-out infinite card-pulse-light}@keyframes card-pulse-light{0%,to{box-shadow:var(--shadow-sm);border-color:#dc262633}50%{box-shadow:0 0 0 4px #dc26261a, var(--shadow-md);border-color:#dc262680}}.sensor-icon-wrap{z-index:1;border:1px solid var(--border);background:#0000000a;border-radius:12px;justify-content:center;align-items:center;width:40px;height:40px;margin-bottom:2px;font-size:1.3rem;display:flex;position:relative}.sensor-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;z-index:1;font-size:.68rem;font-weight:600;position:relative}.sensor-value{font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--card-accent,#6d28d9);z-index:1;font-size:1.9rem;font-weight:800;line-height:1;transition:color .3s;position:relative}.sensor-value.no-data{color:#d1d5db}.sensor-unit{color:var(--text-muted);letter-spacing:.04em;z-index:1;font-size:.72rem;position:relative}.risk-card{justify-content:center;gap:4px}.gauge-wrap{margin:2px 0}.risk-label{letter-spacing:.12em;text-transform:uppercase;font-size:.8rem;font-weight:800}.section-title{color:#64748b;letter-spacing:.1em;text-transform:uppercase;border-left:2px solid var(--clr-accent);align-items:center;gap:8px;margin-bottom:14px;padding-left:10px;font-size:.82rem;font-weight:700;display:flex}.chart-section{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:16px;margin:4px 24px;padding:20px 20px 16px}.no-data-msg{color:var(--text-muted);text-align:center;padding:48px 0;font-size:.9rem}.alerts-section{padding:20px 24px 0}.no-alerts{color:var(--text-muted);padding:14px 0;font-size:.85rem}.alert-list{flex-direction:column;gap:8px;list-style:none;display:flex}.alert-item{background:#fbbf240f;border:1px solid #d9770640;border-radius:10px;align-items:center;gap:12px;padding:11px 16px;font-size:.85rem;animation:.3s ease-out alert-slide-in;display:flex;box-shadow:0 1px 4px #0000000d}@keyframes alert-slide-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.alert-dot{background:#d97706;border-radius:50%;flex-shrink:0;width:8px;height:8px;box-shadow:0 0 6px #d9770680}.alert-time{color:var(--text-muted);white-space:nowrap;font-size:.75rem}.alert-msg{color:var(--text);flex:1}.dash-footer{text-align:center;color:var(--text-muted);border-top:1px solid var(--border);margin-top:28px;padding:18px;font-size:.72rem}code{color:var(--clr-accent);font-family:Consolas,monospace;font-size:.82em}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f0f4ff}::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--clr-accent)}
