{
 "cover_html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>2024 was the warmest year on record</title>\n<!--\n  Live Card template: one file is both the still and the motion. Render it with render_live_card at 1080 x 1440,\n  3000 ms, 30 fps, cover_ms 2900. Every move ends by 2.0 s, so the last second (and the still) is the full card.\n  To reuse it, change the words, the --n range in @keyframes count (hundredths of a degree), and each bar's --v\n  (its value divided by the largest value, 1.29). Bar colour follows --v from --cool through --warm to --accent.\n-->\n<style>\n  @property --n { syntax: \"<integer>\"; inherits: false; initial-value: 0; }\n  @property --w { syntax: \"<integer>\"; inherits: false; initial-value: 0; }\n  @property --c { syntax: \"<integer>\"; inherits: false; initial-value: 0; }\n  :root {\n    --paper: #f3ead8; --ink: #1c1a17; --muted: #6b645a; --line: #ddd5c7; --bar: #d9cfbf; --accent: #e03131;\n    --cool: #7ea6cf; --warm: #f0b46a;\n    --enter: cubic-bezier(0.23, 1, 0.32, 1); --travel: cubic-bezier(0.77, 0, 0.175, 1);\n  }\n  * { box-sizing: border-box; margin: 0; }\n  body { width: 1080px; height: 1440px; overflow: hidden; background: var(--paper); color: var(--ink); font-family: Inter, \"Noto Color Emoji\", system-ui, sans-serif; }\n  .card { position: relative; height: 100%; padding: 84px 80px 72px; display: flex; flex-direction: column; }\n  .top { display: flex; justify-content: space-between; align-items: center; font-size: 22px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; }\n  .kicker { color: var(--accent); }\n  .chip { color: var(--muted); border: 2px solid var(--line); border-radius: 999px; padding: 8px 18px; letter-spacing: 0.08em; }\n  h1 { margin-top: 44px; font-size: 64px; line-height: 1.04; font-weight: 750; letter-spacing: -0.035em; max-width: 880px; }\n  .sub { margin-top: 22px; font-size: 28px; line-height: 1.4; color: var(--muted); max-width: 840px; text-wrap: balance; }\n  .hero { margin-top: 44px; display: flex; align-items: flex-end; justify-content: space-between; }\n  .big { display: flex; align-items: baseline; color: var(--accent); font-weight: 800; }\n  /* --w is the whole degrees and --c the hundredths of --n; integer rounding of (n - 50) / 100 gives the floor. */\n  .num { --w: calc((var(--n) - 50) / 100); --c: calc(var(--n) - var(--w) * 100); font-size: 210px; line-height: 0.82; letter-spacing: -0.05em; font-variant-numeric: tabular-nums; counter-reset: w var(--w) c var(--c); animation: count 1.7s cubic-bezier(0.45, 0, 0.25, 1) 0.15s both; }\n  .num::after { content: \"+\" counter(w) \".\" counter(c, decimal-leading-zero); }\n  @keyframes count { from { --n: 26; } to { --n: 129; } }\n  .deg { font-size: 84px; letter-spacing: -0.03em; margin-left: 18px; }\n  .unit { margin-top: 18px; font-size: 30px; font-weight: 600; }\n  .unit span { display: block; color: var(--muted); font-weight: 500; font-size: 26px; margin-top: 6px; }\n  .emoji { font-size: 220px; line-height: 1; margin: 0 10px 56px 0; animation: rise 0.6s var(--enter) 0.05s both; }\n  @keyframes rise { from { transform: translateY(60px) scale(0.85); opacity: 0; } }\n  .chart { position: relative; margin-top: auto; height: 470px; display: grid; grid-template-columns: repeat(46, 1fr); gap: 5px; align-items: end; border-bottom: 3px solid var(--ink); }\n  .chart i { position: relative; z-index: 1; height: calc(var(--v) * 100%); border-radius: 4px 4px 0 0;\n    background: color-mix(in oklab, var(--accent) calc(clamp(0, var(--v) * 2 - 1, 1) * 100%), color-mix(in oklab, var(--warm) calc(clamp(0, var(--v) * 2, 1) * 100%), var(--cool)));\n    animation: grow 0.4s var(--enter) both; animation-delay: calc(0.25s + var(--i) * 0.03s); }\n  .chart i.now { background: var(--accent); }\n  @keyframes grow { from { height: 0; } }\n  .chart b { position: absolute; left: 50%; bottom: calc(100% + 10px); transform: translateX(-50%); white-space: nowrap; font-style: normal; font-size: 26px; font-weight: 700; font-variant-numeric: tabular-nums; animation: show 0.25s var(--enter) both; animation-delay: calc(0.4s + var(--i) * 0.03s); }\n  .chart b.l { left: 0; bottom: calc(100% + 36px); transform: none; }\n  .chart b.r { left: auto; right: 0; transform: none; color: var(--accent); }\n  .ref { position: absolute; left: 0; right: 0; bottom: 77.5%; border-top: 2px dashed var(--muted); opacity: 0.55; }\n  .ref span { position: absolute; left: 0; bottom: 8px; font-size: 21px; font-weight: 600; color: var(--muted); }\n  .years { display: grid; grid-template-columns: repeat(46, 1fr); gap: 5px; margin-top: 14px; font-size: 21px; color: var(--muted); font-variant-numeric: tabular-nums; }\n  .years span { justify-self: center; white-space: nowrap; }\n  .years .now { color: var(--accent); font-weight: 700; }\n  .foot { margin-top: 40px; padding-top: 22px; border-top: 2px solid var(--line); display: flex; justify-content: space-between; gap: 32px; font-size: 19px; line-height: 1.45; color: var(--muted); }\n  .foot strong { color: var(--ink); font-weight: 600; }\n  .made { white-space: nowrap; }\n  .fade { animation: fade 0.5s var(--enter) both; }\n  @keyframes fade { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }\n  @keyframes show { from { opacity: 0; } }\n</style>\n</head>\n<body>\n<main class=\"card\">\n  <div class=\"top\"><span class=\"kicker\">Climate</span><span class=\"chip\">1980 to 2025</span></div>\n  <h1>2024 was the warmest year on record, and 2025 came close</h1>\n  <p class=\"sub\">Global surface temperature each year, in °C above the <span style=\"white-space:nowrap\">1951-1980</span> average.</p>\n  <div class=\"hero\">\n    <div>\n      <div class=\"big\"><div class=\"num\" aria-label=\"+1.29\"></div><span class=\"deg\">°C</span></div>\n      <p class=\"unit\">in 2024, the record year<span>2025 followed at +1.19 °C</span></p>\n    </div>\n    <div class=\"emoji\" aria-hidden=\"true\">🌡️</div>\n  </div>\n  <div class=\"chart\" role=\"img\" aria-label=\"Bar chart of yearly anomalies: +0.26 °C in 1980 rising to +1.01 in 2016, +1.29 in 2024 and +1.19 in 2025\">\n    <div class=\"ref\"><span>+1.0 °C</span></div>\n    <i style=\"--v:0.202;--i:0\"><b class=\"l\">+0.26</b></i>\n    <i style=\"--v:0.248;--i:1\"></i>\n    <i style=\"--v:0.109;--i:2\"></i>\n    <i style=\"--v:0.240;--i:3\"></i>\n    <i style=\"--v:0.124;--i:4\"></i>\n    <i style=\"--v:0.093;--i:5\"></i>\n    <i style=\"--v:0.140;--i:6\"></i>\n    <i style=\"--v:0.248;--i:7\"></i>\n    <i style=\"--v:0.302;--i:8\"></i>\n    <i style=\"--v:0.209;--i:9\"></i>\n    <i style=\"--v:0.349;--i:10\"></i>\n    <i style=\"--v:0.318;--i:11\"></i>\n    <i style=\"--v:0.171;--i:12\"></i>\n    <i style=\"--v:0.178;--i:13\"></i>\n    <i style=\"--v:0.248;--i:14\"></i>\n    <i style=\"--v:0.349;--i:15\"></i>\n    <i style=\"--v:0.256;--i:16\"></i>\n    <i style=\"--v:0.364;--i:17\"></i>\n    <i style=\"--v:0.473;--i:18\"></i>\n    <i style=\"--v:0.295;--i:19\"></i>\n    <i style=\"--v:0.302;--i:20\"></i>\n    <i style=\"--v:0.411;--i:21\"></i>\n    <i style=\"--v:0.488;--i:22\"></i>\n    <i style=\"--v:0.481;--i:23\"></i>\n    <i style=\"--v:0.411;--i:24\"></i>\n    <i style=\"--v:0.527;--i:25\"></i>\n    <i style=\"--v:0.496;--i:26\"></i>\n    <i style=\"--v:0.512;--i:27\"></i>\n    <i style=\"--v:0.419;--i:28\"></i>\n    <i style=\"--v:0.512;--i:29\"></i>\n    <i style=\"--v:0.558;--i:30\"></i>\n    <i style=\"--v:0.473;--i:31\"></i>\n    <i style=\"--v:0.504;--i:32\"></i>\n    <i style=\"--v:0.527;--i:33\"></i>\n    <i style=\"--v:0.581;--i:34\"></i>\n    <i style=\"--v:0.698;--i:35\"></i>\n    <i style=\"--v:0.783;--i:36\"><b>+1.01</b></i>\n    <i style=\"--v:0.713;--i:37\"></i>\n    <i style=\"--v:0.659;--i:38\"></i>\n    <i style=\"--v:0.760;--i:39\"></i>\n    <i style=\"--v:0.783;--i:40\"></i>\n    <i style=\"--v:0.659;--i:41\"></i>\n    <i style=\"--v:0.690;--i:42\"></i>\n    <i style=\"--v:0.907;--i:43\"></i>\n    <i class=\"now\" style=\"--v:1.000;--i:44\"><b class=\"r\">Record +1.29</b></i>\n    <i style=\"--v:0.922;--i:45\"></i>\n  </div>\n  <div class=\"years\"><span style=\"grid-column:1\">1980</span><span style=\"grid-column:11\">1990</span><span style=\"grid-column:21\">2000</span><span style=\"grid-column:31\">2010</span><span style=\"grid-column:41\">2020</span><span class=\"now\" style=\"grid-column:45\">2024</span></div>\n  <footer class=\"foot fade\" style=\"animation-delay:1.2s\">\n    <p><strong>Source:</strong> NASA GISS, GISTEMP v4 global land-ocean index, annual means (GLB.Ts+dSST.csv, J-D), updated 8 Sep 2026.</p>\n    <p class=\"made\">Made with Live Card</p>\n  </footer>\n</main>\n</body>\n</html>\n",
 "motion_html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>2024 was the warmest year on record</title>\n<!--\n  Live Card template: one file is both the still and the motion. Render it with render_live_card at 1080 x 1440,\n  3000 ms, 30 fps, cover_ms 2900. Every move ends by 2.0 s, so the last second (and the still) is the full card.\n  To reuse it, change the words, the --n range in @keyframes count (hundredths of a degree), and each bar's --v\n  (its value divided by the largest value, 1.29). Bar colour follows --v from --cool through --warm to --accent.\n-->\n<style>\n  @property --n { syntax: \"<integer>\"; inherits: false; initial-value: 0; }\n  @property --w { syntax: \"<integer>\"; inherits: false; initial-value: 0; }\n  @property --c { syntax: \"<integer>\"; inherits: false; initial-value: 0; }\n  :root {\n    --paper: #f3ead8; --ink: #1c1a17; --muted: #6b645a; --line: #ddd5c7; --bar: #d9cfbf; --accent: #e03131;\n    --cool: #7ea6cf; --warm: #f0b46a;\n    --enter: cubic-bezier(0.23, 1, 0.32, 1); --travel: cubic-bezier(0.77, 0, 0.175, 1);\n  }\n  * { box-sizing: border-box; margin: 0; }\n  body { width: 1080px; height: 1440px; overflow: hidden; background: var(--paper); color: var(--ink); font-family: Inter, \"Noto Color Emoji\", system-ui, sans-serif; }\n  .card { position: relative; height: 100%; padding: 84px 80px 72px; display: flex; flex-direction: column; }\n  .top { display: flex; justify-content: space-between; align-items: center; font-size: 22px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; }\n  .kicker { color: var(--accent); }\n  .chip { color: var(--muted); border: 2px solid var(--line); border-radius: 999px; padding: 8px 18px; letter-spacing: 0.08em; }\n  h1 { margin-top: 44px; font-size: 64px; line-height: 1.04; font-weight: 750; letter-spacing: -0.035em; max-width: 880px; }\n  .sub { margin-top: 22px; font-size: 28px; line-height: 1.4; color: var(--muted); max-width: 840px; text-wrap: balance; }\n  .hero { margin-top: 44px; display: flex; align-items: flex-end; justify-content: space-between; }\n  .big { display: flex; align-items: baseline; color: var(--accent); font-weight: 800; }\n  /* --w is the whole degrees and --c the hundredths of --n; integer rounding of (n - 50) / 100 gives the floor. */\n  .num { --w: calc((var(--n) - 50) / 100); --c: calc(var(--n) - var(--w) * 100); font-size: 210px; line-height: 0.82; letter-spacing: -0.05em; font-variant-numeric: tabular-nums; counter-reset: w var(--w) c var(--c); animation: count 1.7s cubic-bezier(0.45, 0, 0.25, 1) 0.15s both; }\n  .num::after { content: \"+\" counter(w) \".\" counter(c, decimal-leading-zero); }\n  @keyframes count { from { --n: 26; } to { --n: 129; } }\n  .deg { font-size: 84px; letter-spacing: -0.03em; margin-left: 18px; }\n  .unit { margin-top: 18px; font-size: 30px; font-weight: 600; }\n  .unit span { display: block; color: var(--muted); font-weight: 500; font-size: 26px; margin-top: 6px; }\n  .emoji { font-size: 220px; line-height: 1; margin: 0 10px 56px 0; animation: rise 0.6s var(--enter) 0.05s both; }\n  @keyframes rise { from { transform: translateY(60px) scale(0.85); opacity: 0; } }\n  .chart { position: relative; margin-top: auto; height: 470px; display: grid; grid-template-columns: repeat(46, 1fr); gap: 5px; align-items: end; border-bottom: 3px solid var(--ink); }\n  .chart i { position: relative; z-index: 1; height: calc(var(--v) * 100%); border-radius: 4px 4px 0 0;\n    background: color-mix(in oklab, var(--accent) calc(clamp(0, var(--v) * 2 - 1, 1) * 100%), color-mix(in oklab, var(--warm) calc(clamp(0, var(--v) * 2, 1) * 100%), var(--cool)));\n    animation: grow 0.4s var(--enter) both; animation-delay: calc(0.25s + var(--i) * 0.03s); }\n  .chart i.now { background: var(--accent); }\n  @keyframes grow { from { height: 0; } }\n  .chart b { position: absolute; left: 50%; bottom: calc(100% + 10px); transform: translateX(-50%); white-space: nowrap; font-style: normal; font-size: 26px; font-weight: 700; font-variant-numeric: tabular-nums; animation: show 0.25s var(--enter) both; animation-delay: calc(0.4s + var(--i) * 0.03s); }\n  .chart b.l { left: 0; bottom: calc(100% + 36px); transform: none; }\n  .chart b.r { left: auto; right: 0; transform: none; color: var(--accent); }\n  .ref { position: absolute; left: 0; right: 0; bottom: 77.5%; border-top: 2px dashed var(--muted); opacity: 0.55; }\n  .ref span { position: absolute; left: 0; bottom: 8px; font-size: 21px; font-weight: 600; color: var(--muted); }\n  .years { display: grid; grid-template-columns: repeat(46, 1fr); gap: 5px; margin-top: 14px; font-size: 21px; color: var(--muted); font-variant-numeric: tabular-nums; }\n  .years span { justify-self: center; white-space: nowrap; }\n  .years .now { color: var(--accent); font-weight: 700; }\n  .foot { margin-top: 40px; padding-top: 22px; border-top: 2px solid var(--line); display: flex; justify-content: space-between; gap: 32px; font-size: 19px; line-height: 1.45; color: var(--muted); }\n  .foot strong { color: var(--ink); font-weight: 600; }\n  .made { white-space: nowrap; }\n  .fade { animation: fade 0.5s var(--enter) both; }\n  @keyframes fade { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }\n  @keyframes show { from { opacity: 0; } }\n</style>\n</head>\n<body>\n<main class=\"card\">\n  <div class=\"top\"><span class=\"kicker\">Climate</span><span class=\"chip\">1980 to 2025</span></div>\n  <h1>2024 was the warmest year on record, and 2025 came close</h1>\n  <p class=\"sub\">Global surface temperature each year, in °C above the <span style=\"white-space:nowrap\">1951-1980</span> average.</p>\n  <div class=\"hero\">\n    <div>\n      <div class=\"big\"><div class=\"num\" aria-label=\"+1.29\"></div><span class=\"deg\">°C</span></div>\n      <p class=\"unit\">in 2024, the record year<span>2025 followed at +1.19 °C</span></p>\n    </div>\n    <div class=\"emoji\" aria-hidden=\"true\">🌡️</div>\n  </div>\n  <div class=\"chart\" role=\"img\" aria-label=\"Bar chart of yearly anomalies: +0.26 °C in 1980 rising to +1.01 in 2016, +1.29 in 2024 and +1.19 in 2025\">\n    <div class=\"ref\"><span>+1.0 °C</span></div>\n    <i style=\"--v:0.202;--i:0\"><b class=\"l\">+0.26</b></i>\n    <i style=\"--v:0.248;--i:1\"></i>\n    <i style=\"--v:0.109;--i:2\"></i>\n    <i style=\"--v:0.240;--i:3\"></i>\n    <i style=\"--v:0.124;--i:4\"></i>\n    <i style=\"--v:0.093;--i:5\"></i>\n    <i style=\"--v:0.140;--i:6\"></i>\n    <i style=\"--v:0.248;--i:7\"></i>\n    <i style=\"--v:0.302;--i:8\"></i>\n    <i style=\"--v:0.209;--i:9\"></i>\n    <i style=\"--v:0.349;--i:10\"></i>\n    <i style=\"--v:0.318;--i:11\"></i>\n    <i style=\"--v:0.171;--i:12\"></i>\n    <i style=\"--v:0.178;--i:13\"></i>\n    <i style=\"--v:0.248;--i:14\"></i>\n    <i style=\"--v:0.349;--i:15\"></i>\n    <i style=\"--v:0.256;--i:16\"></i>\n    <i style=\"--v:0.364;--i:17\"></i>\n    <i style=\"--v:0.473;--i:18\"></i>\n    <i style=\"--v:0.295;--i:19\"></i>\n    <i style=\"--v:0.302;--i:20\"></i>\n    <i style=\"--v:0.411;--i:21\"></i>\n    <i style=\"--v:0.488;--i:22\"></i>\n    <i style=\"--v:0.481;--i:23\"></i>\n    <i style=\"--v:0.411;--i:24\"></i>\n    <i style=\"--v:0.527;--i:25\"></i>\n    <i style=\"--v:0.496;--i:26\"></i>\n    <i style=\"--v:0.512;--i:27\"></i>\n    <i style=\"--v:0.419;--i:28\"></i>\n    <i style=\"--v:0.512;--i:29\"></i>\n    <i style=\"--v:0.558;--i:30\"></i>\n    <i style=\"--v:0.473;--i:31\"></i>\n    <i style=\"--v:0.504;--i:32\"></i>\n    <i style=\"--v:0.527;--i:33\"></i>\n    <i style=\"--v:0.581;--i:34\"></i>\n    <i style=\"--v:0.698;--i:35\"></i>\n    <i style=\"--v:0.783;--i:36\"><b>+1.01</b></i>\n    <i style=\"--v:0.713;--i:37\"></i>\n    <i style=\"--v:0.659;--i:38\"></i>\n    <i style=\"--v:0.760;--i:39\"></i>\n    <i style=\"--v:0.783;--i:40\"></i>\n    <i style=\"--v:0.659;--i:41\"></i>\n    <i style=\"--v:0.690;--i:42\"></i>\n    <i style=\"--v:0.907;--i:43\"></i>\n    <i class=\"now\" style=\"--v:1.000;--i:44\"><b class=\"r\">Record +1.29</b></i>\n    <i style=\"--v:0.922;--i:45\"></i>\n  </div>\n  <div class=\"years\"><span style=\"grid-column:1\">1980</span><span style=\"grid-column:11\">1990</span><span style=\"grid-column:21\">2000</span><span style=\"grid-column:31\">2010</span><span style=\"grid-column:41\">2020</span><span class=\"now\" style=\"grid-column:45\">2024</span></div>\n  <footer class=\"foot fade\" style=\"animation-delay:1.2s\">\n    <p><strong>Source:</strong> NASA GISS, GISTEMP v4 global land-ocean index, annual means (GLB.Ts+dSST.csv, J-D), updated 8 Sep 2026.</p>\n    <p class=\"made\">Made with Live Card</p>\n  </footer>\n</main>\n</body>\n</html>\n",
 "width": 1080,
 "height": 1440,
 "duration_ms": 3000,
 "fps": 30,
 "cover_ms": 2900
}
