{"id":2844,"date":"2026-03-29T14:06:32","date_gmt":"2026-03-29T14:06:32","guid":{"rendered":"https:\/\/biopharma-logistics.com\/?page_id=2844"},"modified":"2026-04-19T18:54:16","modified_gmt":"2026-04-19T18:54:16","slug":"technology","status":"publish","type":"page","link":"https:\/\/biopharma-logistics.com\/de\/about-us\/technology\/","title":{"rendered":"Technology"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2844\" class=\"elementor elementor-2844\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-73f57a7c elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"73f57a7c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-171533a1\" data-id=\"171533a1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-761a535b elementor-widget elementor-widget-html\" data-id=\"761a535b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>@import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap');:root{--brand:#0284C7;--brand-mid:#0EA5E9;--signal:#00E5A0;--bg-hero:#0A1628;--bg-sec:#0D1F3C;--bg-card:#112649;--text-lo:#8B949E;--border:rgba(255,255,255,0.08);}*{box-sizing:border-box;}body,.elementor-widget-html *:not(i){font-family:'Montserrat',sans-serif;}body{color:#fff;}.bp-hero{padding:200px 48px 80px;background:var(--bg-hero);background-image:radial-gradient(ellipse 80% 60% at 50% -10%,rgba(2,132,199,0.12) 0%,transparent 70%);}.bp-sec-d{padding:100px 48px;background:var(--bg-sec);}.bp-sec-n{padding:100px 48px;background:var(--bg-hero);}.bp-sec-cta{padding:120px 48px;background:var(--bg-sec);}.bp-in{max-width:1152px;margin:0 auto;}.bp-lbl{font-size:11px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--brand-mid);display:block;margin-bottom:16px;}.bp-h1{font-size:clamp(2.5rem,5vw,4.5rem);font-weight:900;line-height:1.1;letter-spacing:-.03em;}.bp-h2{font-size:clamp(2rem,4vw,3.2rem);font-weight:900;line-height:1.15;letter-spacing:-.03em;}.bp-h2-sm{font-size:clamp(2rem,3.5vw,3rem);font-weight:900;line-height:1.15;letter-spacing:-.03em;}.bp-h3{font-size:20px;font-weight:700;}.bp-lead{font-size:18px;color:var(--text-lo);line-height:1.7;max-width:560px;margin-top:24px;}.bp-text{font-size:15px;color:var(--text-lo);line-height:1.7;}.bp-card{background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:32px;}.bp-g2{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start;}.bp-g3{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;}.bp-g6{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}.bp-btn-p{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;background:var(--brand);color:#07111F;font-weight:700;font-size:15px;border-radius:6px;text-decoration:none;transition:opacity .2s;}.bp-btn-p:hover{opacity:.88;}.bp-icon-sm{width:40px;height:40px;border-radius:8px;background:rgba(2,132,199,.1);display:flex;align-items:center;justify-content:center;color:var(--brand);font-size:18px;flex-shrink:0;}.bp-cta{position:relative;padding:80px;background:var(--bg-card);border:1px solid var(--border);border-radius:20px;overflow:hidden;text-align:center;}.bp-cta::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 60% at 50% 100%,rgba(0,212,255,.08) 0%,transparent 70%);pointer-events:none;}@media(max-width:768px){.bp-hero,.bp-sec-d,.bp-sec-n,.bp-sec-cta{padding:64px 24px;}.bp-g2,.bp-g3,.bp-g6{grid-template-columns:1fr;}.bp-cta{padding:48px 24px;}}<\/style>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6c5ac8dd elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"6c5ac8dd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3c3b450f\" data-id=\"3c3b450f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6b64e32e elementor-widget elementor-widget-html\" data-id=\"6b64e32e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-hero'><div class='bp-in'><span class='bp-lbl'>Technology &amp; Monitoring<\/span><h1 class='bp-h1'>Cold chain integrity through real-time technology<\/h1><p class='bp-lead'>From sensor to dashboard &mdash; our pharma technology captures every data point in your shipment&apos;s journey, analysed and documented. No gaps, no guesswork.<\/p><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-82831ff elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"82831ff\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-10126d2e\" data-id=\"10126d2e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4f990bf4 elementor-widget elementor-widget-html\" data-id=\"4f990bf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-d'><div class='bp-in'><div class='bp-g2'>\n\n<div>\n  <span class='bp-lbl'>Temperature Management<\/span>\n  <h2 class='bp-h2-sm'>Five temperature zones, one monitoring standard<\/h2>\n  <p class='bp-text' style='margin-top:16px;margin-bottom:24px;'>Pharmaceutical products span a thermal spectrum from controlled room temperature to cryogenic storage below -150\u00b0C. Each zone demands specific packaging, monitoring equipment, and handling protocols.<\/p>\n  <div style='padding:16px;background:rgba(2,132,199,.06);border:1px solid rgba(2,132,199,.15);border-radius:8px;'>\n    <p style='font-size:12px;color:#8B949E;'><strong style='color:#fff;'>Every zone is GDP-qualified.<\/strong> Packaging is validated against specific route profiles, accounting for seasonal variation and transit duration.<\/p>\n  <\/div>\n<\/div>\n\n<div id='temp-accordion'><\/div>\n\n<\/div><\/div><\/section>\n\n<style>\n.tz-btn{font-family:'Montserrat',sans-serif;cursor:pointer;border-radius:12px;padding:12px 16px;font-size:0.75rem;font-weight:600;transition:background 0.2s,border-color 0.2s;display:flex;align-items:center;gap:10px;border-width:1px;border-style:solid;text-align:left;width:100%;margin-bottom:0;}\n.tz-panel{border-radius:0 0 12px 12px;padding:20px;transition:background 0.25s,border-color 0.25s;border:1px solid transparent;border-top:none;margin-bottom:0;}\n.tz-item{margin-bottom:8px;}\n.tz-item.open .tz-btn{border-radius:12px 12px 0 0;border-bottom-color:transparent !important;}\n.tz-label{font-size:10px;font-weight:700;letter-spacing:0.12em;text-transform:uppercase;margin:0 0 6px;}\n.tz-block{background:rgba(255,255,255,0.03);border:1px solid rgba(255,255,255,0.06);border-radius:10px;padding:14px;margin-bottom:0;}\n.tz-block p{font-size:0.85rem;color:#fff;line-height:1.6;margin:0;}\n<\/style>\n\n<script>\n(function(){\n  var zones=[\n    {label:'Controlled Room Temp.',color:'#D97706',rgb:'217,119,6',\n     range:'+15\u00b0C to +25\u00b0C',\n     products:'Tablets, capsules, medical devices',\n     packaging:'Insulated shippers, PCM packs',\n     monitoring:'Ambient data logger, min\/max thermometer'},\n    {label:'Cold Chain',color:'#0284C7',rgb:'2,132,199',\n     range:'+2\u00b0C to +8\u00b0C',\n     products:'Vaccines, insulin, biologics',\n     packaging:'Qualified cold boxes, gel packs',\n     monitoring:'Continuous temperature logger, GDP-compliant'},\n    {label:'Frozen',color:'#0EA5E9',rgb:'14,165,233',\n     range:'\u221225\u00b0C to \u221215\u00b0C',\n     products:'Plasma, enzyme preparations',\n     packaging:'Dry ice containers, validated shippers',\n     monitoring:'Multi-use data logger with alarm threshold'},\n    {label:'Ultra-Cold',color:'#38BDF8',rgb:'56,189,248',\n     range:'\u221280\u00b0C to \u221270\u00b0C',\n     products:'mRNA vaccines, cell therapies',\n     packaging:'Dry ice shippers, validated hold time',\n     monitoring:'Real-time IoT sensor, excursion alert'},\n    {label:'Cryogenic',color:'#9333EA',rgb:'147,51,234',\n     range:'Below \u2212150\u00b0C',\n     products:'Cell & gene therapies, tissue',\n     packaging:'Liquid nitrogen dewars (LN\u2082)',\n     monitoring:'Continuous LN\u2082 level & temp monitoring'}\n  ];\n\n  var active=null;\n  var wrap=document.getElementById('temp-accordion');\n\n  function render(){\n    wrap.innerHTML='';\n    zones.forEach(function(z,i){\n      var isOpen=(active===i);\n      var item=document.createElement('div');\n      item.className='tz-item'+(isOpen?' open':'');\n\n      var btn=document.createElement('button');\n      btn.className='tz-btn';\n      btn.style.background=isOpen?'rgba('+z.rgb+',0.10)':'#112649';\n      btn.style.borderColor=isOpen?'rgba('+z.rgb+',0.40)':'rgba(255,255,255,0.07)';\n      btn.innerHTML=\n        '<span style=\"width:8px;height:8px;border-radius:50%;flex-shrink:0;background:'+(isOpen?z.color:'rgba(255,255,255,0.18)')+'\"><\/span>'\n        +'<div style=\"flex:1;\">'\n          +'<div style=\"font-size:0.75rem;font-weight:600;line-height:1.2;color:'+(isOpen?z.color:'#F0F6FC')+';\">'+z.label+'<\/div>'\n          +'<div style=\"font-size:0.69rem;color:#8B949E;margin-top:2px;\">'+z.range+'<\/div>'\n        +'<\/div>'\n        +'<span style=\"font-size:0.65rem;color:'+(isOpen?z.color:'rgba(255,255,255,0.3)')+';\">'+(isOpen?'\u25b2':'\u25bc')+'<\/span>';\n      btn.onclick=function(){active=(isOpen?null:i);render();};\n      item.appendChild(btn);\n\n      if(isOpen){\n        var panel=document.createElement('div');\n        panel.className='tz-panel';\n        panel.style.background='rgba('+z.rgb+',0.05)';\n        panel.style.borderColor='rgba('+z.rgb+',0.40)';\n        panel.innerHTML=\n          '<div style=\"margin-bottom:14px;\">'\n            +'<div style=\"font-weight:800;font-size:1.3rem;color:'+z.color+';margin-bottom:4px;\">'+z.range+'<\/div>'\n            +'<div style=\"font-size:0.8rem;color:#8B949E;\">'+z.label+'<\/div>'\n          +'<\/div>'\n          +'<div style=\"display:grid;grid-template-columns:1fr;gap:10px;\">'\n            +block(z,'Typical Products',z.products)\n            +block(z,'Packaging Approach',z.packaging)\n            +block(z,'Monitoring',z.monitoring)\n          +'<\/div>';\n        item.appendChild(panel);\n      }\n\n      wrap.appendChild(item);\n    });\n  }\n\n  function block(z,title,text){\n    return '<div class=\"tz-block\">'\n      +'<p class=\"tz-label\" style=\"color:'+z.color+';\">'+title+'<\/p>'\n      +'<p>'+text+'<\/p>'\n      +'<\/div>';\n  }\n\n  render();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2d053949 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"2d053949\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-22682cb9\" data-id=\"22682cb9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ddc3377 elementor-widget elementor-widget-html\" data-id=\"ddc3377\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-n'><div class='bp-in'><div style='text-align:center;margin-bottom:64px;'><span class='bp-lbl'>End-to-End Visibility<\/span><h2 class='bp-h2'>From collection to delivery &mdash; every step monitored<\/h2><p class='bp-text' style='max-width:520px;margin:16px auto 0;text-align:center;'>Temperature logging begins the moment we take custody of your product and continues uninterrupted until final handover.<\/p><\/div><div style='display:grid;grid-template-columns:repeat(5,1fr);gap:0;position:relative;'><div style='position:absolute;top:28px;left:10%;right:10%;height:2px;background:linear-gradient(90deg,#0284C7,#00E5A0);z-index:0;'><\/div><div style='text-align:center;position:relative;z-index:1;padding:0 8px;'><div style='width:56px;height:56px;border-radius:50%;background:var(--brand);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-weight:900;font-size:18px;color:#07111F;box-shadow:0 0 24px rgba(2,132,199,0.4);'>1<\/div><div style='font-weight:700;font-size:13px;margin-bottom:6px;'>Collection<\/div><p style='font-size:11px;color:var(--text-lo);line-height:1.5;'>Pickup from client facility; packaging checked and sealed<\/p><\/div><div style='text-align:center;position:relative;z-index:1;padding:0 8px;'><div style='width:56px;height:56px;border-radius:50%;background:var(--brand);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-weight:900;font-size:18px;color:#07111F;box-shadow:0 0 24px rgba(2,132,199,0.4);'>2<\/div><div style='font-weight:700;font-size:13px;margin-bottom:6px;'>Logging Start<\/div><p style='font-size:11px;color:var(--text-lo);line-height:1.5;'>Data logger activated; temperature baseline recorded<\/p><\/div><div style='text-align:center;position:relative;z-index:1;padding:0 8px;'><div style='width:56px;height:56px;border-radius:50%;background:var(--brand);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-weight:900;font-size:18px;color:#07111F;box-shadow:0 0 24px rgba(2,132,199,0.4);'>3<\/div><div style='font-weight:700;font-size:13px;margin-bottom:6px;'>In Transit<\/div><p style='font-size:11px;color:var(--text-lo);line-height:1.5;'>GPS tracking; continuous monitoring; alerts active<\/p><\/div><div style='text-align:center;position:relative;z-index:1;padding:0 8px;'><div style='width:56px;height:56px;border-radius:50%;background:var(--brand);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-weight:900;font-size:18px;color:#07111F;box-shadow:0 0 24px rgba(2,132,199,0.4);'>4<\/div><div style='font-weight:700;font-size:13px;margin-bottom:6px;'>Delivery<\/div><p style='font-size:11px;color:var(--text-lo);line-height:1.5;'>Temperature verified at handover; digital signature captured<\/p><\/div><div style='text-align:center;position:relative;z-index:1;padding:0 8px;'><div style='width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,#0284C7,#00E5A0);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-weight:900;font-size:18px;color:#07111F;box-shadow:0 0 24px rgba(0,229,160,0.3);'>5<\/div><div style='font-weight:700;font-size:13px;margin-bottom:6px;'>Documentation<\/div><p style='font-size:11px;color:var(--text-lo);line-height:1.5;'>Audit-ready packet compiled and delivered with shipment<\/p><\/div><\/div><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3a56cfae elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"3a56cfae\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-66c9b66c\" data-id=\"66c9b66c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-33597f44 elementor-widget elementor-widget-html\" data-id=\"33597f44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-d'><div class='bp-in'>\n<div style='text-align:center;margin-bottom:64px;'>\n  <span class='bp-lbl'>Control Tower<\/span>\n  <h2 class='bp-h2'>Real-time shipment intelligence<\/h2>\n  <p class='bp-text' style='max-width:520px;margin:16px auto 0;'>Track every shipment across its full journey \u2014 temperature, route, and compliance events in one view, filterable by time range.<\/p>\n<\/div>\n\n<div id='dm-wrap' style='background:#0A1628;border:1px solid rgba(255,255,255,0.08);border-radius:16px;overflow:hidden;'>\n\n  <div style='display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding:12px 20px;background:#112649;border-bottom:1px solid rgba(255,255,255,0.06);'>\n    <div style='display:flex;align-items:center;gap:16px;'>\n      <div style='display:flex;align-items:center;gap:8px;'>\n        <span style='width:8px;height:8px;border-radius:50%;background:#00E5A0;display:inline-block;box-shadow:0 0 8px #00E5A0;'><\/span>\n        <span style='font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#00E5A0;'>Live Monitoring<\/span>\n      <\/div>\n      <div id='dm-tabs' style='display:flex;gap:4px;flex-wrap:wrap;'><\/div>\n    <\/div>\n    <div style='display:flex;align-items:center;gap:12px;font-size:10px;color:#8B949E;'>\n      <span><i class='fas fa-wifi' style='font-size:9px;margin-right:4px;'><\/i>Connected<\/span>\n      <span><i class='fas fa-clock' style='font-size:9px;margin-right:4px;'><\/i><span id='dm-clock'>--:--:--<\/span><\/span>\n    <\/div>\n  <\/div>\n\n  <div style='display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 20px;background:#0D1829;border-bottom:1px solid rgba(255,255,255,0.06);'>\n    <span style='font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#8B949E;flex-shrink:0;'>Time Range<\/span>\n    <div id='dm-range' style='display:flex;gap:4px;flex-wrap:wrap;'><\/div>\n    <div id='dm-range-hint' style='margin-left:auto;font-size:10px;color:#8B949E;'><\/div>\n  <\/div>\n\n  <div style='padding:20px 24px;border-bottom:1px solid rgba(255,255,255,0.06);'>\n    <div style='display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px;'>\n      <div>\n        <div style='font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#8B949E;margin-bottom:6px;'>Temperature (\u00b0C)<\/div>\n        <div style='display:flex;align-items:baseline;gap:8px;'>\n          <span id='dm-temp-val' style='font-weight:900;font-size:2rem;color:#fff;'>--<\/span>\n          <span id='dm-temp-badge' style='font-size:9px;font-weight:700;padding:2px 8px;border-radius:20px;'><\/span>\n        <\/div>\n        <div id='dm-temp-range' style='font-size:10px;color:#8B949E;margin-top:2px;'><\/div>\n      <\/div>\n    <\/div>\n    <div id='dm-chart'><\/div>\n    <div id='dm-alerts' style='display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;'><\/div>\n  <div id='dm-live-alert' style='display:none;margin-top:8px;padding:10px 14px;border-radius:8px;font-size:12px;font-weight:700;border:1px solid;letter-spacing:0.01em;font-family:Montserrat,sans-serif;'><\/div>\n  <div id='dm-exc-log' style='display:none;margin-top:8px;'><\/div>\n  <\/div>\n\n  <div id='dm-panels' style='padding:20px;display:grid;grid-template-columns:1fr 1fr;gap:16px;'><\/div>\n\n<\/div>\n<\/div><\/section>\n\n<style>\n#dm-tabs button,#dm-range button{font-family:'Montserrat',sans-serif;cursor:pointer;padding:4px 10px;border-radius:6px;font-size:10px;font-weight:600;border:1px solid transparent;transition:all .2s;}\n.dm-card{padding:20px;background:#112649;border:1px solid rgba(255,255,255,0.06);border-radius:10px;}\n.dm-card-lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#8B949E;margin-bottom:12px;display:flex;align-items:center;gap:6px;}\n.dm-status-row{display:flex;align-items:center;justify-content:space-between;padding:6px 0;border-bottom:1px solid rgba(255,255,255,0.04);}\n.dm-event{display:flex;gap:8px;align-items:flex-start;font-size:10px;margin-bottom:8px;line-height:1.4;}\n.dm-event-time{color:rgba(139,148,158,.7);flex-shrink:0;min-width:54px;}\n@media(max-width:767px){#dm-panels{grid-template-columns:1fr !important;}}\n<\/style>\n\n<script>\n(function(){\nvar S=[\n  {id:'BP-2024-091',tMin:2,tMax:8,tBase:3.9,color:'#0284C7',rgb:'2,132,199',\n   route:['DUS','FRA','JFK'],leg:1,prog:67,loc:'Frankfurt Airport (FRA)',sub:'Cargo City South, Gate C4',eta:'16:45',\n   status:[{l:'GDP Compliance',v:'Verified',ok:true},{l:'Temperature',v:'In range',ok:true},{l:'Documents',v:'Complete',ok:true},{l:'Customs',v:'Cleared',ok:true}],\n   events:[\n     {m:0,   txt:'Temperature 3.9\u00b0C \u2014 within spec'},\n     {m:17,  txt:'Temperature check at FRA cargo gate'},\n     {m:75,  txt:'Customs clearance at FRA complete'},\n     {m:240, txt:'GDP data logger synced \u2014 all readings nominal'},\n     {m:480, txt:'Departed DUS \u2014 unit sealed and scanned'},\n     {m:840, txt:'Cold chain handover confirmed at DUS cold storage'},\n     {m:1440,txt:'Pre-shipment temp verification: 3.8\u00b0C'},\n     {m:2880,txt:'Packaging validated \u2014 qualified cold box selected'},\n     {m:4200,txt:'Booking confirmed \u2014 BP-2024-091 created'}\n   ]},\n  {id:'BP-2024-092',tMin:-25,tMax:-15,tBase:-19.5,color:'#0EA5E9',rgb:'14,165,233',\n   route:['DUS','AMS','SIN'],leg:0,prog:23,loc:'Amsterdam Schiphol (AMS)',sub:'Air Cargo Terminal, Bay 7',eta:'Tomorrow 09:20',\n   status:[{l:'GDP Compliance',v:'Verified',ok:true},{l:'Temperature',v:'In range',ok:true},{l:'Documents',v:'Complete',ok:true},{l:'Customs',v:'Pending',ok:false}],\n   events:[\n     {m:0,   txt:'Temperature -19.8\u00b0C \u2014 within spec'},\n     {m:8,   txt:'Awaiting customs clearance at AMS'},\n     {m:90,  txt:'Arrived AMS \u2014 transfer to bonded area'},\n     {m:165, txt:'Dry ice replenished \u2014 -19.8\u00b0C confirmed'},\n     {m:450, txt:'Departed DUS \u2014 cargo sealed'},\n     {m:720, txt:'GDP logger armed \u2014 5-min interval'},\n     {m:1200,txt:'Pre-shipment inspection: -19.5\u00b0C \u2714'},\n     {m:2520,txt:'Dry ice quantity validated for SIN route'},\n     {m:4000,txt:'Booking confirmed \u2014 BP-2024-092 created'}\n   ]},\n  {id:'BP-2024-093',tMin:15,tMax:25,tBase:20.5,color:'#D97706',rgb:'217,119,6',\n   route:['DUS','CDG','GRU'],leg:2,prog:89,loc:'S\u00e3o Paulo (GRU)',sub:'Import Terminal, Bay 12',eta:'16:10 \u2014 final delivery',\n   status:[{l:'GDP Compliance',v:'Verified',ok:true},{l:'Temperature',v:'In range',ok:true},{l:'Documents',v:'Complete',ok:true},{l:'Customs',v:'Cleared',ok:true}],\n   events:[\n     {m:0,   txt:'Customs cleared GRU \u2014 arranging final delivery'},\n     {m:84,  txt:'Landed GRU \u2014 transfer to ground crew'},\n     {m:240, txt:'In-flight temperature check: 20.3\u00b0C'},\n     {m:480, txt:'Departed CDG \u2014 all GDP checks passed'},\n     {m:960, txt:'Arrived CDG \u2014 transshipment gate B7'},\n     {m:1440,txt:'Departed DUS \u2014 20.1\u00b0C confirmed'},\n     {m:2160,txt:'Pre-departure inspection complete'},\n     {m:3600,txt:'Packaging validated \u2014 insulated shipper'},\n     {m:4320,txt:'Booking confirmed \u2014 BP-2024-093 created'}\n   ]}\n];\n\nfunction lcg(seed){var s=Math.abs(seed)%2147483646+1;return function(){s=s*16807%2147483647;return(s-1)\/2147483646;};}\n\n\/\/ Historical humps: bp-092 dev@55, exc@105, dev@195; bp-093 dev@65, exc@125, dev@205\n\/\/ Live anomaly: wait(50-100t)\u2192rise(16t sine)\u2192hold(8-20t)\u2192return(16t sine); 092 dir=+1, 093 dir=-1\nfunction buildData(){\n  var HUMPS=[\n    [],\n    [\n      {start:80,delta:1.5,rise:1,hold:0,fall:4,type:'dev'}\n    ],\n    [\n      {start:80,delta:-1.5,rise:1,hold:0,fall:4,type:'dev'},\n      {start:140,delta:-7.5,rise:8,hold:2,fall:20,type:'exc'}\n    ]\n  ];\n  return S.map(function(ship,si){\n    var rng=lcg(si*12345+6789);\n    var arr=[];\n    for(var i=0;i<288;i++){\n      var daily=Math.sin(i\/288*2*Math.PI)*((ship.tMax-ship.tMin)*0.06);\n      var drift=Math.sin(i\/120)*((ship.tMax-ship.tMin)*0.08);\n      var noise=(rng()-0.5)*(ship.tMax-ship.tMin)*0.03;\n      arr.push(+(ship.tBase+daily+drift+noise).toFixed(1));\n    }\n    HUMPS[si].forEach(function(h){\n      var pi=Math.PI;\n      for(var k=0;k<h.rise;k++){\n        var idx=h.start+k;if(idx>=arr.length)return;\n        arr[idx]=+(arr[idx]+(h.type==='dev'?h.delta:h.delta*Math.sin((k+1)\/h.rise*pi\/2))).toFixed(1);\n      }\n      if(h.type==='exc'){\n        for(var k=0;k<h.hold;k++){\n          var idx=h.start+h.rise+k;if(idx<arr.length)arr[idx]=+(arr[idx]+h.delta).toFixed(1);\n        }\n      }\n      var fs=h.start+h.rise+(h.type==='exc'?h.hold:0);\n      for(var k=0;k<h.fall;k++){\n        var idx=fs+k;if(idx>=arr.length)return;\n        arr[idx]=+(arr[idx]+(h.type==='dev'?h.delta*(1-(k+1)\/h.fall):h.delta*Math.cos((k+1)\/h.fall*pi\/2))).toFixed(1);\n      }\n    });\n    return arr;\n  });\n}\nvar allData=buildData();var histData=allData.map(function(a){return a.slice(0);});\n\nfunction detectAnomalies(data,tMin,tMax){\n  var out=[];\n  var inExc=false;\n  for(var i=1;i<data.length;i++){\n    var d=+(data[i]-data[i-1]).toFixed(2);\n    var ad=Math.abs(d);\n    var exc=(data[i]<tMin||data[i]>tMax);\n    if(ad>=5){out.push({idx:i,type:'critical',delta:d,t:data[i],exc:exc});inExc=exc;}\n    else if(exc&&!inExc){out.push({idx:i,type:'exceedance',delta:d,t:data[i],exc:true});inExc=true;}\n    else if(!exc){if(inExc){inExc=false;}else if(ad>=1){out.push({idx:i,type:'deviation',delta:d,t:data[i],exc:false});}}\n  }\n  return out;\n}\n\nfunction anomalyText(a,s){\n  var dir=a.delta>0?'+':'';\n  if(a.type==='critical'&&a.exc)return 'CRITICAL: '+dir+a.delta.toFixed(1)+'\u00b0C jump \u2014 limit exceeded ('+a.t+'\u00b0C)';\n  if(a.type==='critical')return 'Critical: '+dir+a.delta.toFixed(1)+'\u00b0C sudden change detected';\n  if(a.type==='exceedance')return 'Exceedance: '+a.t+'\u00b0C outside range ('+s.tMin+'\u2013'+s.tMax+'\u00b0C)';\n  return 'Deviation: '+dir+a.delta.toFixed(1)+'\u00b0C shift detected';\n}\n\nvar RANGES=[{l:'1h',n:12,maxMin:60},{l:'2h',n:24,maxMin:120},{l:'6h',n:72,maxMin:360},{l:'12h',n:144,maxMin:720},{l:'24h',n:288,maxMin:1440},{l:'Full',n:null,maxMin:null}];\nvar active=0,activeRange=2;var T0=Date.now();var simStep=0;\nvar $=function(id){return document.getElementById(id);};\n\nfunction tick(){$('dm-clock').textContent=new Date().toLocaleTimeString('en-GB');}\ntick();setInterval(tick,1000);\n\nfunction fmtAgo(m){\n  if(m===0)return 'Now';\n  if(m<60)return m+'min ago';\n  if(m<1440)return Math.floor(m\/60)+'h ago';\n  var d=Math.floor(m\/1440),h=Math.floor((m%1440)\/60);\n  return d+'d'+(h?' '+h+'h':'')+ ' ago';\n}\nfunction xLabel(mAgo){var d=new Date(T0+simStep*5*60*1000-mAgo*60000);return('0'+d.getHours()).slice(-2)+':'+('0'+d.getMinutes()).slice(-2);}\n\nfunction renderTabs(){\n  var el=$('dm-tabs');el.innerHTML='';\n  S.forEach(function(s,i){\n    var b=document.createElement('button');\n    var on=(i===active);\n    b.textContent=s.id;\n    b.style.background=on?'rgba('+s.rgb+',0.15)':'transparent';\n    b.style.color=on?s.color:'#8B949E';\n    b.style.borderColor=on?'rgba('+s.rgb+',0.45)':'transparent';\n    b.onclick=function(){active=i;var al=$('dm-live-alert');if(al)al.style.display='none';renderAll();};\n    el.appendChild(b);\n  });\n}\n\nfunction renderRangeBtns(){\n  var el=$('dm-range');el.innerHTML='';\n  var s=S[active];\n  RANGES.forEach(function(r,i){\n    var b=document.createElement('button');\n    var on=(i===activeRange);\n    b.textContent=r.l;\n    b.style.background=on?'rgba('+s.rgb+',0.18)':'rgba(255,255,255,0.03)';\n    b.style.color=on?s.color:'#8B949E';\n    b.style.borderColor=on?'rgba('+s.rgb+',0.45)':'rgba(255,255,255,0.1)';\n    b.onclick=function(){activeRange=i;renderChart();renderRangeBtns();renderPanels();updateHint();};\n    el.appendChild(b);\n  });\n  updateHint();\n}\n\nfunction updateHint(){\n  var r=RANGES[activeRange];\n  var s=S[active];\n  var ec=s.events.filter(function(e){return r.maxMin===null||e.m<=r.maxMin;}).length;\n  $('dm-range-hint').textContent=ec+' event'+(ec!==1?'s':'');\n}\n\nfunction renderChart(){\n  var s=S[active];\n  var rn=RANGES[activeRange].n;var data=rn?allData[active].slice(-rn):histData[active].slice(0);\n  var anomalies=detectAnomalies(data,s.tMin,s.tMax);\n  var n=data.length;\n  var W=560,H=108,pL=46,pB=24,pT=8,pR=8;\n  var cW=W-pL-pR,cH=H-pT-pB;\n  var span=s.tMax-s.tMin;\n  var pad=span*0.5;\n  var yLo=s.tMin-pad,yHi=s.tMax+pad;\n  function toX(i){return pL+(n>1?(i\/(n-1))*cW:cW\/2);}\n  function toY(v){return pT+cH-((v-yLo)\/(yHi-yLo))*cH;}\n  var yT=[];for(var k=0;k<=4;k++)yT.push(yLo+k*(yHi-yLo)\/4);\n  var xL=[];\n  for(var j=0;j<7;j++){\n    var idx2=Math.round(j\/6*(n-1));\n    var mAgo2=(n-1-idx2)*5;\n    xL.push({x:toX(idx2),lbl:xLabel(mAgo2)});\n  }\n  var pts=data.map(function(v,i){return{x:toX(i),y:toY(v)};});\n  function mkPath(pts,close){\n    if(pts.length<2)return 'M '+pts[0].x+' '+pts[0].y;\n    var d='M '+pts[0].x.toFixed(1)+' '+pts[0].y.toFixed(1);\n    for(var i=1;i<pts.length;i++){\n      var p=pts[i-1],q=pts[i],cx=((p.x+q.x)\/2).toFixed(1);\n      d+=' C '+cx+' '+p.y.toFixed(1)+' '+cx+' '+q.y.toFixed(1)+' '+q.x.toFixed(1)+' '+q.y.toFixed(1);\n    }\n    if(close){var lp=pts[pts.length-1],fp=pts[0];d+=' L '+lp.x.toFixed(1)+' '+(pT+cH)+' L '+fp.x.toFixed(1)+' '+(pT+cH)+' Z';}\n    return d;\n  }\n  var lp=pts[pts.length-1];\n  var gId='dmg'+active;\n\n  var svg='<svg viewBox=\"0 0 '+W+' '+H+'\" style=\"width:100%;height:auto;display:block;overflow:visible;\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">'\n    +'<defs><linearGradient id=\"'+gId+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0%\" stop-color=\"'+s.color+'\" stop-opacity=\"0.25\"\/><stop offset=\"100%\" stop-color=\"'+s.color+'\" stop-opacity=\"0\"\/><\/linearGradient><\/defs>'\n    +yT.map(function(v){var y=toY(v).toFixed(1);return '<line x1=\"'+pL+'\" y1=\"'+y+'\" x2=\"'+(W-pR)+'\" y2=\"'+y+'\" stroke=\"rgba(255,255,255,0.05)\" stroke-width=\"1\"\/>';}).join('')\n    +'<rect x=\"'+pL+'\" y=\"'+toY(s.tMax).toFixed(1)+'\" width=\"'+cW+'\" height=\"'+(toY(s.tMin)-toY(s.tMax)).toFixed(1)+'\" fill=\"rgba('+s.rgb+',0.07)\"\/>'\n    +'<text x=\"'+(pL+4)+'\" y=\"'+(toY(s.tMax)-3).toFixed(1)+'\" font-family=\"Montserrat,sans-serif\" font-size=\"7.5\" fill=\"rgba('+s.rgb+',0.8)\">max '+s.tMax+'\u00b0C<\/text>'\n    +'<text x=\"'+(pL+4)+'\" y=\"'+(toY(s.tMin)+10).toFixed(1)+'\" font-family=\"Montserrat,sans-serif\" font-size=\"7.5\" fill=\"rgba('+s.rgb+',0.8)\">min '+s.tMin+'\u00b0C<\/text>'\n    +'<path d=\"'+mkPath(pts,true)+'\" fill=\"url(#'+gId+')\"\/>'\n    +'<path d=\"'+mkPath(pts,false)+'\" fill=\"none\" stroke=\"'+s.color+'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>';\n\n  \/\/ Anomaly markers\n  anomalies.forEach(function(a){\n    var x=toX(a.idx);\n    var y=toY(a.t);\n    var isCrit=(a.type==='critical');\n    var isExc=(a.type==='exceedance');\n    var mc=(isCrit||isExc)?'#EF4444':'#F59E0B';\n    if(isCrit||isExc){\n      \/\/ Red triangle with !\n      var base=Math.max(pT+2,y-14);\n      svg+='<polygon points=\"'+x.toFixed(1)+','+(base-8).toFixed(1)+' '+(x-5).toFixed(1)+','+(base+2).toFixed(1)+' '+(x+5).toFixed(1)+','+(base+2).toFixed(1)+'\" fill=\"'+mc+'\" opacity=\"0.95\"\/>';\n      svg+='<text x=\"'+x.toFixed(1)+'\" y=\"'+(base-1).toFixed(1)+'\" text-anchor=\"middle\" font-family=\"Montserrat,sans-serif\" font-size=\"6\" fill=\"white\" font-weight=\"800\">!<\/text>';\n    } else {\n      \/\/ Amber dot\n      svg+='<circle cx=\"'+x.toFixed(1)+'\" cy=\"'+(Math.max(pT+4,y-8)).toFixed(1)+'\" r=\"3\" fill=\"'+mc+'\" opacity=\"0.9\"\/>';\n    }\n    \/\/ Subtle vertical guide line to the data point\n    svg+='<line x1=\"'+x.toFixed(1)+'\" y1=\"'+y.toFixed(1)+'\" x2=\"'+x.toFixed(1)+'\" y2=\"'+(Math.max(pT+2,y-14)).toFixed(1)+'\" stroke=\"'+mc+'\" stroke-width=\"1\" stroke-dasharray=\"2,2\" opacity=\"0.5\"\/>';\n  });\n\n  \/\/ Latest dot + ring\n  svg+='<circle cx=\"'+lp.x.toFixed(1)+'\" cy=\"'+lp.y.toFixed(1)+'\" r=\"4\" fill=\"'+s.color+'\" stroke=\"#0A1628\" stroke-width=\"2\"\/>'\n    +'<circle cx=\"'+lp.x.toFixed(1)+'\" cy=\"'+lp.y.toFixed(1)+'\" r=\"8\" fill=\"none\" stroke=\"rgba('+s.rgb+',0.35)\" stroke-width=\"1.5\"\/>';\n\n  \/\/ Axes\n  svg+='<line x1=\"'+pL+'\" y1=\"'+pT+'\" x2=\"'+pL+'\" y2=\"'+(pT+cH)+'\" stroke=\"rgba(255,255,255,0.1)\" stroke-width=\"1\"\/>'\n    +'<line x1=\"'+pL+'\" y1=\"'+(pT+cH)+'\" x2=\"'+(W-pR)+'\" y2=\"'+(pT+cH)+'\" stroke=\"rgba(255,255,255,0.1)\" stroke-width=\"1\"\/>';\n\n  \/\/ Y + X labels\n  svg+=yT.map(function(v){return '<text x=\"'+(pL-5)+'\" y=\"'+(toY(v)+3.5).toFixed(1)+'\" font-family=\"Montserrat,sans-serif\" font-size=\"8\" fill=\"#8B949E\" text-anchor=\"end\">'+v.toFixed(0)+'<\/text>';}).join('');\n  svg+=xL.map(function(xl){return '<text x=\"'+xl.x.toFixed(1)+'\" y=\"'+(H-6)+'\" font-family=\"Montserrat,sans-serif\" font-size=\"8\" fill=\"#8B949E\" text-anchor=\"middle\">'+xl.lbl+'<\/text>';}).join('');\n\n  \/\/ Crosshair group + capture rect\n  svg+='<g id=\"dm-ch\" style=\"display:none;\">'\n    +'<line id=\"dm-ch-l\" x1=\"0\" y1=\"'+pT+'\" x2=\"0\" y2=\"'+(pT+cH)+'\" stroke=\"rgba(255,255,255,0.25)\" stroke-width=\"1\" stroke-dasharray=\"3,2\"\/>'\n    +'<circle id=\"dm-ch-d\" cx=\"0\" cy=\"0\" r=\"4\" fill=\"#0A1628\" stroke-width=\"2\"\/>'\n    +'<\/g>'\n    +'<rect x=\"'+pL+'\" y=\"'+pT+'\" width=\"'+cW+'\" height=\"'+cH+'\" fill=\"transparent\" style=\"cursor:crosshair;\"\/>'\n    +'<\/svg>';\n\n  $('dm-chart').innerHTML='<div style=\"position:relative;\">'\n    +'<div id=\"dm-tt\" style=\"position:absolute;pointer-events:none;display:none;background:#0D1829;border:1px solid rgba(255,255,255,0.14);border-radius:8px;padding:8px 12px;z-index:10;white-space:nowrap;font-family:Montserrat,sans-serif;\"><\/div>'\n    +svg+'<\/div>';\n\n  \/\/ Alerts summary\n  var crits=anomalies.filter(function(a){return a.type==='critical';}).length;\n  var excs=anomalies.filter(function(a){return a.type==='exceedance';}).length;\n  var devs=anomalies.filter(function(a){return a.type==='deviation';}).length;\n  var aHtml='<span style=\"font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8B949E;margin-right:2px;\">Alerts:<\/span>';\n  if(crits)aHtml+='<span style=\"background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.3);border-radius:20px;padding:2px 9px;color:#EF4444;font-size:10px;font-weight:700;\">\u26a0 '+crits+' Critical<\/span>';\n  var simNow=T0+simStep*5*60*1000;var rangeMs=RANGES[activeRange].maxMin?RANGES[activeRange].maxMin*60000:Infinity;var logCnt=excLog[active]?excLog[active].filter(function(e){return e.startMs===undefined||(simNow-e.startMs)<=rangeMs;}).length:0;\n  if(excs||logCnt){var eCnt=logCnt||excs;if(logCnt){\n    aHtml+='<button onclick=\"toggleExcLog()\" style=\"background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.2);border-radius:20px;padding:3px 9px;color:#EF4444;font-size:10px;font-weight:700;cursor:pointer;font-family:Montserrat,sans-serif;\">\u26d4 '+eCnt+' Exceedance'+(eCnt>1?'s':'')+' \u25be Report<\/button>';\n  }else{\n    aHtml+='<span style=\"background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.2);border-radius:20px;padding:2px 9px;color:#EF4444;font-size:10px;font-weight:700;\">\u26d4 '+excs+' Exceedance'+(excs>1?'s':'')+'<\/span>';\n  }}\n  if(devs)aHtml+='<span style=\"background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.3);border-radius:20px;padding:2px 9px;color:#F59E0B;font-size:10px;font-weight:700;\">\u25b3 '+devs+' Deviation'+(devs>1?'s':'')+'<\/span>';\n  if(!crits&&!excs&&!devs)aHtml+='<span style=\"color:#00E5A0;font-size:10px;font-weight:700;\">\u2714 All nominal<\/span>';\n  $('dm-alerts').innerHTML=aHtml;\n\n  \/\/ Crosshair + tooltip event listeners\n  (function(){\n    var sv=$('dm-chart').querySelector('svg');\n    var chG=document.getElementById('dm-ch');\n    var chL=document.getElementById('dm-ch-l');\n    var chD=document.getElementById('dm-ch-d');\n    var tt=document.getElementById('dm-tt');\n    var _d=data,_n=n,_s=s,_an=anomalies;\n    function onMove(e){\n      var r=sv.getBoundingClientRect();\n      var cx=e.clientX!=null?e.clientX:(e.touches&&e.touches[0]?e.touches[0].clientX:null);\n      if(cx==null)return;\n      var sx=(cx-r.left)*(W\/r.width)-pL;\n      if(sx<0||sx>cW){hide();return;}\n      var idx=Math.round((sx\/cW)*(_n-1));\n      idx=Math.max(0,Math.min(_n-1,idx));\n      var t=_d[idx];\n      var svx=pL+(_n>1?(idx\/(_n-1))*cW:cW\/2);\n      var svy=pT+cH-((t-yLo)\/(yHi-yLo))*cH;\n      chG.style.display='';\n      chL.setAttribute('x1',svx.toFixed(1));chL.setAttribute('x2',svx.toFixed(1));\n      chD.setAttribute('cx',svx.toFixed(1));chD.setAttribute('cy',svy.toFixed(1));\n      chD.setAttribute('stroke',_s.color);\n      var mAgo=(_n-1-idx)*5;\n      var dd=new Date(T0+simStep*5*60*1000-mAgo*60000);\n      var ts=('0'+dd.getHours()).slice(-2)+':'+('0'+dd.getMinutes()).slice(-2);\n      var inSpec=(t>=_s.tMin&&t<=_s.tMax);\n      var excDelta=inSpec?null:+(t<_s.tMin?(t-_s.tMin):(t-_s.tMax)).toFixed(1);\n      var nA=null;\n      for(var ai=0;ai<_an.length;ai++){if(Math.abs(_an[ai].idx-idx)<=2){nA=_an[ai];break;}}\n      var ttX=svx*(r.width\/W);\n      var ttY=Math.max(0,svy*(r.height\/H)-52);\n      tt.style.display='block';\n      tt.style.left=(ttX>r.width*0.55?(ttX-120)+'px':(ttX+10)+'px');\n      tt.style.top=ttY+'px';\n      var ac=nA?(nA.type==='critical'?'#EF4444':nA.type==='exceedance'?'#EF4444':'#F59E0B'):null;\n      tt.innerHTML='<div style=\"font-size:9px;color:#8B949E;margin-bottom:3px;\">'+ts+(mAgo>0?' \u2014 '+fmtAgo(mAgo):'')+'<\/div>'\n        +'<div style=\"font-weight:800;font-size:1.1rem;color:'+_s.color+';\">'+t+'\u00b0C<\/div>'\n        +'<div style=\"font-size:9px;margin-top:3px;color:'+(inSpec?'#00E5A0':'#EF4444')+'\">'+(inSpec?'In spec':'Limit exceeded')+'<\/div>'\n        +(!inSpec\n          ?'<div style=\"font-size:9px;margin-top:5px;font-weight:700;color:#EF4444;border-top:1px solid rgba(255,255,255,0.08);padding-top:5px;\">\u26d4 Exceedance: '+(excDelta>0?'+':'')+excDelta.toFixed(1)+'\u00b0C<\/div>'\n          :(nA?'<div style=\"font-size:9px;margin-top:5px;font-weight:700;color:'+ac+';border-top:1px solid rgba(255,255,255,0.08);padding-top:5px;\">'\n            +(nA.type==='critical'?'\u26a0 Critical':'\u25b3 Deviation')+': '+(nA.delta>0?'+':'')+nA.delta.toFixed(1)+'\u00b0C<\/div>':''));\n    }\n    function hide(){chG.style.display='none';tt.style.display='none';}\n    sv.addEventListener('mousemove',onMove);\n    sv.addEventListener('mouseleave',hide);\n    sv.addEventListener('touchmove',function(e){e.preventDefault();onMove(e);},{passive:false});\n  })();\n}\n\nfunction updateTempDisplay(){\n  var s=S[active];\n  var t=allData[active][allData[active].length-1];\n  var inSpec=(t>=s.tMin&&t<=s.tMax);\n  $('dm-temp-val').innerHTML='<span style=\"color:'+s.color+';\">'+t+'<\/span><span style=\"font-size:1rem;font-weight:400;color:#8B949E;\">\u00b0C<\/span>';\n  $('dm-temp-badge').textContent=inSpec?'In spec':'Exceedance';\n  $('dm-temp-badge').style.background=inSpec?'rgba(0,229,160,0.12)':'rgba(239,68,68,0.12)';\n  $('dm-temp-badge').style.color=inSpec?'#00E5A0':'#EF4444';\n  $('dm-temp-range').textContent='Target: '+s.tMin+'\u00b0C to '+s.tMax+'\u00b0C';\n}\n\nfunction renderPanels(){\n  var s=S[active];\n  var r=RANGES[activeRange];\n  \/\/ Base events filtered by range\n  var baseEvts=s.events.filter(function(e){return r.maxMin===null||e.m<=r.maxMin;});\n  \/\/ Auto-generate anomaly events from full dataset\n  var src=r.maxMin===null?histData[active]:allData[active];var fullAn=detectAnomalies(src,s.tMin,s.tMax);\n  var anEvts=fullAn.map(function(a){\n    var mAgo=(src.length-1-a.idx)*5;\n    return {m:mAgo,txt:anomalyText(a,s),warn:a.type==='critical'?'critical':a.type==='exceedance'?'exceedance':'deviation'};\n  }).filter(function(e){return r.maxMin===null||e.m<=r.maxMin;});\n  var allEvts=baseEvts.concat(anEvts).sort(function(a,b){return a.m-b.m;});\n  var routeHtml=s.route.map(function(hub,i){\n    var done=(i<s.leg),cur=(i===s.leg);\n    var dc=done?'#00E5A0':cur?s.color:'rgba(255,255,255,0.2)';\n    var lc=cur?'#F0F6FC':done?'#00E5A0':'#8B949E';\n    var conn=(i<s.route.length-1)?'<div style=\"width:28px;height:1px;background:'+(done?'#00E5A0':'rgba(255,255,255,0.1)')+';margin-bottom:14px;\"><\/div>':'';\n    return '<div style=\"display:flex;align-items:center;gap:4px;\"><div style=\"display:flex;flex-direction:column;align-items:center;gap:4px;\"><div style=\"width:10px;height:10px;border-radius:50%;background:'+dc+';'+(cur?'box-shadow:0 0 8px '+s.color+';':'')+'\"><\/div><span style=\"font-size:9px;font-weight:700;color:'+lc+';\">'+hub+'<\/span><\/div>'+conn+'<\/div>';\n  }).join('');\n  var statusHtml=s.status.map(function(r2){\n    return '<div class=\"dm-status-row\"><span style=\"font-size:11px;color:#8B949E;\">'+r2.l+'<\/span><span style=\"font-size:10px;font-weight:700;color:'+(r2.ok?'#00E5A0':'#D97706')+';display:flex;align-items:center;gap:5px;\"><i class=\"fas '+(r2.ok?'fa-check-circle':'fa-times-circle')+'\" style=\"font-size:10px;\"><\/i>'+r2.v+'<\/span><\/div>';\n  }).join('');\n  var eventsHtml=allEvts.length\n    ?allEvts.map(function(e){\n        var badge='';\n        var bc=e.warn==='critical'||e.warn==='exceedance'?'#EF4444':e.warn==='deviation'?'#F59E0B':null;\n        var bl=e.warn==='critical'?'CRIT':e.warn==='exceedance'?'EXCL':e.warn==='deviation'?'WARN':null;\n        if(bc)badge='<span style=\"background:rgba('+(e.warn==='deviation'?'245,158,11':'239,68,68')+',.15);color:'+bc+';font-size:8px;font-weight:700;padding:1px 6px;border-radius:20px;flex-shrink:0;\">'+bl+'<\/span>';\n        return '<div class=\"dm-event\"><span class=\"dm-event-time\">'+fmtAgo(e.m)+'<\/span>'+badge+'<span style=\"color:#8B949E;\">'+e.txt+'<\/span><\/div>';\n      }).join('')\n    :'<div style=\"font-size:11px;color:#8B949E;padding:8px 0;\">No events in this range.<\/div>';\n  $('dm-panels').innerHTML=\n    '<div class=\"dm-card\"><div class=\"dm-card-lbl\"><i class=\"fas fa-map-marker-alt\" style=\"color:'+s.color+';font-size:11px;\"><\/i>Route &amp; Location<\/div>'\n    +'<div style=\"display:flex;align-items:flex-start;gap:4px;margin-bottom:16px;\">'+routeHtml+'<\/div>'\n    +'<div style=\"margin-bottom:8px;\"><div style=\"font-weight:700;font-size:0.875rem;margin-bottom:2px;\">'+s.loc+'<\/div><div style=\"font-size:11px;color:#8B949E;\">'+s.sub+'<\/div><\/div>'\n    +'<div style=\"display:flex;align-items:center;gap:6px;font-size:10px;color:#8B949E;margin-bottom:16px;\"><span style=\"width:6px;height:6px;border-radius:50%;background:#00E5A0;box-shadow:0 0 6px #00E5A0;\"><\/span>In transit \u2014 ETA '+s.eta+'<\/div>'\n    +'<div style=\"border-top:1px solid rgba(255,255,255,0.06);padding-top:14px;\"><div style=\"display:flex;justify-content:space-between;font-size:10px;margin-bottom:6px;\"><span style=\"color:#8B949E;\">'+s.route.join(' \u2192 ')+'<\/span><span style=\"font-weight:700;color:'+s.color+';\">'+s.prog+'%<\/span><\/div>'\n    +'<div style=\"height:4px;background:#0A1628;border-radius:4px;overflow:hidden;\"><div style=\"height:100%;width:'+s.prog+'%;background:'+s.color+';border-radius:4px;\"><\/div><\/div><\/div><\/div>'\n    +'<div class=\"dm-card\"><div class=\"dm-card-lbl\"><i class=\"fas fa-box\" style=\"color:'+s.color+';font-size:11px;\"><\/i>Shipment Status<\/div>'\n    +'<div>'+statusHtml+'<\/div>'\n    +'<div style=\"border-top:1px solid rgba(255,255,255,0.06);padding-top:14px;margin-top:12px;\"><div style=\"font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#8B949E;margin-bottom:10px;\">Events \u2014 '+RANGES[activeRange].l+'<\/div>'\n    +eventsHtml+'<\/div><\/div>';\n}\n\nfunction renderAll(){renderTabs();renderRangeBtns();updateTempDisplay();renderChart();renderPanels();renderExcLog();}\n\nvar liveRng=lcg(9973);\nvar anomState=[\n  null,\n  {phase:'wait',wait:5+Math.floor(Math.random()*5),step:0,dir:1,td:4.0,hl:0,devOnly:true,spikeCount:0},\n  {phase:'wait',wait:5+Math.floor(Math.random()*5),step:0,dir:-1,td:-3.5,hl:0,preDevs:3,rl:12,pdStep:4}\n];\nvar prevExc=[false,false,false];\nvar excState=[null,null,null];\nvar excLog=[[],[],[]];\nvar excLogOpen=[false,false,false];\n(function(){\n  var s=S[2];\n  var si=145,ei=158;\n  var stMs=T0-(287-si)*5*60*1000,enMs=T0-(287-ei)*5*60*1000;\n  function tStr(ms){var d=new Date(ms);return d.getHours()+':'+(d.getMinutes()<10?'0':'')+d.getMinutes()+':'+(d.getSeconds()<10?'0':'')+d.getSeconds();}\n  var peak=s.tMin;\n  for(var k=si;k<=ei;k++){if(allData[2][k]<peak)peak=allData[2][k];}\n  peak=+peak.toFixed(1);\n  excLog[2].push({startStr:tStr(stMs),endStr:tStr(enMs),durMs:enMs-stMs,startMs:stMs,endMs:enMs,peak:peak,isHigh:false,lim:s.tMin});\n})();\nvar alertTimer=null;\nfunction fmtDur(ms){var s=Math.floor(ms\/1000);if(s<60)return s+'s';var m=Math.floor(s\/60);s=s%60;if(m<60)return m+'m'+(s?' '+s+'s':'');var h=Math.floor(m\/60);m=m%60;return h+'h'+(m?' '+m+'m':'');}\nwindow.toggleExcLog=function toggleExcLog(){\n  var log=excLog[active];if(!log||!log.length)return;\n  excLogOpen[active]=!excLogOpen[active];\n  renderExcLog();\n}\nfunction renderExcLog(){\n  var el=$('dm-exc-log');if(!el)return;\n  var log=excLog[active];\n  if(!log||!log.length){el.style.display='none';return;}\n  var rows=log.slice().reverse().map(function(e,ridx){\n    var num=log.length-ridx;\n    var pd=+(Math.abs(e.peak-e.lim)).toFixed(1);\n    var dir=e.isHigh?'HIGH':'LOW';\n    var col=e.isHigh?'#EF4444':'#38BDF8';\n    return '<div style=\"display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;padding:5px 0;border-bottom:1px solid rgba(255,255,255,0.04);font-size:10px;line-height:1.6;\">'\n      +'<span style=\"color:rgba(139,148,158,0.5);flex-shrink:0;font-size:9px;\">#'+num+'<\/span>'\n      +'<span style=\"color:'+col+';font-weight:700;flex-shrink:0;\">'+dir+'<\/span>'\n      +'<span style=\"color:#8B949E;\">'+e.startStr+' \u2192 '+e.endStr+'<\/span>'\n      +'<span style=\"color:#8B949E;\">\u00b7 '+fmtDur(e.durMs)+'<\/span>'\n      +'<span style=\"color:#F0F6FC;font-weight:600;margin-left:auto;\">Peak: '+e.peak+'\u00b0C '\n      +'<span style=\"color:'+col+';\">(+'+pd+'\u00b0C over limit)<\/span><\/span>'\n      +'<\/div>';\n  }).join('');\n  el.style.display=excLogOpen[active]?'block':'none';\n  el.innerHTML='<div style=\"padding:8px 12px;border-radius:8px;border:1px solid rgba(239,68,68,0.25);background:rgba(239,68,68,0.04);\">'\n    +'<div style=\"font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(239,68,68,0.65);margin-bottom:4px;\">'\n    +'<i class=\"fas fa-clipboard-list\" style=\"margin-right:5px;\"><\/i>Exceedance Log \u2014 this session<\/div>'\n    +rows+'<\/div>';\n}\nfunction showAlert(s,si,t){\n  if(active!==si)return;\n  var el=$('dm-live-alert');\n  var isHigh=(t>s.tMax);\n  var lim=isHigh?s.tMax:s.tMin;\n  var dev=+(Math.abs(t-lim)).toFixed(1);\n  var ex=excState[si];\n  var sub='';\n  if(ex){var dur=fmtDur(T0+simStep*5*60*1000-ex.startMs);var lim2=ex.isHigh?s.tMax:s.tMin;var pd=+(Math.abs(ex.peak-lim2)).toFixed(1);sub='<br><span style=\"font-size:10px;font-weight:600;opacity:0.75;\">\u25b8 Since '+ex.startStr+' \u00b7 Duration: '+dur+' \u00b7 Peak: '+ex.peak+'\u00b0C (+'+pd+'\u00b0C over limit)<\/span>';}\n  el.innerHTML='<i class=\"fas fa-exclamation-triangle\" style=\"margin-right:7px;\"><\/i>'+s.id+' \u2014 Temperature '+(isHigh?'HIGH':'LOW')+': '+t+'\u00b0C (+'+dev+'\u00b0C over limit)'+sub;\n  el.style.display='block';\n  el.style.background='rgba(239,68,68,0.10)';\n  el.style.borderColor='rgba(239,68,68,0.40)';\n  el.style.color='#EF4444';\n}\nsetInterval(function(){\n  S.forEach(function(s,i){\n    var a=anomState[i];\n    var last=allData[i][allData[i].length-1];\n    var noise=(liveRng()-0.5)*(s.tMax-s.tMin)*0.025;\n    var t;\n    if(!a){\n      t=+(last+noise+(s.tBase-last)*0.04).toFixed(1);\n      if(t<s.tMin-0.5)t=+(s.tMin+0.1).toFixed(1);\n      if(t>s.tMax+0.5)t=+(s.tMax-0.1).toFixed(1);\n    } else if(a.phase==='wait'){\n      a.wait--;\n      var restoring=(s.tBase-last)*0.04;\n      var spike=0;\n      if(a.devOnly){\n        if(a.wait<=0){spike=a.dir*(1.1+liveRng()*0.4);a.spikeCount++;a.wait=a.spikeCount<=1?40+Math.floor(liveRng()*20):100+Math.floor(liveRng()*60);}\n        else if(a.wait>16&&liveRng()<0.004)spike=a.dir*(0.7+liveRng()*0.3);\n      } else {\n        if(a.wait<=0){spike=a.dir*(1.2+liveRng()*0.4);a.quiet=false;a.phase=a.preDevs>0?'predev':'rise';a.step=0;}\n        else if(!a.quiet&&a.wait>16&&liveRng()<0.018)spike=a.dir*(1.0+liveRng()*0.5);\n      }\n      t=+(last+noise+restoring+spike).toFixed(1);\n      if(t<s.tMin-0.5)t=+(s.tMin+0.1).toFixed(1);\n      if(t>s.tMax+0.5)t=+(s.tMax-0.1).toFixed(1);\n    } else if(a.phase==='predev'){\n      var restoring=(s.tBase-last)*0.04;\n      a.step++;\n      var spike=0;\n      var pdS=a.pdStep||12;if(a.step>=pdS){spike=a.dir*(1.2+liveRng()*0.6);a.preDevs--;a.step=0;if(a.preDevs<=0)a.phase='rise';}\n      t=+(last+noise+restoring+spike).toFixed(1);\n      if(t<s.tMin-0.5)t=+(s.tMin+0.1).toFixed(1);\n      if(t>s.tMax+0.5)t=+(s.tMax-0.1).toFixed(1);\n    } else if(a.phase==='rise'){\n      var rl=a.rl||16;var rate=a.td*Math.PI\/(2*rl)*Math.sin(a.step\/rl*Math.PI);\n      t=+(last+noise+rate).toFixed(1);\n      a.step++;if(a.step>=rl){a.phase='hold';a.hl=1+Math.floor(Math.random()*3);a.step=0;}\n    } else if(a.phase==='hold'){\n      t=+(last+noise).toFixed(1);\n      a.step++;if(a.step>=a.hl){a.phase='return';a.step=0;}\n    } else {\n      var rl=a.rl||16;var rate=-a.td*Math.PI\/(2*rl)*Math.sin(a.step\/rl*Math.PI);\n      t=+(last+noise+rate).toFixed(1);\n      a.step++;if(a.step>=rl){a.phase='wait';a.wait=60+Math.floor(Math.random()*40);a.step=0;if(a.preDevs!==undefined)a.preDevs=1;a.quiet=true;}\n    }\n    allData[i].push(t);allData[i].shift();histData[i].push(t);\n    var isExc=(t<s.tMin||t>s.tMax);\n    if(isExc){\n      if(!prevExc[i]){var stMs=T0+simStep*5*60*1000;var now=new Date(stMs);var isH=t>s.tMax;excState[i]={startMs:stMs,startStr:now.getHours()+':'+(now.getMinutes()<10?'0':'')+now.getMinutes()+':'+(now.getSeconds()<10?'0':'')+now.getSeconds(),peak:t,isHigh:isH};}\n      else if(excState[i]){if(excState[i].isHigh?(t>excState[i].peak):(t<excState[i].peak))excState[i].peak=t;}\n      showAlert(s,i,t);\n    } else {\n      if(prevExc[i]){if(excState[i]){var enMs=T0+simStep*5*60*1000;var now3=new Date(enMs);var eStr=now3.getHours()+':'+(now3.getMinutes()<10?'0':'')+now3.getMinutes()+':'+(now3.getSeconds()<10?'0':'')+now3.getSeconds();var lim3=excState[i].isHigh?s.tMax:s.tMin;excLog[i].push({startStr:excState[i].startStr,endStr:eStr,durMs:enMs-excState[i].startMs,startMs:excState[i].startMs,endMs:enMs,peak:excState[i].peak,isHigh:excState[i].isHigh,lim:lim3});}excState[i]=null;excLogOpen[i]=true;if(active===i){var al=$('dm-live-alert');if(al)al.style.display='none';renderExcLog();}}\n    }\n    prevExc[i]=isExc;\n  });\n  simStep++;renderChart();updateTempDisplay();\n},3000);\n\nrenderAll();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c8e7454 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"c8e7454\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-59388990\" data-id=\"59388990\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-69f4e91c elementor-widget elementor-widget-html\" data-id=\"69f4e91c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-n'><div class='bp-in'><div style='text-align:center;margin-bottom:64px;'><span class='bp-lbl'>Capabilities<\/span><h2 class='bp-h2'>Real-time pharma technology monitoring features<\/h2><\/div><div class='bp-g3'><div style='padding:32px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div class='bp-icon-sm' style='margin-bottom:16px;'><i class='fas fa-wifi'><\/i><\/div><h3 style='font-weight:700;font-size:16px;margin-bottom:8px;'>GPS Tracking<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.6;'>Continuous location data with geofencing alerts for route deviation detection.<\/p><\/div><div style='padding:32px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div class='bp-icon-sm' style='margin-bottom:16px;'><i class='fas fa-bell'><\/i><\/div><h3 style='font-weight:700;font-size:16px;margin-bottom:8px;'>Temperature Alerts<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.6;'>Instant notifications when readings approach defined thresholds &mdash; before an excursion occurs.<\/p><\/div><div style='padding:32px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div class='bp-icon-sm' style='margin-bottom:16px;'><i class='fas fa-file-alt'><\/i><\/div><h3 style='font-weight:700;font-size:16px;margin-bottom:8px;'>Digital Documentation<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.6;'>Automated generation of transport records, temperature certificates, and compliance reports.<\/p><\/div><div style='padding:32px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div class='bp-icon-sm' style='margin-bottom:16px;'><i class='fas fa-link'><\/i><\/div><h3 style='font-weight:700;font-size:16px;margin-bottom:8px;'>Chain of Custody<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.6;'>Timestamped handover records with digital signatures at every transfer point.<\/p><\/div><div style='padding:32px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div class='bp-icon-sm' style='margin-bottom:16px;'><i class='fas fa-exclamation-triangle'><\/i><\/div><h3 style='font-weight:700;font-size:16px;margin-bottom:8px;'>Excursion Management<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.6;'>MKT analysis, stability data cross-reference, and automated CAPA initiation.<\/p><\/div><div style='padding:32px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div class='bp-icon-sm' style='margin-bottom:16px;'><i class='fas fa-clipboard-list'><\/i><\/div><h3 style='font-weight:700;font-size:16px;margin-bottom:8px;'>Audit Trail<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.6;'>Complete, immutable record of every event &mdash; from sensor calibration to final delivery.<\/p><\/div><\/div><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-45700e8c elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"45700e8c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-336a6a8c\" data-id=\"336a6a8c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-70ecdc7a elementor-widget elementor-widget-html\" data-id=\"70ecdc7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-d'><div class='bp-in'><div class='bp-g2'><div><span class='bp-lbl'>Validated Packaging<\/span><h2 class='bp-h2-sm'>Packaging systems matched to your product<\/h2><p class='bp-text' style='margin-top:16px;margin-bottom:32px;'>The right packaging is not about choosing the most expensive option &mdash; it is about matching thermal performance to your product&apos;s stability profile, transit duration, and route conditions.<\/p><div style='display:flex;flex-direction:column;gap:16px;'><div style='display:flex;align-items:start;gap:16px;'><div class='bp-icon-sm'><i class='fas fa-box'><\/i><\/div><div><div style='font-weight:700;font-size:15px;margin-bottom:4px;'>Passive Systems (PCM)<\/div><p style='font-size:13px;color:var(--text-lo);line-height:1.6;'>Phase change materials maintain target temperature for 48&ndash;120 hours without external power.<\/p><\/div><\/div><div style='display:flex;align-items:start;gap:16px;'><div class='bp-icon-sm'><i class='fas fa-bolt'><\/i><\/div><div><div style='font-weight:700;font-size:15px;margin-bottom:4px;'>Active Containers<\/div><p style='font-size:13px;color:var(--text-lo);line-height:1.6;'>Electrically powered units for extended transits requiring precise temperature control.<\/p><\/div><\/div><div style='display:flex;align-items:start;gap:16px;'><div class='bp-icon-sm'><i class='fas fa-shield-alt'><\/i><\/div><div><div style='font-weight:700;font-size:15px;margin-bottom:4px;'>Vacuum Insulated Panels (VIP)<\/div><p style='font-size:13px;color:var(--text-lo);line-height:1.6;'>High-performance insulation reducing thermal conductivity by up to 10&times; versus standard foam.<\/p><\/div><\/div><div style='display:flex;align-items:start;gap:16px;'><div class='bp-icon-sm'><i class='fas fa-microchip'><\/i><\/div><div><div style='font-weight:700;font-size:15px;margin-bottom:4px;'>Cryogenic Dewars<\/div><p style='font-size:13px;color:var(--text-lo);line-height:1.6;'>Liquid nitrogen vessels for cell and gene therapy shipments below -150&deg;C.<\/p><\/div><\/div><\/div><\/div><div><div class='bp-card'><h3 class='bp-h3' style='margin-bottom:24px;'>Qualification Process<\/h3><div style='display:flex;flex-direction:column;gap:16px;'><div style='display:flex;align-items:start;gap:12px;'><div style='width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#0284C7,#00E5A0);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;color:#0A1628;flex-shrink:0;'>1<\/div><span style='font-size:14px;color:var(--text-lo);margin-top:4px;'>Product stability profile analysis<\/span><\/div><div style='display:flex;align-items:start;gap:12px;'><div style='width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#0284C7,#00E5A0);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;color:#0A1628;flex-shrink:0;'>2<\/div><span style='font-size:14px;color:var(--text-lo);margin-top:4px;'>Route and season assessment<\/span><\/div><div style='display:flex;align-items:start;gap:12px;'><div style='width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#0284C7,#00E5A0);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;color:#0A1628;flex-shrink:0;'>3<\/div><span style='font-size:14px;color:var(--text-lo);margin-top:4px;'>Packaging selection and thermal modelling<\/span><\/div><div style='display:flex;align-items:start;gap:12px;'><div style='width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#0284C7,#00E5A0);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;color:#0A1628;flex-shrink:0;'>4<\/div><span style='font-size:14px;color:var(--text-lo);margin-top:4px;'>Performance Qualification (PQ) testing<\/span><\/div><div style='display:flex;align-items:start;gap:12px;'><div style='width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#0284C7,#00E5A0);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;color:#0A1628;flex-shrink:0;'>5<\/div><span style='font-size:14px;color:var(--text-lo);margin-top:4px;'>Ongoing monitoring and revalidation<\/span><\/div><\/div><div style='margin-top:24px;padding:16px;background:rgba(2,132,199,.06);border:1px solid rgba(2,132,199,.15);border-radius:8px;'><p style='font-size:12px;color:var(--text-lo);'><strong style='color:#fff;'>Revalidation cycles:<\/strong> Packaging qualification is reviewed quarterly and after any significant route or product change.<\/p><\/div><\/div><\/div><\/div><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-65a25254 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"65a25254\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4b3fbe6f\" data-id=\"4b3fbe6f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-909909e elementor-widget elementor-widget-html\" data-id=\"909909e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-n'><div class='bp-in'><div style='text-align:center;margin-bottom:64px;'><span class='bp-lbl'>Innovation<\/span><h2 class='bp-h2'>Technology that anticipates problems<\/h2><p class='bp-text' style='max-width:520px;margin:16px auto 0;text-align:center;'>Reactive monitoring catches excursions after they happen. Our approach uses predictive analytics to prevent them.<\/p><\/div><div class='bp-g3'><div style='padding:40px;background:var(--bg-card);border:1px solid rgba(2,132,199,.3);border-radius:16px;'><span style='display:inline-block;padding:3px 10px;background:rgba(2,132,199,.1);border:1px solid rgba(2,132,199,.2);border-radius:20px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#0284C7;margin-bottom:24px;'>Coming 2026<\/span><div style='width:56px;height:56px;border-radius:14px;background:rgba(2,132,199,.08);border:1px solid rgba(2,132,199,.15);display:flex;align-items:center;justify-content:center;color:#0284C7;font-size:24px;margin-bottom:24px;'><i class='fas fa-chart-bar'><\/i><\/div><h3 style='font-weight:700;font-size:20px;margin-bottom:12px;'>Predictive Analytics<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.7;'>Historical route data combined with weather forecasts and traffic patterns to identify risk windows before shipment dispatch.<\/p><\/div><div style='padding:40px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div style='width:56px;height:56px;border-radius:14px;background:rgba(2,132,199,.08);border:1px solid rgba(2,132,199,.15);display:flex;align-items:center;justify-content:center;color:#0284C7;font-size:24px;margin-bottom:24px;'><i class='fas fa-microchip'><\/i><\/div><h3 style='font-weight:700;font-size:20px;margin-bottom:12px;'>IoT Sensor Network<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.7;'>Multi-parameter sensors capturing temperature, humidity, shock, light exposure, and tilt &mdash; transmitting at configurable intervals.<\/p><\/div><div style='padding:40px;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;'><div style='width:56px;height:56px;border-radius:14px;background:rgba(2,132,199,.08);border:1px solid rgba(2,132,199,.15);display:flex;align-items:center;justify-content:center;color:#0284C7;font-size:24px;margin-bottom:24px;'><i class='fas fa-shield-alt'><\/i><\/div><h3 style='font-weight:700;font-size:20px;margin-bottom:12px;'>Automated Compliance<\/h3><p style='font-size:14px;color:var(--text-lo);line-height:1.7;'>Digital documentation systems that generate audit-ready packets automatically, eliminating manual data entry errors.<\/p><\/div><\/div><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-78262761 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"78262761\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2c22142d\" data-id=\"2c22142d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5bdaa31 elementor-widget elementor-widget-html\" data-id=\"5bdaa31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class='bp-sec-cta'><div class='bp-in'><div class='bp-cta'><span class='bp-lbl' style='position:relative;z-index:1;'>See it in action<\/span><h2 class='bp-h2' style='margin-bottom:20px;position:relative;z-index:1;'>Experience our monitoring technology first-hand<\/h2><p class='bp-text' style='max-width:440px;margin:0 auto 40px;text-align:center;position:relative;z-index:1;'>Request a live demonstration of our shipment tracking and temperature monitoring capabilities.<\/p><a href='\/contact' class='bp-btn-p' style='position:relative;z-index:1;'><i class='fas fa-envelope'><\/i> Request a Demo<\/a><\/div><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Technology &amp; Monitoring Cold chain integrity through real-time technology From sensor to dashboard &mdash; our pharma technology captures every data point in your shipment&apos;s journey, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1918,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"folder":[19],"class_list":["post-2844","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false},"uagb_author_info":{"display_name":"763538pwpadmin","author_link":"https:\/\/biopharma-logistics.com\/de\/author\/763538pwpadmin\/"},"uagb_comment_info":0,"uagb_excerpt":"Technology &amp; Monitoring Cold chain integrity through real-time technology From sensor to dashboard &mdash; our pharma technology captures every data point in your shipment&apos;s journey, [&hellip;]","_links":{"self":[{"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/pages\/2844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/comments?post=2844"}],"version-history":[{"count":35,"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/pages\/2844\/revisions"}],"predecessor-version":[{"id":3760,"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/pages\/2844\/revisions\/3760"}],"up":[{"embeddable":true,"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/pages\/1918"}],"wp:attachment":[{"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/media?parent=2844"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/biopharma-logistics.com\/de\/wp-json\/wp\/v2\/folder?post=2844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}