readthrough / tests /fixtures /published_note.html
Viney's picture
Claude Opus 5 (1M context)
feat: The Brief renders as the published research note
93f9cc0
Raw History Blame Contribute Delete
24.4 kB
<!--
Extracts from the published research note this design reproduces:
https://claude.ai/code/artifact/a552e2bc-add9-48ea-b706-4b95f122d0e5
"NVIDIA T2 FY2027 Readthrough", published 2026-09-02.
Only the two things the fidelity tests assert are kept: the stylesheet,
and the three figures whose geometry dashboard/note_charts.py reproduces.
Do not reformat — the tests compare this text.
-->
<style>
:root{
--paper:#F5F6F3; --paper-2:#ECEEE9; --ink:#15201B; --ink-2:#3E4A44; --ink-3:#8C968F; --rule:#D5DAD4;
--accent:#1E6B55; --accent-ink:#134A3B; --accent-soft:#DCEBE3; --warn:#B8791F; --warn-soft:#F4E8D2; --crit:#A63A2B; --crit-soft:#F3DDD8;
--pos:#1E6B55; --neg:#A63A2B;
}
@media (prefers-color-scheme: dark){
:root:not([data-theme="light"]){
--paper:#111715; --paper-2:#181F1C; --ink:#E7ECE8; --ink-2:#B4BDB7; --ink-3:#77817B; --rule:#2A332E;
--accent:#5FBF9E; --accent-ink:#8ED8BE; --accent-soft:#1B2E27; --warn:#D9A24A; --warn-soft:#332816; --crit:#E07A69; --crit-soft:#3A1F1B;
--pos:#5FBF9E; --neg:#E07A69;
}
}
:root[data-theme="dark"]{
--paper:#111715; --paper-2:#181F1C; --ink:#E7ECE8; --ink-2:#B4BDB7; --ink-3:#77817B; --rule:#2A332E;
--accent:#5FBF9E; --accent-ink:#8ED8BE; --accent-soft:#1B2E27; --warn:#D9A24A; --warn-soft:#332816; --crit:#E07A69; --crit-soft:#3A1F1B;
--pos:#5FBF9E; --neg:#E07A69;
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"IBM Plex Sans",-apple-system,"Segoe UI",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}
.wrap{max-width:1080px;margin:0 auto;padding:0 28px 80px}
h1,h2,h3{font-family:"Newsreader",Georgia,"Times New Roman",serif;font-weight:500;letter-spacing:-0.005em;text-wrap:balance;margin:0}
h1{font-size:clamp(30px,4.2vw,44px);line-height:1.1;font-weight:500}
h2{font-size:26px;line-height:1.2;margin:0 0 14px}
h3{font-size:19px;line-height:1.25;margin:22px 0 8px}
p{margin:0 0 14px;max-width:68ch}
ul,ol{margin:0 0 14px;padding-left:20px;max-width:68ch}
li{margin-bottom:8px}
a{color:var(--accent-ink)}
.eyebrow{font-family:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
/* masthead */
.mast{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end;padding:26px 0 18px;border-bottom:2px solid var(--ink)}
.mast .house{font-family:"Newsreader",serif;font-size:22px;font-weight:600;letter-spacing:.01em}
.mast .house small{display:block;font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);font-weight:400;margin-top:2px}
.mast .meta{text-align:right;font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-2);line-height:1.7}
.mast .meta b{color:var(--ink);font-weight:500}
.head{padding:34px 0 22px;border-bottom:1px solid var(--rule)}
.head .ticker{display:flex;gap:14px;align-items:baseline;flex-wrap:wrap;margin-bottom:12px}
.head .ticker .co{font-family:"Newsreader",serif;font-size:22px;font-weight:600}
.head .ticker .tk{font-family:"IBM Plex Mono",monospace;font-size:13px;color:var(--ink-2);background:var(--paper-2);padding:3px 8px;border-radius:3px}
.head .lede{font-family:"Newsreader",serif;font-size:20px;line-height:1.4;color:var(--ink-2);max-width:62ch;margin:16px 0 0;font-weight:400}
/* en bref */
.enbref{border-top:2px solid var(--ink);padding-top:14px;margin-top:22px}
.enbref h2{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin:0 0 10px;font-weight:500}
.enbref ul{list-style:none;margin:0;padding:0;max-width:none}
.enbref li{font-size:15px;line-height:1.5;margin:0 0 10px}
.enbref li:last-child{margin-bottom:0}
/* toc */
nav.toc{position:sticky;top:0;background:var(--paper);border-bottom:1px solid var(--rule);z-index:2;display:flex;gap:18px;overflow-x:auto;padding:10px 0;font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
nav.toc a{color:var(--ink-2);text-decoration:none}
nav.toc a:hover{color:var(--accent-ink)}
/* key tiles */
.tiles{display:grid;grid-template-columns:repeat(6,1fr);border:1px solid var(--rule);border-radius:4px;margin:26px 0 0;overflow:hidden;background:var(--paper-2)}
.tile{padding:14px 16px;background:var(--paper);border-right:1px solid var(--rule)}
.tile:last-child{border-right:0}
.tile .k{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.tile .v{font-family:"Newsreader",serif;font-size:30px;line-height:1.1;margin:6px 0 4px;font-variant-numeric:tabular-nums}
.tile .s{font-size:12px;color:var(--ink-2)}
.tile .v.warn{color:var(--warn)} .tile .v.pos{color:var(--pos)}
/* layout */
.grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:48px;margin-top:34px}
main>section{padding:30px 0;border-bottom:1px solid var(--rule)}
main>section:first-child{padding-top:6px}
aside{position:sticky;top:20px;align-self:start;font-size:13px}
aside .box{border-top:2px solid var(--ink);padding:12px 0 6px;margin-bottom:22px}
aside .box h4{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin:0 0 10px;font-weight:500}
aside dl{margin:0;display:grid;grid-template-columns:1fr auto;gap:5px 12px}
aside dt{color:var(--ink-2)} aside dd{margin:0;text-align:right;font-family:"IBM Plex Mono",monospace;font-variant-numeric:tabular-nums;color:var(--ink)}
aside .note{font-size:12px;color:var(--ink-3);margin-top:8px;line-height:1.45}
/* source tags */
.src{display:inline-flex;gap:0;vertical-align:middle;margin-left:6px;font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.04em;line-height:1;white-space:nowrap}
.src .tag{padding:3px 6px;border:1px solid var(--rule);border-right:0;border-radius:3px 0 0 3px;color:var(--ink-2);background:var(--paper-2)}
.src .rel{padding:3px 6px;border:1px solid var(--rule);border-radius:0 3px 3px 0;font-weight:500}
.rel.hi{background:var(--accent-soft);color:var(--accent-ink);border-color:var(--accent-soft)}
.rel.med{background:var(--warn-soft);color:var(--warn);border-color:var(--warn-soft)}
.rel.low{background:var(--crit-soft);color:var(--crit);border-color:var(--crit-soft)}
/* callouts */
.thesis{border-left:3px solid var(--accent);padding:4px 0 4px 18px;margin:0 0 22px}
.thesis p{font-family:"Newsreader",serif;font-size:19px;line-height:1.4;margin:0}
.flag{background:var(--warn-soft);border-left:3px solid var(--warn);padding:12px 16px;margin:18px 0;font-size:14px;max-width:none}
.flag p{margin:0;max-width:none}
.quote{margin:14px 0 16px;padding:12px 18px;border-left:2px solid var(--rule);color:var(--ink-2);font-size:14px;max-width:70ch}
.quote p{margin:0 0 6px} .quote .gl{font-size:13px;color:var(--ink-3);font-style:italic}
/* two-col bull/bear */
.bb{display:grid;grid-template-columns:1fr 1fr;gap:28px}
.bb h3{margin-top:0;padding-bottom:6px;border-bottom:1px solid var(--rule)}
.bb ol{padding-left:18px} .bb li{font-size:14px}
/* tables */
.tblwrap{overflow-x:auto;margin:14px 0 6px}
table.fin{border-collapse:collapse;width:100%;font-family:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
table.fin th{text-align:right;font-weight:500;color:var(--ink-2);padding:8px 10px;border-bottom:1.5px solid var(--ink);font-family:"IBM Plex Sans",sans-serif;font-size:12px}
table.fin th:first-child{text-align:left}
table.fin td{text-align:right;padding:6px 10px;border-bottom:1px solid var(--rule)}
table.fin td:first-child{text-align:left;font-family:"IBM Plex Sans",sans-serif;color:var(--ink)}
table.fin tr.sub td:first-child{padding-left:22px;color:var(--ink-2)}
table.fin td.pos{color:var(--pos)} table.fin td.neg{color:var(--neg)}
table.fin sup{color:var(--warn);font-size:9px}
/* charts */
figure{margin:16px 0 10px;padding:14px 12px 8px;border:1px solid var(--rule);border-radius:4px;background:var(--paper)}
figure svg{width:100%;height:auto;display:block}
figure .ct{font-family:"IBM Plex Mono",monospace;font-size:11px;fill:var(--ink-3)}
figure .cv{font-family:"IBM Plex Mono",monospace;font-size:11px;fill:var(--ink)}
figure .cb{font-family:"IBM Plex Mono",monospace;font-size:11px;fill:var(--accent-ink)}
figure .cb.warn{fill:var(--warn)}
figcaption{font-size:12.5px;color:var(--ink-2);padding:6px 4px 0;max-width:none}
/* timeline */
.tl{list-style:none;padding:0;max-width:none}
.tl li{display:grid;grid-template-columns:120px 1fr;gap:14px;padding:9px 0;border-bottom:1px solid var(--rule)}
.tl .d{font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-2)}
/* annexes */
.annexe{margin-top:30px;padding-top:22px;border-top:1px solid var(--rule)}
.annexe:first-of-type{margin-top:18px;padding-top:0;border-top:0}
/* footer */
.foot{margin-top:34px;padding-top:18px;border-top:2px solid var(--ink);font-size:12.5px;color:var(--ink-2)}
.foot h4{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin:18px 0 8px;font-weight:500}
.foot ul{max-width:none} .foot li{margin-bottom:5px}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-family:"IBM Plex Mono",monospace;font-size:11px;margin:8px 0}
@media (max-width:900px){
.grid{grid-template-columns:1fr} aside{position:static}
.tiles{grid-template-columns:repeat(3,1fr)} .tile{border-bottom:1px solid var(--rule)} .tile:nth-child(3n){border-right:0}
.bb{grid-template-columns:1fr}
.mast{grid-template-columns:1fr} .mast .meta{text-align:left}
}
@media (max-width:560px){ .tiles{grid-template-columns:repeat(2,1fr)} .tile:nth-child(3n){border-right:1px solid var(--rule)} .tile:nth-child(2n){border-right:0} .wrap{padding:0 16px 60px} }
@media (prefers-reduced-motion: reduce){ *{animation:none!important;transition:none!important} }
@media print{
nav.toc{display:none}
.grid{display:block}
aside{position:static;margin-top:34px}
main{display:block}
figure,table,.quote{break-inside:avoid}
#annexes{break-before:page}
body{font-size:11pt}
.wrap{padding-left:0;padding-right:0}
*{-webkit-print-color-adjust:exact;print-color-adjust:exact;color-adjust:exact}
}
</style>
<figure id="revenue_vs_guidance"><svg viewBox="0 0 920 320" role="img" aria-label="Chiffre d’affaires trimestriel et point médian de la guidance">
<line x1="44" x2="908" y1="274.0" y2="274.0" stroke="var(--rule)" stroke-width="1"/>
<text x="38" y="278.0" text-anchor="end" class="ct">0</text>
<line x1="44" x2="908" y1="218.1" y2="218.1" stroke="var(--rule)" stroke-width="1"/>
<text x="38" y="222.1" text-anchor="end" class="ct">25</text>
<line x1="44" x2="908" y1="162.2" y2="162.2" stroke="var(--rule)" stroke-width="1"/>
<text x="38" y="166.2" text-anchor="end" class="ct">50</text>
<line x1="44" x2="908" y1="106.3" y2="106.3" stroke="var(--rule)" stroke-width="1"/>
<text x="38" y="110.3" text-anchor="end" class="ct">75</text>
<line x1="44" x2="908" y1="50.4" y2="50.4" stroke="var(--rule)" stroke-width="1"/>
<text x="38" y="54.4" text-anchor="end" class="ct">100</text>
<rect x="55.7" y="257.9" width="38.3" height="16.1" fill="var(--accent)" rx="1"/>
<text x="74.9" y="251.9" text-anchor="middle" class="cv">7,2</text>
<text x="74.9" y="290" text-anchor="middle" class="ct">T1 FY24</text>
<rect x="117.4" y="243.8" width="38.3" height="30.2" fill="var(--accent)" rx="1"/>
<text x="136.6" y="237.8" text-anchor="middle" class="cv">13,5</text>
<line x1="114.4" x2="158.7" y1="249.4" y2="249.4" stroke="var(--warn)" stroke-width="2.5"/>
<text x="136.6" y="290" text-anchor="middle" class="ct">T2 FY24</text>
<text x="136.6" y="306" text-anchor="middle" class="cb">+22,8 %</text>
<rect x="179.2" y="233.5" width="38.3" height="40.5" fill="var(--accent)" rx="1"/>
<text x="198.3" y="227.5" text-anchor="middle" class="cv">18,1</text>
<line x1="176.2" x2="220.4" y1="238.2" y2="238.2" stroke="var(--warn)" stroke-width="2.5"/>
<text x="198.3" y="290" text-anchor="middle" class="ct">T3 FY24</text>
<text x="198.3" y="306" text-anchor="middle" class="cb">+13,3 %</text>
<rect x="240.9" y="224.6" width="38.3" height="49.4" fill="var(--ink-3)" rx="1"/>
<text x="260.0" y="218.6" text-anchor="middle" class="cv">22,1</text>
<line x1="237.9" x2="282.1" y1="229.3" y2="229.3" stroke="var(--warn)" stroke-width="2.5"/>
<text x="260.0" y="290" text-anchor="middle" class="ct">T4 FY24</text>
<text x="260.0" y="306" text-anchor="middle" class="cb">+10,5 %</text>
<rect x="302.6" y="215.8" width="38.3" height="58.2" fill="var(--accent)" rx="1"/>
<text x="321.7" y="209.8" text-anchor="middle" class="cv">26,0</text>
<line x1="299.6" x2="343.8" y1="220.3" y2="220.3" stroke="var(--warn)" stroke-width="2.5"/>
<text x="321.7" y="290" text-anchor="middle" class="ct">T1 FY25</text>
<text x="321.7" y="306" text-anchor="middle" class="cb">+8,5 %</text>
<rect x="364.3" y="206.8" width="38.3" height="67.2" fill="var(--accent)" rx="1"/>
<text x="383.4" y="200.8" text-anchor="middle" class="cv">30,0</text>
<line x1="361.3" x2="405.6" y1="211.4" y2="211.4" stroke="var(--warn)" stroke-width="2.5"/>
<text x="383.4" y="290" text-anchor="middle" class="ct">T2 FY25</text>
<text x="383.4" y="306" text-anchor="middle" class="cb">+7,3 %</text>
<rect x="426.0" y="195.5" width="38.3" height="78.5" fill="var(--accent)" rx="1"/>
<text x="445.1" y="189.5" text-anchor="middle" class="cv">35,1</text>
<line x1="423.0" x2="467.3" y1="201.3" y2="201.3" stroke="var(--warn)" stroke-width="2.5"/>
<text x="445.1" y="290" text-anchor="middle" class="ct">T3 FY25</text>
<text x="445.1" y="306" text-anchor="middle" class="cb">+7,9 %</text>
<rect x="487.7" y="186.0" width="38.3" height="88.0" fill="var(--ink-3)" rx="1"/>
<text x="506.9" y="180.0" text-anchor="middle" class="cv">39,3</text>
<line x1="484.7" x2="529.0" y1="190.1" y2="190.1" stroke="var(--warn)" stroke-width="2.5"/>
<text x="506.9" y="290" text-anchor="middle" class="ct">T4 FY25</text>
<text x="506.9" y="306" text-anchor="middle" class="cb">+4,9 %</text>
<rect x="549.4" y="175.5" width="38.3" height="98.5" fill="var(--accent)" rx="1"/>
<text x="568.6" y="169.5" text-anchor="middle" class="cv">44,1</text>
<line x1="546.4" x2="590.7" y1="177.8" y2="177.8" stroke="var(--warn)" stroke-width="2.5"/>
<text x="568.6" y="290" text-anchor="middle" class="ct">T1 FY26</text>
<text x="568.6" y="306" text-anchor="middle" class="cb">+2,5 %</text>
<rect x="611.2" y="169.5" width="38.3" height="104.5" fill="var(--accent)" rx="1"/>
<text x="630.3" y="163.5" text-anchor="middle" class="cv">46,7</text>
<line x1="608.2" x2="652.4" y1="173.4" y2="173.4" stroke="var(--warn)" stroke-width="2.5"/>
<text x="630.3" y="290" text-anchor="middle" class="ct">T2 FY26</text>
<text x="630.3" y="306" text-anchor="middle" class="cb">+3,9 %</text>
<rect x="672.9" y="146.5" width="38.3" height="127.5" fill="var(--accent)" rx="1"/>
<text x="692.0" y="140.5" text-anchor="middle" class="cv">57,0</text>
<line x1="669.9" x2="714.1" y1="153.2" y2="153.2" stroke="var(--warn)" stroke-width="2.5"/>
<text x="692.0" y="290" text-anchor="middle" class="ct">T3 FY26</text>
<text x="692.0" y="306" text-anchor="middle" class="cb">+5,6 %</text>
<rect x="734.6" y="121.6" width="38.3" height="152.4" fill="var(--ink-3)" rx="1"/>
<text x="753.7" y="115.6" text-anchor="middle" class="cv">68,1</text>
<line x1="731.6" x2="775.8" y1="128.6" y2="128.6" stroke="var(--warn)" stroke-width="2.5"/>
<text x="753.7" y="290" text-anchor="middle" class="ct">T4 FY26</text>
<text x="753.7" y="306" text-anchor="middle" class="cb">+4,8 %</text>
<rect x="796.3" y="91.5" width="38.3" height="182.5" fill="var(--accent)" rx="1"/>
<text x="815.4" y="85.5" text-anchor="middle" class="cv">81,6</text>
<line x1="793.3" x2="837.6" y1="99.6" y2="99.6" stroke="var(--warn)" stroke-width="2.5"/>
<text x="815.4" y="290" text-anchor="middle" class="ct">T1 FY27</text>
<text x="815.4" y="306" text-anchor="middle" class="cb">+4,6 %</text>
<rect x="858.0" y="58.8" width="38.3" height="215.2" fill="var(--accent)" rx="1"/>
<text x="877.1" y="52.8" text-anchor="middle" class="cv">96,2</text>
<line x1="855.0" x2="899.3" y1="70.5" y2="70.5" stroke="var(--warn)" stroke-width="2.5"/>
<text x="877.1" y="290" text-anchor="middle" class="ct">T2 FY27</text>
<text x="877.1" y="306" text-anchor="middle" class="cb">+5,7 %</text>
<text x="44" y="16" class="ct">Md$ · barres = CA publié (gris = T4 dérivé du 10-K moins 9 mois) · trait ambre = point médian de la guidance donnée le trimestre précédent · sous l’axe : écart au point médian</text>
</svg></figure>
<figure id="net_income_vs_fcf"><svg viewBox="0 0 920 300" role="img" aria-label="Résultat net contre free cash-flow par trimestre">
<line x1="44" x2="908" y1="250.0" y2="250.0" stroke="var(--rule)"/>
<text x="38" y="254.0" text-anchor="end" class="ct">0</text>
<line x1="44" x2="908" y1="186.6" y2="186.6" stroke="var(--rule)"/>
<text x="38" y="190.6" text-anchor="end" class="ct">20</text>
<line x1="44" x2="908" y1="123.1" y2="123.1" stroke="var(--rule)"/>
<text x="38" y="127.1" text-anchor="end" class="ct">40</text>
<line x1="44" x2="908" y1="59.7" y2="59.7" stroke="var(--rule)"/>
<text x="38" y="63.7" text-anchor="end" class="ct">60</text>
<rect x="61.2" y="197.4" width="28.8" height="52.6" fill="var(--ink-3)" rx="1"/>
<rect x="94.0" y="207.2" width="28.8" height="42.8" fill="var(--accent)" rx="1"/>
<text x="75.6" y="192.4" text-anchor="middle" class="cv">16,6</text>
<text x="108.4" y="202.2" text-anchor="middle" class="cv">13,5</text>
<text x="92.0" y="266" text-anchor="middle" class="ct">T2 FY25</text>
<text x="92.0" y="284" text-anchor="middle" class="cb">81 %</text>
<rect x="157.2" y="188.8" width="28.8" height="61.2" fill="var(--ink-3)" rx="1"/>
<rect x="190.0" y="196.7" width="28.8" height="53.3" fill="var(--accent)" rx="1"/>
<text x="171.6" y="183.8" text-anchor="middle" class="cv">19,3</text>
<text x="204.4" y="191.7" text-anchor="middle" class="cv">16,8</text>
<text x="188.0" y="266" text-anchor="middle" class="ct">T3 FY25</text>
<text x="188.0" y="284" text-anchor="middle" class="cb">87 %</text>
<rect x="253.2" y="179.9" width="28.8" height="70.1" fill="var(--ink-3)" rx="1"/>
<rect x="286.0" y="200.7" width="28.8" height="49.3" fill="var(--accent)" rx="1"/>
<text x="267.6" y="174.9" text-anchor="middle" class="cv">22,1</text>
<text x="300.4" y="195.7" text-anchor="middle" class="cv">15,6</text>
<text x="284.0" y="266" text-anchor="middle" class="ct">T4 FY25</text>
<text x="284.0" y="284" text-anchor="middle" class="cb">70 %</text>
<rect x="349.2" y="190.5" width="28.8" height="59.5" fill="var(--ink-3)" rx="1"/>
<rect x="382.0" y="166.9" width="28.8" height="83.1" fill="var(--accent)" rx="1"/>
<text x="363.6" y="185.5" text-anchor="middle" class="cv">18,8</text>
<text x="396.4" y="161.9" text-anchor="middle" class="cv">26,2</text>
<text x="380.0" y="266" text-anchor="middle" class="ct">T1 FY26</text>
<text x="380.0" y="284" text-anchor="middle" class="cb">139 %</text>
<rect x="445.2" y="166.2" width="28.8" height="83.8" fill="var(--ink-3)" rx="1"/>
<rect x="478.0" y="207.3" width="28.8" height="42.7" fill="var(--accent)" rx="1"/>
<text x="459.6" y="161.2" text-anchor="middle" class="cv">26,4</text>
<text x="492.4" y="202.3" text-anchor="middle" class="cv">13,5</text>
<text x="476.0" y="266" text-anchor="middle" class="ct">T2 FY26</text>
<text x="476.0" y="284" text-anchor="middle" class="cb">51 %</text>
<rect x="541.2" y="148.8" width="28.8" height="101.2" fill="var(--ink-3)" rx="1"/>
<rect x="574.0" y="179.9" width="28.8" height="70.1" fill="var(--accent)" rx="1"/>
<text x="555.6" y="143.8" text-anchor="middle" class="cv">31,9</text>
<text x="588.4" y="174.9" text-anchor="middle" class="cv">22,1</text>
<text x="572.0" y="266" text-anchor="middle" class="ct">T3 FY26</text>
<text x="572.0" y="284" text-anchor="middle" class="cb">69 %</text>
<rect x="637.2" y="113.8" width="28.8" height="136.2" fill="var(--ink-3)" rx="1"/>
<rect x="670.0" y="139.3" width="28.8" height="110.7" fill="var(--accent)" rx="1"/>
<text x="651.6" y="108.8" text-anchor="middle" class="cv">43,0</text>
<text x="684.4" y="134.3" text-anchor="middle" class="cv">34,9</text>
<text x="668.0" y="266" text-anchor="middle" class="ct">T4 FY26</text>
<text x="668.0" y="284" text-anchor="middle" class="cb">81 %</text>
<rect x="733.2" y="65.0" width="28.8" height="185.0" fill="var(--ink-3)" rx="1"/>
<rect x="766.0" y="95.9" width="28.8" height="154.1" fill="var(--accent)" rx="1"/>
<text x="747.6" y="60.0" text-anchor="middle" class="cv">58,3</text>
<text x="780.4" y="90.9" text-anchor="middle" class="cv">48,6</text>
<text x="764.0" y="266" text-anchor="middle" class="ct">T1 FY27</text>
<text x="764.0" y="284" text-anchor="middle" class="cb">83 %</text>
<rect x="829.2" y="60.7" width="28.8" height="189.3" fill="var(--ink-3)" rx="1"/>
<rect x="862.0" y="182.1" width="28.8" height="67.9" fill="var(--accent)" rx="1"/>
<text x="843.6" y="55.7" text-anchor="middle" class="cv">59,7</text>
<text x="876.4" y="177.1" text-anchor="middle" class="cv">21,4</text>
<text x="860.0" y="266" text-anchor="middle" class="ct">T2 FY27</text>
<text x="860.0" y="284" text-anchor="middle" class="cb warn">36 %</text>
<text x="44" y="16" class="ct">Md$ · gris = résultat net GAAP · vert = free cash-flow (flux opérationnel moins capex) · sous l’axe : FCF / résultat net</text>
</svg></figure>
<figure id="days_sales_outstanding"><svg viewBox="0 0 920 260" role="img" aria-label="Délai de recouvrement clients en jours">
<line x1="44" x2="908" y1="226.0" y2="226.0" stroke="var(--rule)"/>
<text x="38" y="230.0" text-anchor="end" class="ct">30</text>
<line x1="44" x2="908" y1="176.5" y2="176.5" stroke="var(--rule)"/>
<text x="38" y="180.5" text-anchor="end" class="ct">40</text>
<line x1="44" x2="908" y1="127.0" y2="127.0" stroke="var(--rule)"/>
<text x="38" y="131.0" text-anchor="end" class="ct">50</text>
<line x1="44" x2="908" y1="77.5" y2="77.5" stroke="var(--rule)"/>
<text x="38" y="81.5" text-anchor="end" class="ct">60</text>
<line x1="44" x2="908" y1="28.0" y2="28.0" stroke="var(--rule)"/>
<text x="38" y="32.0" text-anchor="end" class="ct">70</text>
<polyline fill="none" stroke="var(--accent)" stroke-width="2.5" points="92.0,162.6 188.0,147.3 284.0,110.3 380.0,148.2 476.0,106.5 572.0,110.7 668.0,120.2 764.0,149.8 860.0,79.3"/>
<circle cx="92.0" cy="162.6" r="4" fill="var(--accent)"/>
<text x="92.0" y="151.6" text-anchor="middle" class="cv">43</text>
<text x="92.0" y="242" text-anchor="middle" class="ct">T2 FY25</text>
<circle cx="188.0" cy="147.3" r="4" fill="var(--accent)"/>
<text x="188.0" y="136.3" text-anchor="middle" class="cv">46</text>
<text x="188.0" y="242" text-anchor="middle" class="ct">T3 FY25</text>
<circle cx="284.0" cy="110.3" r="4" fill="var(--accent)"/>
<text x="284.0" y="99.3" text-anchor="middle" class="cv">53</text>
<text x="284.0" y="242" text-anchor="middle" class="ct">T4 FY25</text>
<circle cx="380.0" cy="148.2" r="4" fill="var(--accent)"/>
<text x="380.0" y="137.2" text-anchor="middle" class="cv">46</text>
<text x="380.0" y="242" text-anchor="middle" class="ct">T1 FY26</text>
<circle cx="476.0" cy="106.5" r="4" fill="var(--accent)"/>
<text x="476.0" y="95.5" text-anchor="middle" class="cv">54</text>
<text x="476.0" y="242" text-anchor="middle" class="ct">T2 FY26</text>
<circle cx="572.0" cy="110.7" r="4" fill="var(--accent)"/>
<text x="572.0" y="99.7" text-anchor="middle" class="cv">53</text>
<text x="572.0" y="242" text-anchor="middle" class="ct">T3 FY26</text>
<circle cx="668.0" cy="120.2" r="4" fill="var(--accent)"/>
<text x="668.0" y="109.2" text-anchor="middle" class="cv">51</text>
<text x="668.0" y="242" text-anchor="middle" class="ct">T4 FY26</text>
<circle cx="764.0" cy="149.8" r="4" fill="var(--accent)"/>
<text x="764.0" y="138.8" text-anchor="middle" class="cv">45</text>
<text x="764.0" y="242" text-anchor="middle" class="ct">T1 FY27</text>
<circle cx="860.0" cy="79.3" r="6" fill="var(--warn)"/>
<text x="860.0" y="68.3" text-anchor="middle" class="cv">60</text>
<text x="860.0" y="242" text-anchor="middle" class="ct">T2 FY27</text>
<text x="44" y="16" class="ct">Jours · créances clients / CA du trimestre × 91 · la CFO visait « mid-fifties » pour T2 FY27 (appel du 20 mai 2026)</text>
</svg></figure>