{"id":227779,"date":"2026-10-06T16:12:44","date_gmt":"2026-10-06T16:12:44","guid":{"rendered":"https:\/\/datatrue.com\/?page_id=227779"},"modified":"2026-10-06T16:19:35","modified_gmt":"2026-10-06T16:19:35","slug":"data-layer-unit-testing","status":"publish","type":"page","link":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/","title":{"rendered":"Data Layer Unit Testing"},"content":{"rendered":"\n<style id=\"dt-divi-integration\">body h1.entry-title.main_title{display:none !important}#main-content .container{width:100% !important;max-width:100% !important;padding-left:0 !important;padding-right:0 !important;padding-top:0 !important}#left-area{width:100% !important;float:none !important;padding:0 !important}#sidebar{display:none !important}#main-content .container:before{display:none !important}.yarpp-related,.yarpp.yarpp-related{display:none !important}#left-area article.et_pb_post{margin-bottom:0 !important}#dt-page p{padding-bottom:0}#dt-page :is(h1,h2,h3,h4,h5,h6){padding-bottom:0}#dt-page :is(ul,ol){padding:0;margin:0;list-style:none;line-height:inherit}#dt-page img{max-width:100%;height:auto}<\/style><style id=\"dt-page-css\">@import url('https:\/\/fonts.googleapis.com\/css2?family=Lato:wght@400;#dt-page 700;900&family=Work+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@500;600&display=swap');:root{--ink:#242923;--ink-soft:#55605A;--ink-faint:#8B958E;--mint:#0EA173;--mint-fill:#10B981;--mint-tint:#F3FAF7;--teal:#4C7E93;--teal-tint:#EAF2F4;--surface:#FFFFFF;--border:#DCE7E2;--draft:#B5791A;--draft-tint:#FBF1DF;--warn:#C0453B;--warn-tint:#FDF0EE;--shadow:0 24px 48px -28px rgba(36,41,35,0.28);}#dt-page,#dt-page *{box-sizing:border-box;}#dt-page{-webkit-text-size-adjust:100%;scroll-behavior:smooth;}#dt-page{margin:0;background:var(--surface);color:var(--ink);font-family:'Work Sans','Helvetica Neue',Arial,sans-serif;line-height:1.55;}#dt-page h1,#dt-page h2,#dt-page h3,#dt-page h4{font-family:'Lato','Helvetica Neue',Arial,sans-serif;color:var(--ink);margin:0;text-wrap:balance;}#dt-page p{margin:0;}#dt-page a{color:inherit;}#dt-page code{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:.86em;background:var(--mint-tint);border:1px solid #DCEDE5;border-radius:5px;padding:1px 6px;color:var(--ink);white-space:nowrap;}#dt-page .wrap{max-width:1120px;margin:0 auto;padding:0 32px;}#dt-page .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}#dt-page .breadcrumb{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.04em;color:var(--ink-faint);text-transform:uppercase;}#dt-page .breadcrumb ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px;}#dt-page .breadcrumb li{display:inline-flex;gap:6px;align-items:center;}#dt-page .breadcrumb li + li::before{content:\"\\203A\";color:#B9C4BE;}#dt-page .breadcrumb a{color:var(--teal);text-decoration:none;}#dt-page .breadcrumb a:hover{text-decoration:underline;}#dt-page .eyebrow{display:inline-flex;align-items:center;gap:8px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--mint);background:var(--mint-tint);border:1px solid #CFE9DF;padding:6px 12px 6px 10px;border-radius:999px;}#dt-page .eyebrow .dot{width:6px;height:6px;border-radius:50%;background:var(--mint-fill);}#dt-page .eyebrow .sep{color:#9CCFBA;}#dt-page .eyebrow.on-dark{background:rgba(255,255,255,0.1);border-color:rgba(255,255,255,0.18);color:#8FE3C3;}#dt-page .eyebrow.on-dark .dot{background:#6FE3B6;}#dt-page .section-head{max-width:64ch;}#dt-page .section-head h2{font-size:28px;font-weight:900;letter-spacing:-0.01em;line-height:1.2;}#dt-page .section-head p{margin-top:10px;color:var(--ink-soft);font-size:15px;line-height:1.6;}#dt-page .pc-head{padding:40px 0 0;}#dt-page .pc-head .eyebrow{margin-top:22px;}#dt-page .pc-head h1{margin-top:16px;font-size:40px;font-weight:900;letter-spacing:-0.015em;line-height:1.14;max-width:900px;}#dt-page .definition{position:relative;margin-top:28px;max-width:900px;background:var(--mint-tint);border:1px solid #CFE9DF;border-left:5px solid var(--mint-fill);border-radius:14px;padding:26px 34px 28px 32px;overflow:hidden;}#dt-page .definition::after{content:\"\\201C\";position:absolute;right:22px;top:-18px;font-family:'Lato',Georgia,serif;font-weight:900;font-size:132px;line-height:1;color:var(--mint-fill);opacity:.13;pointer-events:none;}#dt-page .def-kicker{display:flex;align-items:center;gap:8px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--mint);margin-bottom:10px;}#dt-page .def-kicker::before{content:\"\";width:16px;height:2px;background:var(--mint-fill);border-radius:2px;}#dt-page .def-text{position:relative;font-family:'Lato','Helvetica Neue',Arial,sans-serif;font-weight:700;font-size:19.5px;line-height:1.58;color:var(--ink);letter-spacing:-0.002em;}#dt-page .art-grid{display:grid;grid-template-columns:minmax(0,1fr) 248px;gap:72px;padding:44px 0 8px;align-items:start;}#dt-page .prose{max-width:700px;min-width:0;}#dt-page .prose>* + *{margin-top:16px;}#dt-page .prose .lede{font-size:17.5px;line-height:1.68;color:var(--ink);}#dt-page .prose h2{font-size:26px;font-weight:900;letter-spacing:-0.01em;line-height:1.22;margin-top:52px;scroll-margin-top:24px;}#dt-page .prose h2 + *{margin-top:14px;}#dt-page .prose h3{font-size:19px;font-weight:900;line-height:1.3;margin-top:30px;scroll-margin-top:24px;}#dt-page .prose h3 + *{margin-top:8px;}#dt-page .prose p{font-size:16px;line-height:1.72;color:var(--ink-soft);}#dt-page .prose strong{color:var(--ink);font-weight:600;}#dt-page .prose a,#dt-page .inline-link{color:var(--teal);font-weight:500;text-decoration:underline;text-decoration-color:#B8CFD8;text-underline-offset:3px;text-decoration-thickness:1px;}#dt-page .prose a:hover,#dt-page .inline-link:hover{text-decoration-color:var(--teal);}#dt-page .prose ul{list-style:none;margin-left:0;padding:0;}#dt-page .prose ul li{position:relative;padding-left:24px;font-size:16px;line-height:1.68;color:var(--ink-soft);}#dt-page .prose ul li + li{margin-top:8px;}#dt-page .prose ul li::before{content:\"\";position:absolute;left:4px;top:.72em;width:7px;height:7px;border-radius:50%;background:var(--mint-fill);}#dt-page .prose ol.steps{list-style:none;padding:0;counter-reset:step;}#dt-page .prose ol.steps li{position:relative;counter-increment:step;padding:2px 0 0 50px;font-size:16px;line-height:1.68;color:var(--ink-soft);min-height:32px;}#dt-page .prose ol.steps li + li{margin-top:16px;}#dt-page .prose ol.steps li::before{content:counter(step);position:absolute;left:0;top:0;width:32px;height:32px;border-radius:50%;background:var(--mint-tint);border:1px solid #CFE9DF;color:var(--mint);font-family:'Lato',sans-serif;font-weight:900;font-size:14px;display:flex;align-items:center;justify-content:center;}#dt-page .prose ol.steps li:not(:last-child)::after{content:\"\";position:absolute;left:15.5px;top:36px;bottom:-14px;width:1px;background:#D5E8DF;}#dt-page .prose ul.check-list li{padding:14px 18px 14px 50px;background:var(--surface);border:1px solid var(--border);border-radius:12px;}#dt-page .prose ul.check-list li + li{margin-top:10px;}#dt-page .prose ul.check-list li::before{content:\"\\2713\";left:16px;top:15px;width:22px;height:22px;background:var(--mint-tint);border:1px solid #CFE9DF;color:var(--mint);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;}#dt-page .prose ul.check-list li strong{font-family:'Lato',sans-serif;font-weight:900;}#dt-page .lead-stack{display:flex;flex-direction:column;gap:10px;}#dt-page .prose .lead-stack{margin-top:18px;}#dt-page .lead-card{border:1px solid var(--border);border-left:3px solid var(--mint-fill);border-radius:10px;padding:16px 20px;background:var(--surface);}#dt-page .lead-card p{font-size:15.5px;line-height:1.66;}#dt-page .lead-card .lead{display:block;font-family:'Lato',sans-serif;font-weight:900;font-size:16.5px;color:var(--ink);margin-bottom:4px;}#dt-page .next-read{display:flex;flex-wrap:wrap;gap:10px;}#dt-page .prose .next-read{margin-top:22px;}#dt-page .next-link{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--teal);text-decoration:none;background:var(--teal-tint);border:1px solid #D3E3E9;border-radius:999px;padding:9px 16px;}#dt-page .next-link:hover{border-color:var(--teal);}#dt-page .next-link svg{width:14px;height:14px;}#dt-page .visual-slot{border:1px dashed #C4D3CC;border-radius:14px;background:linear-gradient(180deg,#FBFDFC,#F4F8F6);padding:26px 24px;text-align:center;color:var(--ink-faint);display:flex;flex-direction:column;align-items:center;}#dt-page .prose .visual-slot{margin-top:26px;}#dt-page .visual-slot .vs-badge{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mint);background:var(--mint-tint);border:1px solid #CFE9DF;padding:3px 9px;border-radius:5px;margin-bottom:10px;}#dt-page .visual-slot .vs-title{font-family:'Lato',sans-serif;font-weight:700;font-size:14.5px;color:var(--ink-soft);}#dt-page .visual-slot .vs-desc{font-size:12.5px;margin-top:6px;max-width:52ch;line-height:1.5;}#dt-page .visual-slot.tall{min-height:220px;justify-content:center;}#dt-page .checklist{list-style:none;margin:22px 0 0;padding:0;display:flex;flex-direction:column;gap:14px;counter-reset:ck;}#dt-page .checklist>li{display:grid;grid-template-columns:44px minmax(0,1fr);gap:16px;border:1px solid var(--border);border-radius:14px;padding:22px 24px 22px 20px;background:var(--surface);}#dt-page .checklist .ck-num{width:40px;height:40px;border-radius:50%;background:var(--mint-fill);color:#fff;font-family:'Lato',sans-serif;font-weight:900;font-size:17px;display:flex;align-items:center;justify-content:center;}#dt-page .checklist .ck-body>* + *{margin-top:12px;}#dt-page .prose .checklist h3{margin-top:6px;font-size:18.5px;}#dt-page .checklist .ck-body p,#dt-page .checklist .ck-body li{font-size:15.5px;}#dt-page .checklist-wrap{margin-top:22px;}#dt-page .checklist-head{display:flex;align-items:center;gap:10px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .checklist-head .bar{flex:1;height:1px;background:var(--border);}#dt-page .toc{position:sticky;top:24px;border-left:1px solid var(--border);padding:4px 0 4px 20px;}#dt-page .toc-label{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:12px;}#dt-page .toc ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;}#dt-page .toc a{display:block;font-size:13.5px;line-height:1.4;color:var(--ink-soft);text-decoration:none;}#dt-page .toc a:hover{color:var(--mint);}#dt-page .faq-block{padding:12px 0 8px;}#dt-page .faq-block h2{font-size:26px;font-weight:900;margin-bottom:18px;scroll-margin-top:24px;}#dt-page .faq-list{max-width:80ch;display:flex;flex-direction:column;gap:10px;}#dt-page .faq-item{border:1px solid var(--border);border-radius:10px;padding:2px 18px;background:var(--surface);}#dt-page .faq-item summary{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 0;font-size:15.5px;font-weight:700;color:var(--ink);cursor:pointer;list-style:none;font-family:'Lato',sans-serif;}#dt-page .faq-item summary::-webkit-details-marker{display:none;}#dt-page .faq-item summary::after{content:\"+\";font-size:20px;font-weight:400;color:var(--mint);flex-shrink:0;}#dt-page .faq-item[open] summary::after{content:\"\\2013\";}#dt-page .faq-item p{padding-bottom:16px;font-size:15px;color:var(--ink-soft);line-height:1.65;}#dt-page .band{padding:52px 0;}#dt-page .band.alt{background:var(--mint-tint);border-top:1px solid #E4F1EB;border-bottom:1px solid #E4F1EB;}#dt-page .band.rule{border-top:1px solid var(--border);}#dt-page .tile-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:22px;}#dt-page .tile-grid.two{grid-template-columns:repeat(2,minmax(0,1fr));}#dt-page .tile{position:relative;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 44px 18px 20px;text-decoration:none;color:var(--ink);transition:border-color .15s,background .15s;}#dt-page .tile:hover{border-color:var(--mint-fill);}#dt-page .tile::after{content:\"\\2192\";position:absolute;right:18px;top:17px;color:var(--ink-faint);font-size:15px;transition:color .15s,transform .15s;}#dt-page .tile:hover::after{color:var(--mint);transform:translateX(2px);}#dt-page .tile .t-label{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:6px;}#dt-page .tile h3{font-size:16px;font-weight:900;line-height:1.3;}#dt-page .tile p{margin-top:6px;font-size:13.5px;color:var(--ink-soft);line-height:1.55;}#dt-page .tile.feature{grid-column:span 2;background:var(--surface);border-color:#BFDFD1;box-shadow:var(--shadow);padding:24px 52px 24px 26px;}#dt-page .tile.feature h3{font-size:21px;}#dt-page .tile.feature p{font-size:14.5px;}#dt-page .tile.feature .t-label{color:var(--mint);}#dt-page .tile .t-lane{align-self:flex-start;margin-top:10px;}#dt-page .market{margin-top:22px;max-width:900px;display:grid;grid-template-columns:minmax(0,1fr);border:1px solid #CFE0E6;border-radius:14px;overflow:hidden;}#dt-page .market-main{background:var(--teal-tint);padding:24px 28px 26px;position:relative;}#dt-page .market-code{position:absolute;right:22px;top:18px;font-family:'Lato',sans-serif;font-weight:900;font-size:44px;letter-spacing:-0.02em;color:var(--teal);opacity:.18;line-height:1;}#dt-page .market-main .market-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--teal);}#dt-page .market-main h2{margin-top:10px;font-size:22px;font-weight:900;}#dt-page .market-main p.m-line{margin-top:8px;max-width:60ch;font-size:17px;color:var(--ink);line-height:1.6;}#dt-page .market-main .m-src{margin-top:12px;font-size:12px;color:var(--ink-faint);}#dt-page .market-main .m-src a{color:var(--teal);}#dt-page .market-laws{background:var(--surface);padding:20px 22px;}#dt-page .market-laws .ml-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:10px;}#dt-page .mini-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px;}#dt-page .mini-tile{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--border);border-radius:9px;padding:10px 14px;text-decoration:none;color:var(--ink);font-size:14px;font-weight:600;line-height:1.3;}#dt-page .mini-tile:hover{border-color:var(--mint-fill);background:var(--mint-tint);}#dt-page .mini-tile::after{content:\"\\2192\";color:var(--ink-faint);font-weight:400;}#dt-page .mini-tile .mt-type{display:block;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:9.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:2px;}#dt-page .market-laws .ml-empty{font-size:13px;color:var(--ink-faint);line-height:1.5;}#dt-page .jump{margin-top:22px;max-width:900px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border:1px solid var(--border);border-radius:14px;background:var(--surface);}#dt-page .jump-col{padding:20px 24px 22px;}#dt-page .jump-col + .jump-col{border-left:1px solid var(--border);}#dt-page .jump-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .jump-col h2{margin-top:6px;font-size:16.5px;font-weight:900;}#dt-page .chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;}#dt-page .chip{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:7px 13px;text-decoration:none;}#dt-page .chip:hover{border-color:var(--mint-fill);background:var(--mint-tint);color:var(--mint);}#dt-page .chip::after{content:\"\\2192\";color:var(--ink-faint);font-weight:400;font-size:12px;}#dt-page .pillar-body{padding-top:40px;padding-bottom:8px;}#dt-page .pillar-body .prose{max-width:720px;}#dt-page .module{margin-top:22px;}#dt-page .card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;}#dt-page .card-grid.three{grid-template-columns:repeat(3,minmax(0,1fr));}#dt-page .r-card{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:14px;padding:22px 22px 20px;background:var(--surface);}#dt-page .r-card .rc-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mint);margin-bottom:8px;}#dt-page .r-card h3{font-size:17px;font-weight:900;line-height:1.3;}#dt-page .r-card p{margin-top:8px;font-size:14.5px;color:var(--ink-soft);line-height:1.62;flex:1;}#dt-page .r-card .rc-go{margin-top:14px;font-size:13.5px;font-weight:600;color:var(--teal);text-decoration:none;display:inline-flex;gap:6px;align-items:center;}#dt-page .r-card .rc-go:hover{text-decoration:underline;}#dt-page .r-card.numbered{position:relative;padding-top:58px;}#dt-page .r-card.numbered .rc-n{position:absolute;left:22px;top:18px;width:30px;height:30px;border-radius:50%;background:var(--mint-fill);color:#fff;font-family:'Lato',sans-serif;font-weight:900;font-size:14px;display:flex;align-items:center;justify-content:center;}#dt-page .r-card.region{text-decoration:none;color:var(--ink);position:relative;}#dt-page .r-card.region:hover,#dt-page a.r-card:hover{border-color:var(--mint-fill);}#dt-page .r-card.region .rc-code{font-family:'Lato',sans-serif;font-weight:900;font-size:26px;color:var(--teal);opacity:.35;line-height:1;margin-bottom:10px;}#dt-page .feat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;}#dt-page .feat{border:1px solid var(--border);border-radius:12px;padding:20px;background:var(--surface);}#dt-page .feat .f-check{width:26px;height:26px;border-radius:50%;background:var(--mint-tint);color:var(--mint);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;margin-bottom:12px;border:1px solid #CFE9DF;}#dt-page .feat h3{font-size:15.5px;font-weight:900;margin-bottom:6px;line-height:1.3;}#dt-page .feat p{font-size:14px;color:var(--ink-soft);line-height:1.62;}#dt-page .feat p a{color:var(--teal);}#dt-page .feat.wide{grid-column:1 \/ -1;}#dt-page .cat-nav{margin-top:26px;display:flex;flex-wrap:wrap;gap:10px;}#dt-page .cat-nav a{display:inline-flex;align-items:center;gap:9px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft);background:var(--surface);border:1px solid var(--border);padding:8px 14px;border-radius:999px;text-decoration:none;transition:border-color .15s,color .15s,background .15s;}#dt-page .cat-nav a:hover{border-color:var(--mint-fill);color:var(--mint);background:var(--mint-tint);}#dt-page .cat-nav a .count{font-size:11px;color:var(--ink-faint);font-weight:500;letter-spacing:.02em;}#dt-page .hub-intro{margin-top:26px;max-width:76ch;font-size:16px;color:var(--ink-soft);line-height:1.65;}#dt-page .cat{padding:48px 0 8px;border-top:1px solid var(--border);scroll-margin-top:24px;}#dt-page .cat:first-of-type{border-top:none;}#dt-page .cat .eyebrow{margin-bottom:14px;}#dt-page .cat-note{margin-top:16px;font-size:14px;color:var(--ink-soft);max-width:76ch;}#dt-page .hub-callout{margin-top:4px;background:var(--teal-tint);border:1px solid #CFE0E6;border-left:4px solid var(--teal);border-radius:12px;padding:22px 26px;max-width:82ch;}#dt-page .hub-callout .hc-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--teal);margin-bottom:6px;}#dt-page .hub-callout h2{font-size:20px;font-weight:900;line-height:1.3;}#dt-page .hub-callout p{margin-top:8px;font-size:15px;line-height:1.62;color:var(--ink);}#dt-page .hub-callout a{color:var(--teal);font-weight:600;}#dt-page .closing-section{padding:56px 0 72px;}#dt-page .closing{background:var(--ink);padding:56px 32px;text-align:center;border-radius:14px;}#dt-page .closing h2{color:#fff;font-size:28px;font-weight:900;margin-top:16px;}#dt-page .closing .single-cta{margin-top:24px;display:flex;flex-direction:column;align-items:center;}#dt-page .region-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--mint-fill);color:#fff;font-family:'Lato',sans-serif;font-weight:700;font-size:15px;border:none;border-radius:8px;padding:14px 24px;min-width:260px;text-decoration:none;letter-spacing:.005em;line-height:1.3;cursor:pointer;}#dt-page .region-btn:hover{background:#0C9A6E;}#dt-page .region-btn svg{width:15px;height:15px;flex-shrink:0;}#dt-page .trial-fine{margin-top:14px;font-size:13px;color:#9DB3A8;line-height:1.5;}@media (max-width:980px){#dt-page .art-grid{grid-template-columns:minmax(0,1fr);gap:0;}#dt-page .toc{display:none;}#dt-page .prose{max-width:none;}#dt-page .tile-grid{grid-template-columns:repeat(2,minmax(0,1fr));}#dt-page .card-grid.three{grid-template-columns:repeat(2,minmax(0,1fr));}}@media (max-width:820px){#dt-page .market,#dt-page .jump{grid-template-columns:minmax(0,1fr);}#dt-page .jump-col + .jump-col{border-left:none;border-top:1px solid var(--border);}#dt-page .card-grid,#dt-page .feat-grid{grid-template-columns:minmax(0,1fr);}#dt-page .card-grid.three{grid-template-columns:minmax(0,1fr);}}@media (max-width:680px){#dt-page .wrap,#dt-page .notice .wrap{padding-left:20px;padding-right:20px;}#dt-page .pc-head{padding-top:28px;}#dt-page .pc-head h1{font-size:30px;}#dt-page .definition{padding:22px 20px 22px 20px;}#dt-page .def-text{font-size:16.5px;}#dt-page .prose h2{font-size:23px;margin-top:42px;}#dt-page .tile-grid,#dt-page .tile-grid.two{grid-template-columns:minmax(0,1fr);}#dt-page .tile.feature{grid-column:auto;}#dt-page .checklist>li{grid-template-columns:minmax(0,1fr);gap:10px;padding:18px;}#dt-page .closing{padding:44px 20px;}#dt-page .closing h2{font-size:24px;}#dt-page .region-btn{width:100%;min-width:0;}#dt-page code{white-space:normal;word-break:break-word;}}#dt-page .prose a.next-link,#dt-page .prose a.rc-go,#dt-page .prose a.tile,#dt-page .prose a.chip,#dt-page .prose a.mini-tile,#dt-page .prose a.r-card{text-decoration:none;}#dt-page .prose a.next-link:hover{text-decoration:none;}#dt-page .rc-go svg,#dt-page .next-link svg,#dt-page .chip svg{width:14px;height:14px;flex-shrink:0;}#dt-page .cat.faq-cat{padding-top:36px;}#dt-page .def-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px;}#dt-page .def-top .def-kicker{margin-bottom:0;}#dt-page .verdict{position:relative;z-index:1;display:inline-flex;align-items:center;gap:10px;background:var(--surface);border:1px solid #CFE9DF;border-radius:999px;padding:6px 16px 6px 12px;margin-right:64px;}#dt-page .verdict .v-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .verdict .v-v{font-family:'Lato',sans-serif;font-weight:900;font-size:17px;color:var(--ink);}#dt-page .glance{margin-top:14px;max-width:900px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:18px 24px 20px;}#dt-page .glance .g-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--teal);margin-bottom:10px;}#dt-page .glance dl{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;}#dt-page .glance .g-row{border-left:3px solid var(--teal-tint);padding-left:14px;}#dt-page .glance dt{font-family:'Lato',sans-serif;font-weight:900;font-size:14px;color:var(--ink);margin-bottom:4px;}#dt-page .glance dd{margin:0;font-size:15px;line-height:1.6;color:var(--ink-soft);}@media (max-width:680px){#dt-page .glance dl{grid-template-columns:minmax(0,1fr);}#dt-page .verdict{margin-right:0;}}#dt-page .shot-img{margin:28px 0 0;}#dt-page .shot-img img{display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:14px;background:#F4F8F6;box-shadow:var(--shadow);}#dt-page .shot-img figcaption{margin-top:10px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .diagram{margin:28px 0 0;border:1px solid var(--border);border-radius:14px;padding:20px 20px 16px;background:var(--surface);}#dt-page .diagram svg{display:block;width:100%;height:auto;}#dt-page .diagram .dg-narrow{display:none;}#dt-page .diagram figcaption{margin-top:14px;font-size:13.5px;line-height:1.55;color:var(--ink-soft);}#dt-page .diagram .dg-tag{display:block;margin-top:8px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);}@media (max-width:680px){#dt-page .diagram .dg-wide{display:none;}#dt-page .diagram .dg-narrow{display:block;max-width:360px;margin:0 auto;}#dt-page .diagram{padding:16px 12px 14px;}}#dt-page .compare-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:14px;}#dt-page table.compare-table{width:100%;border-collapse:collapse;font-size:14px;min-width:600px;}#dt-page .compare-table th,#dt-page .compare-table td{padding:14px 18px;text-align:left;border-bottom:1px solid var(--border);vertical-align:top;}#dt-page .compare-table thead th{font-family:'Lato',sans-serif;font-weight:900;font-size:13px;color:var(--ink);background:var(--mint-tint);white-space:nowrap;}#dt-page .compare-table tbody tr:last-child td{border-bottom:none;}#dt-page .compare-table td.cap{font-weight:600;color:var(--ink);max-width:220px;}#dt-page .compare-table td.note{color:var(--ink-soft);font-size:12.5px;max-width:320px;}#dt-page .sources-intro{font-size:13.5px;color:var(--ink-soft);line-height:1.6;max-width:80ch;}#dt-page .byline{margin-top:18px;display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-size:13.5px;color:var(--ink-faint);}#dt-page .byline .by-who{color:var(--ink-soft);font-weight:600;}#dt-page .byline .by-sep{width:4px;height:4px;border-radius:50%;background:#C4D3CC;}#dt-page .nod{margin-top:16px;max-width:900px;display:flex;align-items:flex-start;gap:12px;border:1px solid var(--border);border-radius:12px;padding:13px 18px;background:var(--surface);}#dt-page .nod-mark{flex-shrink:0;width:26px;height:26px;border-radius:50%;background:var(--teal-tint);border:1px solid #CFE0E6;color:var(--teal);display:flex;align-items:center;justify-content:center;margin-top:1px;}#dt-page .nod-mark svg{width:14px;height:14px;}#dt-page .nod p{font-size:14px;line-height:1.6;color:var(--ink-soft);}#dt-page .nod .nod-k{display:block;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--teal);margin-bottom:2px;}#dt-page .inline-cta{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;border:1px solid #CFE0E6;background:var(--teal-tint);border-radius:14px;padding:20px 22px 20px 24px;}#dt-page .prose .inline-cta{margin-top:26px;}#dt-page .inline-cta .ic-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--teal);}#dt-page .inline-cta .ic-t{margin-top:4px;font-family:'Lato',sans-serif;font-weight:900;font-size:17px;line-height:1.35;color:var(--ink);}#dt-page .prose a.ic-go,#dt-page a.ic-go{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;background:var(--surface);border:1px solid #BCD3DC;color:var(--teal);font-weight:600;font-size:14px;padding:10px 16px;border-radius:9px;text-decoration:none;}#dt-page a.ic-go:hover{border-color:var(--teal);}#dt-page a.ic-go svg{width:14px;height:14px;}#dt-page .code-block{border-radius:12px;overflow:hidden;border:1px solid #2F3630;background:var(--ink);}#dt-page .prose .code-block{margin-top:20px;}#dt-page .code-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px 8px 16px;background:#2E352F;}#dt-page .code-lang{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8FE3C3;}#dt-page .code-copy{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#C9D3CD;background:transparent;border:1px solid #4A544D;border-radius:6px;padding:4px 9px;cursor:pointer;}#dt-page .code-copy:hover{color:#fff;border-color:#8FE3C3;}#dt-page .code-block pre{margin:0;padding:16px 18px 18px;overflow-x:auto;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:13px;line-height:1.7;color:#E7EEEA;}#dt-page .code-block pre code{background:none;border:none;padding:0;color:inherit;font-size:inherit;white-space:pre;}#dt-page .code-block .tk-tag{color:#8FE3C3;}#dt-page .code-block .tk-attr{color:#A9CBD8;}#dt-page .code-block .tk-str{color:#F0D9A8;}#dt-page .code-block .tk-com{color:#8B958E;}#dt-page .code-note{margin-top:8px;font-size:13px;color:var(--ink-faint);}#dt-page figure.shot{margin:0;}#dt-page .prose figure.shot{margin-top:24px;}#dt-page .shot-frame{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--surface);box-shadow:var(--shadow);}#dt-page .shot-bar{display:flex;gap:6px;padding:9px 12px;background:#F4F7F5;border-bottom:1px solid var(--border);}#dt-page .shot-bar i{width:9px;height:9px;border-radius:50%;background:#D5DFDA;}#dt-page .shot-frame img{display:block;width:100%;height:auto;}#dt-page .shot-frame .visual-slot{border:none;border-radius:0;margin:0;min-height:220px;justify-content:center;}#dt-page .prose .shot-frame .visual-slot{margin-top:0;}#dt-page figure.shot figcaption{margin-top:10px;font-size:13px;color:var(--ink-faint);line-height:1.5;display:flex;gap:8px;}#dt-page figure.shot figcaption b{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);white-space:nowrap;padding-top:1px;}#dt-page .dt-wrap{border:1px solid var(--border);border-radius:14px;overflow-x:auto;background:var(--surface);}#dt-page .prose .dt-wrap,#dt-page .prose .compare-table-wrap{margin-top:20px;}#dt-page table.data-table{width:100%;border-collapse:collapse;font-size:14px;}#dt-page .data-table caption{caption-side:bottom;text-align:left;padding:10px 16px 12px;font-size:12.5px;color:var(--ink-faint);border-top:1px solid var(--border);}#dt-page .data-table th,#dt-page .data-table td{padding:13px 16px;text-align:left;border-bottom:1px solid var(--border);vertical-align:top;line-height:1.55;}#dt-page .data-table thead th{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-soft);background:#F7FAF8;white-space:nowrap;}#dt-page .data-table tbody tr:last-child td{border-bottom:none;}#dt-page .data-table tbody th{font-family:'Lato',sans-serif;font-weight:900;font-size:14.5px;color:var(--ink);}#dt-page .data-table td{color:var(--ink-soft);}#dt-page .compare-table td{color:var(--ink-soft);line-height:1.55;}#dt-page .compare-table tbody td:first-child{font-weight:600;color:var(--ink);white-space:nowrap;}#dt-page .compare-table code,#dt-page .data-table code{white-space:normal;}#dt-page .rail{position:sticky;top:24px;display:flex;flex-direction:column;gap:26px;}#dt-page .rail .toc{position:static;}#dt-page .rail-links{border-left:1px solid var(--border);padding:4px 0 4px 20px;}#dt-page .rail-links ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;}#dt-page .rail-links a{display:flex;gap:8px;align-items:flex-start;font-size:13.5px;line-height:1.4;color:var(--teal);font-weight:500;text-decoration:none;}#dt-page .rail-links a::before{content:\"\\2192\";color:var(--ink-faint);font-size:12px;margin-top:1px;}#dt-page .rail-links a:hover{text-decoration:underline;}#dt-page .toc a.active{color:var(--mint);font-weight:600;}#dt-page .src-list{margin:18px 0 0;padding:0;list-style:none;counter-reset:src;columns:2;column-gap:40px;}#dt-page .src-list li{counter-increment:src;break-inside:avoid;position:relative;padding-left:30px;font-size:13px;color:var(--ink-faint);line-height:1.55;margin-bottom:10px;}#dt-page .src-list li::before{content:counter(src);position:absolute;left:0;top:1px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;color:var(--mint);background:var(--mint-tint);border:1px solid #CFE9DF;border-radius:4px;min-width:20px;text-align:center;padding:0 3px;}#dt-page .src-list a{color:var(--teal);text-decoration:none;font-weight:500;word-break:break-word;}#dt-page .src-list a:hover{text-decoration:underline;}#dt-page .cat-pill{display:inline-flex;align-items:center;gap:6px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;padding:3px 8px;border-radius:5px;white-space:nowrap;border:1px solid;}#dt-page .cat-pill::before{content:\"\";width:6px;height:6px;border-radius:50%;background:currentColor;}#dt-page .cat-pill.ad{color:var(--ink);background:#F1F3F2;border-color:#DDE3E0;}#dt-page .cat-pill.an{color:var(--teal);background:var(--teal-tint);border-color:#CFE0E6;}#dt-page .cat-pill.sr{color:#3E6A7C;background:var(--surface);border-color:#BCD3DC;border-style:dashed;}#dt-page .cat-pill.ct{color:var(--mint);background:var(--mint-tint);border-color:#CFE9DF;}#dt-page .consent{display:inline-flex;align-items:flex-start;gap:7px;font-size:13px;line-height:1.4;color:var(--ink);font-weight:600;}#dt-page .consent .c-dot{flex-shrink:0;margin-top:4px;width:9px;height:9px;border-radius:50%;background:var(--warn);box-shadow:0 0 0 3px var(--warn-tint);}#dt-page .consent.early .c-dot{background:var(--teal);box-shadow:0 0 0 3px var(--teal-tint);}#dt-page .risk{display:inline-flex;align-items:center;gap:10px;}#dt-page .risk-meter{display:inline-grid;grid-template-columns:repeat(3,14px);gap:3px;}#dt-page .risk-meter i{height:8px;border-radius:2px;background:#E3EAE6;}#dt-page .risk-label{font-family:'Lato',sans-serif;font-weight:900;font-size:15px;letter-spacing:.01em;}#dt-page .risk.low .risk-meter i:nth-child(1){background:var(--mint-fill);}#dt-page .risk.low .risk-label{color:var(--mint);}#dt-page .risk.medium .risk-meter i:nth-child(-n+2){background:var(--teal);}#dt-page .risk.medium .risk-label{color:var(--teal);}#dt-page .risk.high .risk-meter i{background:var(--warn);}#dt-page .risk.high .risk-label{color:var(--warn);}#dt-page .risk.lg .risk-meter{grid-template-columns:repeat(3,26px);gap:4px;}#dt-page .risk.lg .risk-meter i{height:10px;}#dt-page .risk.lg .risk-label{font-size:20px;}#dt-page .risk-chip{display:inline-flex;align-items:center;gap:8px;border:1px solid;border-radius:999px;padding:5px 12px 5px 10px;background:var(--surface);}#dt-page .risk-chip.high{border-color:#EFC9C4;background:var(--warn-tint);}#dt-page .risk-chip.medium{border-color:#CFE0E6;background:var(--teal-tint);}#dt-page .risk-chip.low{border-color:#CFE9DF;background:var(--mint-tint);}#dt-page .risk-chip .rk{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:9.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .risk-chip .risk-label{font-size:13px;}#dt-page .risk-chip .risk-meter{grid-template-columns:repeat(3,9px);gap:2px;}#dt-page .risk-chip .risk-meter i{height:6px;}#dt-page .ref-band{padding:44px 0 12px;}#dt-page .ref-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap;}#dt-page .ref-head .section-head{max-width:70ch;}#dt-page .ref-note{margin-top:10px;font-size:14px;color:var(--ink-soft);line-height:1.6;max-width:80ch;}#dt-page .ref-note b{color:var(--ink);font-weight:600;}#dt-page .ref-tools{margin-top:22px;display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:12px;border:1px solid var(--border);border-radius:14px;background:#F7FAF8;position:sticky;top:0;z-index:5;}#dt-page .ref-search{position:relative;flex:1 1 220px;max-width:300px;}#dt-page .ref-search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--ink-faint);}#dt-page .ref-search input{width:100%;font:inherit;font-size:14px;color:var(--ink);background:var(--surface);border:1px solid var(--border);border-radius:9px;padding:9px 12px 9px 34px;}#dt-page .ref-search input:focus{outline:none;border-color:var(--mint-fill);box-shadow:0 0 0 3px rgba(16,185,129,.15);}#dt-page .ref-filters{display:flex;flex-wrap:wrap;gap:6px;}#dt-page .fchip{font:inherit;font-size:13px;font-weight:600;color:var(--ink-soft);background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:7px 12px;cursor:pointer;display:inline-flex;gap:6px;align-items:center;}#dt-page .fchip .n{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;color:var(--ink-faint);font-weight:500;}#dt-page .fchip:hover{border-color:var(--mint-fill);}#dt-page .fchip[aria-pressed=\"true\"]{background:var(--ink);border-color:var(--ink);color:#fff;}#dt-page .fchip[aria-pressed=\"true\"] .n{color:#9DB3A8;}#dt-page .fchip.toggle{border-style:dashed;}#dt-page .fchip.toggle[aria-pressed=\"true\"]{background:var(--mint-tint);color:var(--mint);border-color:var(--mint-fill);border-style:solid;}#dt-page .ref-view{margin-left:auto;display:inline-flex;background:var(--surface);border:1px solid var(--border);border-radius:9px;padding:3px;}#dt-page .ref-view button{font:inherit;font-size:13px;font-weight:600;color:var(--ink-soft);background:none;border:none;border-radius:6px;padding:6px 12px;cursor:pointer;display:inline-flex;gap:6px;align-items:center;}#dt-page .ref-view button svg{width:14px;height:14px;}#dt-page .ref-view button[aria-pressed=\"true\"]{background:var(--mint-tint);color:var(--mint);}#dt-page .ref-count{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;color:var(--ink-faint);letter-spacing:.04em;margin-top:12px;}#dt-page table.tagref{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px;}#dt-page .tagref-wrap{margin-top:10px;border:1px solid var(--border);border-radius:14px;background:var(--surface);overflow:hidden;}#dt-page .tagref thead th{position:relative;text-align:left;vertical-align:bottom;padding:12px 14px;background:#F7FAF8;border-bottom:1px solid var(--border);font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);line-height:1.35;}#dt-page .tagref thead th button{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:6px;}#dt-page .tagref thead th button:focus-visible{outline:2px solid var(--mint-fill);outline-offset:3px;border-radius:3px;}#dt-page .tagref thead th .sort-ic{display:inline-flex;flex-direction:column;gap:2px;opacity:.45;}#dt-page .tagref thead th .sort-ic::before,#dt-page .tagref thead th .sort-ic::after{content:\"\";border-left:4px solid transparent;border-right:4px solid transparent;}#dt-page .tagref thead th .sort-ic::before{border-bottom:4px solid currentColor;}#dt-page .tagref thead th .sort-ic::after{border-top:4px solid currentColor;}#dt-page .tagref thead th[aria-sort=\"ascending\"] .sort-ic,#dt-page .tagref thead th[aria-sort=\"descending\"] .sort-ic{opacity:1;color:var(--mint);}#dt-page .tagref thead th[aria-sort=\"ascending\"] .sort-ic::after{opacity:.25;}#dt-page .tagref thead th[aria-sort=\"descending\"] .sort-ic::before{opacity:.25;}#dt-page .tagref tbody td,#dt-page .tagref tbody th{padding:15px 14px;border-bottom:1px solid var(--border);vertical-align:top;text-align:left;line-height:1.55;color:var(--ink-soft);}#dt-page .tagref tbody tr:last-child>*{border-bottom:none;}#dt-page .tagref tbody tr:hover>*{background:#FBFDFC;}#dt-page .tagref tbody th{font-weight:400;min-width:150px;}#dt-page .tagref .t-name{display:block;font-family:'Lato',sans-serif;font-weight:900;font-size:15px;color:var(--ink);text-decoration:none;line-height:1.3;}#dt-page a.t-name:hover{color:var(--mint);}#dt-page .tagref .t-name + .cat-pill{margin-top:7px;}#dt-page .tagref .t-prof{display:inline-flex;margin-top:8px;font-size:12px;font-weight:600;color:var(--teal);text-decoration:none;gap:4px;}#dt-page .tagref .t-prof:hover{text-decoration:underline;}#dt-page .tagref td.collects{min-width:260px;max-width:360px;}#dt-page .tagref td.goes{min-width:120px;color:var(--ink);}#dt-page .tagref td.detect{min-width:130px;}#dt-page .tagref td.detect code{white-space:normal;font-size:11.5px;line-height:1.9;}#dt-page .tagref col.c-collect{width:36%;}#dt-page mark.hl{background:#DDF3EA;color:inherit;border-radius:3px;padding:0 1px;}#dt-page .hashed{display:inline;background:linear-gradient(transparent 62%,#FDE3DF 62%);color:var(--ink);}#dt-page .ref-empty{display:none;padding:28px;text-align:center;color:var(--ink-faint);font-size:14px;}#dt-page .ref-empty.show{display:block;}#dt-page .ref-legend{margin-top:14px;display:flex;flex-wrap:wrap;gap:8px 22px;font-size:12.5px;color:var(--ink-faint);}#dt-page .ref-legend span{display:inline-flex;align-items:center;gap:8px;}#dt-page .gated-note{margin-top:18px;max-width:900px;background:var(--mint-tint);border:1px solid #CFE9DF;border-left:4px solid var(--mint-fill);border-radius:12px;padding:16px 22px;font-size:14.5px;line-height:1.65;color:var(--ink-soft);}#dt-page .gated-note strong{color:var(--ink);}#dt-page .gated-note a{color:var(--teal);font-weight:600;}#dt-page .consent-band{padding:52px 0;background:var(--mint-tint);border-top:1px solid #E4F1EB;border-bottom:1px solid #E4F1EB;margin-top:40px;}#dt-page .consent-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:48px;align-items:start;margin-top:4px;}#dt-page .consent-grid .lead-p{font-family:'Lato',sans-serif;font-weight:700;font-size:20px;line-height:1.5;color:var(--ink);}#dt-page .consent-grid .lead-p + p{margin-top:14px;font-size:15.5px;line-height:1.7;color:var(--ink-soft);}#dt-page .consent-grid p a{color:var(--teal);font-weight:600;}#dt-page .setting-stack{display:flex;flex-direction:column;gap:12px;}#dt-page .setting{background:var(--surface);border:1px solid #CFE9DF;border-radius:14px;padding:20px 22px;display:grid;grid-template-columns:40px minmax(0,1fr);gap:14px;}#dt-page .setting .s-n{width:36px;height:36px;border-radius:50%;background:var(--mint-fill);color:#fff;font-family:'Lato',sans-serif;font-weight:900;font-size:15px;display:flex;align-items:center;justify-content:center;}#dt-page .setting .s-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--mint);margin-bottom:5px;}#dt-page .setting p{font-size:15px;line-height:1.66;color:var(--ink-soft);}#dt-page .setting-intro{font-size:15.5px;line-height:1.7;color:var(--ink-soft);}#dt-page .deck-band{padding:56px 0 20px;overflow:hidden;}#dt-page .deck-top{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap;}#dt-page .deck-nav{display:flex;align-items:center;gap:10px;}#dt-page .deck-pos{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:12px;color:var(--ink-soft);letter-spacing:.04em;min-width:62px;text-align:center;}#dt-page .deck-btn{width:42px;height:42px;border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--ink);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:border-color .15s,background .15s;}#dt-page .deck-btn:hover:not(:disabled){border-color:var(--mint-fill);background:var(--mint-tint);color:var(--mint);}#dt-page .deck-btn:disabled{opacity:.35;cursor:default;}#dt-page .deck-btn svg{width:16px;height:16px;}#dt-page .deck{margin-top:22px;display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-left:max(32px,calc((100vw - 1120px)\/2 + 32px));padding:6px max(32px,calc((100vw - 1120px)\/2 + 32px)) 26px;scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;}#dt-page .deck::-webkit-scrollbar{display:none;}#dt-page .deck:focus-visible{outline:2px solid var(--mint-fill);outline-offset:-2px;}#dt-page .tag-card{flex:0 0 360px;scroll-snap-align:start;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 1px 0 rgba(36,41,35,.03);transition:border-color .2s,box-shadow .2s,transform .2s;scroll-margin-top:80px;}#dt-page .tag-card.is-hidden{display:none;}#dt-page .tag-card:target,#dt-page .tag-card.flash{border-color:var(--mint-fill);box-shadow:var(--shadow);}#dt-page .tc-head{padding:20px 22px 16px;border-bottom:1px solid var(--border);position:relative;}#dt-page .tc-num{position:absolute;right:20px;top:18px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;color:var(--ink-faint);letter-spacing:.04em;}#dt-page .tc-head h3{font-size:21px;font-weight:900;line-height:1.2;margin-top:10px;padding-right:40px;}#dt-page .tc-goes{margin-top:6px;font-size:13.5px;color:var(--ink-soft);}#dt-page .tc-goes b{color:var(--ink);font-weight:600;}#dt-page .tc-body{padding:16px 22px 4px;display:flex;flex-direction:column;gap:14px;flex:1;}#dt-page .tc-row .tc-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:4px;}#dt-page .tc-row p{font-size:14px;line-height:1.6;color:var(--ink-soft);}#dt-page .tc-row code{white-space:normal;font-size:11.5px;}#dt-page .tc-duo{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding-top:12px;border-top:1px dashed var(--border);}#dt-page .tc-more{border-top:1px solid var(--border);margin-top:auto;}#dt-page .tc-more summary{list-style:none;cursor:pointer;padding:13px 22px;font-size:13.5px;font-weight:600;color:var(--teal);display:flex;align-items:center;justify-content:space-between;}#dt-page .tc-more summary::-webkit-details-marker{display:none;}#dt-page .tc-more summary::after{content:\"+\";font-size:18px;font-weight:400;color:var(--mint);}#dt-page .tc-more[open] summary::after{content:\"\\2013\";}#dt-page .tc-more .tc-full{padding:0 22px 16px;font-size:14px;line-height:1.65;color:var(--ink-soft);}#dt-page .tc-src{margin-top:10px;font-size:12px;line-height:1.5;color:var(--ink-faint);font-style:italic;}#dt-page .tc-foot{padding:14px 22px 18px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:#FBFDFC;border-radius:0 0 16px 16px;}#dt-page .tc-foot a{font-size:13.5px;font-weight:600;color:var(--teal);text-decoration:none;display:inline-flex;gap:6px;align-items:center;}#dt-page .tc-foot a:hover{text-decoration:underline;}#dt-page .tc-foot .tc-noprof{font-size:12.5px;color:var(--ink-faint);}#dt-page .deck-dots{display:flex;justify-content:center;gap:6px;margin-top:4px;flex-wrap:wrap;}#dt-page .deck-dots button{width:8px;height:8px;padding:0;border-radius:99px;border:none;background:#D5DFDA;cursor:pointer;transition:width .2s,background .2s;}#dt-page .deck-dots button[aria-current=\"true\"]{width:22px;background:var(--mint-fill);}#dt-page .deck-hint{display:none;}#dt-page .deck.as-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible;scroll-snap-type:none;padding-left:0;padding-right:0;}#dt-page .deck-band.grid-mode .deck{max-width:1120px;margin-left:auto;margin-right:auto;padding:6px 32px 26px;}#dt-page .deck-band.grid-mode .deck-nav,#dt-page .deck-band.grid-mode .deck-dots{display:none;}#dt-page .prof-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:56px;padding:40px 0 8px;align-items:start;}#dt-page .prof-glance{position:sticky;top:24px;border:1px solid var(--border);border-radius:16px;background:var(--surface);box-shadow:var(--shadow);overflow:hidden;}#dt-page .pg-head{padding:18px 20px 16px;background:var(--ink);color:#fff;}#dt-page .pg-head .pg-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#8FE3C3;}#dt-page .pg-head .pg-name{margin-top:6px;font-family:'Lato',sans-serif;font-weight:900;font-size:20px;line-height:1.2;}#dt-page .pg-risk{padding:18px 20px;border-bottom:1px solid var(--border);}#dt-page .pg-risk.high{background:var(--warn-tint);}#dt-page .pg-risk.medium{background:var(--teal-tint);}#dt-page .pg-risk.low{background:var(--mint-tint);}#dt-page .pg-risk .pg-rk{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:8px;display:flex;justify-content:space-between;}#dt-page .pg-risk .pg-rk a{color:var(--teal);text-decoration:none;letter-spacing:.04em;}#dt-page .pg-risk .pg-rk a:hover{text-decoration:underline;}#dt-page .prof-glance dl{margin:0;}#dt-page .prof-glance .pg-row{padding:12px 20px;border-bottom:1px solid var(--border);}#dt-page .prof-glance .pg-row:last-child{border-bottom:none;}#dt-page .prof-glance dt{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:3px;}#dt-page .prof-glance dd{margin:0;font-size:14.5px;line-height:1.5;color:var(--ink);font-weight:500;}#dt-page .prof-glance dd code{white-space:normal;font-size:12px;}#dt-page .yn-mark{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font-size:11px;font-weight:700;margin-right:6px;vertical-align:-3px;}#dt-page .yn-mark.y{background:var(--warn-tint);color:var(--warn);border:1px solid #EFC9C4;}#dt-page .yn-mark.n{background:var(--mint-tint);color:var(--mint);border:1px solid #CFE9DF;}#dt-page .yn-mark.live{background:var(--mint-tint);color:var(--mint);border:1px solid #CFE9DF;}#dt-page .risk-h2{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}#dt-page .risk-note{margin-top:14px;font-size:13px;color:var(--ink-faint);line-height:1.55;border-top:1px dashed var(--border);padding-top:12px;}#dt-page .rubric{margin-top:18px;border:1px solid var(--border);border-radius:12px;overflow:hidden;}#dt-page .rubric-k{padding:10px 16px;background:#F7FAF8;border-bottom:1px solid var(--border);font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-soft);}#dt-page .detect-card{margin-top:18px;border:1px solid var(--border);border-radius:12px;padding:16px 18px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;}#dt-page .detect-card .dc-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);margin-right:4px;}#dt-page .tagtype{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:12px;font-weight:500;color:var(--ink);background:var(--mint-tint);border:1px solid #CFE9DF;border-radius:6px;padding:4px 9px;}#dt-page .hub-lede{margin-top:22px;max-width:76ch;font-size:16px;color:var(--ink-soft);line-height:1.7;}#dt-page .profile-strip{margin-top:14px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;}#dt-page .pchip{display:flex;flex-direction:column;gap:8px;border:1px solid var(--border);border-radius:12px;padding:14px 14px 12px;text-decoration:none;color:var(--ink);background:var(--surface);transition:border-color .15s;}#dt-page .pchip:hover{border-color:var(--mint-fill);}#dt-page .pchip .pc-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:9.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .pchip .pc-n{font-family:'Lato',sans-serif;font-weight:900;font-size:15px;line-height:1.25;}#dt-page .strip-label{margin-top:22px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);display:flex;align-items:center;gap:10px;}#dt-page .strip-label .bar{flex:1;height:1px;background:var(--border);}#dt-page .soon{margin-top:18px;display:flex;align-items:center;gap:12px;border:1px dashed #C4D3CC;border-radius:12px;padding:14px 18px;font-size:14px;color:var(--ink-faint);max-width:82ch;}#dt-page .soon .soon-k{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);background:#F1F3F2;border-radius:5px;padding:3px 8px;white-space:nowrap;}#dt-page .rel-list{margin-top:22px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;}#dt-page .rel-item{border:1px solid var(--border);border-radius:12px;padding:18px 20px;background:var(--surface);}#dt-page .rel-item .ri-k{font-family:'Lato',sans-serif;font-weight:900;font-size:15.5px;color:var(--ink);}#dt-page .rel-item p{margin-top:6px;font-size:14px;line-height:1.6;color:var(--ink-soft);}#dt-page .rel-item a{color:var(--teal);font-weight:600;}#dt-page .rel-item .plain{color:var(--ink);font-weight:600;}@media (max-width:980px){#dt-page .prof-grid{grid-template-columns:minmax(0,1fr);gap:28px;}#dt-page .prof-glance{position:static;order:-1;}#dt-page .rail{display:none;}#dt-page .consent-grid{grid-template-columns:minmax(0,1fr);gap:24px;}#dt-page .deck.as-grid{grid-template-columns:repeat(2,minmax(0,1fr));}#dt-page .profile-strip{grid-template-columns:repeat(3,minmax(0,1fr));}#dt-page .rel-list{grid-template-columns:minmax(0,1fr);}}@media (max-width:820px){#dt-page .tagref-wrap{border:none;background:none;overflow:visible;}#dt-page table.tagref,#dt-page .tagref tbody,#dt-page .tagref tr,#dt-page .tagref td,#dt-page .tagref tbody th{display:block;width:auto;}#dt-page .tagref thead{display:none;}#dt-page .tagref tbody tr{border:1px solid var(--border);border-radius:14px;background:var(--surface);margin-bottom:10px;padding:16px 18px 6px;}#dt-page .tagref tbody tr.is-hidden{display:none;}#dt-page .tagref tbody td,#dt-page .tagref tbody th{border:none;padding:0 0 12px;min-width:0;max-width:none;}#dt-page .tagref tbody tr:hover>*{background:none;}#dt-page .tagref tbody td::before{content:attr(data-label);display:block;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:3px;}#dt-page .ref-tools{position:static;}#dt-page .ref-view{margin-left:0;}#dt-page .src-list{columns:1;}#dt-page .inline-cta{grid-template-columns:minmax(0,1fr);}}@media (max-width:680px){#dt-page .tag-card{flex-basis:86vw;}#dt-page .deck{gap:12px;scroll-padding-left:20px;padding-left:20px;padding-right:20px;}#dt-page .deck-hint{display:flex;align-items:center;gap:8px;margin-top:10px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);}#dt-page .deck-top .deck-nav .deck-btn{width:38px;height:38px;}#dt-page .deck.as-grid{grid-template-columns:minmax(0,1fr);}#dt-page .deck-band.grid-mode .deck{padding:6px 20px 26px;}#dt-page .ref-search{max-width:none;flex-basis:100%;}#dt-page .ref-filters{flex-wrap:nowrap;overflow-x:auto;margin:0 -12px;padding:0 12px 2px;scrollbar-width:none;}#dt-page .ref-filters::-webkit-scrollbar{display:none;}#dt-page .fchip{white-space:nowrap;}#dt-page .profile-strip{grid-template-columns:repeat(2,minmax(0,1fr));}#dt-page .tc-duo{grid-template-columns:minmax(0,1fr);}#dt-page .consent-grid .lead-p{font-size:18px;}}@media (prefers-reduced-motion:reduce){#dt-page .deck{scroll-behavior:auto;}#dt-page .tag-card{transition:none;}}#dt-page .tagref .t-prof{display:flex;width:max-content;align-items:center;}#dt-page .tagref .t-prof svg,#dt-page .tc-foot a svg{width:13px;height:13px;flex-shrink:0;}#dt-page .tc-foot a{white-space:nowrap;}#dt-page .tagref th[scope=\"row\"]{width:190px;}#dt-page .tagref td.consent-cell{min-width:150px;}#dt-page .tagref td.detect code,#dt-page .tc-row code{display:inline-block;white-space:nowrap;margin:0 4px 5px 0;line-height:1.5;}#dt-page .consent .c-dot{background:var(--teal);box-shadow:0 0 0 3px var(--teal-tint);}#dt-page .consent.early .c-dot{background:var(--ink);box-shadow:0 0 0 3px #E6EBE8;}#dt-page .deck-hint svg{width:12px;height:12px;}@media (max-width:820px){#dt-page .tagref td.collects,#dt-page .tagref td.detect{display:none;}#dt-page .tagref tbody tr{display:grid;grid-template-columns:1fr 1fr;column-gap:14px;padding:14px 16px 4px;}#dt-page .tagref tbody th{grid-column:1 \/ -1;display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;}#dt-page .tagref .t-name{width:100%;}#dt-page .tagref .t-name::after{content:\" \\2192\";color:var(--mint);font-weight:700;}#dt-page .tagref .t-name + .cat-pill{margin-top:0;}#dt-page .tagref .t-prof{margin-top:0;}#dt-page .tagref tbody td{font-size:13px;}#dt-page .tagref-mobile-note{display:block !important;}}#dt-page .tagref-mobile-note{display:none;margin-top:8px;font-size:13px;color:var(--ink-faint);}#dt-page .risk-h2 .risk.lg .risk-label{font-size:26px;}#dt-page .risk-h2 .risk.lg .risk-meter{margin-top:3px;}#dt-page .code-block pre code{white-space:pre-wrap;overflow-wrap:anywhere;}#dt-page .data-table tbody th{min-width:150px;}#dt-page .pchip .pc-risk{padding-top:8px;border-top:1px dashed var(--border);}#dt-page .pchip .risk-label{font-size:13px;}#dt-page .rel-item a{text-decoration:underline;text-decoration-color:#B8CFD8;text-underline-offset:3px;}#dt-page .closing .closing-body{margin:12px auto 0;max-width:60ch;font-size:15.5px;line-height:1.65;color:#C9D3CD;}#dt-page .closing .trial-fine a{color:#8FE3C3;text-decoration:underline;text-underline-offset:3px;}#dt-page .tile.is-soon{border-style:dashed;border-color:#C4D3CC;background:#FBFCFB;cursor:default;}#dt-page .tile.is-soon::after{content:none;}#dt-page .tile.is-soon:hover{border-color:#C4D3CC;}#dt-page .tile.is-soon h3{color:var(--ink-soft);}#dt-page .tile.is-soon p{color:var(--ink-faint);}#dt-page .soon-pill{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;margin-top:12px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-soft);background:#F1F3F2;border:1px solid #DDE3E0;border-radius:999px;padding:4px 10px;}#dt-page .soon-pill::before{content:\"\";width:6px;height:6px;border-radius:50%;border:1.5px solid var(--ink-faint);}#dt-page .tile .t-label.hub{color:var(--mint);}#dt-page .cat.cat-row{padding:36px 0 32px;}#dt-page .cr-grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:40px;align-items:start;}#dt-page .cr-head .eyebrow{margin-bottom:12px;}#dt-page .cr-head .section-head h2{font-size:24px;}#dt-page .cr-tiles{display:flex;flex-direction:column;gap:12px;padding-top:4px;}#dt-page .cr-tiles .tile h3{font-size:18px;}@media (max-width:900px){#dt-page .cr-grid{grid-template-columns:minmax(0,1fr);gap:18px;}}#dt-page .tile:not([href])::after{content:none;}#dt-page div.tile:hover{border-color:var(--border);}#dt-page .tile.is-gated::after{content:none;}#dt-page .tile.is-gated:hover{border-color:var(--border);}#dt-page .r1-fig{margin:22px 0 6px;}#dt-page .r1-fig img{display:block;max-width:100%;height:auto;}#dt-page .r1-diagram img{width:100%;max-width:960px;border:1px solid var(--border,#E3EAE6);border-radius:12px;background:#fff;}#dt-page .r1-hero img,#dt-page .r1-card img{width:100%;max-width:640px;aspect-ratio:640\/440;border-radius:14px;}#dt-page .r1-crop>img{display:block;width:100%;height:auto;}#dt-page .r1-crop{border:1px solid var(--border,#E3EAE6);border-radius:12px;overflow:hidden;background:#fff;}#dt-page .r1-shots .r1-crop + .r1-crop{margin-top:14px;}#dt-page .r1-fig figcaption{margin-top:10px;font-size:13.5px;color:var(--ink-soft,#51605A);line-height:1.55;max-width:80ch;}#dt-page .r1-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}#dt-page .r1-cards img{width:100%;aspect-ratio:640\/440;border-radius:12px;}#dt-page .head-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,440px);gap:40px;align-items:start;}#dt-page .head-grid .r1-fig{margin-top:6px;}#dt-page .r1-hero-wide{margin-top:28px;}#dt-page .ty-hero-grid.r1-onecol{grid-template-columns:1fr;}@media (max-width:900px){#dt-page .head-grid{grid-template-columns:1fr;}#dt-page .r1-cards{grid-template-columns:1fr;}}#dt-page .head-grid.hv2{grid-template-columns:minmax(0,1fr) minmax(0,440px);grid-template-areas:\"title media\" \"rest media\";grid-template-rows:auto 1fr;column-gap:48px;row-gap:0;align-items:start;}#dt-page .head-grid.hv2>.head-title{grid-area:title;}#dt-page .head-grid.hv2>.head-media{grid-area:media;}#dt-page .head-grid.hv2>.head-rest{grid-area:rest;}#dt-page .head-media{display:flex;flex-direction:column;gap:18px;}#dt-page .head-media .r1-fig{margin:6px 0 0;}#dt-page .head-media .definition{margin-top:0;max-width:none;}#dt-page .head-media .def-text{font-size:16px;line-height:1.55;}#dt-page .head-lead{margin-top:24px;}#dt-page .head-rest>.head-lead{margin-top:0;}#dt-page .head-rest{padding-top:24px;}#dt-page .head-rest>.hero-copy>p:first-child{margin-top:0;}#dt-page .head-rest>.hero-copy{margin-top:0;}#dt-page .head-lead h2{font-size:22px;line-height:1.3;margin:0 0 10px;}#dt-page .head-lead p{margin:0 0 14px;}#dt-page .head-lead .section-head{margin:0;max-width:none;}#dt-page .ew-head{padding-bottom:56px;}#dt-page .def-kicker::before{content:none;}#dt-page .definition::after{content:none;}#dt-page .definition .def-text{font-weight:400;letter-spacing:0;}#dt-page .definition .def-text strong{font-weight:700;}#dt-page .hero-link{margin-top:24px;}#dt-page .prof-grid.no-aside{grid-template-columns:minmax(0,780px);}#dt-page .case-hero .head-media .prof-glance{position:static;width:100%;}#dt-page .art-grid>article.prose>h2:first-child,#dt-page .pillar-body>.prose:first-child>h2:first-child{margin-top:0;}#dt-page .head-lead p.lede,#dt-page .head-rest p.lede{font-size:inherit;}#dt-page .case-layout.no-aside{grid-template-columns:minmax(0,780px);grid-template-areas:\"main\";}#dt-page .case-hero .head-lead .definition{margin-top:22px;}#dt-page .case-hero .head-lead .def-text{font-size:16px;line-height:1.55;}#dt-page .case-hero .head-media .case-aside{position:static;}#dt-page .case-hero .head-media .factbox{margin:0;width:100%;max-width:none;}#dt-page .case-hero .head-media .case-aside{width:100%;}@media (max-width:900px){#dt-page .head-grid.hv2{display:flex;flex-direction:column;gap:0;}#dt-page .head-grid.hv2 .head-media{display:contents;}#dt-page .head-grid.hv2>.head-title{order:1;}#dt-page .head-grid.hv2 .head-media .definition{order:2;margin-top:22px;}#dt-page .head-grid.hv2 .head-media .r1-fig{order:3;margin-top:22px;}#dt-page .head-grid.hv2>.head-rest{order:4;}#dt-page .head-grid.case-hero>.head-rest{order:2;}#dt-page .head-grid.case-hero .head-media>*{order:3;margin-top:22px;}}#dt-page .tcta-band{padding:48px 0;}#dt-page .tcta{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:40px;align-items:center;border-radius:16px;padding:40px 0 40px 40px;background:var(--ink);color:#fff;text-align:left;}#dt-page .tcta::after{content:\"\";position:absolute;right:-120px;top:-120px;width:360px;height:360px;border-radius:50%;background:radial-gradient(circle,rgba(16,185,129,.28),rgba(16,185,129,0) 70%);pointer-events:none;}#dt-page .tcta .eyebrow.on-dark{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.18);color:#8FE3C3;border-radius:999px;padding:6px 12px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;margin-bottom:14px;}#dt-page .tcta .eyebrow.on-dark .dot{width:6px;height:6px;border-radius:50%;background:#6FE3B6;}#dt-page .tcta h2{font-size:28px;font-weight:900;letter-spacing:-0.01em;line-height:1.2;color:#fff;margin:0;}#dt-page .tcta .tcta-sub{margin:12px 0 0;font-size:15px;line-height:1.6;color:#CFE0D8;}#dt-page .tcta-k{margin-top:22px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8FA69A;}#dt-page .tcta-list{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:8px;font-size:14px;}#dt-page .tcta-list li{display:flex;gap:8px;align-items:flex-start;line-height:1.45;color:#fff;font-weight:600;padding-bottom:8px;border-bottom:1px solid rgba(255,255,255,.08);}#dt-page .tcta-more{list-style:none;margin:10px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:8px 18px;font-size:13.5px;color:#E4EEE9;}#dt-page .tcta-more li{display:flex;gap:7px;align-items:flex-start;line-height:1.45;}#dt-page .tcta svg{width:14px;height:14px;flex-shrink:0;margin-top:3px;color:#6FE3B6;}#dt-page .tcta-act{margin-top:26px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;}#dt-page .tcta-btn{display:inline-flex;align-items:center;gap:8px;background:var(--mint-fill);color:#fff;font-family:'Lato',sans-serif;font-weight:700;font-size:16px;border-radius:8px;padding:14px 22px;text-decoration:none;}#dt-page .tcta-btn:hover{background:#0C9A6E;}#dt-page .tcta-btn svg{width:16px;height:16px;margin:0;color:#fff;}#dt-page .tcta-g2{font-size:12.5px;color:#CFE0D8;}#dt-page .tcta-g2 strong{color:#fff;}#dt-page .tcta-g2 .stars{color:#E0A32E;letter-spacing:1px;font-size:11px;}#dt-page .tcta-fine{margin:12px 0 0;font-size:12.5px;line-height:1.55;max-width:52ch;color:#8FA69A;}#dt-page .tcta-shot{align-self:stretch;display:flex;align-items:center;}#dt-page .tcta-frame{width:calc(100% + 140px);border-radius:10px 0 0 10px;overflow:hidden;box-shadow:0 30px 60px -30px rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.14);border-right:none;background:#fff;}#dt-page .tcta-frame .bar{height:26px;display:flex;align-items:center;gap:6px;padding:0 12px;background:#EEF2F0;border-bottom:1px solid var(--border);}#dt-page .tcta-frame .bar i{width:8px;height:8px;border-radius:50%;background:#C9D3CE;}#dt-page .tcta-frame img{display:block;width:100%;height:auto;}#dt-page .tcta-cap{margin-top:10px;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:#8FA69A;}@media (max-width:900px){#dt-page .tcta{grid-template-columns:1fr;padding:32px 24px 0;gap:28px;}#dt-page .tcta-shot{margin:0 -24px 0 0;}#dt-page .tcta-frame{width:100%;}}@media (max-width:600px){#dt-page .tcta h2{font-size:23px;}#dt-page .tcta-more{grid-template-columns:1fr;}#dt-page .tcta-btn{width:100%;justify-content:center;}}#dt-page .definition .def-text{font-size:16px;line-height:1.6;}<\/style><div id=\"dt-page\" class=\"dt-page\"><section class=\"pc-head\"><div class=\"wrap\"> <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\"><ol><li><a href=\"\/en\/\">Home<\/a><\/li><li><a href=\"https:\/\/datatrue.com\/en\/resources\/\">Resources<\/a><\/li><li><a href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/\">Analytics &amp; Data Quality<\/a><\/li><li aria-current=\"page\">Data layer unit testing<\/li><\/ol><\/nav><div class=\"head-grid hv2\"><div class=\"head-title\"> <span class=\"eyebrow\"><span class=\"dot\"><\/span>Analytics &amp; Data Quality <span class=\"sep\">\/<\/span> How-to guide<\/span> <h1>How to Unit Test Data Layer Tags<\/h1> <p class=\"byline\"><span class=\"by-who\">DataTrue Team<\/span><span class=\"by-sep\"><\/span><span>Updated September 2026<\/span><\/p> <\/div><div class=\"head-media\"><figure class=\"r1-fig r1-hero\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/H-DATALAYER.png\" alt=\"\" width=\"640\" height=\"440\"><\/figure><div class=\"definition\" id=\"definition\"><p class=\"def-kicker\">Summary<\/p><p class=\"def-text\"><strong>Data layer unit testing<\/strong> is a way to verify that the right tags fire, with the right data, when a specific data layer event happens, including edge cases you cannot easily reproduce on a live site. Instead of manually stepping through the site, you force the data layer to update in a test and assert on the tags that fire.<\/p><\/div><\/div><div class=\"head-rest\"><div class=\"head-lead\"><p>The sections below explain what data layer unit testing is, why it is worth doing, and how to unit test a data layer event. They finish with the edge cases you can test this way, and how to test your data layer tags before they reach production.<\/p><\/div><\/div><\/div><\/div><\/section> <div class=\"wrap\"><div class=\"art-grid\"><article class=\"prose\"> <h2 id=\"what-is-data-layer-unit-testing\">What is data layer unit testing?<\/h2> <p>A data layer brings real advantages: better data consistency, improved reliability, and more flexibility in sending data to different analytics vendors. It also adds one more possible failure point in your analytics pipeline, which means you need to test it regularly to be sure it collects and sends complete, accurate data.<\/p> <p>Validating the values passed from your data layer to your tag manager is one half of that, covered in our <a href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-testing\/\">data layer testing<\/a> guide. Data layer unit testing is the other half: verifying that the data layer fires the correct tags in response to user actions. For a primer on the data layer itself, see <a href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layers\/\">what is a data layer<\/a>.<\/p> <h2 id=\"why-unit-test-data-layer-tags\">Why unit test data layer tags?<\/h2> <p>When a customer adds an item to their cart, you want your data layer to record that event, along with details like item name, price, and quantity, and fire a tag to pass that information to your analytics tools. If the tag does not fire, or fires incorrectly, you can be missing critical data.<\/p> <p>You can trigger some data layer updates by visiting your site and stepping through the actions manually, or more efficiently by running a Simulation Test. But some scenarios are difficult or impossible to test directly:<\/p> <ul><li>Edge cases, such as out-of-stock products or missing and misformatted product data.<\/li><li>Updates that occur only in controlled areas or pages, such as order confirmation.<\/li><li>Updates from workflows that are not yet built or stable in production.<\/li><\/ul> <p>For these, you need a way to force the data layer to update so you can verify the correct tags fire in response.<\/p> <h2 id=\"how-do-you-unit-test-a-data-layer-event\">How do you unit test a data layer event?<\/h2> <p>The approach is to force the event in a controlled test and then assert on the tag that should fire.<\/p> <ol class=\"steps\"><li><strong>Add a Run Script step to a Simulation Test.<\/strong> The Run Script step pushes the target event and its data into the data layer, whether or not the action was actually completed on the page. For an &#8220;add to cart&#8221; scenario, the script might look like this:<\/li><\/ol> <div class=\"code-block\"><div class=\"code-bar\"><span class=\"code-lang\">javascript<\/span><button class=\"code-copy\" type=\"button\">Copy<\/button><\/div><pre><code>\/\/ Run Script step: force the data layer to fire an addToCart event dataLayer.push({ event: \"addToCart\", ecommerce: { items: [ { item_name: \"Camo Hoodie\", item_id: \"SKU_12345\", price: 49.00, quantity: 1 } ] } });<\/code><\/pre><\/div> <ol class=\"steps\"><li><strong>Add a Tag Validation to the Run Script step.<\/strong> With the event forced, the Tag Validation checks that the expected tag fires when the data layer updates, and that it carries the right data.<\/li><li><strong>Add more Run Script steps for variations and edge cases.<\/strong> You can add as many Run Script steps as you need to test variations of the event (such as adding multiple products), related events (such as removing an item from the cart), and the edge cases and controlled-area actions that are hard to complete on a live site.<\/li><\/ol> <h2 id=\"what-edge-cases-can-you-test-this-way\">What edge cases can you test this way?<\/h2> <p>Because you force the data layer directly, you can cover situations you could not reliably reach by clicking through the site:<\/p><figure class=\"r1-fig r1-shot\"><div class=\"r1-crop\" style=\"max-width:890px\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/data-layer-edge-case-crop.png\" alt=\"A DataTrue test step that pushes edge-case values to the data layer, such as an empty currency, a null price and an empty array.\" width=\"890\" height=\"715\" loading=\"lazy\"><\/div><\/figure> <ul><li>Out-of-stock products, and missing or misformatted product data.<\/li><li>Updates that only happen on controlled pages, such as an order-confirmation page.<\/li><li>Workflows that are not yet in production, or not yet stable, so you can test them before launch.<\/li><\/ul> <p>This is also why data layer unit testing fits a developer or CI\/CD workflow: you can assert on tag behaviour as part of a build, before changes reach production.<\/p> <h2 id=\"use-datatrue-for-data-layer-unit-testing\">Use DataTrue for data layer unit testing<\/h2> <p>DataTrue&#8217;s Simulation Tests, with Run Script steps and Tag Validations, are how you force a data layer event and confirm the right tags fire with the right data. This pairs with automated <a href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-testing\/\">data layer testing<\/a> for validating the values themselves, and with the <a href=\"https:\/\/datatrue.com\/en\/resources\/tags\/what-is-a-tag-audit\/\">tag audit guide<\/a> for the broader health of your tags. DataTrue also supports <a href=\"\/en\/platform\/pre-publish-tag-testing\/\">pre-publish testing<\/a> and <a href=\"\/en\/platform\/apis-cicd-integrations\/\">CI\/CD integration<\/a>, so these checks can run before a release.<\/p> <h2 id=\"test-your-data-layer-tags-before-they-reach-production\">Test your data layer tags before they reach production<\/h2><p>DataTrue lets you force data layer events and assert on the tags that fire, on your live site and in a build, so you can catch a broken tag before it costs you data. See how it works on the <a href=\"\/en\/platform\/web-analytics-testing\/\">web analytics testing<\/a> page.<\/p><section class=\"faq-block\" aria-labelledby=\"questions\"><h2 id=\"questions\">Questions<\/h2><div class=\"faq-list\"><details class=\"faq-item\" open><summary>What is data layer unit testing?<\/summary><p>Data layer unit testing verifies that the right tags fire, with the right data, when a specific data layer event happens. Instead of stepping through the site manually, you force the data layer to update in a test and assert on the tags that fire, including edge cases you cannot easily reproduce live.<\/p><\/details><details class=\"faq-item\"><summary>How is data layer unit testing different from data layer testing?<\/summary><p>Data layer testing validates the values passed from your data layer to your tag manager. Data layer unit testing verifies that the data layer fires the correct tags in response to an event. One checks the data is right, the other checks the right tags react to it.<\/p><\/details><details class=\"faq-item\"><summary>How do you test an edge case that is hard to reproduce?<\/summary><p>You add a Run Script step to a Simulation Test that pushes the event and its data straight into the data layer, whether or not the action was completed on the page, then add a Tag Validation to confirm the expected tag fires. This lets you cover out-of-stock products, order-confirmation pages, and workflows not yet in production.<\/p><\/details><details class=\"faq-item\"><summary>What is a Run Script step?<\/summary><p>A Run Script step is a step in a DataTrue Simulation Test that runs JavaScript, such as a <code>dataLayer.push()<\/code>, to force the data layer into a specific state. You then attach a Tag Validation to check the tag that should fire in response does fire correctly.<\/p><\/details><\/div><\/section> <\/article> <aside class=\"rail\" aria-label=\"On this page\"><div class=\"toc\"><p class=\"toc-label\">On this page<\/p><ol><li><a href=\"#what-is-data-layer-unit-testing\">What is data layer unit testing?<\/a><\/li><li><a href=\"#why-unit-test-data-layer-tags\">Why unit test data layer tags?<\/a><\/li><li><a href=\"#how-do-you-unit-test-a-data-layer-event\">How do you unit test a data layer event?<\/a><\/li><li><a href=\"#what-edge-cases-can-you-test-this-way\">What edge cases can you test this way?<\/a><\/li><li><a href=\"#use-datatrue-for-data-layer-unit-testing\">Use DataTrue for data layer unit testing<\/a><\/li><li><a href=\"#test-your-data-layer-tags-before-they-reach-production\">Test your data layer tags before they reach production<\/a><\/li><li><a href=\"#questions\">Questions<\/a><\/li><li><a href=\"#related\">Related guides<\/a><\/li><\/ol><\/div><div class=\"rail-links\"><p class=\"toc-label\">Related<\/p><ul><li><a href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-testing\/\">Data layer testing<\/a><\/li><li><a href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layers\/\">What is a data layer?<\/a><\/li><li><a href=\"https:\/\/datatrue.com\/en\/resources\/tags\/what-is-a-tag-audit\/\">What is a tag audit?<\/a><\/li><li><a href=\"\/en\/resources\/analytics\/ga4-event-tracking\/\">GA4 event tracking<\/a><\/li><\/ul><\/div><\/aside> <\/div><\/div> <section class=\"band alt\" aria-labelledby=\"related\"><div class=\"wrap\"><div class=\"section-head\"><h2 id=\"related\">Related guides<\/h2><\/div><div class=\"tile-grid\"><a class=\"tile\" href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-testing\/\"><span class=\"t-label\">Guide<\/span><h3>Data layer testing<\/h3><\/a><a class=\"tile\" href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layers\/\"><span class=\"t-label\">Explainer<\/span><h3>What is a data layer?<\/h3><\/a><a class=\"tile\" href=\"https:\/\/datatrue.com\/en\/resources\/tags\/what-is-a-tag-audit\/\"><span class=\"t-label\">Guide<\/span><h3>What is a tag audit?<\/h3><\/a><a class=\"tile\" href=\"\/en\/resources\/analytics\/ga4-event-tracking\/\"><span class=\"t-label\">Guide<\/span><h3>GA4 event tracking<\/h3><\/a><\/div><\/div><\/section> <section class=\"tcta-band\"><div class=\"wrap\"><div class=\"tcta\"> <div class=\"tcta-copy\"><span class=\"eyebrow on-dark\"><span class=\"dot\"><\/span>30-day free trial<\/span><h2>Know what your tags send, page by page<\/h2><p class=\"tcta-sub\">DataTrue runs real journeys on your site and checks each tag&#8217;s data against what you expect, field by field. A missing event or a wrong value shows up in a test before it reaches a report.<\/p> <div class=\"tcta-k\">What DataTrue checks<\/div><ul class=\"tcta-list\"><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>Every page, with coverage scans<\/li><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>Scheduled runs, with alerts when a result changes<\/li><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>Full journeys, like checkout and signup, in each consent state<\/li><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>What each tag sent, field by field<\/li><\/ul> <div class=\"tcta-k\">Also in the full platform<\/div><ul class=\"tcta-more\"><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>PII detection with test personas<\/li><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>iOS and Android app testing<\/li><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>Pre-publish testing for GTM and Adobe Tags<\/li><li><svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>REST API, plus Slack and Jira alerts<\/li><\/ul> <div class=\"tcta-act\"><a class=\"tcta-btn\" href=\"https:\/\/datatrue.com\/en\/start-free-trial\/\">Start a free 30-day trial <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8h10M9 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/a><span class=\"tcta-g2\"><span class=\"stars\">\u2605\u2605\u2605\u2605\u2605<\/span> <strong>4.6\/5<\/strong> on G2<\/span><\/div> <p class=\"tcta-fine\">The full platform, every feature, free for 30 days.<\/p><\/div> <div class=\"tcta-shot\"><div style=\"width:100%\"><div class=\"tcta-frame\"><div class=\"bar\"><i><\/i><i><\/i><i><\/i><\/div><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/journey-simulation-payload.png\" alt=\"A DataTrue journey step reading what a GA4 page view sent, with each property checked\" width=\"1402\" height=\"876\" loading=\"lazy\"><\/div><div class=\"tcta-cap\">A journey step checking what a GA4 tag sent<\/div><\/div><\/div> <\/div><\/div><\/section> <script> (function(){var links=[].slice.call(document.querySelectorAll('.toc a'));if(!links.length||!('IntersectionObserver' in window))return; var map={};links.forEach(function(a){map[a.getAttribute('href').slice(1)]=a;}); var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){links.forEach(function(l){l.classList.remove('active')});var a=map[e.target.id];if(a)a.classList.add('active');}})},{rootMargin:'-10% 0px -75% 0px'}); Object.keys(map).forEach(function(id){var el=document.getElementById(id);if(el)io.observe(el);});})(); <\/script><script> document.querySelectorAll('.code-copy').forEach(function(b){b.addEventListener('click',function(){var t=b.closest('.code-block').querySelector('code').innerText;try{navigator.clipboard.writeText(t);b.textContent='Copied';setTimeout(function(){b.textContent='Copy'},1400);}catch(e){}});}); <\/script><\/div><script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"HowTo\",\"name\":\"How to unit test a data layer event\",\"description\":\"How to verify the correct tags fire on a data layer event using a DataTrue Simulation Test with Run Script steps and Tag Validations.\",\"step\":[{\"@type\":\"HowToStep\",\"name\":\"Add a Run Script step\",\"text\":\"Add a Run Script step to a Simulation Test that pushes the target event and its data into the data layer, whether or not the action was completed on the page.\"},{\"@type\":\"HowToStep\",\"name\":\"Add a Tag Validation\",\"text\":\"Add a Tag Validation to the Run Script step to check the expected tag fires when the data layer updates, and that it carries the right data.\"},{\"@type\":\"HowToStep\",\"name\":\"Add variations and edge cases\",\"text\":\"Add more Run Script steps to test variations, related events, and edge cases such as out-of-stock products, order-confirmation pages, and workflows not yet in production.\"}]}<\/script><script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is data layer unit testing?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Data layer unit testing verifies that the right tags fire, with the right data, when a specific data layer event happens. Instead of stepping through the site manually, you force the data layer to update in a test and assert on the tags that fire, including edge cases you cannot easily reproduce live.\"}},{\"@type\":\"Question\",\"name\":\"How is data layer unit testing different from data layer testing?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Data layer testing validates the values passed from your data layer to your tag manager. Data layer unit testing verifies that the data layer fires the correct tags in response to an event. One checks the data is right, the other checks the right tags react to it.\"}},{\"@type\":\"Question\",\"name\":\"How do you test an edge case that is hard to reproduce?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"You add a Run Script step to a Simulation Test that pushes the event and its data straight into the data layer, whether or not the action was completed on the page, then add a Tag Validation to confirm the expected tag fires. This lets you cover out-of-stock products, order-confirmation pages, and workflows not yet in production.\"}},{\"@type\":\"Question\",\"name\":\"What is a Run Script step?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A Run Script step is a step in a DataTrue Simulation Test that runs JavaScript, such as a dataLayer.push(), to force the data layer into a specific state. You then attach a Tag Validation to check the tag that should fire in response does fire correctly.\"}}]}<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Home Resources Analytics &amp; Data Quality Data layer unit testing Analytics &amp; Data Quality \/ How-to guide How to Unit Test Data Layer Tags DataTrue TeamUpdated September 2026 Summary Data layer unit testing is a way to verify that the right tags fire, with the right data, when a specific data layer event happens, including [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"parent":227747,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-227779","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Unit Test Data Layer Tags (Automated) | DataTrue<\/title>\n<meta name=\"description\" content=\"Data layer unit testing verifies the right tags fire, with the right data, when a data layer event happens, including edge cases you cannot reproduce live.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Unit Test Data Layer Tags (Automated) | DataTrue\" \/>\n<meta property=\"og:description\" content=\"Data layer unit testing verifies the right tags fire, with the right data, when a data layer event happens, including edge cases you cannot reproduce live.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/\" \/>\n<meta property=\"og:site_name\" content=\"DataTrue\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/datatruedigital\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-06T16:19:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/datatrue.com\/wp-content\/uploads\/2022\/04\/New-DT-Logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1328\" \/>\n\t<meta property=\"og:image:height\" content=\"208\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@data_true\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/analytics\\\/data-layer-unit-testing\\\/\",\"url\":\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/analytics\\\/data-layer-unit-testing\\\/\",\"name\":\"How to Unit Test Data Layer Tags (Automated) | DataTrue\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/#website\"},\"datePublished\":\"2026-10-06T16:12:44+00:00\",\"dateModified\":\"2026-10-06T16:19:35+00:00\",\"description\":\"Data layer unit testing verifies the right tags fire, with the right data, when a data layer event happens, including edge cases you cannot reproduce live.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/analytics\\\/data-layer-unit-testing\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/analytics\\\/data-layer-unit-testing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/analytics\\\/data-layer-unit-testing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/datatrue.com\\\/en\\\/datatrue-home-2026\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resources\",\"item\":\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Analytics &amp; Data Quality\",\"item\":\"https:\\\/\\\/datatrue.com\\\/en\\\/resources\\\/analytics\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Data Layer Unit Testing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/datatrue.com\\\/en\\\/\",\"name\":\"DataTrue\",\"description\":\"Web Analytics Quality Assurance\",\"publisher\":{\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/datatrue.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/#organization\",\"name\":\"DataTrue\",\"url\":\"https:\\\/\\\/datatrue.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/datatrue.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/New-DT-Logo.png\",\"contentUrl\":\"https:\\\/\\\/datatrue.com\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/New-DT-Logo.png\",\"width\":1328,\"height\":208,\"caption\":\"DataTrue\"},\"image\":{\"@id\":\"https:\\\/\\\/datatrue.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/datatruedigital\\\/\",\"https:\\\/\\\/x.com\\\/data_true\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/Datatrue\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Unit Test Data Layer Tags (Automated) | DataTrue","description":"Data layer unit testing verifies the right tags fire, with the right data, when a data layer event happens, including edge cases you cannot reproduce live.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/","og_locale":"en_US","og_type":"article","og_title":"How to Unit Test Data Layer Tags (Automated) | DataTrue","og_description":"Data layer unit testing verifies the right tags fire, with the right data, when a data layer event happens, including edge cases you cannot reproduce live.","og_url":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/","og_site_name":"DataTrue","article_publisher":"https:\/\/www.facebook.com\/datatruedigital\/","article_modified_time":"2026-10-06T16:19:35+00:00","og_image":[{"width":1328,"height":208,"url":"https:\/\/datatrue.com\/wp-content\/uploads\/2022\/04\/New-DT-Logo.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@data_true","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/","url":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/","name":"How to Unit Test Data Layer Tags (Automated) | DataTrue","isPartOf":{"@id":"https:\/\/datatrue.com\/en\/#website"},"datePublished":"2026-10-06T16:12:44+00:00","dateModified":"2026-10-06T16:19:35+00:00","description":"Data layer unit testing verifies the right tags fire, with the right data, when a data layer event happens, including edge cases you cannot reproduce live.","breadcrumb":{"@id":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/datatrue.com\/en\/resources\/analytics\/data-layer-unit-testing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/datatrue.com\/en\/datatrue-home-2026\/"},{"@type":"ListItem","position":2,"name":"Resources","item":"https:\/\/datatrue.com\/en\/resources\/"},{"@type":"ListItem","position":3,"name":"Analytics &amp; Data Quality","item":"https:\/\/datatrue.com\/en\/resources\/analytics\/"},{"@type":"ListItem","position":4,"name":"Data Layer Unit Testing"}]},{"@type":"WebSite","@id":"https:\/\/datatrue.com\/en\/#website","url":"https:\/\/datatrue.com\/en\/","name":"DataTrue","description":"Web Analytics Quality Assurance","publisher":{"@id":"https:\/\/datatrue.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/datatrue.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/datatrue.com\/en\/#organization","name":"DataTrue","url":"https:\/\/datatrue.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/datatrue.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/datatrue.com\/wp-content\/uploads\/2022\/04\/New-DT-Logo.png","contentUrl":"https:\/\/datatrue.com\/wp-content\/uploads\/2022\/04\/New-DT-Logo.png","width":1328,"height":208,"caption":"DataTrue"},"image":{"@id":"https:\/\/datatrue.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/datatruedigital\/","https:\/\/x.com\/data_true","https:\/\/www.youtube.com\/c\/Datatrue"]}]}},"_links":{"self":[{"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/pages\/227779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/comments?post=227779"}],"version-history":[{"count":4,"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/pages\/227779\/revisions"}],"predecessor-version":[{"id":227891,"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/pages\/227779\/revisions\/227891"}],"up":[{"embeddable":true,"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/pages\/227747"}],"wp:attachment":[{"href":"https:\/\/datatrue.com\/en\/wp-json\/wp\/v2\/media?parent=227779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}