jzxiao commited on
Commit
218d851
·
verified ·
1 Parent(s): d52f140

Remove method-specific Overall annotations

Browse files

Remove the leaderboard notice, row badges, and method-detail audit annotations so all compression methods share the same presentation. Keep measured results, rankings, method documentation, and independent audit data.

Files changed (3) hide show
  1. app.js +3 -6
  2. index.html +2 -3
  3. style.css +2 -2
app.js CHANGED
@@ -63,7 +63,7 @@ function renderTable() {
63
  const visible=cols.filter(c=>c.visible&&(!c.overallOnly||activeTab==='overall'));
64
  $('leaderboard').querySelector('thead').innerHTML=`<tr><th>Position</th><th>Method / configuration</th>${visible.map(c=>`<th aria-sort="${sort.key===c.key?(sort.direction===1?'ascending':'descending'):'none'}"><button data-sort="${c.key}" title="Sort ${escape(c.label)}">${escape(c.label)}${sort.key===c.key?(sort.direction===1?' ▴':' ▾'):''}</button></th>`).join('')}<th>Dataset coverage</th></tr>`;
65
  const minima=Object.fromEntries(visible.map(c=>[c.key,Math.min(...currentRows.map(r=>number(r[c.key])).filter(n=>n!==null))]));
66
- $('leaderboard').querySelector('tbody').innerHTML=currentRows.length?currentRows.map((r,i)=>`<tr><td class="rank numeric">${i+1}</td><td><button class="method-button" data-method="${escape(r.method)}">${escape(r.method)}</button><span class="method-family">${escape(r.family)} · ${escape(runtimeName(r.runtime))}</span>${snapshot.benchmark?.method_audits?.[r.family]?`<span class="audit-badge">${escape(snapshot.benchmark.method_audits[r.family].label)}</span>`:''}</td>${visible.map(c=>`<td class="numeric ${!['compressed_bytes','original_bytes','rank_coverage'].includes(c.key)&&number(r[c.key])!==null&&r[c.key]===minima[c.key]?'best':''}">${c.key==='rank_coverage'?`${r.rank_coverage} / ${r.totalDatasets}`:fmt(r[c.key],c.digits)}</td>`).join('')}<td><span class="coverage ${r.coverage===r.totalDatasets?'full':''}">${r.coverage} / ${r.totalDatasets}</span></td></tr>`).join(''):`<tr><td colspan="${visible.length+3}" class="empty-cell">No measurements match this selection. Try another runtime, data type, or dataset.</td></tr>`;
67
  for(const button of $('leaderboard').querySelectorAll('[data-sort]'))button.addEventListener('click',()=>{const key=button.dataset.sort;sort={key,direction:sort.key===key?-sort.direction:1};refresh();});
68
  for(const button of $('leaderboard').querySelectorAll('[data-method]'))button.addEventListener('click',()=>showMethod(button.dataset.method,true));
69
  $('row-count').textContent=`${currentRows.length} ${state().mode==='family'?'method families':'method configurations'} · sorted by ${cols.find(c=>c.key===sort.key)?.label??sort.key}`;
@@ -81,9 +81,6 @@ function refresh() {
81
  $('results-note').textContent='All-float measurements are not available in this snapshot. Select a precision category.';
82
  } else $('results-note').textContent=state().mode==='family'?'Each family uses its lowest-rate measured configuration per dataset. Configurations may differ across datasets; use Exact configuration for fixed parameters.':'Each row retains one exact configuration. Lower compression rates and lower ns/point are better. Coverage counts datasets, not identical column sets.';
83
  currentRows=aggregate(filteredRecords(true));
84
- const audit=snapshot.benchmark?.method_audits?.DBP;
85
- $('audit-notice').hidden=!audit||!currentRows.some(r=>r.family==='DBP');
86
- $('audit-notice').innerHTML=audit?`<strong>Historical DBP leaderboard snapshot.</strong> ${escape(audit.timing)} ${escape(audit.storage)} The separate DBF1/DBF2 native-float audit uses the latest frozen typed dataset receipts and is excluded from Overall scores and Average Rank. <a href="./dbp-audit.html">Open the full-wire audit →</a>`:'';
87
  const weights=parseWeights($('weights').value);
88
  $('score-note').textContent=`Score = ${weights[0].toFixed(1)} × average rate + ${weights[1].toFixed(1)} × normalized encode + ${weights[2].toFixed(1)} × normalized decode. Lower is better. Time normalization: (time − minimum) / (maximum − minimum), across all measured rows in this runtime, scope and row mode. Search and visibility filters keep the reference fixed. Average Rank: mean of per-dataset score ranks with dataset-local time normalization; ties share their average position. Missing results are omitted. Dataset candidate counts differ, so compare rank coverage and inspect method details.`;
89
  const s=state(),scope=scopeKey(),measuredCount=new Set(records.map(r=>r.dataset)).size,ds=s.dataset==='all'?`all ${measuredCount} measured datasets`:datasetDisplayName(s.dataset);
@@ -109,9 +106,9 @@ function setTab(tab) {
109
  function showMethod(method,focus=false) {
110
  const row=currentRows.find(r=>r.method===method), detail=$('method-detail');
111
  if(!row){selectedMethod=null;detail.hidden=true;return;}selectedMethod=method;
112
- const meta=methods.get(method)??methods.get(row.source[0].configuration), pipeline=meta?.operator_pipeline, audit=snapshot.benchmark?.method_audits?.[row.family];
113
  const source=row.source.slice().sort((a,b)=>a.dataset.localeCompare(b.dataset));
114
- detail.innerHTML=`<div class="detail-head"><div><h2 id="detail-title">${escape(method)}</h2><p class="muted">${escape(row.family)} · ${escape(runtimeName(row.runtime))} · ${row.coverage} measured datasets</p></div><button id="close-detail" class="quiet-button">Close details</button></div><div class="detail-grid"><div><strong>${fmt(row.compression_rate,4)}</strong><span>average compression rate</span></div><div><strong>${fmt(row.compression_time,2)}</strong><span>encoding ns/point</span></div><div><strong>${fmt(row.decompression_time,2)}</strong><span>decoding ns/point</span></div><div><strong>${row.coverage} / ${row.totalDatasets}</strong><span>dataset coverage</span></div></div>${audit?`<div class="notice"><strong>Historical measurement audit · ${escape(audit.audited_at)}</strong>${[audit.implementation,audit.timing,audit.storage,audit.roundtrip,audit.comparison].map(n=>`<p>${escape(n)}</p>`).join('')}${row.family==='DBP'?'<p>The latest DBF1/DBF2 native-float audit has a separate typed-data scope and does not replace these rows or enter their rankings.</p><a href="./dbp-audit.html">Open the independent full-wire audit →</a>':''}</div>`:''}${pipeline&&!audit?`<p class="source-code">Interpretive operator mapping: ${escape(typeof pipeline==='string'?pipeline:JSON.stringify(pipeline))}</p>`:''}<p class="muted">Dataset metrics below come from the published result files. Independent round-trip evidence and hardware are ${snapshot.benchmark?.roundtrip_evidence?'documented in the manifest':'not reported for this snapshot'}.</p><div class="detail-table"><table><thead><tr><th>Dataset</th><th>Configuration</th><th>Rate ↓</th><th>Encode ns/point ↓</th><th>Decode ns/point ↓</th><th>Original bytes</th><th>Compressed bytes</th><th>Dataset score ↓</th><th>Dataset Rank ↓</th><th>Rank candidates</th></tr></thead><tbody>${source.map(r=>`<tr><td>${escape(r.dataset)}</td><td>${escape(r.configuration)}</td><td class="numeric">${fmt(r.compression_rate,4)}</td><td class="numeric">${fmt(r.compression_time,2)}</td><td class="numeric">${fmt(r.decompression_time,2)}</td><td class="numeric">${fmt(r.original_bytes,0)}</td><td class="numeric">${fmt(r.compressed_bytes,0)}</td><td class="numeric">${fmt(r.dataset_score,4)}</td><td class="numeric">${fmt(r.dataset_rank,2)}</td><td class="numeric">${fmt(r.dataset_candidate_count,0)}</td></tr>`).join('')}</tbody></table></div>`;
115
  detail.hidden=false;$('close-detail').addEventListener('click',()=>{detail.hidden=true;selectedMethod=null;});
116
  if(focus){detail.scrollIntoView({block:'nearest',behavior:'auto'});detail.focus({preventScroll:true});}
117
  }
 
63
  const visible=cols.filter(c=>c.visible&&(!c.overallOnly||activeTab==='overall'));
64
  $('leaderboard').querySelector('thead').innerHTML=`<tr><th>Position</th><th>Method / configuration</th>${visible.map(c=>`<th aria-sort="${sort.key===c.key?(sort.direction===1?'ascending':'descending'):'none'}"><button data-sort="${c.key}" title="Sort ${escape(c.label)}">${escape(c.label)}${sort.key===c.key?(sort.direction===1?' ▴':' ▾'):''}</button></th>`).join('')}<th>Dataset coverage</th></tr>`;
65
  const minima=Object.fromEntries(visible.map(c=>[c.key,Math.min(...currentRows.map(r=>number(r[c.key])).filter(n=>n!==null))]));
66
+ $('leaderboard').querySelector('tbody').innerHTML=currentRows.length?currentRows.map((r,i)=>`<tr><td class="rank numeric">${i+1}</td><td><button class="method-button" data-method="${escape(r.method)}">${escape(r.method)}</button><span class="method-family">${escape(r.family)} · ${escape(runtimeName(r.runtime))}</span></td>${visible.map(c=>`<td class="numeric ${!['compressed_bytes','original_bytes','rank_coverage'].includes(c.key)&&number(r[c.key])!==null&&r[c.key]===minima[c.key]?'best':''}">${c.key==='rank_coverage'?`${r.rank_coverage} / ${r.totalDatasets}`:fmt(r[c.key],c.digits)}</td>`).join('')}<td><span class="coverage ${r.coverage===r.totalDatasets?'full':''}">${r.coverage} / ${r.totalDatasets}</span></td></tr>`).join(''):`<tr><td colspan="${visible.length+3}" class="empty-cell">No measurements match this selection. Try another runtime, data type, or dataset.</td></tr>`;
67
  for(const button of $('leaderboard').querySelectorAll('[data-sort]'))button.addEventListener('click',()=>{const key=button.dataset.sort;sort={key,direction:sort.key===key?-sort.direction:1};refresh();});
68
  for(const button of $('leaderboard').querySelectorAll('[data-method]'))button.addEventListener('click',()=>showMethod(button.dataset.method,true));
69
  $('row-count').textContent=`${currentRows.length} ${state().mode==='family'?'method families':'method configurations'} · sorted by ${cols.find(c=>c.key===sort.key)?.label??sort.key}`;
 
81
  $('results-note').textContent='All-float measurements are not available in this snapshot. Select a precision category.';
82
  } else $('results-note').textContent=state().mode==='family'?'Each family uses its lowest-rate measured configuration per dataset. Configurations may differ across datasets; use Exact configuration for fixed parameters.':'Each row retains one exact configuration. Lower compression rates and lower ns/point are better. Coverage counts datasets, not identical column sets.';
83
  currentRows=aggregate(filteredRecords(true));
 
 
 
84
  const weights=parseWeights($('weights').value);
85
  $('score-note').textContent=`Score = ${weights[0].toFixed(1)} × average rate + ${weights[1].toFixed(1)} × normalized encode + ${weights[2].toFixed(1)} × normalized decode. Lower is better. Time normalization: (time − minimum) / (maximum − minimum), across all measured rows in this runtime, scope and row mode. Search and visibility filters keep the reference fixed. Average Rank: mean of per-dataset score ranks with dataset-local time normalization; ties share their average position. Missing results are omitted. Dataset candidate counts differ, so compare rank coverage and inspect method details.`;
86
  const s=state(),scope=scopeKey(),measuredCount=new Set(records.map(r=>r.dataset)).size,ds=s.dataset==='all'?`all ${measuredCount} measured datasets`:datasetDisplayName(s.dataset);
 
106
  function showMethod(method,focus=false) {
107
  const row=currentRows.find(r=>r.method===method), detail=$('method-detail');
108
  if(!row){selectedMethod=null;detail.hidden=true;return;}selectedMethod=method;
109
+ const meta=methods.get(method)??methods.get(row.source[0].configuration), pipeline=meta?.operator_pipeline;
110
  const source=row.source.slice().sort((a,b)=>a.dataset.localeCompare(b.dataset));
111
+ detail.innerHTML=`<div class="detail-head"><div><h2 id="detail-title">${escape(method)}</h2><p class="muted">${escape(row.family)} · ${escape(runtimeName(row.runtime))} · ${row.coverage} measured datasets</p></div><button id="close-detail" class="quiet-button">Close details</button></div><div class="detail-grid"><div><strong>${fmt(row.compression_rate,4)}</strong><span>average compression rate</span></div><div><strong>${fmt(row.compression_time,2)}</strong><span>encoding ns/point</span></div><div><strong>${fmt(row.decompression_time,2)}</strong><span>decoding ns/point</span></div><div><strong>${row.coverage} / ${row.totalDatasets}</strong><span>dataset coverage</span></div></div>${pipeline?`<p class="source-code">Interpretive operator mapping: ${escape(typeof pipeline==='string'?pipeline:JSON.stringify(pipeline))}</p>`:''}<p class="muted">Dataset metrics below come from the published result files. Independent round-trip evidence and hardware are ${snapshot.benchmark?.roundtrip_evidence?'documented in the manifest':'not reported for this snapshot'}.</p><div class="detail-table"><table><thead><tr><th>Dataset</th><th>Configuration</th><th>Rate ↓</th><th>Encode ns/point ↓</th><th>Decode ns/point ↓</th><th>Original bytes</th><th>Compressed bytes</th><th>Dataset score ↓</th><th>Dataset Rank ↓</th><th>Rank candidates</th></tr></thead><tbody>${source.map(r=>`<tr><td>${escape(r.dataset)}</td><td>${escape(r.configuration)}</td><td class="numeric">${fmt(r.compression_rate,4)}</td><td class="numeric">${fmt(r.compression_time,2)}</td><td class="numeric">${fmt(r.decompression_time,2)}</td><td class="numeric">${fmt(r.original_bytes,0)}</td><td class="numeric">${fmt(r.compressed_bytes,0)}</td><td class="numeric">${fmt(r.dataset_score,4)}</td><td class="numeric">${fmt(r.dataset_rank,2)}</td><td class="numeric">${fmt(r.dataset_candidate_count,0)}</td></tr>`).join('')}</tbody></table></div>`;
112
  detail.hidden=false;$('close-detail').addEventListener('click',()=>{detail.hidden=true;selectedMethod=null;});
113
  if(focus){detail.scrollIntoView({block:'nearest',behavior:'auto'});detail.focus({preventScroll:true});}
114
  }
index.html CHANGED
@@ -6,8 +6,8 @@
6
  <meta name="description" content="THULab time-series compression benchmark: measured compression rates, encoding and decoding costs, and dataset coverage.">
7
  <meta name="color-scheme" content="light dark">
8
  <title>THULab | Time Series Compression Benchmark</title>
9
- <link rel="stylesheet" href="style.css?v=20261009-dbp-audit-v1">
10
- <script src="app.js?v=20261009-dbp-audit-v1" type="module"></script>
11
  </head>
12
  <body>
13
  <a class="skip-link" href="#content">Skip to results</a>
@@ -63,7 +63,6 @@
63
  <div class="toolbar-actions"><button id="reset" class="quiet-button">Reset filters</button><button id="download" class="primary-button" disabled>Download CSV</button></div>
64
  </div>
65
  <div class="results-note" id="results-note">Compression rate = compressed bytes / original bytes. Lower rates and lower ns/point are better.</div>
66
- <p id="audit-notice" class="audit-notice" hidden></p>
67
  <div id="score-controls" class="score-controls">
68
  <label>Score weights · a: rate / b: encode / c: decode<select id="weights" aria-label="Score weights a b c"></select></label>
69
  <p id="score-note" class="muted" aria-live="polite">Positive weights in steps of 0.1, summing to 1.0.</p>
 
6
  <meta name="description" content="THULab time-series compression benchmark: measured compression rates, encoding and decoding costs, and dataset coverage.">
7
  <meta name="color-scheme" content="light dark">
8
  <title>THULab | Time Series Compression Benchmark</title>
9
+ <link rel="stylesheet" href="style.css?v=20261009-overall-neutral-v1">
10
+ <script src="app.js?v=20261009-overall-neutral-v1" type="module"></script>
11
  </head>
12
  <body>
13
  <a class="skip-link" href="#content">Skip to results</a>
 
63
  <div class="toolbar-actions"><button id="reset" class="quiet-button">Reset filters</button><button id="download" class="primary-button" disabled>Download CSV</button></div>
64
  </div>
65
  <div class="results-note" id="results-note">Compression rate = compressed bytes / original bytes. Lower rates and lower ns/point are better.</div>
 
66
  <div id="score-controls" class="score-controls">
67
  <label>Score weights · a: rate / b: encode / c: decode<select id="weights" aria-label="Score weights a b c"></select></label>
68
  <p id="score-note" class="muted" aria-live="polite">Positive weights in steps of 0.1, summing to 1.0.</p>
style.css CHANGED
@@ -8,12 +8,12 @@
8
  @media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
9
  .intro{padding:16px 0 10px}.eyebrow{display:none}h1{font-size:clamp(24px,2.8vw,30px);margin-bottom:8px}.intro-text{font-size:13px}.snapshot{font-size:11px;margin-top:6px}.summary-strip{padding:10px 0}.summary-strip strong{font-size:20px}.filters{padding:12px;gap:8px}.toolbar{margin-top:12px;margin-bottom:4px}
10
  .score-controls{display:flex;align-items:start;gap:20px;padding:12px 14px;margin:6px 0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--soft)}.score-controls label{min-width:320px}.score-controls p{font-size:11px;line-height:1.7;margin:0;max-width:90ch}.score-controls select{height:35px}@media(max-width:768px){.score-controls{flex-direction:column;gap:10px}.score-controls label{min-width:0;width:100%}}
11
- .audit-badge{display:block;color:var(--muted);font-size:10px;margin-top:4px}.audit-notice{font-size:12px;padding:10px 14px;margin:8px 0;border-left:3px solid var(--accent);background:var(--accent-soft);color:var(--text)}
12
  .documentation-view{max-width:1180px}.documentation-head{display:flex;justify-content:space-between;align-items:end;gap:28px;margin-bottom:10px}.documentation-head>div{min-width:0}.documentation-search{width:min(390px,42%);flex:0 0 auto}.reference-source{margin:8px 0 4px;color:var(--muted);font-size:12px}.documentation-status{margin:14px 0;color:var(--muted);font-size:12px}.documentation-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.documentation-card{min-width:0;padding:18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.documentation-card h3,.documentation-card h4{margin:0;color:var(--text);line-height:1.35}.documentation-card h4{font-size:16px}.documentation-card-head{display:flex;justify-content:space-between;align-items:start;gap:16px}.documentation-code{display:block;margin-top:3px;color:var(--muted);font:11px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.documentation-count{flex:0 0 auto;padding:3px 7px;border-radius:4px;background:var(--soft);color:var(--muted);font-size:10px}.documentation-description{margin:12px 0;color:var(--text);font-size:13px;line-height:1.65}.documentation-note{margin:10px 0;padding:9px 11px;border-left:2px solid var(--line);color:var(--muted);font-size:12px}.documentation-references{margin-top:12px;font-size:12px}.documentation-references>strong{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.documentation-references ul{list-style:none;padding:0;margin:6px 0 0}.documentation-references li{padding:5px 0;border-top:1px solid var(--line);overflow-wrap:anywhere}.documentation-references small{display:block;margin-top:1px;color:var(--muted);font-size:10px}.reference-empty{margin:12px 0 0;color:var(--muted);font-size:11px}.configuration-details{margin-top:13px;border-top:1px solid var(--line);padding-top:10px}.configuration-details summary{cursor:pointer;color:var(--accent);font-size:12px;font-weight:600}.configuration-details ul{display:flex;flex-wrap:wrap;gap:6px;list-style:none;padding:10px 0 0;margin:0}.configuration-details li{max-width:100%;padding:4px 7px;border-radius:4px;background:var(--soft);font:10px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.operator-group{margin-top:24px}.operator-group>h3{margin:0 0 10px;padding-bottom:8px;border-bottom:1px solid var(--line)}.operator-card{padding:16px}.documentation-error,.documentation-empty{grid-column:1/-1;margin:0;padding:22px;border:1px solid var(--line);border-radius:var(--radius);color:var(--muted);background:var(--surface)}.documentation-error{border-left:3px solid #b34938;color:var(--text)}@media(max-width:768px){.documentation-head{align-items:stretch;flex-direction:column;gap:14px}.documentation-search{width:100%}.documentation-grid{grid-template-columns:1fr}.documentation-card{padding:15px}.documentation-card-head{gap:10px}}
13
  .operator-summary{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;margin:16px 0;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.operator-summary>div{padding:12px;background:var(--surface);text-align:center}.operator-summary strong{display:block;font-size:20px;line-height:1.2;font-variant-numeric:tabular-nums}.operator-summary span{display:block;margin-top:4px;color:var(--muted);font-size:10px}.documentation-native-name{display:block;margin-top:2px;color:var(--muted);font-size:11px}.implementation-details{margin-top:14px;padding-top:11px;border-top:1px solid var(--line)}.implementation-details>summary{cursor:pointer;color:var(--accent);font-size:12px;font-weight:650}.implementation-list{display:grid;gap:9px;margin-top:11px}.implementation-entry{padding:12px;border:1px solid var(--line);border-radius:6px;background:var(--soft)}.implementation-head{display:flex;align-items:start;justify-content:space-between;gap:12px}.implementation-head strong{font-size:12px}.implementation-layer{flex:0 0 auto;padding:2px 6px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.05em}.implementation-entry dl{display:grid;gap:6px;margin:10px 0 0}.implementation-entry dl>div{display:grid;grid-template-columns:62px minmax(0,1fr);gap:8px}.implementation-entry dt{color:var(--muted);font-size:10px;font-weight:650;text-transform:uppercase;letter-spacing:.04em}.implementation-entry dd{margin:0;font-size:11px;line-height:1.5;overflow-wrap:anywhere}.implementation-entry .documentation-references{font-size:11px}.implementation-entry .documentation-references>strong{font-size:9px}
14
  .dataset-catalog-panel{margin:18px 0 20px;padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.dataset-catalog-head{display:flex;align-items:end;justify-content:space-between;gap:24px}.dataset-catalog-head>div:first-child{min-width:0}.dataset-catalog-controls{display:grid;grid-template-columns:180px minmax(220px,320px);gap:10px;flex:0 0 auto}.dataset-catalog{max-height:430px;overflow:auto;padding-right:5px}.dataset-category{margin-top:18px}.dataset-category:first-child{margin-top:0}.dataset-category>h3{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;margin:0;padding:8px 2px;background:var(--surface);border-bottom:1px solid var(--line);font-size:14px}.dataset-category>h3 span{padding:2px 6px;border-radius:999px;background:var(--soft);color:var(--muted);font-size:9px}.dataset-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-top:8px}.dataset-entry{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}.dataset-entry.measured{border-left:3px solid var(--accent)}.dataset-entry.selected{box-shadow:inset 0 0 0 1px var(--accent);background:var(--accent-soft)}.dataset-entry button{display:flex;align-items:start;justify-content:space-between;gap:8px;width:100%;padding:0;border:0;background:transparent;color:var(--text);text-align:left}.dataset-entry button:hover strong{color:var(--accent);text-decoration:underline}.dataset-entry strong{display:block;font-size:12px;line-height:1.35;overflow-wrap:anywhere}.dataset-entry small{display:block;margin-top:2px;color:var(--muted);font:9px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.dataset-state{flex:0 0 auto;max-width:92px;padding:2px 5px;border-radius:4px;background:var(--soft);color:var(--muted);font-size:8px;line-height:1.35;text-align:right}.dataset-entry.measured .dataset-state{background:var(--accent-soft);color:var(--accent)}.dataset-entry p{margin:7px 0 0;color:var(--muted);font-size:9px;line-height:1.45}.dataset-entry .dataset-snapshot-note{color:#9a5a16}.dataset-links{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px}.dataset-links a,.dataset-source{font-size:9px;overflow-wrap:anywhere}
15
  @media(max-width:1000px){.operator-summary{grid-template-columns:repeat(3,1fr)}.dataset-list{grid-template-columns:repeat(2,minmax(0,1fr))}.dataset-catalog-head{align-items:stretch;flex-direction:column;gap:12px}.dataset-catalog-controls{width:100%;grid-template-columns:1fr 1.5fr}}
16
  @media(max-width:768px){.operator-summary{grid-template-columns:repeat(2,1fr)}.implementation-entry dl>div{grid-template-columns:1fr;gap:1px}.dataset-catalog-panel{padding:14px}.dataset-catalog-controls,.dataset-list{grid-template-columns:1fr}.dataset-catalog{max-height:520px}}
17
- .audit-notice a{font-weight:650}.documentation-action{display:inline-flex;margin-top:12px;font-size:11px}.dbp-audit-main{max-width:1440px}.audit-hero{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:34px 0 24px}.audit-hero .intro-text{margin:0;max-width:820px}.audit-state-card{flex:0 0 230px;padding:16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.audit-state-card>span,.audit-state-card>small{display:block;color:var(--muted);font-size:10px}.audit-state-card>strong{display:inline-block;margin:7px 0}.status-chip{padding:3px 8px;border-radius:999px;border:1px solid var(--line);background:var(--soft);font-size:10px;line-height:1.4;text-transform:uppercase;letter-spacing:.05em}.status-complete,.status-ok,.status-passed{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.status-failed{border-color:#b34938;background:#b3493818;color:#b34938}.status-incomplete,.status-pending,.status-running,.status-partial,.status-skipped,.status-n-a,.status-na,.status-unknown{color:var(--muted)}.audit-scope-notice{margin:0 0 26px}.audit-scope-notice p{max-width:110ch;margin:6px 0 0}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin:24px 0 12px}.section-heading>div:first-child{min-width:0}.audit-summary{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--line)}.audit-summary>div{padding:14px;background:var(--surface);text-align:center}.audit-summary strong{display:block;font-size:22px;line-height:1.2;font-variant-numeric:tabular-nums}.audit-summary span{display:block;margin-top:5px;color:var(--muted);font-size:10px}.audit-meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:24px 0}.audit-meta-grid article{padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.audit-meta-grid h2{margin-bottom:12px}.audit-definitions{display:grid;grid-template-columns:minmax(120px,.45fr) 1fr;margin:0}.audit-definitions dt,.audit-definitions dd{padding:7px 0;border-top:1px solid var(--line);font-size:11px;overflow-wrap:anywhere}.audit-definitions dt{color:var(--muted);font-weight:600}.audit-definitions dd{margin:0}.runtime-status-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.runtime-status-card{padding:15px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.runtime-status-card header{display:flex;align-items:center;justify-content:space-between;gap:12px}.runtime-status-card h3{margin:0;font-size:15px}.runtime-status-card p{margin:8px 0 0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.audit-results{margin-top:26px}.audit-filters{display:grid;grid-template-columns:.8fr .9fr 1fr 1.8fr;gap:12px;padding:15px;border:1px solid var(--line);border-radius:var(--radius);background:var(--soft)}.audit-table-wrap{max-height:610px}.audit-table-wrap thead th:nth-child(3),.audit-table-wrap thead th:nth-child(4),.audit-table-wrap tbody td:nth-child(3),.audit-table-wrap tbody td:nth-child(4){text-align:left}.audit-table-wrap td{font-size:11px}.audit-table-wrap .mode-count{display:block;color:var(--muted);font-size:9px}.audit-pagination{display:flex;align-items:center;justify-content:center;gap:14px;padding:12px}.audit-pagination span{color:var(--muted);font-size:11px}.dataset-receipt-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:460px;overflow:auto;padding-right:5px}.dataset-receipt-card{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--surface)}.dataset-receipt-card header{display:flex;align-items:start;justify-content:space-between;gap:8px}.dataset-receipt-card strong{display:block;font-size:11px;overflow-wrap:anywhere}.dataset-receipt-card small{display:block;color:var(--muted);font-size:9px}.dataset-receipt-card p{margin:6px 0 0;color:var(--muted);font-size:9px;line-height:1.45;overflow-wrap:anywhere}.audit-reading-note{max-width:100ch;margin:30px 0}.audit-reading-note p{color:var(--muted);font-size:12px}.audit-validation-error{color:#b34938}.audit-validation-ok{color:var(--muted)}
18
  @media(max-width:1000px){.audit-summary{grid-template-columns:repeat(3,1fr)}.audit-filters{grid-template-columns:repeat(2,1fr)}.dataset-receipt-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
19
  @media(max-width:768px){.audit-hero{align-items:stretch;flex-direction:column;padding-top:24px}.audit-state-card{flex:auto;width:100%}.audit-summary{grid-template-columns:repeat(2,1fr)}.audit-meta-grid,.runtime-status-grid,.audit-filters,.dataset-receipt-grid{grid-template-columns:1fr}.section-heading{align-items:stretch;flex-direction:column;gap:10px}.audit-definitions{grid-template-columns:1fr}.audit-definitions dd{padding-top:0;border-top:0}.audit-results .toolbar-actions{width:100%}.audit-results .toolbar-actions button{flex:1}}
 
8
  @media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
9
  .intro{padding:16px 0 10px}.eyebrow{display:none}h1{font-size:clamp(24px,2.8vw,30px);margin-bottom:8px}.intro-text{font-size:13px}.snapshot{font-size:11px;margin-top:6px}.summary-strip{padding:10px 0}.summary-strip strong{font-size:20px}.filters{padding:12px;gap:8px}.toolbar{margin-top:12px;margin-bottom:4px}
10
  .score-controls{display:flex;align-items:start;gap:20px;padding:12px 14px;margin:6px 0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--soft)}.score-controls label{min-width:320px}.score-controls p{font-size:11px;line-height:1.7;margin:0;max-width:90ch}.score-controls select{height:35px}@media(max-width:768px){.score-controls{flex-direction:column;gap:10px}.score-controls label{min-width:0;width:100%}}
11
+
12
  .documentation-view{max-width:1180px}.documentation-head{display:flex;justify-content:space-between;align-items:end;gap:28px;margin-bottom:10px}.documentation-head>div{min-width:0}.documentation-search{width:min(390px,42%);flex:0 0 auto}.reference-source{margin:8px 0 4px;color:var(--muted);font-size:12px}.documentation-status{margin:14px 0;color:var(--muted);font-size:12px}.documentation-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.documentation-card{min-width:0;padding:18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.documentation-card h3,.documentation-card h4{margin:0;color:var(--text);line-height:1.35}.documentation-card h4{font-size:16px}.documentation-card-head{display:flex;justify-content:space-between;align-items:start;gap:16px}.documentation-code{display:block;margin-top:3px;color:var(--muted);font:11px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.documentation-count{flex:0 0 auto;padding:3px 7px;border-radius:4px;background:var(--soft);color:var(--muted);font-size:10px}.documentation-description{margin:12px 0;color:var(--text);font-size:13px;line-height:1.65}.documentation-note{margin:10px 0;padding:9px 11px;border-left:2px solid var(--line);color:var(--muted);font-size:12px}.documentation-references{margin-top:12px;font-size:12px}.documentation-references>strong{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.documentation-references ul{list-style:none;padding:0;margin:6px 0 0}.documentation-references li{padding:5px 0;border-top:1px solid var(--line);overflow-wrap:anywhere}.documentation-references small{display:block;margin-top:1px;color:var(--muted);font-size:10px}.reference-empty{margin:12px 0 0;color:var(--muted);font-size:11px}.configuration-details{margin-top:13px;border-top:1px solid var(--line);padding-top:10px}.configuration-details summary{cursor:pointer;color:var(--accent);font-size:12px;font-weight:600}.configuration-details ul{display:flex;flex-wrap:wrap;gap:6px;list-style:none;padding:10px 0 0;margin:0}.configuration-details li{max-width:100%;padding:4px 7px;border-radius:4px;background:var(--soft);font:10px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.operator-group{margin-top:24px}.operator-group>h3{margin:0 0 10px;padding-bottom:8px;border-bottom:1px solid var(--line)}.operator-card{padding:16px}.documentation-error,.documentation-empty{grid-column:1/-1;margin:0;padding:22px;border:1px solid var(--line);border-radius:var(--radius);color:var(--muted);background:var(--surface)}.documentation-error{border-left:3px solid #b34938;color:var(--text)}@media(max-width:768px){.documentation-head{align-items:stretch;flex-direction:column;gap:14px}.documentation-search{width:100%}.documentation-grid{grid-template-columns:1fr}.documentation-card{padding:15px}.documentation-card-head{gap:10px}}
13
  .operator-summary{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;margin:16px 0;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.operator-summary>div{padding:12px;background:var(--surface);text-align:center}.operator-summary strong{display:block;font-size:20px;line-height:1.2;font-variant-numeric:tabular-nums}.operator-summary span{display:block;margin-top:4px;color:var(--muted);font-size:10px}.documentation-native-name{display:block;margin-top:2px;color:var(--muted);font-size:11px}.implementation-details{margin-top:14px;padding-top:11px;border-top:1px solid var(--line)}.implementation-details>summary{cursor:pointer;color:var(--accent);font-size:12px;font-weight:650}.implementation-list{display:grid;gap:9px;margin-top:11px}.implementation-entry{padding:12px;border:1px solid var(--line);border-radius:6px;background:var(--soft)}.implementation-head{display:flex;align-items:start;justify-content:space-between;gap:12px}.implementation-head strong{font-size:12px}.implementation-layer{flex:0 0 auto;padding:2px 6px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.05em}.implementation-entry dl{display:grid;gap:6px;margin:10px 0 0}.implementation-entry dl>div{display:grid;grid-template-columns:62px minmax(0,1fr);gap:8px}.implementation-entry dt{color:var(--muted);font-size:10px;font-weight:650;text-transform:uppercase;letter-spacing:.04em}.implementation-entry dd{margin:0;font-size:11px;line-height:1.5;overflow-wrap:anywhere}.implementation-entry .documentation-references{font-size:11px}.implementation-entry .documentation-references>strong{font-size:9px}
14
  .dataset-catalog-panel{margin:18px 0 20px;padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.dataset-catalog-head{display:flex;align-items:end;justify-content:space-between;gap:24px}.dataset-catalog-head>div:first-child{min-width:0}.dataset-catalog-controls{display:grid;grid-template-columns:180px minmax(220px,320px);gap:10px;flex:0 0 auto}.dataset-catalog{max-height:430px;overflow:auto;padding-right:5px}.dataset-category{margin-top:18px}.dataset-category:first-child{margin-top:0}.dataset-category>h3{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;margin:0;padding:8px 2px;background:var(--surface);border-bottom:1px solid var(--line);font-size:14px}.dataset-category>h3 span{padding:2px 6px;border-radius:999px;background:var(--soft);color:var(--muted);font-size:9px}.dataset-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-top:8px}.dataset-entry{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}.dataset-entry.measured{border-left:3px solid var(--accent)}.dataset-entry.selected{box-shadow:inset 0 0 0 1px var(--accent);background:var(--accent-soft)}.dataset-entry button{display:flex;align-items:start;justify-content:space-between;gap:8px;width:100%;padding:0;border:0;background:transparent;color:var(--text);text-align:left}.dataset-entry button:hover strong{color:var(--accent);text-decoration:underline}.dataset-entry strong{display:block;font-size:12px;line-height:1.35;overflow-wrap:anywhere}.dataset-entry small{display:block;margin-top:2px;color:var(--muted);font:9px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.dataset-state{flex:0 0 auto;max-width:92px;padding:2px 5px;border-radius:4px;background:var(--soft);color:var(--muted);font-size:8px;line-height:1.35;text-align:right}.dataset-entry.measured .dataset-state{background:var(--accent-soft);color:var(--accent)}.dataset-entry p{margin:7px 0 0;color:var(--muted);font-size:9px;line-height:1.45}.dataset-entry .dataset-snapshot-note{color:#9a5a16}.dataset-links{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px}.dataset-links a,.dataset-source{font-size:9px;overflow-wrap:anywhere}
15
  @media(max-width:1000px){.operator-summary{grid-template-columns:repeat(3,1fr)}.dataset-list{grid-template-columns:repeat(2,minmax(0,1fr))}.dataset-catalog-head{align-items:stretch;flex-direction:column;gap:12px}.dataset-catalog-controls{width:100%;grid-template-columns:1fr 1.5fr}}
16
  @media(max-width:768px){.operator-summary{grid-template-columns:repeat(2,1fr)}.implementation-entry dl>div{grid-template-columns:1fr;gap:1px}.dataset-catalog-panel{padding:14px}.dataset-catalog-controls,.dataset-list{grid-template-columns:1fr}.dataset-catalog{max-height:520px}}
17
+ .documentation-action{display:inline-flex;margin-top:12px;font-size:11px}.dbp-audit-main{max-width:1440px}.audit-hero{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:34px 0 24px}.audit-hero .intro-text{margin:0;max-width:820px}.audit-state-card{flex:0 0 230px;padding:16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.audit-state-card>span,.audit-state-card>small{display:block;color:var(--muted);font-size:10px}.audit-state-card>strong{display:inline-block;margin:7px 0}.status-chip{padding:3px 8px;border-radius:999px;border:1px solid var(--line);background:var(--soft);font-size:10px;line-height:1.4;text-transform:uppercase;letter-spacing:.05em}.status-complete,.status-ok,.status-passed{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.status-failed{border-color:#b34938;background:#b3493818;color:#b34938}.status-incomplete,.status-pending,.status-running,.status-partial,.status-skipped,.status-n-a,.status-na,.status-unknown{color:var(--muted)}.audit-scope-notice{margin:0 0 26px}.audit-scope-notice p{max-width:110ch;margin:6px 0 0}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin:24px 0 12px}.section-heading>div:first-child{min-width:0}.audit-summary{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--line)}.audit-summary>div{padding:14px;background:var(--surface);text-align:center}.audit-summary strong{display:block;font-size:22px;line-height:1.2;font-variant-numeric:tabular-nums}.audit-summary span{display:block;margin-top:5px;color:var(--muted);font-size:10px}.audit-meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:24px 0}.audit-meta-grid article{padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.audit-meta-grid h2{margin-bottom:12px}.audit-definitions{display:grid;grid-template-columns:minmax(120px,.45fr) 1fr;margin:0}.audit-definitions dt,.audit-definitions dd{padding:7px 0;border-top:1px solid var(--line);font-size:11px;overflow-wrap:anywhere}.audit-definitions dt{color:var(--muted);font-weight:600}.audit-definitions dd{margin:0}.runtime-status-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.runtime-status-card{padding:15px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.runtime-status-card header{display:flex;align-items:center;justify-content:space-between;gap:12px}.runtime-status-card h3{margin:0;font-size:15px}.runtime-status-card p{margin:8px 0 0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.audit-results{margin-top:26px}.audit-filters{display:grid;grid-template-columns:.8fr .9fr 1fr 1.8fr;gap:12px;padding:15px;border:1px solid var(--line);border-radius:var(--radius);background:var(--soft)}.audit-table-wrap{max-height:610px}.audit-table-wrap thead th:nth-child(3),.audit-table-wrap thead th:nth-child(4),.audit-table-wrap tbody td:nth-child(3),.audit-table-wrap tbody td:nth-child(4){text-align:left}.audit-table-wrap td{font-size:11px}.audit-table-wrap .mode-count{display:block;color:var(--muted);font-size:9px}.audit-pagination{display:flex;align-items:center;justify-content:center;gap:14px;padding:12px}.audit-pagination span{color:var(--muted);font-size:11px}.dataset-receipt-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:460px;overflow:auto;padding-right:5px}.dataset-receipt-card{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--surface)}.dataset-receipt-card header{display:flex;align-items:start;justify-content:space-between;gap:8px}.dataset-receipt-card strong{display:block;font-size:11px;overflow-wrap:anywhere}.dataset-receipt-card small{display:block;color:var(--muted);font-size:9px}.dataset-receipt-card p{margin:6px 0 0;color:var(--muted);font-size:9px;line-height:1.45;overflow-wrap:anywhere}.audit-reading-note{max-width:100ch;margin:30px 0}.audit-reading-note p{color:var(--muted);font-size:12px}.audit-validation-error{color:#b34938}.audit-validation-ok{color:var(--muted)}
18
  @media(max-width:1000px){.audit-summary{grid-template-columns:repeat(3,1fr)}.audit-filters{grid-template-columns:repeat(2,1fr)}.dataset-receipt-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
19
  @media(max-width:768px){.audit-hero{align-items:stretch;flex-direction:column;padding-top:24px}.audit-state-card{flex:auto;width:100%}.audit-summary{grid-template-columns:repeat(2,1fr)}.audit-meta-grid,.runtime-status-grid,.audit-filters,.dataset-receipt-grid{grid-template-columns:1fr}.section-heading{align-items:stretch;flex-direction:column;gap:10px}.audit-definitions{grid-template-columns:1fr}.audit-definitions dd{padding-top:0;border-top:0}.audit-results .toolbar-actions{width:100%}.audit-results .toolbar-actions button{flex:1}}