Spaces:
Sleeping
Sleeping
Lê Đăng Khoa (Liam) commited on
Upload 6 files
Browse files- .gitattributes +1 -0
- assets/.DS_Store +0 -0
- assets/app.js +558 -267
- assets/logo.png +3 -0
- assets/logo.svg +16 -7
- assets/style.css +668 -0
- index.html +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
assets/logo.png filter=lfs diff=lfs merge=lfs -text
|
assets/.DS_Store
CHANGED
|
Binary files a/assets/.DS_Store and b/assets/.DS_Store differ
|
|
|
assets/app.js
CHANGED
|
@@ -1,296 +1,587 @@
|
|
| 1 |
-
|
| 2 |
-
const
|
| 3 |
-
const root = document.documentElement;
|
| 4 |
-
const saved = localStorage.getItem('theme') || 'dark';
|
| 5 |
|
| 6 |
-
|
| 7 |
-
if (saved === 'light') {
|
| 8 |
-
document.documentElement.classList.remove('dark');
|
| 9 |
-
} else {
|
| 10 |
-
document.documentElement.classList.add('dark');
|
| 11 |
-
}
|
| 12 |
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
}
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
};
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
|
|
|
|
|
|
| 26 |
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
document.body.style.transition = 'background-color 0.3s ease, color 0.3s ease';
|
| 34 |
-
setTimeout(() => {
|
| 35 |
-
document.body.style.transition = '';
|
| 36 |
-
}, 300);
|
| 37 |
-
});
|
| 38 |
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
});
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
targetDiagram.style.display = 'block';
|
| 69 |
-
targetDiagram.classList.add('visible');
|
| 70 |
-
targetDiagram.style.opacity = '1';
|
| 71 |
-
targetDiagram.style.transform = 'translateY(0)';
|
| 72 |
-
targetDiagram.setAttribute('aria-hidden', 'false');
|
| 73 |
-
}, 150);
|
| 74 |
-
}
|
| 75 |
});
|
| 76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
});
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
}
|
| 103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
|
| 105 |
-
|
| 106 |
-
const
|
| 107 |
-
|
| 108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
-
|
| 111 |
-
const
|
| 112 |
-
const
|
| 113 |
-
const
|
| 114 |
-
const
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
} else if (to >= 1000) {
|
| 131 |
-
el.textContent = (v / 1000).toFixed(1) + 'K';
|
| 132 |
-
} else {
|
| 133 |
-
el.textContent = v.toLocaleString();
|
| 134 |
-
}
|
| 135 |
-
|
| 136 |
-
if (p < 1) {
|
| 137 |
-
requestAnimationFrame(step);
|
| 138 |
-
} else {
|
| 139 |
-
// Ensure final value is exact
|
| 140 |
-
if (to >= 1000000) {
|
| 141 |
-
el.textContent = (to / 1000000).toFixed(1) + 'M';
|
| 142 |
-
} else if (to >= 1000) {
|
| 143 |
-
el.textContent = (to / 1000).toFixed(1) + 'K';
|
| 144 |
-
} else {
|
| 145 |
-
el.textContent = to.toLocaleString();
|
| 146 |
-
}
|
| 147 |
-
}
|
| 148 |
};
|
| 149 |
-
|
| 150 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 151 |
|
| 152 |
-
|
| 153 |
-
const
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
// Animate with slight delay for better visual effect
|
| 163 |
-
setTimeout(() => {
|
| 164 |
-
animateCount(el, count);
|
| 165 |
-
el.classList.remove('loading');
|
| 166 |
-
}, 200);
|
| 167 |
-
|
| 168 |
-
observer.unobserve(el);
|
| 169 |
-
}
|
| 170 |
});
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
rootMargin: '0px 0px -50px 0px'
|
| 174 |
-
});
|
| 175 |
|
| 176 |
-
|
| 177 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
|
| 179 |
-
|
| 180 |
-
const
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
gyroscope: false
|
| 191 |
-
});
|
| 192 |
-
});
|
| 193 |
-
} catch (error) {
|
| 194 |
-
console.warn('VanillaTilt initialization failed:', error);
|
| 195 |
-
}
|
| 196 |
-
}
|
| 197 |
-
};
|
| 198 |
|
| 199 |
-
|
| 200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 201 |
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
});
|
| 219 |
-
});
|
| 220 |
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
|
|
|
|
|
|
|
|
|
| 228 |
});
|
| 229 |
-
}
|
| 230 |
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
}
|
|
|
|
|
|
|
| 237 |
|
| 238 |
-
|
| 239 |
-
const
|
| 240 |
-
if (
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
}
|
| 248 |
-
};
|
| 249 |
|
| 250 |
-
|
| 251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 252 |
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
let nextIndex;
|
| 262 |
-
|
| 263 |
-
if (e.key === 'ArrowLeft') {
|
| 264 |
-
nextIndex = currentIndex > 0 ? currentIndex - 1 : tabs.length - 1;
|
| 265 |
-
} else {
|
| 266 |
-
nextIndex = currentIndex < tabs.length - 1 ? currentIndex + 1 : 0;
|
| 267 |
-
}
|
| 268 |
-
|
| 269 |
-
tabs[nextIndex].click();
|
| 270 |
-
tabs[nextIndex].focus();
|
| 271 |
-
}
|
| 272 |
-
}
|
| 273 |
-
});
|
| 274 |
|
| 275 |
-
|
| 276 |
-
const
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 282 |
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
const $ = (selector, scope = document) => scope.querySelector(selector);
|
| 2 |
+
const $$ = (selector, scope = document) => [...scope.querySelectorAll(selector)];
|
|
|
|
|
|
|
| 3 |
|
| 4 |
+
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
+
const data = {
|
| 7 |
+
architecture: [
|
| 8 |
+
['Input', 'Clinician input and case question are normalised before retrieval.'],
|
| 9 |
+
['Patient context', 'EMR history, medications, labs, allergies, and provenance metadata shape the query.'],
|
| 10 |
+
['Guidelines', 'CPG passages are retrieved with section, version, and update metadata.'],
|
| 11 |
+
['Orchestrator', 'Typed artifacts coordinate retrieval sets, summaries, guideline extracts, and safety critiques.'],
|
| 12 |
+
['Candidate pool', 'Dense ANN and BM25 lexical recall are unioned to protect rare terms and semantic matches.'],
|
| 13 |
+
['Reranking', 'A long-context biomedical reranker scores each query-passage pair and supports calibrated thresholds.'],
|
| 14 |
+
['Sufficiency', 'Facet coverage, entropy, contradictions, and marginal utility govern retrieve-more evidence actions.'],
|
| 15 |
+
['Answer', 'Final output includes a grounded answer.']
|
| 16 |
+
],
|
| 17 |
+
datasets: [
|
| 18 |
+
['HealthCareMagic', 100, 'forum QA'],
|
| 19 |
+
['iCliniq', 10, 'forum QA'],
|
| 20 |
+
['PubMedQA labelled', 1, 'research QA'],
|
| 21 |
+
['PubMedQA unlabelled', 61.2, 'KD prompts'],
|
| 22 |
+
['PubMedQA synthetic', 211.3, 'multi-variant']
|
| 23 |
+
],
|
| 24 |
+
merges: [
|
| 25 |
+
['Task arithmetic', 'Adds SFT and KD deltas with magnitude control.', '#33d7ff', 'θ = θ₀ + λ(ΔSFT + ΔKD)', 'Vector addition preserves both task updates but can amplify shared directions.'],
|
| 26 |
+
['NuSLERP', 'Interpolates normalised update directions to reduce norm dominance.', '#5ef7d8', 'θ = θ₀ + slerp(norm(ΔSFT), norm(ΔKD); t)', 'Normalise first, then follow the spherical arc between update directions.'],
|
| 27 |
+
['DARE', 'Drops and rescales redundant update coordinates.', '#ffd166', 'θ = θ₀ + m ⊙ Δ / p', 'A Bernoulli mask removes coordinates, then rescales the survivors to preserve expectation.'],
|
| 28 |
+
['TIES', 'Trims weak updates and resolves sign conflicts.', '#9b7cff', 'θᵢ = θ₀ᵢ + sign_vote(top_k(Δᵢ))', 'Weak coordinates are trimmed; conflicting signs are resolved by consensus before merging.'],
|
| 29 |
+
['DARE–TIES', 'Combines stochastic sparsity with sign consensus.', '#ff6f91', 'θ = θ₀ + TIES(DARE(ΔSFT), DARE(ΔKD))', 'Sparsify noisy updates first, then merge only the agreed surviving directions.']
|
| 30 |
+
],
|
| 31 |
+
retrievalStages: [
|
| 32 |
+
{
|
| 33 |
+
key: 'Candidate pool',
|
| 34 |
+
title: 'Stage 1: dense + lexical recall',
|
| 35 |
+
body: 'The system retrieves a broad candidate set with dense ANN search and BM25 union. This protects exact clinical terms while preserving semantic recall.',
|
| 36 |
+
nodes: [
|
| 37 |
+
['Clinical query q', 70, 190], ['Dense ANN', 370, 105], ['BM25 lexical', 370, 275], ['Union C(q)', 660, 190]
|
| 38 |
+
],
|
| 39 |
+
lines: [[225, 220, 360, 140], [225, 220, 360, 308], [520, 135, 650, 205], [520, 300, 650, 225]]
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
key: 'Biomedical rerank',
|
| 43 |
+
title: 'Stage 2: long-context pointwise reranking',
|
| 44 |
+
body: 'Each query-passage pair receives a logit and calibrated relevance probability, enabling auditable thresholds instead of uncalibrated top-K truncation.',
|
| 45 |
+
nodes: [
|
| 46 |
+
['q + passage d', 80, 160], ['LLM reranker', 350, 205], ['Temp scaling', 620, 135], ['p̂θ(q,d)', 650, 285]
|
| 47 |
+
],
|
| 48 |
+
lines: [[250, 190, 340, 230], [510, 230, 610, 168], [510, 245, 640, 315]]
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
key: 'Evidence grade',
|
| 52 |
+
title: 'Evidence hierarchy + source validity',
|
| 53 |
+
body: 'Guidelines, systematic reviews, RCTs, observational evidence, case evidence, EMR evidence, and safety evidence are separated so patient context is not confused with generalisable treatment efficacy.',
|
| 54 |
+
nodes: [
|
| 55 |
+
['CPG / SR / RCT', 85, 115], ['EMR applicability', 105, 295], ['gEBM(d)', 410, 205], ['noise penalty', 660, 250]
|
| 56 |
+
],
|
| 57 |
+
lines: [[255, 145, 405, 218], [285, 320, 405, 255], [555, 230, 650, 270]]
|
| 58 |
+
},
|
| 59 |
+
{
|
| 60 |
+
key: 'Budgeted bundle',
|
| 61 |
+
title: 'Utility selection under token budget B',
|
| 62 |
+
body: 'The bundle maximises clinical utility: facet coverage, source quality, safety relevance, contradiction resolution, and redundancy penalties under a hard token budget.',
|
| 63 |
+
nodes: [
|
| 64 |
+
['Facet set F(q)', 90, 150], ['Utility U(q,M)', 390, 185], ['M* bundle', 650, 145], ['Audit trace', 650, 290]
|
| 65 |
+
],
|
| 66 |
+
lines: [[250, 180, 380, 215], [550, 215, 640, 180], [550, 225, 640, 320]]
|
| 67 |
}
|
| 68 |
+
],
|
| 69 |
+
facets: [
|
| 70 |
+
['Guideline concordance', 42, true],
|
| 71 |
+
['Contraindications', 35, true],
|
| 72 |
+
['Patient applicability', 40, true],
|
| 73 |
+
['Medication interactions', 28, true],
|
| 74 |
+
['Outcome evidence', 52, false],
|
| 75 |
+
['Audit provenance', 58, false]
|
| 76 |
+
],
|
| 77 |
+
retrievalEvents: [
|
| 78 |
+
'Guideline agent retrieved a current CPG recommendation with section and version metadata.',
|
| 79 |
+
'Safety agent added contraindication evidence with severity tags.',
|
| 80 |
+
'Patient-context agent aligned lab trend and comorbidity constraints from EMR.',
|
| 81 |
+
'Contradiction critic preserved a population-exclusion conflict for adjudication.',
|
| 82 |
+
'Evidence-quality agent upgraded source grade using systematic-review support.',
|
| 83 |
+
'Orchestrator accepted bundle after marginal utility saturated under token budget.'
|
| 84 |
+
],
|
| 85 |
+
agents: [
|
| 86 |
+
['⌁', 'Exploration agent', 'Maximises recall through dense retrieval, lexical retrieval, synonym expansion, abbreviation expansion, and specialty reformulation.', 84],
|
| 87 |
+
['§', 'Guideline agent', 'Prioritises CPG and consensus recommendations, extracting strength, population, exclusions, and update date.', 91],
|
| 88 |
+
['◆', 'Evidence-quality agent', 'Assigns EBM grade, study design, provenance, sample relevance, outcome relevance, and recency.', 87],
|
| 89 |
+
['◈', 'Patient-context agent', 'Aligns evidence with EMR-derived comorbidities, demographics, medications, allergies, labs, and prior treatment history.', 85],
|
| 90 |
+
['!', 'Safety agent', 'Searches for contraindications, adverse events, drug-drug interactions, dose restrictions, and exclusion criteria.', 93],
|
| 91 |
+
['⇄', 'Contradiction critic', 'Separates true clinical conflict from population mismatch and routes unresolved high-severity conflicts forward.', 88]
|
| 92 |
+
],
|
| 93 |
+
qa: {
|
| 94 |
+
medquad: [
|
| 95 |
+
{ model: 'DaRE-TIES-KD-0.7', rouge: 0.17, bert: 0.8501, tok: 0.22, uni: 0.47, bi: 0.14 },
|
| 96 |
+
{ model: 'NuSL-KD-0.7', rouge: 0.17, bert: 0.8500, tok: 0.21, uni: 0.47, bi: 0.11 },
|
| 97 |
+
{ model: 'DaRE-Linear-KD-0.7', rouge: 0.17, bert: 0.8494, tok: 0.22, uni: 0.45, bi: 0.14 },
|
| 98 |
+
{ model: 'TA-SFT-0.7', rouge: 0.16, bert: 0.8491, tok: 0.18, uni: 0.51, bi: 0.20 },
|
| 99 |
+
{ model: '7B-KD', rouge: 0.18, bert: 0.8441, tok: 0.26, uni: 0.46, bi: 0.12 },
|
| 100 |
+
{ model: '7B-SFT', rouge: 0.15, bert: 0.8396, tok: 0.18, uni: 0.52, bi: 0.21 },
|
| 101 |
+
{ model: 'KD-SFT-PubMed-l', rouge: 0.17, bert: 0.8341, tok: 0.24, uni: 0.44, bi: 0.11 },
|
| 102 |
+
{ model: 'KD-SFT-PubMed-map', rouge: 0.17, bert: 0.8297, tok: 0.22, uni: 0.47, bi: 0.12 },
|
| 103 |
+
{ model: 'MedGemma-27b-it', rouge: 0.19, bert: 0.8465, tok: 0.27, uni: 0.40, bi: 0.09 },
|
| 104 |
+
{ model: 'MedGemma-1.5-4b', rouge: 0.18, bert: 0.8449, tok: 0.26, uni: 0.40, bi: 0.08 },
|
| 105 |
+
{ model: 'Gemini 3.1', rouge: 0.15, bert: 0.8490, tok: 0.26, uni: 0.36, bi: 0.08 },
|
| 106 |
+
{ model: 'Gemini 2.5 Flash', rouge: 0.09, bert: 0.8390, tok: 0.11, uni: 0.55, bi: 0.28 },
|
| 107 |
+
{ model: 'GPT 5.4', rouge: 0.13, bert: 0.8450, tok: 0.21, uni: 0.31, bi: 0.05 },
|
| 108 |
+
{ model: 'Claude Sonnet 4.6', rouge: 0.12, bert: 0.8470, tok: 0.19, uni: 0.28, bi: 0.05 },
|
| 109 |
+
{ model: 'Mistral Small', rouge: 0.14, bert: 0.8450, tok: 0.23, uni: 0.34, bi: 0.07 },
|
| 110 |
+
{ model: 'BioMistral-7B', rouge: 0.18, bert: 0.8460, tok: 0.25, uni: 0.45, bi: 0.11 },
|
| 111 |
+
{ model: 'MediPhi', rouge: 0.18, bert: 0.8479, tok: 0.27, uni: 0.40, bi: 0.09 },
|
| 112 |
+
{ model: 'Meditron-7B', rouge: 0.16, bert: 0.8240, tok: 0.22, uni: 0.47, bi: 0.13 },
|
| 113 |
+
{ model: 'MedAlpaca-7B', rouge: 0.16, bert: 0.8196, tok: 0.18, uni: 0.50, bi: 0.20 }
|
| 114 |
+
],
|
| 115 |
+
healthbench: [
|
| 116 |
+
{ model: 'TIES-KD-0.7-0.6', rouge: 0.16, bert: 0.8411, tok: 0.22, uni: 0.35, bi: 0.08 },
|
| 117 |
+
{ model: 'TA-SFT-0.7', rouge: 0.16, bert: 0.8410, tok: 0.23, uni: 0.35, bi: 0.08 },
|
| 118 |
+
{ model: 'NuSL-KD-0.7', rouge: 0.16, bert: 0.8403, tok: 0.24, uni: 0.34, bi: 0.07 },
|
| 119 |
+
{ model: 'DaRE-TIES-KD-0.7', rouge: 0.16, bert: 0.8392, tok: 0.24, uni: 0.34, bi: 0.07 },
|
| 120 |
+
{ model: 'DaRE-Linear-KD-0.7', rouge: 0.16, bert: 0.8388, tok: 0.24, uni: 0.34, bi: 0.07 },
|
| 121 |
+
{ model: '7B-KD', rouge: 0.15, bert: 0.8314, tok: 0.23, uni: 0.32, bi: 0.06 },
|
| 122 |
+
{ model: '7B-SFT', rouge: 0.13, bert: 0.8299, tok: 0.17, uni: 0.31, bi: 0.07 },
|
| 123 |
+
{ model: 'KD-SFT-PubMed-l', rouge: 0.13, bert: 0.8186, tok: 0.20, uni: 0.32, bi: 0.06 },
|
| 124 |
+
{ model: 'KD-SFT-PubMed-map', rouge: 0.12, bert: 0.8088, tok: 0.16, uni: 0.31, bi: 0.06 },
|
| 125 |
+
{ model: 'MedGemma-27b-it', rouge: 0.17, bert: 0.8342, tok: 0.26, uni: 0.32, bi: 0.07 },
|
| 126 |
+
{ model: 'MedGemma-1.5-4b', rouge: 0.16, bert: 0.8326, tok: 0.25, uni: 0.32, bi: 0.06 },
|
| 127 |
+
{ model: 'Gemini 3.1', rouge: 0.14, bert: 0.8480, tok: 0.26, uni: 0.33, bi: 0.06 },
|
| 128 |
+
{ model: 'Gemini 2.5 Flash', rouge: 0.08, bert: 0.8230, tok: 0.13, uni: 0.47, bi: 0.18 },
|
| 129 |
+
{ model: 'GPT 5.4', rouge: 0.12, bert: 0.8460, tok: 0.22, uni: 0.27, bi: 0.04 },
|
| 130 |
+
{ model: 'Claude Sonnet 4.6', rouge: 0.11, bert: 0.8440, tok: 0.20, uni: 0.24, bi: 0.04 },
|
| 131 |
+
{ model: 'Mistral Small', rouge: 0.13, bert: 0.8470, tok: 0.23, uni: 0.30, bi: 0.06 },
|
| 132 |
+
{ model: 'BioMistral-7B', rouge: 0.16, bert: 0.8404, tok: 0.23, uni: 0.35, bi: 0.08 },
|
| 133 |
+
{ model: 'Meditron-7B', rouge: 0.12, bert: 0.8068, tok: 0.15, uni: 0.31, bi: 0.06 },
|
| 134 |
+
{ model: 'MedAlpaca-7B', rouge: 0.11, bert: 0.7946, tok: 0.21, uni: 0.34, bi: 0.07 }
|
| 135 |
+
]
|
| 136 |
+
},
|
| 137 |
+
reranker: [
|
| 138 |
+
['MRR@10', '0.9771', 97.71, 'Relevant passages are placed extremely close to the top.'],
|
| 139 |
+
['nDCG@10', '0.9826', 98.26, 'Position-sensitive ranking quality remains high after biomedical adaptation.'],
|
| 140 |
+
['Recall@10', '1.0000', 100, 'The positive passage is present in the first ten results.'],
|
| 141 |
+
['MAP@10', '0.9771', 97.71, 'Average precision across the ranked evidence set is high.'],
|
| 142 |
+
['p95 latency', '3895.1 ms', 74, 'Long-context scoring trades latency for calibrated clinical auditability.']
|
| 143 |
+
],
|
| 144 |
+
audit: [
|
| 145 |
+
['Facet recall', 92], ['Citation precision', 88], ['Trace completeness', 96], ['Sufficiency decision', 90], ['Groundedness proxy', 86], ['Unsafe omission control', 84]
|
| 146 |
+
],
|
| 147 |
+
release: [
|
| 148 |
+
['01', 'Data engineering filters', 'License-aware fetchers, PHI scrubbing, MD5 deduplication, medically invariant augmentation filters, and dataset manifests.'],
|
| 149 |
+
['02', 'Teacher-label utilities', 'Logged prompts and decoding parameters for hard-label generation plus top-k soft-label serialization.'],
|
| 150 |
+
['03', 'QLoRA training scripts', '4-bit NF4, LoRA rank configuration, optimizer schedules, gradient checkpointing, early stopping, and checkpoint reconstruction.'],
|
| 151 |
+
['04', 'Merge specifications', 'MergeKit YAML recipes for TA, SLERP, NuSLERP, DARE, TIES, and DARE-TIES.'],
|
| 152 |
+
['05', 'Retrieval policy package', 'Dense + lexical union, long-context biomedical reranker inference, calibrated scoring hooks, evidence hierarchy, and index parameters.'],
|
| 153 |
+
['06', 'Evaluation and audit harness', 'Deterministic prompting, benchmarks, trace export, policy rates, penalties, and MSAS reporting.']
|
| 154 |
+
]
|
| 155 |
};
|
| 156 |
|
| 157 |
+
let activeStage = 0;
|
| 158 |
+
let activeMerge = 4;
|
| 159 |
+
let retrievalStep = 0;
|
| 160 |
+
const coverageHistory = [34];
|
| 161 |
|
| 162 |
+
function setHTML(el, html) { if (el) el.innerHTML = html; }
|
| 163 |
+
function clamp(n, min, max) { return Math.max(min, Math.min(max, n)); }
|
| 164 |
+
function fmtScore(value, metric) {
|
| 165 |
+
if (metric === 'bert') return `${(value * 100).toFixed(2)}%`;
|
| 166 |
+
return value.toFixed(3);
|
| 167 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
|
| 169 |
+
function initCanvas() {
|
| 170 |
+
const canvas = $('#abyssCanvas');
|
| 171 |
+
if (!canvas || prefersReducedMotion) return;
|
| 172 |
+
const ctx = canvas.getContext('2d');
|
| 173 |
+
let w = 0, h = 0, dpr = 1;
|
| 174 |
+
const particles = Array.from({ length: 130 }, () => ({
|
| 175 |
+
x: Math.random(), y: Math.random(), r: Math.random() * 1.7 + .35,
|
| 176 |
+
vx: (Math.random() - .5) * .00008, vy: Math.random() * .00012 + .000035,
|
| 177 |
+
a: Math.random() * .45 + .12
|
| 178 |
+
}));
|
| 179 |
+
const caustics = Array.from({ length: 10 }, (_, i) => ({
|
| 180 |
+
y: .12 + i * .095,
|
| 181 |
+
speed: .00016 + Math.random() * .00018,
|
| 182 |
+
amp: 8 + Math.random() * 14,
|
| 183 |
+
alpha: .018 + Math.random() * .024
|
| 184 |
+
}));
|
| 185 |
+
function resize() {
|
| 186 |
+
dpr = Math.min(window.devicePixelRatio || 1, 2);
|
| 187 |
+
w = canvas.width = Math.floor(innerWidth * dpr);
|
| 188 |
+
h = canvas.height = Math.floor(innerHeight * dpr);
|
| 189 |
+
canvas.style.width = `${innerWidth}px`;
|
| 190 |
+
canvas.style.height = `${innerHeight}px`;
|
| 191 |
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
| 192 |
+
w = innerWidth; h = innerHeight;
|
| 193 |
+
}
|
| 194 |
+
function draw(t) {
|
| 195 |
+
ctx.clearRect(0, 0, w, h);
|
| 196 |
+
const grad = ctx.createLinearGradient(0, 0, 0, h);
|
| 197 |
+
grad.addColorStop(0, '#04142b'); grad.addColorStop(.48, '#020b1b'); grad.addColorStop(1, '#00040d');
|
| 198 |
+
ctx.fillStyle = grad; ctx.fillRect(0, 0, w, h);
|
| 199 |
+
// Motivation vs Logic: the page theme should feel like deep water, but the animation must stay calm enough for reading. We layer slow caustic curves and small particulate drift instead of large distracting motion.
|
| 200 |
+
caustics.forEach((line, i) => {
|
| 201 |
+
ctx.beginPath();
|
| 202 |
+
ctx.strokeStyle = `rgba(101,231,255,${line.alpha})`;
|
| 203 |
+
ctx.lineWidth = i % 3 === 0 ? 1.4 : .8;
|
| 204 |
+
const base = h * line.y;
|
| 205 |
+
for (let x = 0; x <= w; x += 18) {
|
| 206 |
+
const y = base + Math.sin(x * .006 + t * line.speed + i) * line.amp + Math.sin(x * .019 + t * .00011) * 3;
|
| 207 |
+
x ? ctx.lineTo(x, y) : ctx.moveTo(x, y);
|
| 208 |
+
}
|
| 209 |
+
ctx.stroke();
|
| 210 |
});
|
| 211 |
+
particles.forEach(p => {
|
| 212 |
+
p.x += p.vx; p.y += p.vy;
|
| 213 |
+
if (p.x < 0) p.x = 1; if (p.x > 1) p.x = 0; if (p.y > 1) p.y = 0;
|
| 214 |
+
ctx.beginPath();
|
| 215 |
+
ctx.fillStyle = `rgba(224,250,255,${p.a})`;
|
| 216 |
+
ctx.arc(p.x * w, p.y * h, p.r, 0, Math.PI * 2);
|
| 217 |
+
ctx.fill();
|
| 218 |
+
});
|
| 219 |
+
requestAnimationFrame(draw);
|
| 220 |
+
}
|
| 221 |
+
resize();
|
| 222 |
+
addEventListener('resize', resize, { passive: true });
|
| 223 |
+
requestAnimationFrame(draw);
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
function initNavigation() {
|
| 227 |
+
const navToggle = $('#navToggle');
|
| 228 |
+
const nav = $('#siteNav');
|
| 229 |
+
navToggle?.addEventListener('click', () => {
|
| 230 |
+
const open = nav.classList.toggle('open');
|
| 231 |
+
navToggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 232 |
});
|
| 233 |
+
const links = [...$$('.nav a'), ...$$('.depth-map a')];
|
| 234 |
+
const sections = links.map(a => $(a.getAttribute('href'))).filter(Boolean);
|
| 235 |
+
const observer = new IntersectionObserver(entries => {
|
| 236 |
+
entries.forEach(entry => {
|
| 237 |
+
if (!entry.isIntersecting) return;
|
| 238 |
+
links.forEach(a => a.classList.toggle('active', a.getAttribute('href') === `#${entry.target.id}`));
|
| 239 |
+
});
|
| 240 |
+
}, { rootMargin: '-40% 0px -55% 0px', threshold: 0.01 });
|
| 241 |
+
sections.forEach(s => observer.observe(s));
|
| 242 |
+
addEventListener('scroll', () => {
|
| 243 |
+
const max = document.documentElement.scrollHeight - innerHeight;
|
| 244 |
+
$('#readProgress').style.width = `${max > 0 ? (scrollY / max) * 100 : 0}%`;
|
| 245 |
+
}, { passive: true });
|
| 246 |
+
// Root Cause vs Logic: anchor jumps could land headings under the sticky header or leave hash targets unrevealed after a deep link. CSS sets the normal margin; this correction settles hash targets after layout finishes.
|
| 247 |
+
function settleHashTarget() {
|
| 248 |
+
const id = decodeURIComponent(location.hash.slice(1));
|
| 249 |
+
if (!id) return;
|
| 250 |
+
const target = document.getElementById(id);
|
| 251 |
+
if (!target) return;
|
| 252 |
+
const header = $('.site-header');
|
| 253 |
+
const offset = (header?.getBoundingClientRect().height || 0) + 34 + (id === 'architecture' ? 120 : 0);
|
| 254 |
+
const top = target.getBoundingClientRect().top + scrollY - offset;
|
| 255 |
+
window.scrollTo({ top: Math.max(0, top), behavior: prefersReducedMotion ? 'auto' : 'smooth' });
|
| 256 |
+
$$('.reveal', target).forEach(el => el.classList.add('visible'));
|
| 257 |
+
}
|
| 258 |
+
addEventListener('hashchange', () => setTimeout(settleHashTarget, 60));
|
| 259 |
+
setTimeout(settleHashTarget, 180);
|
| 260 |
+
}
|
| 261 |
|
| 262 |
+
function initRevealAndCounters() {
|
| 263 |
+
const observer = new IntersectionObserver(entries => {
|
| 264 |
+
entries.forEach(entry => {
|
| 265 |
+
if (!entry.isIntersecting) return;
|
| 266 |
+
entry.target.classList.add('visible');
|
| 267 |
+
observer.unobserve(entry.target);
|
| 268 |
+
});
|
| 269 |
+
}, { threshold: 0.12 });
|
| 270 |
+
$$('.reveal').forEach(el => observer.observe(el));
|
| 271 |
+
const countObserver = new IntersectionObserver(entries => {
|
| 272 |
+
entries.forEach(entry => {
|
| 273 |
+
if (!entry.isIntersecting) return;
|
| 274 |
+
const el = entry.target;
|
| 275 |
+
const target = Number(el.dataset.target || 0);
|
| 276 |
+
const duration = 1100;
|
| 277 |
+
const start = performance.now();
|
| 278 |
+
function tick(now) {
|
| 279 |
+
const p = clamp((now - start) / duration, 0, 1);
|
| 280 |
+
const eased = 1 - Math.pow(1 - p, 3);
|
| 281 |
+
el.textContent = Math.round(target * eased).toString();
|
| 282 |
+
if (p < 1) requestAnimationFrame(tick);
|
| 283 |
+
}
|
| 284 |
+
requestAnimationFrame(tick);
|
| 285 |
+
countObserver.unobserve(el);
|
| 286 |
+
});
|
| 287 |
+
}, { threshold: .3 });
|
| 288 |
+
$$('.counter').forEach(el => countObserver.observe(el));
|
| 289 |
+
}
|
| 290 |
+
|
| 291 |
+
function initSonar() {
|
| 292 |
+
const readout = $('#sonarReadout');
|
| 293 |
+
$$('.sonar-node').forEach(btn => {
|
| 294 |
+
const update = () => { readout.textContent = btn.dataset.copy; };
|
| 295 |
+
btn.addEventListener('mouseenter', update);
|
| 296 |
+
btn.addEventListener('focus', update);
|
| 297 |
});
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
function initArchitecture() {
|
| 301 |
+
const caption = $('#archCaption');
|
| 302 |
+
const notes = $('#architectureNotes');
|
| 303 |
+
const paths = $$('#architectureSvg .flow-path');
|
| 304 |
+
const nodes = $$('#architectureSvg .arch-node');
|
| 305 |
+
const evidenceFlows = $$('#architectureSvg .arch-evidence-flow');
|
| 306 |
+
let step = 1;
|
| 307 |
+
let timer = null;
|
| 308 |
+
function render(next = step) {
|
| 309 |
+
step = next;
|
| 310 |
+
paths.forEach(p => p.classList.toggle('active', Number(p.dataset.step) <= step));
|
| 311 |
+
nodes.forEach(n => n.classList.toggle('active', Number(n.dataset.step) <= step));
|
| 312 |
+
evidenceFlows.forEach(flow => flow.classList.toggle('active', Number(flow.dataset.step) <= step));
|
| 313 |
+
caption.textContent = data.architecture[step - 1]?.[1] || 'Grounded answer leaves with audit trace.';
|
| 314 |
+
const cards = data.architecture.slice(Math.max(0, step - 4), step).map(([title, body]) => `<div><strong>${title}</strong>${body}</div>`).join('');
|
| 315 |
+
setHTML(notes, cards);
|
| 316 |
}
|
| 317 |
+
$('#playArchitecture')?.addEventListener('click', () => {
|
| 318 |
+
clearInterval(timer); step = 1; render(step);
|
| 319 |
+
timer = setInterval(() => {
|
| 320 |
+
step += 1; render(step);
|
| 321 |
+
if (step >= 8) clearInterval(timer);
|
| 322 |
+
}, prefersReducedMotion ? 0 : 720);
|
| 323 |
+
});
|
| 324 |
+
$('#resetArchitecture')?.addEventListener('click', () => { clearInterval(timer); render(1); });
|
| 325 |
+
nodes.forEach(n => n.addEventListener('click', () => render(Number(n.dataset.step))));
|
| 326 |
+
render(1);
|
| 327 |
+
}
|
| 328 |
|
| 329 |
+
function initDatasets() {
|
| 330 |
+
const max = Math.max(...data.datasets.map(d => d[1]));
|
| 331 |
+
setHTML($('#datasetBars'), data.datasets.map(([name, value, note]) => `
|
| 332 |
+
<div class="dataset-row">
|
| 333 |
+
<div class="dataset-name">${name}<br><span style="color:var(--muted);font-weight:700;font-size:.84rem">${note}</span></div>
|
| 334 |
+
<div class="dataset-track"><div class="dataset-fill" data-width="${(value / max) * 100}"></div></div>
|
| 335 |
+
<div class="dataset-value">${value}k</div>
|
| 336 |
+
</div>`).join(''));
|
| 337 |
+
setTimeout(() => $$('.dataset-fill').forEach(el => el.style.width = `${el.dataset.width}%`), 150);
|
| 338 |
+
}
|
| 339 |
|
| 340 |
+
function renderMerge() {
|
| 341 |
+
const svg = $('#mergeSvg');
|
| 342 |
+
const op = data.merges[activeMerge];
|
| 343 |
+
const color = op[2];
|
| 344 |
+
const values = [
|
| 345 |
+
[68, 76, 64, 82, 58, 70],
|
| 346 |
+
[54, 68, 62, 64, 60, 66],
|
| 347 |
+
[0, 84, 0, 76, 0, 70],
|
| 348 |
+
[58, 0, 72, 0, 66, 0],
|
| 349 |
+
[0, 78, 0, 82, 62, 0]
|
| 350 |
+
][activeMerge];
|
| 351 |
+
const wrap = (text, x, y, width = 30, cls = 'merge-sub') => {
|
| 352 |
+
const words = text.split(' ');
|
| 353 |
+
const lines = words.reduce((acc, word) => {
|
| 354 |
+
const last = acc[acc.length - 1] || '';
|
| 355 |
+
if (`${last} ${word}`.trim().length > width) acc.push(word);
|
| 356 |
+
else acc[acc.length - 1] = `${last} ${word}`.trim();
|
| 357 |
+
return acc;
|
| 358 |
+
}, ['']);
|
| 359 |
+
return `<text class="${cls}" x="${x}" y="${y}">${lines.map((line, i) => `<tspan x="${x}" dy="${i ? 19 : 0}">${line}</tspan>`).join('')}</text>`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 360 |
};
|
| 361 |
+
const miniBars = values.map((v, i) => {
|
| 362 |
+
const x = 720 + i * 34;
|
| 363 |
+
return `<rect class="merge-weight" x="${x}" y="${294 - v}" width="20" height="${v}" rx="10" fill="${color}"/>`;
|
| 364 |
+
}).join('');
|
| 365 |
+
const mechanism = [
|
| 366 |
+
['Add deltas', 'Sum both update vectors, then scale the total update before applying it to the base model.'],
|
| 367 |
+
['Normalize direction', 'Convert updates to directions, interpolate on the sphere, then restore a controlled magnitude.'],
|
| 368 |
+
['Drop + rescale', 'Mask redundant coordinates and rescale the surviving coordinates to preserve the expected update.'],
|
| 369 |
+
['Trim + sign vote', 'Keep strong coordinates, resolve sign conflicts, and merge only the agreed directions.'],
|
| 370 |
+
['Sparse consensus', 'Apply DARE sparsity first, then use TIES sign consensus on the surviving update set.']
|
| 371 |
+
][activeMerge];
|
| 372 |
+
// Motivation vs Logic: the merge panel needs to teach the operator rather than decorate it. Each mode now shows a formula, weight coordinates, and the exact transformation metaphor used by that merge technique.
|
| 373 |
+
svg.innerHTML = `
|
| 374 |
+
<defs>
|
| 375 |
+
<marker id="mergeArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" fill="${color}"/></marker>
|
| 376 |
+
</defs>
|
| 377 |
+
<rect class="merge-panel" x="48" y="58" width="220" height="132" rx="22"/>
|
| 378 |
+
<text class="merge-kicker" x="76" y="96">Input update</text>
|
| 379 |
+
<text class="merge-label" x="76" y="132">ΔSFT</text>
|
| 380 |
+
<text class="merge-sub" x="76" y="164">format instruction</text>
|
| 381 |
+
<rect class="merge-panel" x="48" y="246" width="220" height="132" rx="22"/>
|
| 382 |
+
<text class="merge-kicker" x="76" y="284">Input update</text>
|
| 383 |
+
<text class="merge-label" x="76" y="320">ΔKD</text>
|
| 384 |
+
<text class="merge-sub" x="76" y="352">teacher semantics</text>
|
| 385 |
+
<path class="merge-vector active" d="M278 124 L356 124"/>
|
| 386 |
+
<path class="merge-vector active kd" d="M278 312 L356 312"/>
|
| 387 |
+
<rect class="merge-panel active" x="356" y="84" width="300" height="270" rx="26"/>
|
| 388 |
+
<text class="merge-kicker" x="392" y="126">Merge operator</text>
|
| 389 |
+
<text class="merge-label" x="392" y="164">${op[0]}</text>
|
| 390 |
+
${wrap(op[3], 392, 212, 30, 'merge-formula')}
|
| 391 |
+
<text class="merge-kicker" x="392" y="272">${mechanism[0]}</text>
|
| 392 |
+
${wrap(mechanism[1], 392, 306, 32)}
|
| 393 |
+
<path class="merge-vector active out" d="M656 220 L704 220" marker-end="url(#mergeArrow)"/>
|
| 394 |
+
<rect class="merge-panel active" x="704" y="110" width="248" height="220" rx="26"/>
|
| 395 |
+
<text class="merge-kicker" x="738" y="154">Merged model</text>
|
| 396 |
+
<text class="merge-label" x="738" y="194">θ specialist</text>
|
| 397 |
+
${miniBars}
|
| 398 |
+
<text class="merge-sub" x="738" y="314">conflict-aware 7B update</text>
|
| 399 |
+
<text x="54" y="444" class="merge-sub">Selected operator: ${op[0]} · ${op[1]}</text>`;
|
| 400 |
+
}
|
| 401 |
|
| 402 |
+
function initMerge() {
|
| 403 |
+
const controls = $('#mergeControls');
|
| 404 |
+
setHTML(controls, data.merges.map((m, i) => `<button class="merge-button ${i === activeMerge ? 'active' : ''}" data-i="${i}"><strong>${m[0]}</strong><span>${m[1]}</span></button>`).join(''));
|
| 405 |
+
controls.addEventListener('click', e => {
|
| 406 |
+
const btn = e.target.closest('.merge-button');
|
| 407 |
+
if (!btn) return;
|
| 408 |
+
activeMerge = Number(btn.dataset.i);
|
| 409 |
+
$$('.merge-button', controls).forEach(b => b.classList.toggle('active', b === btn));
|
| 410 |
+
renderMerge();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 411 |
});
|
| 412 |
+
renderMerge();
|
| 413 |
+
}
|
|
|
|
|
|
|
| 414 |
|
| 415 |
+
function renderRetrievalStage() {
|
| 416 |
+
const stage = data.retrievalStages[activeStage];
|
| 417 |
+
$$('.stage-tab').forEach((btn, i) => btn.classList.toggle('active', i === activeStage));
|
| 418 |
+
$('#stageCaption').innerHTML = `<strong>${stage.title}</strong>${stage.body}`;
|
| 419 |
+
const svg = $('#retrievalSvg');
|
| 420 |
+
svg.innerHTML = `
|
| 421 |
+
${stage.lines.map((l, i) => `<path class="diagram-line ${i % 2 ? 'secondary' : ''}" d="M${l[0]} ${l[1]} C ${(l[0] + l[2]) / 2} ${l[1]} ${(l[0] + l[2]) / 2} ${l[3]} ${l[2]} ${l[3]}"/>`).join('')}
|
| 422 |
+
${stage.nodes.map((n, i) => `<g class="diagram-node ${i === 0 ? 'active' : ''}" transform="translate(${n[1]} ${n[2]})"><rect width="210" height="88" rx="20"/><text x="24" y="39">${n[0]}</text><text class="sub" x="24" y="65">${stage.key}</text></g>`).join('')}`;
|
| 423 |
+
}
|
| 424 |
|
| 425 |
+
function initRetrieval() {
|
| 426 |
+
const tabs = $('#retrievalTabs');
|
| 427 |
+
setHTML(tabs, data.retrievalStages.map((s, i) => `<button class="stage-tab ${i === activeStage ? 'active' : ''}" data-i="${i}" role="tab">${s.key}</button>`).join(''));
|
| 428 |
+
tabs.addEventListener('click', e => {
|
| 429 |
+
const btn = e.target.closest('.stage-tab');
|
| 430 |
+
if (!btn) return;
|
| 431 |
+
activeStage = Number(btn.dataset.i);
|
| 432 |
+
renderRetrievalStage();
|
| 433 |
+
});
|
| 434 |
+
renderRetrievalStage();
|
| 435 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 436 |
|
| 437 |
+
function renderFacets() {
|
| 438 |
+
const threshold = 80;
|
| 439 |
+
setHTML($('#facetBars'), data.facets.map(([name, value, critical]) => `
|
| 440 |
+
<div class="facet-row">
|
| 441 |
+
<div class="facet-top"><span>${name}${critical ? ' <small style="color:var(--amber)">critical</small>' : ''}</span><span>${Math.round(value)}%</span></div>
|
| 442 |
+
<div class="facet-track"><div class="facet-fill ${critical ? '' : 'safe'}" style="width:${value}%"></div></div>
|
| 443 |
+
</div>`).join(''));
|
| 444 |
+
renderCoverage();
|
| 445 |
+
const accepted = data.facets.filter(f => f[2]).every(f => f[1] >= threshold);
|
| 446 |
+
const status = $('#policyStatus');
|
| 447 |
+
status.classList.toggle('accepted', accepted);
|
| 448 |
+
status.textContent = accepted ? 'Evidence bundle accepted: critical facets clear threshold and marginal utility is saturated.' : 'Critical facets are still below acceptance threshold; targeted retrieve-more action required.';
|
| 449 |
+
}
|
| 450 |
|
| 451 |
+
function renderCoverage() {
|
| 452 |
+
const svg = $('#coverageSvg');
|
| 453 |
+
const values = coverageHistory;
|
| 454 |
+
const w = 760, h = 210, pad = 34;
|
| 455 |
+
const x = i => pad + (i / Math.max(1, values.length - 1)) * (w - pad * 2);
|
| 456 |
+
const y = v => h - pad - (v / 100) * (h - pad * 2);
|
| 457 |
+
const points = values.map((v, i) => `${x(i)},${y(v)}`).join(' ');
|
| 458 |
+
const bars = values.map((v, i) => `<rect x="${x(i) - 13}" y="${y(v)}" width="26" height="${h - pad - y(v)}" rx="13" fill="url(#coverageGrad)" opacity=".88"/>`).join('');
|
| 459 |
+
svg.innerHTML = `<defs><linearGradient id="coverageGrad" x1="0" x2="0" y1="1" y2="0"><stop offset="0" stop-color="#4f85ff"/><stop offset="1" stop-color="#5ef7d8"/></linearGradient></defs>
|
| 460 |
+
<line x1="${pad}" y1="${h-pad}" x2="${w-pad}" y2="${h-pad}" stroke="rgba(115,202,255,.18)"/>
|
| 461 |
+
<line x1="${pad}" y1="${h-pad-0.8*(h-pad*2)}" x2="${w-pad}" y2="${h-pad-0.8*(h-pad*2)}" stroke="rgba(255,209,102,.45)" stroke-dasharray="8 8"/>
|
| 462 |
+
<text x="${w-pad-85}" y="${h-pad-0.8*(h-pad*2)-8}" fill="#ffd166" font-size="13" font-weight="800">80% threshold</text>
|
| 463 |
+
${bars}
|
| 464 |
+
<polyline points="${points}" fill="none" stroke="#5ef7d8" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
| 465 |
+
${values.map((v,i)=>`<circle cx="${x(i)}" cy="${y(v)}" r="5" fill="#eaffff"/>`).join('')}`;
|
| 466 |
+
}
|
|
|
|
|
|
|
| 467 |
|
| 468 |
+
function initSufficiency() {
|
| 469 |
+
renderFacets();
|
| 470 |
+
const list = $('#bundleList');
|
| 471 |
+
$('#retrieveMore')?.addEventListener('click', () => {
|
| 472 |
+
retrievalStep += 1;
|
| 473 |
+
data.facets.forEach((f, i) => { f[1] = clamp(f[1] + [12, 15, 13, 14, 8, 7][i], 0, 96); });
|
| 474 |
+
coverageHistory.push(Math.round(data.facets.reduce((s, f) => s + f[1], 0) / data.facets.length));
|
| 475 |
+
const message = data.retrievalEvents[Math.min(retrievalStep - 1, data.retrievalEvents.length - 1)];
|
| 476 |
+
list.insertAdjacentHTML('afterbegin', `<div><strong>Step ${retrievalStep}</strong>: ${message}</div>`);
|
| 477 |
+
renderFacets();
|
| 478 |
});
|
| 479 |
+
}
|
| 480 |
|
| 481 |
+
function initAgents() {
|
| 482 |
+
setHTML($('#agentHive'), data.agents.map(([icon, name, text, rel]) => `
|
| 483 |
+
<article class="agent-card">
|
| 484 |
+
<div class="agent-head"><span class="agent-icon">${icon}</span><h3>${name}</h3></div>
|
| 485 |
+
<p>${text}</p>
|
| 486 |
+
<div class="reliability" aria-label="Reliability ${rel}%"><i style="--w:${rel}%"></i></div>
|
| 487 |
+
</article>`).join(''));
|
| 488 |
+
}
|
| 489 |
|
| 490 |
+
function metricScale(metric, rows) {
|
| 491 |
+
const values = rows.map(r => r[metric]);
|
| 492 |
+
if (metric === 'bert') return { min: 0.80, max: 0.86 };
|
| 493 |
+
if (metric === 'uni') return { min: 0.20, max: 0.58 };
|
| 494 |
+
if (metric === 'bi') return { min: 0.00, max: 0.30 };
|
| 495 |
+
const min = Math.max(0, Math.floor((Math.min(...values) - 0.02) * 100) / 100);
|
| 496 |
+
const max = Math.ceil((Math.max(...values) + 0.03) * 100) / 100;
|
| 497 |
+
return { min, max };
|
| 498 |
+
}
|
|
|
|
|
|
|
| 499 |
|
| 500 |
+
function renderQA() {
|
| 501 |
+
const dataset = $('#datasetSelect').value;
|
| 502 |
+
const metric = $('#metricSort').value;
|
| 503 |
+
const lowFirst = metric === 'uni' || metric === 'bi';
|
| 504 |
+
const rows = [...data.qa[dataset]].sort((a, b) => lowFirst ? a[metric] - b[metric] : b[metric] - a[metric]);
|
| 505 |
+
const { min, max } = metricScale(metric, rows);
|
| 506 |
+
const metricNames = { bert: 'BERTScore-F1', rouge: 'ROUGE-L F1', tok: 'Token F1', uni: 'Unigram precision', bi: 'Bigram precision' };
|
| 507 |
+
const tick = metric === 'bert' ? v => `${(v * 100).toFixed(0)}%` : v => v.toFixed(2);
|
| 508 |
+
$('#chartMeta').innerHTML = `<span class="axis-note"><b>${metricNames[metric]}</b>${lowFirst ? ' · lower better' : ' · higher better'}</span><span></span>`;
|
| 509 |
+
const axis = `<div class="axis-row"><span></span><div class="axis-track"><span>${tick(min)}</span><span>${tick((min+max)/2)}</span><span>${tick(max)}</span></div><span></span></div>`;
|
| 510 |
+
const bars = rows.slice(0, 10).map((r, i) => {
|
| 511 |
+
const pct = clamp(((r[metric] - min) / (max - min)) * 100, 0, 100);
|
| 512 |
+
return `<div class="bar-row" style="--delay:${i * 70}ms">
|
| 513 |
+
<div class="bar-name" title="${r.model}">${i + 1}. ${r.model}</div>
|
| 514 |
+
<div class="bar-track"><div class="bar-fill" data-width="${pct}"></div></div>
|
| 515 |
+
<div class="bar-value">${fmtScore(r[metric], metric)}</div>
|
| 516 |
+
</div>`;
|
| 517 |
+
}).join('');
|
| 518 |
+
$('#metricBars').innerHTML = axis + bars;
|
| 519 |
+
requestAnimationFrame(() => $$('#metricBars .bar-fill').forEach((el, i) => {
|
| 520 |
+
el.style.transitionDelay = `${i * 70}ms`;
|
| 521 |
+
el.style.width = `${el.dataset.width}%`;
|
| 522 |
+
}));
|
| 523 |
+
$('#qaTable tbody').innerHTML = rows.map(r => `<tr><td>${r.model}</td><td>${r.rouge.toFixed(2)}</td><td>${r.bert.toFixed(4)}</td><td>${r.tok.toFixed(2)}</td><td>${r.uni.toFixed(2)}</td><td>${r.bi.toFixed(2)}</td></tr>`).join('');
|
| 524 |
+
}
|
| 525 |
|
| 526 |
+
function renderReranker() {
|
| 527 |
+
setHTML($('#rerankGrid'), data.reranker.map(([metric, value, score, text]) => `
|
| 528 |
+
<article class="rerank-card">
|
| 529 |
+
<h3>${metric}</h3>
|
| 530 |
+
<div class="ring-meter" style="--pct:${score}%"><b>${value}</b></div>
|
| 531 |
+
<p>${text}</p>
|
| 532 |
+
</article>`).join(''));
|
| 533 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 534 |
|
| 535 |
+
function renderAudit() {
|
| 536 |
+
const svg = $('#auditSvg');
|
| 537 |
+
const cx = 280, cy = 260, r = 185;
|
| 538 |
+
const angles = data.audit.map((_, i) => -Math.PI / 2 + i * Math.PI * 2 / data.audit.length);
|
| 539 |
+
const point = (val, angle) => [cx + Math.cos(angle) * r * val / 100, cy + Math.sin(angle) * r * val / 100];
|
| 540 |
+
const rings = [20,40,60,80,100].map(v => {
|
| 541 |
+
const pts = angles.map(a => point(v, a).join(',')).join(' ');
|
| 542 |
+
return `<polygon points="${pts}" fill="none" stroke="rgba(115,202,255,.14)"/>`;
|
| 543 |
+
}).join('');
|
| 544 |
+
const axes = angles.map((a,i) => {
|
| 545 |
+
const [x,y] = point(100, a); const [lx,ly] = point(115, a);
|
| 546 |
+
return `<line x1="${cx}" y1="${cy}" x2="${x}" y2="${y}" stroke="rgba(115,202,255,.12)"/><text x="${lx}" y="${ly}" fill="#c6d9ea" font-size="14" text-anchor="middle">${data.audit[i][0]}</text>`;
|
| 547 |
+
}).join('');
|
| 548 |
+
const pts = data.audit.map(([_, v], i) => point(v, angles[i]).join(',')).join(' ');
|
| 549 |
+
svg.innerHTML = `<defs><linearGradient id="radarGrad" x1="0" x2="1"><stop offset="0" stop-color="#33d7ff" stop-opacity=".55"/><stop offset="1" stop-color="#5ef7d8" stop-opacity=".45"/></linearGradient></defs>${rings}${axes}<polygon points="${pts}" fill="url(#radarGrad)" stroke="#5ef7d8" stroke-width="3"/>${data.audit.map(([_, v], i) => { const [x,y]=point(v,angles[i]); return `<circle cx="${x}" cy="${y}" r="5" fill="#eff8ff"/>`; }).join('')}`;
|
| 550 |
+
$('#auditMetrics').innerHTML = data.audit.map(([name, v]) => `<li><strong>${name}:</strong> ${v}%</li>`).join('');
|
| 551 |
+
}
|
| 552 |
|
| 553 |
+
function initEvaluation() {
|
| 554 |
+
$$('.tab').forEach(btn => btn.addEventListener('click', () => {
|
| 555 |
+
$$('.tab').forEach(b => { b.classList.toggle('active', b === btn); b.setAttribute('aria-selected', b === btn ? 'true' : 'false'); });
|
| 556 |
+
$$('.tab-panel').forEach(p => p.classList.toggle('active', p.id === `tab-${btn.dataset.tab}`));
|
| 557 |
+
$('#qaControls').style.display = btn.dataset.tab === 'qa' ? '' : 'none';
|
| 558 |
+
if (btn.dataset.tab === 'qa') renderQA();
|
| 559 |
+
if (btn.dataset.tab === 'rerank') renderReranker();
|
| 560 |
+
if (btn.dataset.tab === 'audit') renderAudit();
|
| 561 |
+
}));
|
| 562 |
+
$('#datasetSelect').addEventListener('change', renderQA);
|
| 563 |
+
$('#metricSort').addEventListener('change', renderQA);
|
| 564 |
+
renderQA(); renderReranker(); renderAudit();
|
| 565 |
+
}
|
| 566 |
+
|
| 567 |
+
function initRelease() {
|
| 568 |
+
setHTML($('#releaseTimeline'), data.release.map(([num, title, text]) => `
|
| 569 |
+
<article class="release-item"><strong>${num}</strong><div><h3>${title}</h3><p>${text}</p></div></article>`).join(''));
|
| 570 |
+
}
|
| 571 |
+
|
| 572 |
+
function init() {
|
| 573 |
+
initCanvas();
|
| 574 |
+
initNavigation();
|
| 575 |
+
initRevealAndCounters();
|
| 576 |
+
initSonar();
|
| 577 |
+
initArchitecture();
|
| 578 |
+
initDatasets();
|
| 579 |
+
initMerge();
|
| 580 |
+
initRetrieval();
|
| 581 |
+
initSufficiency();
|
| 582 |
+
initAgents();
|
| 583 |
+
initEvaluation();
|
| 584 |
+
initRelease();
|
| 585 |
+
}
|
| 586 |
+
|
| 587 |
+
document.addEventListener('DOMContentLoaded', init);
|
assets/logo.png
ADDED
|
Git LFS Details
|
assets/logo.svg
CHANGED
|
|
|
|
assets/style.css
ADDED
|
@@ -0,0 +1,668 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
:root{
|
| 2 |
+
--navy-950:#010712;
|
| 3 |
+
--navy-900:#031125;
|
| 4 |
+
--navy-850:#061a33;
|
| 5 |
+
--navy-800:#082345;
|
| 6 |
+
--navy-700:#0d315b;
|
| 7 |
+
--ink:#eff8ff;
|
| 8 |
+
--ink-soft:#c6d9ea;
|
| 9 |
+
--muted:#8ca7bf;
|
| 10 |
+
--cyan:#33d7ff;
|
| 11 |
+
--aqua:#5ef7d8;
|
| 12 |
+
--blue:#4f85ff;
|
| 13 |
+
--violet:#9b7cff;
|
| 14 |
+
--coral:#ff6f91;
|
| 15 |
+
--amber:#ffd166;
|
| 16 |
+
--green:#67f2aa;
|
| 17 |
+
--line:rgba(115,202,255,.22);
|
| 18 |
+
--line-strong:rgba(94,247,216,.48);
|
| 19 |
+
--glass:rgba(5,18,39,.72);
|
| 20 |
+
--glass-heavy:rgba(3,13,29,.90);
|
| 21 |
+
--radius:28px;
|
| 22 |
+
--radius-md:20px;
|
| 23 |
+
--max:1280px;
|
| 24 |
+
--shadow:0 26px 70px rgba(0,0,0,.44), inset 0 1px 0 rgba(255,255,255,.08);
|
| 25 |
+
--font:"Aptos","Segoe UI Variable","Segoe UI",Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;
|
| 26 |
+
--mono:"Cascadia Mono","SFMono-Regular",Consolas,monospace;
|
| 27 |
+
}
|
| 28 |
+
*{box-sizing:border-box}
|
| 29 |
+
html{scroll-behavior:smooth;background:var(--navy-950)}
|
| 30 |
+
html{scroll-padding-top:132px}
|
| 31 |
+
body{
|
| 32 |
+
margin:0;
|
| 33 |
+
min-height:100vh;
|
| 34 |
+
color:var(--ink);
|
| 35 |
+
font-family:var(--font);
|
| 36 |
+
background:
|
| 37 |
+
radial-gradient(circle at 50% -10%, rgba(51,215,255,.22), transparent 35rem),
|
| 38 |
+
radial-gradient(circle at 4% 14%, rgba(94,247,216,.10), transparent 28rem),
|
| 39 |
+
radial-gradient(circle at 92% 24%, rgba(79,133,255,.16), transparent 30rem),
|
| 40 |
+
linear-gradient(180deg,var(--navy-900),var(--navy-950));
|
| 41 |
+
overflow-x:hidden;
|
| 42 |
+
text-rendering:geometricPrecision;
|
| 43 |
+
-webkit-font-smoothing:antialiased;
|
| 44 |
+
}
|
| 45 |
+
body::before{
|
| 46 |
+
content:"";
|
| 47 |
+
position:fixed;
|
| 48 |
+
inset:0;
|
| 49 |
+
pointer-events:none;
|
| 50 |
+
z-index:-4;
|
| 51 |
+
background:
|
| 52 |
+
linear-gradient(rgba(115,202,255,.035) 1px, transparent 1px),
|
| 53 |
+
linear-gradient(90deg,rgba(115,202,255,.027) 1px, transparent 1px);
|
| 54 |
+
background-size:74px 74px;
|
| 55 |
+
mask-image:linear-gradient(180deg,rgba(0,0,0,.75),rgba(0,0,0,.22),transparent 88%);
|
| 56 |
+
}
|
| 57 |
+
button,select,input{font:inherit;color:inherit}
|
| 58 |
+
button{cursor:pointer}
|
| 59 |
+
a{color:inherit;text-decoration:none}
|
| 60 |
+
img{display:block;max-width:100%}
|
| 61 |
+
h1,h2,h3,p{margin-top:0}
|
| 62 |
+
h1{font-size:clamp(3.5rem,8vw,7.7rem);line-height:.88;letter-spacing:-.078em;margin-bottom:28px;text-wrap:balance}
|
| 63 |
+
h2{font-size:clamp(2.2rem,4.8vw,5rem);line-height:.96;letter-spacing:-.058em;margin-bottom:20px;text-wrap:balance}
|
| 64 |
+
h3{font-size:clamp(1.18rem,2.2vw,1.85rem);line-height:1.08;letter-spacing:-.035em;margin-bottom:12px}.lede,.section-heading p{color:var(--ink-soft);font-size:1.14rem;line-height:1.75}.lede{font-size:1.22rem;max-width:780px}.eyebrow{margin:0 0 12px;font-size:.76rem;font-weight:850;letter-spacing:.2em;text-transform:uppercase;color:var(--aqua)}
|
| 65 |
+
.abyss-canvas{position:fixed;inset:0;width:100%;height:100%;z-index:-6;background:var(--navy-950)}
|
| 66 |
+
.deep-glow{position:fixed;inset:-25%;pointer-events:none;z-index:-5;background:radial-gradient(ellipse at 22% 8%,rgba(51,215,255,.18),transparent 36%),radial-gradient(ellipse at 72% 12%,rgba(155,124,255,.12),transparent 34%),radial-gradient(ellipse at 50% 80%,rgba(94,247,216,.08),transparent 40%);filter:blur(18px);animation:drift 18s ease-in-out infinite alternate}.grid-noise{position:fixed;inset:0;pointer-events:none;z-index:100;opacity:.045;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 240 240' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.read-progress{position:fixed;top:0;left:0;z-index:90;height:3px;width:0;background:linear-gradient(90deg,var(--cyan),var(--aqua),var(--violet));box-shadow:0 0 24px rgba(51,215,255,.65)}@keyframes drift{to{transform:translate3d(2%,2%,0) scale(1.06)}}
|
| 67 |
+
.site-header{position:sticky;top:14px;z-index:80;width:min(var(--max),calc(100% - 36px));margin:14px auto 0;padding:10px 14px 10px 16px;border:1px solid rgba(115,202,255,.18);border-radius:999px;display:flex;align-items:center;justify-content:space-between;gap:18px;background:rgba(2,12,28,.76);backdrop-filter:blur(18px);box-shadow:0 18px 60px rgba(0,0,0,.35)}.brand{display:flex;align-items:center;gap:12px}.brand-orb{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:radial-gradient(circle,rgba(94,247,216,.88),rgba(51,215,255,.18) 62%,transparent 72%);box-shadow:0 0 30px rgba(94,247,216,.26)}.brand-orb img{width:100%;height:100%;object-fit:cover;object-position:center;display:block}.brand b{display:block;font-weight:900;letter-spacing:.05em;text-transform:uppercase}.brand small{display:block;color:var(--muted);font-size:.72rem;letter-spacing:.04em}.nav{display:flex;align-items:center;gap:3px}.nav a{padding:10px 12px;border-radius:999px;color:var(--ink-soft);font-size:.87rem;font-weight:700;transition:.22s ease}.nav a:hover,.nav a.active{background:rgba(51,215,255,.12);color:#fff;box-shadow:inset 0 0 0 1px rgba(94,247,216,.18)}.nav-toggle{display:none;border:1px solid var(--line);background:rgba(7,27,55,.78);border-radius:999px;padding:10px 14px;font-weight:850}
|
| 68 |
+
.depth-map{position:fixed;left:18px;top:50%;transform:translateY(-50%);z-index:55;display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid rgba(115,202,255,.14);border-radius:22px;background:rgba(2,11,26,.58);backdrop-filter:blur(18px);box-shadow:0 18px 58px rgba(0,0,0,.32)}.depth-map span{font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);writing-mode:vertical-rl;text-orientation:mixed;margin:auto}.depth-map a{width:32px;height:32px;display:grid;place-items:center;border-radius:50%;font-size:.76rem;font-weight:900;color:var(--muted);border:1px solid rgba(115,202,255,.16);background:rgba(8,27,54,.52);transition:.2s}.depth-map a.active,.depth-map a:hover{color:#02101f;background:linear-gradient(135deg,var(--cyan),var(--aqua));box-shadow:0 0 24px rgba(94,247,216,.34)}
|
| 69 |
+
main{position:relative;z-index:1}.section{width:min(var(--max),calc(100% - 44px));margin:0 auto;padding:120px 0 28px}.hero{min-height:calc(100vh - 90px);display:grid;grid-template-columns:minmax(0,1.05fr) minmax(420px,.75fr);gap:46px;align-items:center;padding-top:70px}.reveal{opacity:0;transform:translateY(24px);transition:opacity .68s ease,transform .68s ease}.reveal.visible{opacity:1;transform:translateY(0)}
|
| 70 |
+
.button{display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(115,202,255,.22);border-radius:999px;padding:14px 19px;font-weight:900;transition:.22s ease;background:rgba(9,28,58,.75);white-space:nowrap}.button:hover{transform:translateY(-2px);box-shadow:0 16px 36px rgba(0,0,0,.26)}.button.primary{background:linear-gradient(135deg,var(--cyan),var(--aqua) 52%,var(--violet));color:#06101f;border-color:transparent;box-shadow:0 18px 42px rgba(51,215,255,.25)}.button.secondary{color:#eaf8ff}.button.small{padding:9px 14px;font-size:.86rem}.button-row{display:flex;gap:10px;flex-wrap:wrap}.hero-actions{display:flex;gap:14px;flex-wrap:wrap;margin-top:32px}
|
| 71 |
+
.card{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(180deg,rgba(8,30,62,.72),rgba(3,13,29,.86));box-shadow:var(--shadow);backdrop-filter:blur(18px)}.card::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(115deg,rgba(255,255,255,.08),transparent 25%,transparent 70%,rgba(94,247,216,.05))}.card>*{position:relative}.compact{padding:28px}.panel-title{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:24px}.panel-title h2,.panel-title h3{margin:0}.chip,.depth-pill{display:inline-flex;align-items:center;border:1px solid rgba(115,202,255,.22);border-radius:999px;background:rgba(2,13,29,.68);padding:8px 12px;color:#dffaff;font-size:.72rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase;white-space:nowrap}.depth-pill{color:var(--aqua)}
|
| 72 |
+
.high-impact{padding:22px}.sonar{position:relative;width:min(100%,470px);aspect-ratio:1/1;margin:8px auto 18px;border-radius:50%;border:1px solid rgba(115,202,255,.22);background:radial-gradient(circle,rgba(94,247,216,.18) 0 7%,rgba(51,215,255,.09) 8% 26%,rgba(3,14,31,.76) 27% 100%);box-shadow:inset 0 0 90px rgba(51,215,255,.12),0 0 60px rgba(51,215,255,.1);overflow:hidden}.sonar-sweep{position:absolute;inset:5%;border-radius:50%;background:conic-gradient(from 0deg,rgba(94,247,216,.55),rgba(51,215,255,.14) 24deg,transparent 62deg);animation:rotate 5.2s linear infinite}.sonar-ring{position:absolute;left:50%;top:50%;border-radius:50%;border:1px solid rgba(94,247,216,.28);transform:translate(-50%,-50%);animation:sonarPulse 3.8s ease-out infinite}.ring-1{width:32%;height:32%}.ring-2{width:58%;height:58%;animation-delay:.8s}.ring-3{width:84%;height:84%;animation-delay:1.6s}.sonar-core{position:absolute;z-index:4;inset:35%;border-radius:50%;display:grid;place-items:center;text-align:center;background:rgba(2,11,26,.86);border:1px solid rgba(255,255,255,.12);box-shadow:0 0 48px rgba(94,247,216,.22)}.sonar-core img{width:100%;height:100%;object-fit:cover;object-position:center;display:block}.sonar-core b{font-size:.96rem}.sonar-core span{font-size:.68rem;color:var(--muted)}.sonar-node{position:absolute;z-index:5;border:1px solid rgba(94,247,216,.48);background:rgba(4,18,39,.92);border-radius:999px;padding:10px 12px;color:#f2fcff;font-weight:900;font-size:.78rem;box-shadow:0 0 26px rgba(94,247,216,.16);transition:.2s}.sonar-node:hover,.sonar-node:focus{transform:scale(1.07);outline:none;background:rgba(51,215,255,.18)}.node-emr{left:10%;top:24%}.node-cpg{right:8%;top:28%}.node-safety{right:12%;bottom:17%}.node-audit{left:12%;bottom:19%}.sonar-readout{min-height:64px;padding:14px 16px;border:1px solid rgba(115,202,255,.16);border-radius:18px;background:rgba(2,11,26,.55);color:var(--ink-soft);line-height:1.55}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.stat-grid div{border:1px solid rgba(115,202,255,.16);border-radius:18px;background:rgba(2,11,26,.42);padding:14px;text-align:center}.stat-grid strong{display:block;font-size:2.1rem;letter-spacing:-.05em}.stat-grid span{display:block;color:var(--muted);font-size:.78rem;font-weight:800}.section-heading{max-width:920px;margin-bottom:28px}.principle-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.card-index{display:inline-grid;place-items:center;width:38px;height:38px;border-radius:13px;background:rgba(94,247,216,.12);border:1px solid rgba(94,247,216,.28);color:var(--aqua);font-weight:900;margin-bottom:18px}.compact p{color:var(--muted);line-height:1.65;margin:0}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes sonarPulse{from{opacity:.5;transform:translate(-50%,-50%) scale(.82)}to{opacity:0;transform:translate(-50%,-50%) scale(1.18)}}
|
| 73 |
+
.architecture-card,.retrieval-card,.sufficiency-card,.evaluation-card,.merge-card,.ledger-card,.caveat,.closing-card{padding:28px}.svg-frame{width:100%;border:1px solid rgba(115,202,255,.14);border-radius:24px;background:linear-gradient(180deg,rgba(2,13,29,.62),rgba(2,10,24,.82));overflow:visible;box-shadow:inset 0 0 70px rgba(51,215,255,.05)}.svg-frame svg{display:block;width:100%;height:auto;overflow:visible}.flow-path{fill:none;stroke:url(#lineGradient);stroke-width:6;stroke-linecap:round;stroke-dasharray:14 18;opacity:.28;marker-end:url(#arrow);transition:opacity .3s,stroke-width .3s}.flow-path.active{opacity:1;stroke-width:8;animation:dash 1.2s linear infinite}.flow-path.feedback{stroke:#cdbb66}.arch-node rect,.diagram-node rect{rx:22;fill:rgba(10,36,72,.74);stroke:rgba(115,202,255,.36);stroke-width:1.6}.arch-node.active rect,.diagram-node.active rect{stroke:rgba(94,247,216,.86);filter:drop-shadow(0 0 18px rgba(94,247,216,.35))}.arch-node text,.diagram-node text{font-size:24px;font-weight:900;fill:#eef8ff}.arch-node .sub,.diagram-node .sub{font-size:17px;font-weight:650;fill:#adc4d9}.architecture-notes{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:16px}.architecture-notes div{padding:14px;border:1px solid rgba(115,202,255,.14);border-radius:18px;background:rgba(2,11,26,.42);color:var(--muted);line-height:1.45}.architecture-notes strong{display:block;color:#fff;margin-bottom:4px}.flow-path.trace{stroke-dasharray:900;stroke-dashoffset:900;animation:drawPath 1.1s ease forwards}.flow-path.trace.active{animation:drawPath 1.1s ease forwards,dash 1.5s linear infinite}@keyframes drawPath{to{stroke-dashoffset:0}}@keyframes dash{to{stroke-dashoffset:-64}}
|
| 74 |
+
.two-column{display:grid;grid-template-columns:1fr 1fr;gap:20px}.dataset-bars{display:grid;gap:14px}.dataset-row{display:grid;grid-template-columns:minmax(170px,210px) 1fr 72px;gap:14px;align-items:center}.dataset-name{font-weight:900;color:#f5fbff}.dataset-track{height:14px;border-radius:999px;background:rgba(115,202,255,.12);overflow:hidden}.dataset-fill{height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,var(--blue),var(--cyan),var(--aqua));transition:width 1.2s cubic-bezier(.2,.8,.2,1)}.dataset-value{font-family:var(--mono);color:var(--ink-soft);text-align:right}.distill-card{padding:28px}.transfer-diagram{display:grid;grid-template-columns:170px 1fr 170px;gap:18px;align-items:center;margin-top:16px}.orb{aspect-ratio:1/1;border-radius:50%;display:grid;place-items:center;text-align:center;padding:22px;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.18),rgba(7,27,58,.82) 58%,rgba(2,11,26,.95));border:1px solid rgba(115,202,255,.22);box-shadow:inset 0 0 60px rgba(51,215,255,.1)}.orb strong{font-size:3rem;letter-spacing:-.06em}.orb span{color:var(--muted);font-weight:800}.transfer-lines{position:relative;display:grid;gap:12px}.transfer-lines::before{content:"";position:absolute;left:0;right:0;top:50%;height:2px;background:linear-gradient(90deg,var(--cyan),var(--aqua));box-shadow:0 0 24px rgba(94,247,216,.45);animation:pulseLine 2.5s ease-in-out infinite}.transfer-lines span{position:relative;justify-self:center;border:1px solid rgba(94,247,216,.2);border-radius:999px;background:rgba(2,11,26,.78);padding:8px 12px;color:var(--ink-soft);font-weight:850}.formula{margin-top:18px;border:1px solid rgba(115,202,255,.16);border-radius:18px;padding:16px;background:rgba(2,11,26,.52);font-family:var(--mono);color:#defcff}.merge-layout{display:grid;grid-template-columns:285px 1fr;gap:20px;align-items:stretch}.merge-controls{display:grid;gap:10px;align-content:start}.merge-button{width:100%;text-align:left;border:1px solid rgba(115,202,255,.16);border-radius:18px;background:rgba(2,11,26,.48);padding:14px 16px;transition:.2s}.merge-button strong{display:block}.merge-button span{display:block;margin-top:4px;color:var(--muted);font-size:.9rem;line-height:1.4}.merge-button.active{border-color:var(--line-strong);background:rgba(94,247,216,.10);box-shadow:0 0 26px rgba(94,247,216,.1)}.merge-frame{min-height:420px}.merge-path{fill:none;stroke-linecap:round;stroke-width:20;opacity:.18}.merge-path.active{opacity:.96;filter:drop-shadow(0 0 16px rgba(94,247,216,.32));stroke-dasharray:900;stroke-dashoffset:900;animation:drawPath 1s ease forwards}.merge-label{font-size:22px;font-weight:900;fill:#f6fbff}.merge-sub{font-size:15px;font-weight:650;fill:#abc4d9}.merge-node{fill:rgba(10,36,72,.86);stroke:rgba(115,202,255,.32);stroke-width:1.5}.merge-node.active{stroke:rgba(94,247,216,.9);filter:drop-shadow(0 0 18px rgba(94,247,216,.3))}@keyframes pulseLine{50%{opacity:.52;filter:blur(.3px)}}
|
| 75 |
+
.retrieval-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(360px,.9fr);gap:20px;align-items:start}.stage-tabs{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}.stage-tab{border:1px solid rgba(115,202,255,.16);border-radius:999px;background:rgba(2,11,26,.44);padding:10px 14px;color:var(--ink-soft);font-weight:900;transition:.2s}.stage-tab.active{border-color:var(--line-strong);color:#06101f;background:linear-gradient(135deg,var(--cyan),var(--aqua))}.retrieval-frame{min-height:430px}.diagram-line{fill:none;stroke:#46e4ff;stroke-width:7;stroke-linecap:round;stroke-dasharray:20 18;opacity:.9;animation:dash 2s linear infinite}.diagram-line.secondary{stroke:#5ef7d8}.stage-caption{margin-top:14px;padding:16px;border:1px solid rgba(115,202,255,.14);border-radius:18px;background:rgba(2,11,26,.42);color:var(--ink-soft);line-height:1.65}.stage-caption strong{display:block;color:#fff;font-size:1.1rem;margin-bottom:4px}.facet-bars{display:grid;gap:15px}.facet-row{display:grid;gap:7px}.facet-top{display:flex;align-items:center;justify-content:space-between;gap:10px;font-weight:900}.facet-top span:last-child{font-family:var(--mono);color:var(--ink-soft)}.facet-track{height:14px;border-radius:999px;background:rgba(115,202,255,.13);overflow:hidden}.facet-fill{height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,var(--coral),var(--amber),var(--aqua));transition:width .85s cubic-bezier(.2,.8,.2,1)}.facet-fill.safe{background:linear-gradient(90deg,var(--blue),var(--cyan),var(--aqua))}.mini-chart-shell{margin-top:20px;border:1px solid rgba(115,202,255,.14);border-radius:20px;background:rgba(2,11,26,.34);padding:10px}.bundle-list{display:grid;gap:9px;margin-top:16px;max-height:220px;overflow:auto;padding-right:4px}.bundle-list div{border:1px solid rgba(115,202,255,.14);border-radius:16px;padding:12px 14px;background:rgba(2,11,26,.38);color:var(--ink-soft)}.policy-status{margin-top:16px;border-radius:18px;padding:15px 16px;font-weight:900;border:1px solid rgba(255,209,102,.22);background:rgba(255,209,102,.1);color:#ffe6a3}.policy-status.accepted{border-color:rgba(94,247,216,.3);background:rgba(94,247,216,.12);color:#d8fff7}
|
| 76 |
+
.agent-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(470px,.8fr);gap:20px}.agent-hive{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.agent-card{padding:22px;border:1px solid var(--line);border-radius:24px;background:linear-gradient(180deg,rgba(8,30,62,.68),rgba(3,13,29,.82));box-shadow:var(--shadow)}.agent-head{display:flex;gap:14px;align-items:center}.agent-icon{width:48px;height:48px;border-radius:16px;display:grid;place-items:center;background:rgba(94,247,216,.12);border:1px solid rgba(94,247,216,.25);font-weight:950;color:var(--aqua)}.agent-card p{color:var(--muted);line-height:1.58}.reliability{height:10px;border-radius:999px;background:rgba(115,202,255,.12);overflow:hidden}.reliability i{display:block;height:100%;width:var(--w);background:linear-gradient(90deg,var(--blue),var(--aqua));border-radius:inherit}.table-wrap{overflow:auto;border:1px solid rgba(115,202,255,.14);border-radius:20px}table{width:100%;border-collapse:collapse;min-width:720px;background:rgba(2,11,26,.36)}th,td{padding:14px 16px;text-align:left;border-bottom:1px solid rgba(115,202,255,.12);vertical-align:middle}th{color:#d9f8ff;font-size:.76rem;letter-spacing:.12em;text-transform:uppercase}td{color:var(--ink-soft)}tr:last-child td{border-bottom:0}.pill{display:inline-flex;border-radius:999px;padding:6px 9px;font-size:.76rem;font-weight:900}.support{background:rgba(94,247,216,.13);color:#aaffef}.qualify{background:rgba(255,209,102,.12);color:#ffe4a3}.contradict{background:rgba(255,111,145,.12);color:#ffc1ce}.preserve{background:rgba(155,124,255,.14);color:#dfd6ff}.notice{margin-top:16px;border:1px solid rgba(115,202,255,.14);border-radius:18px;background:rgba(2,11,26,.42);padding:14px 16px;display:grid;gap:4px}.notice span{color:var(--muted);line-height:1.5}
|
| 77 |
+
.eval-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:22px}.tabs{display:flex;gap:10px;flex-wrap:wrap}.tab{border:1px solid rgba(115,202,255,.18);background:rgba(2,11,26,.44);border-radius:999px;padding:12px 17px;color:var(--ink-soft);font-weight:950}.tab.active{color:#06101f;border-color:transparent;background:linear-gradient(135deg,var(--cyan),var(--aqua));box-shadow:0 14px 36px rgba(51,215,255,.18)}.select-group{display:flex;gap:14px;flex-wrap:wrap}.select-group label{display:grid;gap:7px;font-size:.72rem;font-weight:950;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}select{min-width:190px;border:1px solid rgba(115,202,255,.22);border-radius:16px;background:#061a33;color:#edf8ff;padding:12px 14px;font-weight:850}.tab-panel{display:none}.tab-panel.active{display:block}.chart-meta{display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid rgba(115,202,255,.14);border-radius:18px;background:rgba(2,11,26,.42);padding:12px 14px;margin-bottom:14px;color:var(--ink-soft);font-size:.94rem}.axis-note b{color:#fff}.metric-bars{display:grid;gap:10px;margin-bottom:22px}.bar-row{display:grid;grid-template-columns:minmax(170px,250px) minmax(360px,1fr) 98px;gap:16px;align-items:center;padding:13px 14px;border:1px solid rgba(115,202,255,.13);border-radius:18px;background:rgba(2,11,26,.38)}.bar-name{font-weight:950;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-track{height:18px;border-radius:999px;background:linear-gradient(90deg,rgba(115,202,255,.10),rgba(115,202,255,.16));overflow:hidden;position:relative}.bar-track::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px);background-size:20% 100%;opacity:.5}.bar-fill{height:100%;width:0;border-radius:inherit;background:linear-gradient(90deg,var(--blue),var(--cyan),var(--aqua));box-shadow:0 0 22px rgba(94,247,216,.26);transition:width 1.35s cubic-bezier(.17,.84,.28,1)}.bar-value{font-family:var(--mono);text-align:right;font-weight:950;color:#f1fbff}.axis-row{display:grid;grid-template-columns:minmax(170px,250px) minmax(360px,1fr) 98px;gap:16px;align-items:center;color:var(--muted);font-family:var(--mono);font-size:.78rem;margin:0 14px 8px}.axis-track{display:flex;justify-content:space-between}.compact-table{max-height:420px}.rerank-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px}.rerank-card{border:1px solid rgba(115,202,255,.15);border-radius:22px;background:rgba(2,11,26,.44);padding:18px}.ring-meter{width:118px;aspect-ratio:1/1;margin:12px auto;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--aqua) var(--pct), rgba(115,202,255,.12) 0);position:relative}.ring-meter::after{content:"";position:absolute;inset:10px;border-radius:50%;background:var(--navy-900);border:1px solid rgba(115,202,255,.1)}.ring-meter b{position:relative;z-index:1;font-family:var(--mono)}.rerank-card h3{font-size:1.1rem}.rerank-card p{color:var(--muted);line-height:1.45}.audit-layout{display:grid;grid-template-columns:minmax(360px,560px) 1fr;gap:24px;align-items:center}.audit-frame{padding:10px}.audit-list{margin:16px 0 0;padding-left:20px;color:var(--ink-soft);line-height:1.8}.caveat{margin-top:20px}.caveat p{color:var(--ink-soft);line-height:1.65;margin-bottom:0}.release-timeline{display:grid;gap:16px}.release-item{display:grid;grid-template-columns:80px 1fr;gap:18px;align-items:start;padding:22px;border:1px solid var(--line);border-radius:24px;background:linear-gradient(180deg,rgba(8,30,62,.66),rgba(3,13,29,.82));box-shadow:var(--shadow)}.release-item strong{width:56px;height:56px;display:grid;place-items:center;border-radius:18px;background:rgba(94,247,216,.12);border:1px solid rgba(94,247,216,.28);color:var(--aqua);font-size:1.2rem}.release-item p{color:var(--ink-soft);line-height:1.65;margin:0}.closing-card{text-align:center;padding:52px;max-width:920px;margin:0 auto}.closing-card p{color:var(--ink-soft);line-height:1.65}.footer{width:min(var(--max),calc(100% - 44px));margin:60px auto 30px;padding:20px 0;border-top:1px solid rgba(115,202,255,.13);display:flex;justify-content:space-between;gap:20px;color:var(--muted);font-size:.88rem}@media (max-width:1180px){.hero{grid-template-columns:1fr}.depth-map{display:none}.principle-grid{grid-template-columns:repeat(2,1fr)}.retrieval-grid,.agent-grid{grid-template-columns:1fr}.rerank-grid{grid-template-columns:repeat(3,1fr)}.architecture-notes{grid-template-columns:repeat(2,1fr)}}@media (max-width:900px){.site-header{border-radius:24px;align-items:flex-start}.nav-toggle{display:inline-flex}.nav{display:none;position:absolute;left:12px;right:12px;top:68px;border:1px solid rgba(115,202,255,.16);border-radius:22px;background:rgba(2,11,26,.95);padding:12px;flex-direction:column;align-items:stretch}.nav.open{display:flex}.nav a{text-align:center}.section{width:min(100% - 26px, var(--max));padding-top:88px}.hero{padding-top:42px}.two-column,.merge-layout,.audit-layout{grid-template-columns:1fr}.transfer-diagram{grid-template-columns:1fr}.transfer-lines::before{display:none}.bar-row,.axis-row{grid-template-columns:1fr}.bar-value{text-align:left}.stat-grid{grid-template-columns:repeat(2,1fr)}.agent-hive,.principle-grid{grid-template-columns:1fr}.rerank-grid{grid-template-columns:1fr}.eval-toolbar{display:grid}.select-group{display:grid}.select-group select{width:100%}h1{font-size:clamp(3rem,15vw,5.3rem)}}@media (max-width:560px){.panel-title{display:grid}.architecture-notes{grid-template-columns:1fr}.release-item{grid-template-columns:1fr}.svg-frame{border-radius:18px}.architecture-card,.retrieval-card,.sufficiency-card,.evaluation-card,.merge-card,.ledger-card,.caveat,.closing-card{padding:18px}.dataset-row{grid-template-columns:1fr 1fr}.dataset-track{grid-column:1/-1;grid-row:2}.footer{display:grid}.hero-actions .button{width:100%}}
|
| 78 |
+
.section{scroll-margin-top:120px}
|
| 79 |
+
#architecture{scroll-margin-top:180px}
|
| 80 |
+
@media (min-width:901px){.section{padding-top:140px}}
|
| 81 |
+
@media (max-width:1180px){table{min-width:620px}}
|
| 82 |
+
|
| 83 |
+
/* Final redesign overrides */
|
| 84 |
+
:root{
|
| 85 |
+
--navy-950:#00040d;
|
| 86 |
+
--navy-900:#020b1b;
|
| 87 |
+
--navy-850:#06162c;
|
| 88 |
+
--navy-800:#092544;
|
| 89 |
+
--ink:#f4f9ff;
|
| 90 |
+
--ink-soft:#bfd0df;
|
| 91 |
+
--muted:#819bb3;
|
| 92 |
+
--shadow:0 18px 54px rgba(0,0,0,.38), inset 0 1px 0 rgba(255,255,255,.07);
|
| 93 |
+
--radius:22px;
|
| 94 |
+
--radius-md:16px;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
body{
|
| 98 |
+
background:
|
| 99 |
+
radial-gradient(circle at 45% -14%, rgba(46,142,214,.18), transparent 34rem),
|
| 100 |
+
radial-gradient(circle at 92% 12%, rgba(94,247,216,.07), transparent 25rem),
|
| 101 |
+
linear-gradient(180deg,#04142b 0%,#020b1b 44%,#00040d 100%);
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
h1{
|
| 105 |
+
font-size:clamp(3.35rem,6.4vw,6.25rem);
|
| 106 |
+
line-height:.94;
|
| 107 |
+
letter-spacing:-.045em;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
h2{
|
| 111 |
+
font-size:clamp(2rem,3.9vw,4.1rem);
|
| 112 |
+
line-height:1.03;
|
| 113 |
+
letter-spacing:-.035em;
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
h3{
|
| 117 |
+
font-size:clamp(1.1rem,1.75vw,1.55rem);
|
| 118 |
+
line-height:1.14;
|
| 119 |
+
letter-spacing:-.018em;
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
.lede,.section-heading p{
|
| 123 |
+
font-size:1.04rem;
|
| 124 |
+
line-height:1.68;
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
.site-header{
|
| 128 |
+
top:12px;
|
| 129 |
+
background:rgba(1,9,22,.86);
|
| 130 |
+
border-color:rgba(125,206,255,.2);
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
.section{
|
| 134 |
+
padding:132px 0 44px;
|
| 135 |
+
scroll-margin-top:132px;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
.hero{
|
| 139 |
+
min-height:calc(100vh - 86px);
|
| 140 |
+
padding-top:54px;
|
| 141 |
+
grid-template-columns:minmax(0,1fr) minmax(0,.72fr);
|
| 142 |
+
gap:42px;
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
.section-heading{
|
| 146 |
+
max-width:980px;
|
| 147 |
+
padding-left:0;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
.card{
|
| 151 |
+
border-color:rgba(115,202,255,.18);
|
| 152 |
+
background:linear-gradient(180deg,rgba(8,28,55,.68),rgba(1,9,22,.9));
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
.card::before{
|
| 156 |
+
background:
|
| 157 |
+
linear-gradient(125deg,rgba(255,255,255,.065),transparent 24%,transparent 76%,rgba(94,247,216,.04)),
|
| 158 |
+
radial-gradient(circle at 18% 0,rgba(51,215,255,.08),transparent 28rem);
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
.high-impact{
|
| 162 |
+
padding:24px;
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
.sonar{
|
| 166 |
+
width:min(100%,390px);
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
.stat-grid strong{
|
| 170 |
+
font-size:1.7rem;
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
.architecture-frame{
|
| 174 |
+
overflow:hidden;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
.architecture-frame svg{
|
| 178 |
+
aspect-ratio:1000/800;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
#architectureSvg{
|
| 182 |
+
background:transparent;
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
#architectureSvg .arch-shell{
|
| 186 |
+
fill:rgba(3,13,29,.52);
|
| 187 |
+
stroke:rgba(115,202,255,.18);
|
| 188 |
+
stroke-width:1.4;
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
#architectureSvg .arch-lock path,
|
| 192 |
+
#architectureSvg .arch-lock rect{
|
| 193 |
+
fill:none;
|
| 194 |
+
stroke:#a7bed3;
|
| 195 |
+
stroke-width:2.5;
|
| 196 |
+
stroke-linejoin:round;
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
#architectureSvg .arch-caption,
|
| 200 |
+
#architectureSvg .arch-note{
|
| 201 |
+
fill:#dcecf7;
|
| 202 |
+
font-size:17px;
|
| 203 |
+
font-weight:850;
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
#architectureSvg .arch-node{
|
| 207 |
+
opacity:.72;
|
| 208 |
+
transition:opacity .25s ease;
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
#architectureSvg .arch-node.active{
|
| 212 |
+
opacity:1;
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
#architectureSvg .arch-node rect{
|
| 216 |
+
fill:url(#archPanel);
|
| 217 |
+
stroke-width:2.1;
|
| 218 |
+
filter:none;
|
| 219 |
+
}
|
| 220 |
+
|
| 221 |
+
#architectureSvg .arch-node text{
|
| 222 |
+
font-family:var(--font);
|
| 223 |
+
letter-spacing:0;
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
#architectureSvg .arch-node .title{
|
| 227 |
+
fill:#f5fbff;
|
| 228 |
+
font-size:19px;
|
| 229 |
+
font-weight:900;
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
#architectureSvg .arch-node .sub,
|
| 233 |
+
#architectureSvg .arch-mini text {
|
| 234 |
+
fill: #d2e4f0 !important; /* Forces solid color */
|
| 235 |
+
stroke: none !important; /* Removes the blurry outline */
|
| 236 |
+
font-size: 13.5px;
|
| 237 |
+
font-weight: 800;
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
#architectureSvg .arch-mini rect{
|
| 241 |
+
fill:rgba(1,9,22,.48);
|
| 242 |
+
stroke-width:1.5;
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
#architectureSvg .arch-icon,
|
| 246 |
+
#architectureSvg .arch-mini,
|
| 247 |
+
#architectureSvg .loop-arrows{
|
| 248 |
+
fill:none;
|
| 249 |
+
stroke:currentColor;
|
| 250 |
+
stroke-width:3;
|
| 251 |
+
stroke-linecap:round;
|
| 252 |
+
stroke-linejoin:round;
|
| 253 |
+
}
|
| 254 |
+
|
| 255 |
+
#architectureSvg .arch-icon.small{
|
| 256 |
+
stroke-width:2.4;
|
| 257 |
+
}
|
| 258 |
+
|
| 259 |
+
#architectureSvg .blue{color:#74dfff}
|
| 260 |
+
#architectureSvg .teal{color:#5ef7d8}
|
| 261 |
+
#architectureSvg .purple{color:#a99cff}
|
| 262 |
+
#architectureSvg .orange{color:#ffd166}
|
| 263 |
+
#architectureSvg .green{color:#67f2aa}
|
| 264 |
+
|
| 265 |
+
#architectureSvg .blue rect{stroke:#5acbff}
|
| 266 |
+
#architectureSvg .teal rect{stroke:#5ef7d8}
|
| 267 |
+
#architectureSvg .purple rect{stroke:#a99cff}
|
| 268 |
+
#architectureSvg .orange rect{stroke:#ffd166}
|
| 269 |
+
#architectureSvg .green rect{stroke:#67f2aa}
|
| 270 |
+
|
| 271 |
+
#architectureSvg .blue .title{fill:#dff8ff}
|
| 272 |
+
#architectureSvg .teal .title{fill:#d9fff7}
|
| 273 |
+
#architectureSvg .purple .title{fill:#eeeaff}
|
| 274 |
+
#architectureSvg .orange .title{fill:#fff0c9}
|
| 275 |
+
#architectureSvg .green .title{fill:#dbfff2}
|
| 276 |
+
|
| 277 |
+
#architectureSvg .flow-path{
|
| 278 |
+
opacity:.24;
|
| 279 |
+
stroke:currentColor;
|
| 280 |
+
stroke-width:4;
|
| 281 |
+
stroke-linecap:round;
|
| 282 |
+
stroke-dasharray:0;
|
| 283 |
+
filter:none;
|
| 284 |
+
transition:opacity .25s ease, stroke-width .25s ease;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
#architectureSvg .flow-path.active{
|
| 288 |
+
opacity:1;
|
| 289 |
+
stroke-width:5.5;
|
| 290 |
+
filter:drop-shadow(0 0 10px rgba(94,247,216,.28));
|
| 291 |
+
animation:dash 1.8s linear infinite;
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
#architectureSvg .flow-path.feedback{
|
| 295 |
+
stroke-dasharray:14 14;
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
#architectureSvg .reasoning-loop .loop-arrows{
|
| 299 |
+
opacity:.68;
|
| 300 |
+
stroke-width:3.4;
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
#architectureSvg .reasoning-loop .loop-label {
|
| 304 |
+
fill: #fff7df;
|
| 305 |
+
font-size: 16px; /* Reduced from 20px */
|
| 306 |
+
font-weight: 900;
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
#architectureSvg .retrieve-note{
|
| 310 |
+
fill:#f2fbff;
|
| 311 |
+
paint-order:stroke;
|
| 312 |
+
stroke:rgba(2,11,26,.88);
|
| 313 |
+
stroke-width:5px;
|
| 314 |
+
stroke-linejoin:round;
|
| 315 |
+
}
|
| 316 |
+
|
| 317 |
+
/* Motivation vs Logic: the pipeline should remain readable as a static diagram while playback adds meaning. Evidence packets activate only during the retrieve-more stage and move along real source-to-loop routes. */
|
| 318 |
+
#architectureSvg .arch-evidence-flow{
|
| 319 |
+
opacity:0;
|
| 320 |
+
transition:opacity .25s ease;
|
| 321 |
+
pointer-events:none;
|
| 322 |
+
}
|
| 323 |
+
|
| 324 |
+
#architectureSvg .arch-evidence-flow.active{
|
| 325 |
+
opacity:1;
|
| 326 |
+
}
|
| 327 |
+
|
| 328 |
+
#architectureSvg .evidence-route{
|
| 329 |
+
fill:none;
|
| 330 |
+
stroke:rgba(255,255,255,.01);
|
| 331 |
+
stroke-width:1;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
#architectureSvg .evidence-packet{
|
| 335 |
+
opacity:0;
|
| 336 |
+
filter:drop-shadow(0 0 9px currentColor);
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
#architectureSvg .arch-evidence-flow.active .evidence-packet{
|
| 340 |
+
opacity:1;
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
#architectureSvg .evidence-packet.emr{
|
| 344 |
+
color:#5ef7d8;
|
| 345 |
+
fill:#5ef7d8;
|
| 346 |
+
}
|
| 347 |
+
|
| 348 |
+
#architectureSvg .evidence-packet.cpg{
|
| 349 |
+
color:#a99cff;
|
| 350 |
+
fill:#a99cff;
|
| 351 |
+
}
|
| 352 |
+
|
| 353 |
+
#architectureSvg .evidence-packet.ghost{
|
| 354 |
+
opacity:.68;
|
| 355 |
+
}
|
| 356 |
+
|
| 357 |
+
#architectureSvg .arch-node.active rect{
|
| 358 |
+
filter:drop-shadow(0 0 16px rgba(94,247,216,.20));
|
| 359 |
+
}
|
| 360 |
+
|
| 361 |
+
#architectureSvg .flow-path.blue{color:#74dfff}
|
| 362 |
+
#architectureSvg .flow-path.teal{color:#5ef7d8}
|
| 363 |
+
#architectureSvg .flow-path.purple{color:#a99cff}
|
| 364 |
+
#architectureSvg .flow-path.orange{color:#ffd166}
|
| 365 |
+
#architectureSvg .flow-path.green{color:#67f2aa}
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
.flow-path{
|
| 369 |
+
stroke-width:4.5;
|
| 370 |
+
stroke-dasharray:11 14;
|
| 371 |
+
opacity:.24;
|
| 372 |
+
}
|
| 373 |
+
|
| 374 |
+
.flow-path.active{
|
| 375 |
+
stroke-width:6.5;
|
| 376 |
+
}
|
| 377 |
+
|
| 378 |
+
.flow-path.feedback{
|
| 379 |
+
stroke:#ead37a;
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
.arch-node rect,.diagram-node rect{
|
| 383 |
+
rx:18;
|
| 384 |
+
fill:rgba(7,26,52,.82);
|
| 385 |
+
stroke:rgba(118,214,255,.34);
|
| 386 |
+
}
|
| 387 |
+
|
| 388 |
+
.arch-node text,.diagram-node text{
|
| 389 |
+
font-size:18px;
|
| 390 |
+
letter-spacing:0;
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
.arch-node .sub,.diagram-node .sub{
|
| 394 |
+
font-size:12.5px;
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
.arch-node.answer text{
|
| 398 |
+
font-size:18px;
|
| 399 |
+
}
|
| 400 |
+
|
| 401 |
+
.architecture-notes{
|
| 402 |
+
grid-template-columns:repeat(4,minmax(0,1fr));
|
| 403 |
+
}
|
| 404 |
+
|
| 405 |
+
.two-column{
|
| 406 |
+
align-items:stretch;
|
| 407 |
+
}
|
| 408 |
+
|
| 409 |
+
.two-column>.card{
|
| 410 |
+
padding:28px;
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
.dataset-row{
|
| 414 |
+
grid-template-columns:minmax(170px,220px) minmax(180px,1fr) 76px;
|
| 415 |
+
}
|
| 416 |
+
|
| 417 |
+
.distill-card{
|
| 418 |
+
overflow:hidden;
|
| 419 |
+
}
|
| 420 |
+
|
| 421 |
+
.transfer-diagram{
|
| 422 |
+
grid-template-columns:210px minmax(170px,1fr) 145px;
|
| 423 |
+
min-height:250px;
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
.orb.teacher{
|
| 427 |
+
width:210px;
|
| 428 |
+
justify-self:center;
|
| 429 |
+
}
|
| 430 |
+
|
| 431 |
+
.orb.student{
|
| 432 |
+
width:145px;
|
| 433 |
+
justify-self:center;
|
| 434 |
+
padding:16px;
|
| 435 |
+
}
|
| 436 |
+
|
| 437 |
+
.orb.teacher strong{
|
| 438 |
+
font-size:3.6rem;
|
| 439 |
+
}
|
| 440 |
+
|
| 441 |
+
.orb.student strong{
|
| 442 |
+
font-size:2.65rem;
|
| 443 |
+
}
|
| 444 |
+
|
| 445 |
+
.orb span{
|
| 446 |
+
font-size:1.05rem;
|
| 447 |
+
color:#d2e3f2;
|
| 448 |
+
}
|
| 449 |
+
|
| 450 |
+
.transfer-lines span{
|
| 451 |
+
padding:9px 14px;
|
| 452 |
+
font-size:.95rem;
|
| 453 |
+
}
|
| 454 |
+
|
| 455 |
+
.formula{
|
| 456 |
+
font-size:.95rem;
|
| 457 |
+
line-height:1.55;
|
| 458 |
+
}
|
| 459 |
+
|
| 460 |
+
.merge-frame{
|
| 461 |
+
min-height:clamp(320px,42vw,430px);
|
| 462 |
+
overflow:auto;
|
| 463 |
+
}
|
| 464 |
+
|
| 465 |
+
.merge-panel{
|
| 466 |
+
fill:rgba(7,26,52,.78);
|
| 467 |
+
stroke:rgba(115,202,255,.22);
|
| 468 |
+
stroke-width:1.4;
|
| 469 |
+
}
|
| 470 |
+
|
| 471 |
+
.merge-panel.active{
|
| 472 |
+
stroke:rgba(94,247,216,.78);
|
| 473 |
+
filter:drop-shadow(0 0 16px rgba(94,247,216,.24));
|
| 474 |
+
}
|
| 475 |
+
|
| 476 |
+
.merge-kicker{
|
| 477 |
+
font-size:12px;
|
| 478 |
+
font-weight:900;
|
| 479 |
+
letter-spacing:.18em;
|
| 480 |
+
text-transform:uppercase;
|
| 481 |
+
fill:#66f4d8;
|
| 482 |
+
}
|
| 483 |
+
|
| 484 |
+
.merge-label{
|
| 485 |
+
font-size:22px;
|
| 486 |
+
letter-spacing:-.01em;
|
| 487 |
+
}
|
| 488 |
+
|
| 489 |
+
.merge-sub{
|
| 490 |
+
font-size:13px;
|
| 491 |
+
line-height:1.35;
|
| 492 |
+
}
|
| 493 |
+
|
| 494 |
+
.merge-formula{
|
| 495 |
+
font-family:var(--mono);
|
| 496 |
+
font-size:14px;
|
| 497 |
+
font-weight:800;
|
| 498 |
+
fill:#efffff;
|
| 499 |
+
}
|
| 500 |
+
|
| 501 |
+
.merge-weight{
|
| 502 |
+
opacity:.82;
|
| 503 |
+
filter:drop-shadow(0 0 10px rgba(94,247,216,.22));
|
| 504 |
+
animation:weightRise .9s cubic-bezier(.2,.8,.2,1) both;
|
| 505 |
+
}
|
| 506 |
+
|
| 507 |
+
.merge-weight.delay{
|
| 508 |
+
animation-delay:.12s;
|
| 509 |
+
}
|
| 510 |
+
|
| 511 |
+
.merge-vector,.merge-arc{
|
| 512 |
+
fill:none;
|
| 513 |
+
stroke:var(--aqua);
|
| 514 |
+
stroke-width:6;
|
| 515 |
+
stroke-linecap:round;
|
| 516 |
+
stroke-linejoin:round;
|
| 517 |
+
opacity:.92;
|
| 518 |
+
filter:drop-shadow(0 0 13px rgba(94,247,216,.28));
|
| 519 |
+
marker-end:url(#mergeArrow);
|
| 520 |
+
stroke-dasharray:420;
|
| 521 |
+
stroke-dashoffset:420;
|
| 522 |
+
animation:drawPath 1.1s ease forwards;
|
| 523 |
+
}
|
| 524 |
+
|
| 525 |
+
.merge-vector.kd{
|
| 526 |
+
stroke:var(--cyan);
|
| 527 |
+
}
|
| 528 |
+
|
| 529 |
+
.merge-vector.out{
|
| 530 |
+
stroke-width:5;
|
| 531 |
+
}
|
| 532 |
+
|
| 533 |
+
.merge-point{
|
| 534 |
+
fill:#efffff;
|
| 535 |
+
stroke:var(--aqua);
|
| 536 |
+
stroke-width:4;
|
| 537 |
+
}
|
| 538 |
+
|
| 539 |
+
.merge-drop,.merge-conflict{
|
| 540 |
+
stroke:#ffd166;
|
| 541 |
+
stroke-width:5;
|
| 542 |
+
stroke-linecap:round;
|
| 543 |
+
opacity:.78;
|
| 544 |
+
}
|
| 545 |
+
|
| 546 |
+
@keyframes weightRise{
|
| 547 |
+
from{transform:translateY(18px);opacity:0}
|
| 548 |
+
to{transform:translateY(0);opacity:.82}
|
| 549 |
+
}
|
| 550 |
+
|
| 551 |
+
.chart-meta{
|
| 552 |
+
justify-content:flex-start;
|
| 553 |
+
}
|
| 554 |
+
|
| 555 |
+
.chart-meta span:last-child{
|
| 556 |
+
color:var(--muted);
|
| 557 |
+
margin-left:auto;
|
| 558 |
+
}
|
| 559 |
+
|
| 560 |
+
@media (max-width:1360px){
|
| 561 |
+
.depth-map{display:none}
|
| 562 |
+
}
|
| 563 |
+
|
| 564 |
+
@media (min-width:1361px){
|
| 565 |
+
.section{
|
| 566 |
+
width:min(var(--max),calc(100% - 140px));
|
| 567 |
+
}
|
| 568 |
+
}
|
| 569 |
+
|
| 570 |
+
@media (max-width:1180px){
|
| 571 |
+
.section{
|
| 572 |
+
padding-top:112px;
|
| 573 |
+
scroll-margin-top:112px;
|
| 574 |
+
}
|
| 575 |
+
.two-column,.retrieval-grid,.agent-grid{
|
| 576 |
+
grid-template-columns:minmax(0,1fr);
|
| 577 |
+
}
|
| 578 |
+
.merge-layout{
|
| 579 |
+
grid-template-columns:minmax(0,1fr);
|
| 580 |
+
}
|
| 581 |
+
.merge-controls{
|
| 582 |
+
grid-template-columns:repeat(2,minmax(0,1fr));
|
| 583 |
+
}
|
| 584 |
+
.architecture-notes{
|
| 585 |
+
grid-template-columns:repeat(2,minmax(0,1fr));
|
| 586 |
+
}
|
| 587 |
+
}
|
| 588 |
+
|
| 589 |
+
@media (max-width:900px){
|
| 590 |
+
h1{font-size:clamp(2.7rem,13vw,4.6rem)}
|
| 591 |
+
h2{font-size:clamp(1.9rem,8vw,3.1rem)}
|
| 592 |
+
.hero{grid-template-columns:1fr}
|
| 593 |
+
.transfer-diagram{
|
| 594 |
+
grid-template-columns:1fr;
|
| 595 |
+
justify-items:center;
|
| 596 |
+
}
|
| 597 |
+
.orb.teacher{width:min(230px,70vw)}
|
| 598 |
+
.orb.student{width:min(170px,55vw)}
|
| 599 |
+
.architecture-notes{grid-template-columns:1fr 1fr}
|
| 600 |
+
.site-header{
|
| 601 |
+
width:min(var(--max),calc(100% - 24px));
|
| 602 |
+
}
|
| 603 |
+
.section{
|
| 604 |
+
width:min(100% - 24px,var(--max));
|
| 605 |
+
}
|
| 606 |
+
.panel-title,.eval-toolbar{
|
| 607 |
+
display:grid;
|
| 608 |
+
}
|
| 609 |
+
.architecture-card,.retrieval-card,.sufficiency-card,.evaluation-card,.merge-card,.ledger-card,.caveat,.closing-card{
|
| 610 |
+
padding:20px;
|
| 611 |
+
}
|
| 612 |
+
.architecture-frame svg,
|
| 613 |
+
.merge-frame svg {
|
| 614 |
+
width: 100%;
|
| 615 |
+
min-width: auto; /* Allows it to wrap inside the container */
|
| 616 |
+
height: auto;
|
| 617 |
+
}
|
| 618 |
+
.bar-row,.axis-row{
|
| 619 |
+
grid-template-columns:minmax(0,1fr);
|
| 620 |
+
}
|
| 621 |
+
.bar-track{
|
| 622 |
+
min-width:0;
|
| 623 |
+
}
|
| 624 |
+
}
|
| 625 |
+
|
| 626 |
+
@media (max-width:560px){
|
| 627 |
+
.section{
|
| 628 |
+
width:min(100% - 28px,var(--max));
|
| 629 |
+
padding-top:96px;
|
| 630 |
+
scroll-margin-top:96px;
|
| 631 |
+
}
|
| 632 |
+
.architecture-notes{grid-template-columns:1fr}
|
| 633 |
+
.transfer-lines span{width:100%;text-align:center}
|
| 634 |
+
.merge-frame{min-height:320px}
|
| 635 |
+
.merge-controls{
|
| 636 |
+
grid-template-columns:1fr;
|
| 637 |
+
}
|
| 638 |
+
.stat-grid{
|
| 639 |
+
grid-template-columns:1fr 1fr;
|
| 640 |
+
}
|
| 641 |
+
.dataset-row{
|
| 642 |
+
grid-template-columns:minmax(0,1fr) auto;
|
| 643 |
+
}
|
| 644 |
+
.dataset-name{
|
| 645 |
+
min-width:0;
|
| 646 |
+
}
|
| 647 |
+
.dataset-track{
|
| 648 |
+
grid-column:1/-1;
|
| 649 |
+
}
|
| 650 |
+
.table-wrap{
|
| 651 |
+
max-width:100%;
|
| 652 |
+
}
|
| 653 |
+
}
|
| 654 |
+
|
| 655 |
+
@media (max-width:420px){
|
| 656 |
+
h1{font-size:clamp(2.25rem,12vw,3.2rem)}
|
| 657 |
+
h2{font-size:clamp(1.7rem,9vw,2.45rem)}
|
| 658 |
+
.button-row,.hero-actions,.tabs,.select-group{
|
| 659 |
+
display:grid;
|
| 660 |
+
grid-template-columns:1fr;
|
| 661 |
+
}
|
| 662 |
+
.button,.tab,select{
|
| 663 |
+
width:100%;
|
| 664 |
+
}
|
| 665 |
+
.sonar-readout{
|
| 666 |
+
min-height:auto;
|
| 667 |
+
}
|
| 668 |
+
}
|
index.html
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|