<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://inoureconomy.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://inoureconomy.org/" rel="alternate" type="text/html" /><updated>2026-05-16T19:50:21+00:00</updated><id>https://inoureconomy.org/feed.xml</id><title type="html">In Our Economy</title><subtitle>Insights about the economy of the 99%</subtitle><author><name>Cyrus O&apos;Brien</name></author><entry><title type="html">How Many American Families Can Afford to Attend the World Cup?</title><link href="https://inoureconomy.org/blog/2026/05/16/world-cup-ticket-prices/" rel="alternate" type="text/html" title="How Many American Families Can Afford to Attend the World Cup?" /><published>2026-05-16T00:00:00+00:00</published><updated>2026-05-16T00:00:00+00:00</updated><id>https://inoureconomy.org/blog/2026/05/16/world-cup-ticket-prices</id><content type="html" xml:base="https://inoureconomy.org/blog/2026/05/16/world-cup-ticket-prices/"><![CDATA[<h3 id="most-americans-cant-afford-to-attend-the-world-cup">Most Americans can’t afford to attend the World Cup</h3>

<p>The World Cup is being held in North America for the first time in 32 years, but most Americans can’t afford to attend.</p>

<ul>
  <li>83% of U.S. households can’t afford the cheapest tickets available on the resale market to the World Cup Final at Metlife Stadium.</li>
  <li>73% of U.S. households can’t afford the cheapest face value tickets to the final.</li>
  <li>78% of U.S. households can’t afford great seats at a group stage game.</li>
  <li>The only affordable tickets (face value tickets for group games) are practically unavailable because of the lottery operated by FIFA.</li>
</ul>

<p>The unaffordability of tickets to the 2026 World Cup stands in stark contrast to the last time the U.S. hosted the event in 1994. In 1994 the majority of Americans could afford to attend the final - even if they had to buy a ticket on the resale market.</p>

<p>The charts below show how the affordability of ticket prices has changed from 1994 to 2026. You can read about the methodology below. The picture is clear: This World Cup is unaffordable to most Americans.</p>

<div class="viz-wrapper" style="margin: 2rem 0;">
  <iframe id="world-cup-affordability-iframe" src="/assets/html/world-cup-affordability.html" title="World Cup ticket affordability bar charts comparing 1994 and 2026" scrolling="no" loading="lazy" style="width: 100%; border: none; min-height: 520px; border-radius: 8px; overflow: hidden;">
  </iframe>
</div>

<script>
  window.addEventListener('message', function(e) {
    if (e.data && e.data.iframeHeight) {
      var el = document.getElementById('world-cup-affordability-iframe');
      if (el) el.style.height = Math.max(520, e.data.iframeHeight) + 'px';
    }
  });
</script>

<p>Keep in mind that this affordability metric is based just on <strong>ticket prices</strong>. Travel, parking, food, concessions, and other expenses related to attending a World Cup match are not included. <a href="https://www.espn.com/soccer/story/_/id/48259964/cost-2026-world-cup-how-much-usmnt-fan-spend">ESPN</a> estimated that the cost for a USMNT fan to attend the group games would near $15,000 and the cost to follow a team through the whole tournament at more than $34,000.</p>

<ul>
  <li>81% of U.S. households couldn’t afford to send a single member to all the USMNT group games and</li>
  <li>90% of American households couldn’t afford to send a single member to follow a team through the whole World Cup even if they liquidated their all their checking accounts.</li>
</ul>

<h3 id="more-to-come">More to come</h3>

<p>Later this week I’ll be publishing estimates of World Cup affordability for working families and I’ll be digging into racial disparities. Want to know how many Black families are able to afford tickets to the World Cup Final? Answers will be at <a href="www.inoureconomy.org">inoureconomy.org</a> soon.</p>

<h3 id="methodology-and-sources">Methodology and sources</h3>

<p>I conducted online research to find the best apples-to-apples comparisons for ticket prices. All face value prices are published at <a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a>. Resale ticket prices are based on searches for USMNT games and Mexico games on StubHub and do not include the 15% transaction fee. I found resale ticket prices for the 1994 World Cup referenced in a number of Facebook and Reddit conversations and include links in the table below.</p>

<p>To determine if a family or household could afford tickets, I analyzed raw microdata from the 1995 and 2022 Survey of Consumer Finances (SCF). I updated all 1994 dollars to 2022 dollars for this analysis. I decided to leave 2026 dollars as 2026 dollars because, though inflation has been significant, experts believe that wages and savings have not kept pace with inflation. As a result, these estimates probably <em>underestimate</em> the number of families who can’t afford tickets. I defined the cost of each match as the cost of having one ticket per adult and per child in the primary economic unit (which excludes non-spouse and non-partner adults). A household was defined as not being able to afford a ticket if the cost of tickets for a match exceeded the amount of money they held in all their checking accounts combined.</p>

<p>Those of you who are interested in confidence intervals can see them below in this chart. The data were analyzed in R using Thomas Lumley’s R packages <a href="https://cran.r-project.org/package=survey">survey</a> and <a href="https://cran.r-project.org/package=mitools">mitools</a>. Special thanks to Antony Damico who wrote a custom function I used for multiple imputation for the SCF.</p>

<div id="ci-table-container"></div>

<style>
  .ci-table {
    width: 100%;
    font-size: 0.82rem;
  }
  .ci-table caption {
    font-size: 1rem;
    font-weight: 600;
    margin-bottom: 0.5rem;
    text-align: left;
    color: #1a1a2e;
  }
  .ci-table th {
    background: #f5f5f5;
    text-align: left;
    padding: 0.45rem 0.6rem;
    border-bottom: 2px solid #ccc;
    font-weight: 600;
    color: #333;
  }
  .ci-table td {
    padding: 0.4rem 0.6rem;
    border-bottom: 1px solid #e8e8e8;
    color: #444;
  }
  .ci-table tr:last-child td {
    border-bottom: 2px solid #ccc;
  }
  .ci-table .year-1994 { color: #4A90A4; font-weight: 500; }
  .ci-table .year-2026 { color: #D4574E; font-weight: 500; }
</style>

<script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js"></script>

<script>
(function() {
  const YEAR_MAP = { "1995": "1994", "2022": "2026" };

  d3.csv("/assets/data/world-cup-affordability-all-households.csv").then(raw => {
    const data = raw.map(d => ({
      results: +d.results,
      se:      +d.se,
      lower:   +d["(lower"],
      upper:   +d["upper)"],
      year:    YEAR_MAP[d.year.trim()] || d.year.trim(),
      category: d.category.trim()
    }));

    const categories = [...new Set(data.map(d => d.category))];

    let html = `<table class="ci-table">
    <caption>How Many Americans CANNOT Afford to Attend the World Cup? (with 95% Confidence Intervals )</caption>
    <thead>
      <tr>
        <th>Category</th>
        <th>Year</th>
        <th>Estimate</th>
        <th>95% CI Lower</th>
        <th>95% CI Upper</th>
        <th>Std. Error</th>
      </tr>
    </thead>
    <tbody>`;

    categories.forEach(category => {
      const rows = data.filter(d => d.category === category);
      rows.forEach((d, i) => {
        const cls = d.year === "1994" ? "year-1994" : "year-2026";
        html += `<tr>
          <td>${i === 0 ? category : ''}</td>
          <td class="${cls}">${d.year}</td>
          <td class="${cls}">${d.results.toFixed(1)}%</td>
          <td>${d.lower.toFixed(1)}%</td>
          <td>${d.upper.toFixed(1)}%</td>
          <td>${d.se.toFixed(3)}</td>
        </tr>`;
      });
    });

    html += '</tbody></table>';
    document.getElementById('ci-table-container').innerHTML = html;
  });
})();
</script>

<h4 id="ticket-prices-by-year-with-sources">Ticket Prices by Year with Sources</h4>

<table>
  <thead>
    <tr>
      <th>Ticket Type</th>
      <th>Year</th>
      <th>Price</th>
      <th>Source</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>World Cup Final (Face Value)</td>
      <td>1994</td>
      <td>$359</td>
      <td><a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a></td>
    </tr>
    <tr>
      <td>World Cup Final (Face Value)</td>
      <td>2026</td>
      <td>$4,185</td>
      <td><a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a></td>
    </tr>
    <tr>
      <td>Group Stage (Face Value)</td>
      <td>1994</td>
      <td>$50</td>
      <td><a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a></td>
    </tr>
    <tr>
      <td>Group Stage (Face Value)</td>
      <td>2026</td>
      <td>$201</td>
      <td><a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a></td>
    </tr>
    <tr>
      <td>Round of 16 (Face Value)</td>
      <td>1994</td>
      <td>$70</td>
      <td><a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a></td>
    </tr>
    <tr>
      <td>Round of 16 (Face Value)</td>
      <td>2026</td>
      <td>$284</td>
      <td><a href="https://theworldcupguide.com/how-much-are-world-cup-tickets-since-1994/">The World Cup Guide</a></td>
    </tr>
    <tr>
      <td>USMNT Group Stage (Resale) Cheapest Tickets</td>
      <td>1994</td>
      <td>$100</td>
      <td>I estimated that the resale value was 2x face value based on data published at <a href="https://nomequieroirdeaqui.com/en/world-cup-ticket-price-history-1994-2026/">No Me Quiero Ir De Aquí</a></td>
    </tr>
    <tr>
      <td>USMNT Group Stage (Resale) Cheapest Tickets</td>
      <td>2026</td>
      <td>$1,007</td>
      <td><a href="https://bsky.app/profile/cyrusobrien.bsky.social/post/3mlw624vig22k">My exploration of StubHub on May 15</a></td>
    </tr>
    <tr>
      <td>MX Group Stage - Best Seats (Resale)</td>
      <td>1994</td>
      <td>$300</td>
      <td><a href="https://www.facebook.com/groups/2603635568/posts/10164370694035569/">USA ‘94 Facebook group</a></td>
    </tr>
    <tr>
      <td>MX Group Stage - Best Seats (Resale)</td>
      <td>2026</td>
      <td>$5,817</td>
      <td><a href="https://bsky.app/profile/cyrusobrien.bsky.social/post/3mlwchm74hs2k">My exploration of StubHub on May 15</a></td>
    </tr>
    <tr>
      <td>World Cup Final (Resale)</td>
      <td>1994</td>
      <td>$400</td>
      <td><a href="https://www.facebook.com/groups/2603635568/posts/10164370694035569/">USA ‘94 Facebook group</a></td>
    </tr>
    <tr>
      <td>World Cup Final (Resale)</td>
      <td>2026</td>
      <td>$8,467</td>
      <td><a href="https://bsky.app/profile/cyrusobrien.bsky.social/post/3mlw66ihjis2k">My exploration of StubHub on May 15</a></td>
    </tr>
  </tbody>
</table>

<p><em>The visualization above is built with the javascript library Observable. There are no trackers.</em></p>]]></content><author><name>Cyrus O&apos;Brien</name></author><category term="Inequality" /><category term="New Analyses" /><category term="inequality" /><category term="visualization" /><category term="affordability" /><category term="new analyses" /><summary type="html"><![CDATA[Most Americans can’t afford to attend the World Cup]]></summary></entry><entry><title type="html">Announcing In Our Economy</title><link href="https://inoureconomy.org/blog/2026/05/10/announcing-in-our-economy/" rel="alternate" type="text/html" title="Announcing In Our Economy" /><published>2026-05-10T00:00:00+00:00</published><updated>2026-05-10T00:00:00+00:00</updated><id>https://inoureconomy.org/blog/2026/05/10/announcing-in-our-economy</id><content type="html" xml:base="https://inoureconomy.org/blog/2026/05/10/announcing-in-our-economy/"><![CDATA[<h2 id="a-5-month-experiment-leading-up-to-the-release-of-the-survey-of-consumer-finances">A 5-month experiment leading up to the release of the Survey of Consumer Finances</h2>

<p>In October 2026 - just weeks before the midterm elections - the Federal Reserve should release the Survey of Consumer Finances (SCF). This survey is the gold standard source for data about economic inequality in the U.S. and the source of almost every stat you’ve ever heard about the racial wealth gap or about how much wealth the 1% or 0.1% have compared to the rest us.</p>

<p>When the data is released, experts expect the Fed’s summary to highlight increases in wealth. Americans, it will say, are wealthier because the stock market and housing market have gone bananas.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> Experts also expect the Fed’s report to bury data about the affordability crisis.</p>

<p><strong>This blog will be the place to find new analyses of the Survey of Consumer Finances that explore the affordability crisis and wealth inequality</strong>.<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup> I’ll be rapidly analyzing the raw survey data and posting updated findings like these, which are drawn from my analyses of the 2022 SCF:</p>

<ul>
  <li>The majority (52%) of working families could not afford food and housing if their income were interrupted for just one month.</li>
  <li>77% of Black families could not cover food and housing if their income were interrupted for just one month.</li>
  <li>One in four renting households has less than $200 in cash on hand, and 42% have less than $1,000.</li>
  <li>I’ll also highlight how much less money working families have in their checking and savings accounts now compared to 2022 - expect a number in the big billions.</li>
</ul>

<p>So stay tuned!</p>

<h3 id="in-the-meantime">In the meantime…</h3>

<p>As a build-up to late October, I’ll be publishing new analyses that are newsworthy. The first are a series about World Cup ticket prices and how they compare to the last time the U.S. hosted the event in 1994. <strong>If you are a reporter and have a question about affordability, reach out and I may be able to leverage publicly available data to answer it for you.</strong></p>

<h3 id="the-motivating-idea">The motivating idea</h3>

<p><strong>When elites talk about “the economy,” they’re not talking about you.</strong></p>

<p>When the President says we have “<a href="https://www.euronews.com/business/2026/02/24/greatest-economy-ever-the-numbers-behind-trumps-boasting">the greatest economy ever</a>” or the Treasury Secretary says 2026 is poised to be a “<a href="https://www.facebook.com/watch/?v=2613868452325685">feast and the banquet</a>” for the American economy, they’re not talking about you. They’re not even talking about people.</p>

<p>When elites talk about “the economy,” they’re talking about money. More than that, they’re talking about money making money.</p>

<p>How does money make money? By extracting it from you.</p>

<p>Who gets rich? The people who are already rich.</p>

<p>Who gets squeezed? The ~98% of us who are or have worked for pay; the 99% of us who enter the market as consumers; the 99% of us who pay subscription fees; the 99% of us whose data Facebook sells for massive profits.</p>

<h3 id="its-about-people">It’s about <em>people</em></h3>

<p><strong>In <em>Our</em> Economy</strong> is a blog about the economy as <strong>people</strong> experience it. It’s about families working to survive — struggling to survive — in an economy that’s rigged.</p>

<p>Its goal is to put <strong>people</strong> - not money - at the center of debates about how the economy is and isn’t working.</p>

<p>What sets this blog apart from many other great projects about inequality is that most posts contain <strong>new analyses of complex survey data</strong>. I’ll be repurposing economic datasets that the elite use to talk about their economy to gain insights into the economy as working people experience it. Countless sources can tell you that World Cup ticket prices are insanely expensive — this is the place where you can find hard data showing how many American families can’t afford them.</p>

<h3 id="here-are-the-kind-of-pivots-this-blog-will-be-making">Here are the kind of pivots this blog will be making</h3>

<div class="tc-gallery" id="tc-gallery"></div>

<style>
.tc-gallery {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
  margin: 2rem 0;
}

@media (max-width: 500px) {
  .tc-gallery { grid-template-columns: 1fr; }
}

.tc-gallery-item {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  align-items: flex-start;
}

.tc-gallery-item > .tc-slide {
  width: 100%;
}

.tc-slide {
  aspect-ratio: 1;
  background: linear-gradient(160deg, #141820 0%, #0a0d12 100%);
  border-radius: 12px;
  box-shadow: 0 8px 28px rgba(0,0,0,0.22);
  position: relative;
  overflow: hidden;
  container-type: inline-size;
}

.tc-card-inner {
  position: absolute;
  inset: 0;
  padding: 8.5%;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.tc-accent-bar {
  position: absolute;
  top: 5.8%;
  left: 8.5%;
  width: 6.6%;
  height: 0.55%;
  min-height: 3px;
  background: #5b6af0;
  border-radius: 3px;
}

.tc-slide .tc-label-them {
  font-family: 'Inter', -apple-system, sans-serif;
  font-size: max(0.65rem, 1.35cqw);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #5a6380;
  margin-bottom: 0.4em;
}

.tc-slide .tc-quote {
  font-family: 'Lora', Georgia, serif;
  font-style: italic;
  font-size: max(1.05rem, 3.75cqw);
  line-height: 1.4;
  color: #e8eaf6;
  margin-bottom: 0.75em;
}

.tc-divider {
  width: 7%;
  height: 3px;
  background: #f06050;
  border-radius: 2px;
  margin-bottom: 0.75em;
  flex-shrink: 0;
}

.tc-slide .tc-label-us {
  font-family: 'Inter', -apple-system, sans-serif;
  font-size: max(0.65rem, 1.35cqw);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #f06050;
  margin-bottom: 0.4em;
}

.tc-slide .tc-response {
  font-family: 'Inter', -apple-system, sans-serif;
  font-size: max(0.95rem, 3.1cqw);
  line-height: 1.45;
  color: #e8eaf6;
}

.tc-card-footer {
  position: absolute;
  bottom: 5.5%;
  left: 8.5%;
  right: 8.5%;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}

.tc-slide .tc-card-url {
  font-family: 'Inter', -apple-system, sans-serif;
  font-size: max(0.6rem, 1.05cqw);
  color: rgba(90,99,128,0.85);
}

.tc-slide .tc-card-logo {
  font-family: 'Lora', Georgia, serif;
  font-size: max(0.6rem, 1.05cqw);
  color: rgba(232,234,246,0.5);
}

.tc-slide .tc-card-logo em { font-style: italic; }

.tc-dl-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.18rem 0.5rem;
  border-radius: 999px;
  border: 1px solid var(--color-border, #e5e7ef);
  background: transparent;
  cursor: pointer;
  font-family: 'Inter', -apple-system, sans-serif;
  font-size: 0.62rem;
  font-weight: 600;
  color: var(--color-text-muted, #6b7280);
  transition: border-color 150ms, color 150ms;
  align-self: flex-start;
  width: fit-content;
}

.tc-dl-btn:hover:not(:disabled) { border-color: #5b6af0; color: #5b6af0; }
.tc-dl-btn:disabled { opacity: 0.5; cursor: default; }
</style>

<script>
(function () {
  // Every string literal uses backtick template literals so Jekyll's
  // smart-quote processor never sees ' or “ as JS string delimiters.
  const SLIDES = [
    {
      economy: `Commodity prices are strong`,
      ours: `We're paying more at the pump, the grocery store, and the utility bill.`
    },
    {
      economy: `Increased productivity is driving corporate profits`,
      ours: `We're doing more work, often for the same pay, and someone else is keeping the difference.`
    },
    {
      economy: `Conditions are favorable to capital formation`,
      ours: `The rich have cut taxes on investment income and reduced regulations so that they can accumulate even more money.`
    },
    {
      economy: `”When oil prices go up, we make a lot of money”`,
      ours: `We pay at the pump while fossil fuel companies profit.`
    }
  ];

  const DL_ICON = `<svg width=”13” height=”13” viewBox=”0 0 24 24” fill=”none” stroke=”currentColor” stroke-width=”2.5”><path d=”M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4”/><polyline points=”7 10 12 15 17 10”/><line x1=”12” y1=”15” x2=”12” y2=”3”/></svg>`;

  function el(tag, cls, color) {
    const n = document.createElement(tag);
    if (cls) n.className = cls;
    if (color) n.style.color = color;
    return n;
  }

  function buildGallery() {
    const gallery = document.getElementById(`tc-gallery`);

    SLIDES.forEach((s, i) => {
      const item = el(`div`, `tc-gallery-item`);
      const slide = el(`div`, `tc-slide`);
      const inner = el(`div`, `tc-card-inner`);

      inner.appendChild(el(`div`, `tc-accent-bar`));

      const labelThem = el(`div`, `tc-label-them`, `#5a6380`);
      labelThem.textContent = `In their economy`;
      inner.appendChild(labelThem);

      const quote = el(`div`, `tc-quote`, `#e8eaf6`);
      quote.textContent = s.economy;
      inner.appendChild(quote);

      inner.appendChild(el(`div`, `tc-divider`));

      const labelUs = el(`div`, `tc-label-us`, `#f06050`);
      labelUs.appendChild(document.createTextNode(`In `));
      const ourEm = document.createElement(`em`);
      ourEm.textContent = `our`;
      labelUs.appendChild(ourEm);
      labelUs.appendChild(document.createTextNode(` economy,`));
      inner.appendChild(labelUs);

      const response = el(`div`, `tc-response`, `#e8eaf6`);
      response.textContent = s.ours;
      inner.appendChild(response);

      const footer = el(`div`, `tc-card-footer`);

      const urlSpan = el(`span`, `tc-card-url`, `rgba(90,99,128,0.85)`);
      urlSpan.textContent = `inoureconomy.org`;
      footer.appendChild(urlSpan);

      const logoSpan = el(`span`, `tc-card-logo`, `rgba(232,234,246,0.5)`);
      logoSpan.appendChild(document.createTextNode(`In `));
      const logoEm = document.createElement(`em`);
      logoEm.textContent = `Our`;
      logoSpan.appendChild(logoEm);
      logoSpan.appendChild(document.createTextNode(` Economy`));
      footer.appendChild(logoSpan);

      inner.appendChild(footer);
      slide.appendChild(inner);

      const btn = el(`button`, `tc-dl-btn`);
      btn.style.width = `fit-content`;
      btn.style.alignSelf = `flex-start`;
      btn.textContent = `Download`;
      btn.addEventListener(`click`, () => downloadSlide(s, i + 1, btn));

      item.appendChild(slide);
      item.appendChild(btn);
      gallery.appendChild(item);
    });
  }

  // ── Canvas image generation ─────────────────────────────────────────────────

  function wrapText(ctx, text, x, y, maxW, lh) {
    const words = text.split(` `);
    let line = ``, cy = y;
    for (let n = 0; n < words.length; n++) {
      const test = line + words[n] + ` `;
      if (ctx.measureText(test).width > maxW && line !== ``) {
        ctx.fillText(line.trimEnd(), x, cy);
        line = words[n] + ` `;
        cy += lh;
      } else {
        line = test;
      }
    }
    ctx.fillText(line.trimEnd(), x, cy);
    return cy + lh;
  }

  function countLines(ctx, text, maxW) {
    const words = text.split(` `);
    let line = ``, count = 0;
    for (let n = 0; n < words.length; n++) {
      const test = line + words[n] + ` `;
      if (ctx.measureText(test).width > maxW && line !== ``) { count++; line = words[n] + ` `; }
      else { line = test; }
    }
    return count + 1;
  }

  function drawLogo(ctx, rightX, y, sz) {
    ctx.font = `600 ${sz}px Lora, Georgia, serif`;
    const wIn = ctx.measureText(`In `).width;
    const wEconomy = ctx.measureText(`Economy`).width;
    ctx.font = `italic 600 ${sz}px Lora, Georgia, serif`;
    const wOur = ctx.measureText(`Our `).width;
    let x = rightX - wIn - wOur - wEconomy;
    ctx.fillStyle = `rgba(232,234,246,0.55)`;
    ctx.font = `600 ${sz}px Lora, Georgia, serif`;
    ctx.fillText(`In `, x, y); x += wIn;
    ctx.font = `italic 600 ${sz}px Lora, Georgia, serif`;
    ctx.fillText(`Our `, x, y); x += wOur;
    ctx.font = `600 ${sz}px Lora, Georgia, serif`;
    ctx.fillText(`Economy`, x, y);
  }

  function generateImage(slide) {
    const SZ = 1080, PAD = 90, W = SZ - 2 * PAD;
    const canvas = document.createElement(`canvas`);
    canvas.width = SZ; canvas.height = SZ;
    const ctx = canvas.getContext(`2d`);
    ctx.textBaseline = `top`;

    const bg = ctx.createLinearGradient(0, 0, 0, SZ);
    bg.addColorStop(0, `#141820`); bg.addColorStop(1, `#0a0d12`);
    ctx.fillStyle = bg; ctx.fillRect(0, 0, SZ, SZ);

    const LBL = 28, LBLH = LBL * 1.3;
    const QSZ = 54, QLH = QSZ * 1.45;
    const RSZ = 48, RLH = RSZ * 1.45;
    const G1 = 44, G2 = 64, G3 = 52, G4 = 44;

    ctx.font = `italic ${QSZ}px Lora, Georgia, serif`;
    const qLines = countLines(ctx, slide.economy, W);
    ctx.font = `${RSZ}px Inter, -apple-system, sans-serif`;
    const rLines = countLines(ctx, slide.ours, W);

    const contentH = LBLH + G1 + qLines * QLH + G2 + 5 + G3 + LBLH + G4 + rLines * RLH;
    let y = 100 + Math.max(0, (880 - contentH) / 2);

    ctx.fillStyle = `#5b6af0`; ctx.fillRect(PAD, 62, 72, 6);

    ctx.font = `600 ${LBL}px Inter, -apple-system, sans-serif`;
    ctx.fillStyle = `#5a6380`;
    ctx.fillText(`IN THEIR ECONOMY`, PAD, y);
    y += LBLH + G1;

    ctx.font = `italic ${QSZ}px Lora, Georgia, serif`;
    ctx.fillStyle = `#e8eaf6`;
    y = wrapText(ctx, slide.economy, PAD, y, W, QLH) + G2;

    ctx.fillStyle = `#f06050`; ctx.fillRect(PAD, y, 80, 5);
    y += 5 + G3;

    ctx.font = `600 ${LBL}px Inter, -apple-system, sans-serif`;
    ctx.fillStyle = `#f06050`;
    ctx.fillText(`IN OUR ECONOMY,`, PAD, y);
    y += LBLH + G4;

    ctx.font = `${RSZ}px Inter, -apple-system, sans-serif`;
    ctx.fillStyle = `#e8eaf6`;
    wrapText(ctx, slide.ours, PAD, y, W, RLH);

    const BOT_Y = SZ - 56;
    ctx.font = `400 23px Inter, -apple-system, sans-serif`;
    ctx.fillStyle = `#5a6380`;
    ctx.fillText(`inoureconomy.org`, PAD, BOT_Y);
    drawLogo(ctx, SZ - PAD, BOT_Y, 28);

    return canvas;
  }

  function downloadSlide(slide, n, btn) {
    const orig = btn.innerHTML;
    btn.textContent = `Generating…`;
    btn.disabled = true;
    document.fonts.ready.then(() => {
      generateImage(slide).toBlob(blob => {
        const url = URL.createObjectURL(blob);
        const a = document.createElement(`a`);
        a.href = url; a.download = `inoureconomy-${n}.png`;
        document.body.appendChild(a); a.click();
        document.body.removeChild(a); URL.revokeObjectURL(url);
        btn.innerHTML = orig; btn.disabled = false;
      }, `image/png`);
    });
  }

  buildGallery();
})();
</script>

<p>You can download and share these. If you have suggestions about new/better/different permuations, send an email and I’ll create them for you.</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Elites will say that increased housing prices are a good thing - but are they? Sky-high home prices have priced a generation (and counting) of Americans out of homeownership. And even people whose homes are more valuable on paper can’t use them to buy groceries, gasoline, or health insurance. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>I am exploring other outlets as well. Reach out if you are interested in publishing or broadcasting the findings to your networks. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Cyrus O&apos;Brien</name></author><category term="Commentary" /><category term="inequality" /><category term="wealth" /><summary type="html"><![CDATA[A 5-month experiment leading up to the release of the Survey of Consumer Finances]]></summary></entry><entry><title type="html">The poorest billionaire is far too rich</title><link href="https://inoureconomy.org/blog/2025/05/12/scale-of-wealth/" rel="alternate" type="text/html" title="The poorest billionaire is far too rich" /><published>2025-05-12T00:00:00+00:00</published><updated>2025-05-12T00:00:00+00:00</updated><id>https://inoureconomy.org/blog/2025/05/12/scale-of-wealth</id><content type="html" xml:base="https://inoureconomy.org/blog/2025/05/12/scale-of-wealth/"><![CDATA[<p>Here’s an interactive visualization that allows you to put the wealth of the poorest in perspective. Enter a number that is meaningful to you – maybe how much you hope to save for retirement, how much money you’d have if you were insanely wealthy, anything you like. Then you’ll see how this compares to the wealth of the poorest billionaire. As a final step, you see how your idea of wealth compares to the world’s richest man, Elon Musk.</p>

<div class="viz-container">
  <iframe id="wealth-bubbles-iframe" src="/assets/html/wealth-bubbles.html" title="Interactive wealth comparison: your savings vs. billionaire wealth" scrolling="no" loading="lazy" style="width: 100%; border: none; min-height: 520px; border-radius: 8px; overflow: hidden;">
  </iframe>
</div>

<script>
  window.addEventListener('message', function(e) {
    if (e.data && e.data.iframeHeight) {
      var el = document.getElementById('wealth-bubbles-iframe');
      if (el) el.style.height = Math.max(520, e.data.iframeHeight) + 'px';
    }
  });
</script>

<h2 id="what-the-circles-show">What the circles show</h2>

<p>The area of each circle is proportional to dollar amount. Your circle is the reference — everything else is scaled relative to it. At typical retirement savings ($500k–$2M), the billion-dollar circle is already enormous. Add Elon Musk’s $428 billion, and your circle becomes a speck that needs a label and an arrow just to be visible.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<p>That’s not a flaw in the visualization. That’s the point.</p>

<p>Actually the visualization – like so many other things – is skewed in the billionaires’ favor, as I set your value to be a minimum of one pixel. Unless you chose a very large value or are working on a very large screen, your bubble is likely inflated – to the size of one pixel. (The visualization can be a bit glitchy with values less than $500k)</p>

<h2 id="why-does-this-matter">Why does this matter?</h2>

<p>Wealth at the scale of billions or hundreds of billions of dollars is <em>qualitatively</em> different from mere affluence. A person with $500,000 in savings has security. A person with $5 million has enough to live a affluent lifestyle indefinitely. A person with $500 million has the ability to change the lives of everyone in their city. Billionaires have the power to totally reshape our world and our society – and that’s exactly what they’ve done.</p>

<p><em>The visualization above is built with plain SVG and JavaScript — no tracking, no data collection, no cookies.</em></p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Elon Musk’s net worth was reported in <em><a href="https://www.forbes.com/forbes-400/">Forbes 400: The Definitive Ranking of America’s Richest People 2025</a></em>. An archived version is available at the <a href="https://web.archive.org/web/20260201000000*/https://www.forbes.com/forbes-400/">Way Back Machine</a>. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Cyrus O&apos;Brien</name></author><category term="Inequality" /><category term="Interactives" /><category term="wealth" /><category term="inequality" /><category term="billionaires" /><category term="visualization" /><category term="interactive" /><category term="games" /><category term="new analyses" /><summary type="html"><![CDATA[Here’s an interactive visualization that allows you to put the wealth of the poorest in perspective. Enter a number that is meaningful to you – maybe how much you hope to save for retirement, how much money you’d have if you were insanely wealthy, anything you like. Then you’ll see how this compares to the wealth of the poorest billionaire. As a final step, you see how your idea of wealth compares to the world’s richest man, Elon Musk.]]></summary></entry><entry><title type="html">A billionaire has more money than you can imagine</title><link href="https://inoureconomy.org/blog/2025/05/11/million-on-a-number-line/" rel="alternate" type="text/html" title="A billionaire has more money than you can imagine" /><published>2025-05-11T00:00:00+00:00</published><updated>2025-05-11T00:00:00+00:00</updated><id>https://inoureconomy.org/blog/2025/05/11/million-on-a-number-line</id><content type="html" xml:base="https://inoureconomy.org/blog/2025/05/11/million-on-a-number-line/"><![CDATA[<p>When people talk about billionaires, it’s hard to fathom just how much money we’re talking about. I created this game to help people understand just how much money a billion dollars is.</p>

<p>Below is a number line, with $0 at the left-hand side and $1 billion on the right-hand side. Your task is to click where you think <strong>$1 million</strong> is. If you find this interesting, please share with your friends or on social media.</p>

<div class="viz-container">
  <iframe id="billion-iframe" src="/assets/html/how-much-is-1-billion.html" scrolling="no" title="Where is 1 million on a number line from 0 to 1 billion?" style="width: 100%; border: none; min-height: 220px;">
  </iframe>
</div>

<script>
  window.addEventListener('message', function(e) {
    if (e.data && e.data.iframeHeight) {
      var el = document.getElementById('billion-iframe');
      if (el) el.style.height = Math.max(220, e.data.iframeHeight) + 'px';
    }
  });
</script>

<p>This game works because most people think $1 million is a lot of money – because it is a lot of money. But $1 billion is just <em>so much more,</em> literally 1,000 times more.</p>

<p>If you spent $1,000 every single day, it would take you nearly three years to spend a million dollars. To spend a billion at the same rate, you would need almost <em>three thousand years</em>. If you started spending $1,000 a day at the time when Athens first developed into a city-state, you’d only now be running low on funds. If writing the Illiad and the Odyssey had made Homer a billionaire (and he’d lived for almost 3,000 years), he could have spent <em>$1,000 every day</em> and still be living high life.</p>

<p>The billionaire class controls wealth and power at scales that are difficult to imagine. Understanding the scale is the first step toward thinking clearly about it.</p>]]></content><author><name>Cyrus O&apos;Brien</name></author><category term="Interactives" /><category term="Inequality" /><category term="Billionaries" /><category term="billionaries" /><category term="inequality" /><category term="wealth" /><category term="interactives" /><category term="games" /><summary type="html"><![CDATA[When people talk about billionaires, it’s hard to fathom just how much money we’re talking about. I created this game to help people understand just how much money a billion dollars is.]]></summary></entry><entry><title type="html">Why Trump Doesn’t Think about Your Finances</title><link href="https://inoureconomy.org/blog/2025/05/11/trump-doesnt-think/" rel="alternate" type="text/html" title="Why Trump Doesn’t Think about Your Finances" /><published>2025-05-11T00:00:00+00:00</published><updated>2025-05-11T00:00:00+00:00</updated><id>https://inoureconomy.org/blog/2025/05/11/trump-doesnt-think</id><content type="html" xml:base="https://inoureconomy.org/blog/2025/05/11/trump-doesnt-think/"><![CDATA[<p>Donald Trump just <a href="https://www.pbs.org/newshour/politics/watch-i-dont-think-about-americans-financial-situation-when-negotiating-with-iran-trump-says">told the world</a>, “I don’t think about Americans’ financial situation.”</p>

<p>Okay, the whole quote gives context that he doesn’t think about our financial situations when he’s negotiating an end to the war he started with Iran. It’s understandable that gas prices shouldn’t dictate war and peace, but I wish he <em>had</em> thought about all the obvious ramifications before he elected to kill thousands of people - and spend at least <a href="https://www.npr.org/2026/05/13/g-s1-121812/up-first-newsletter-war-iran-marty-makary-student-education-scorecard-trump-pardons">$29 billion</a> of your dollars doing so.</p>

<p>But Trump doesn’t think about your financial situation because he doesn’t have to. With a wealth of <a href="https://www.forbes.com/sites/danalexander/article/the-definitive-networth-of-donaldtrump/">$6.5 billion</a>, he’s living in a different economy from you and me.</p>

<p>In the interactive below, enter how much money you have, or you wish to have, or really any number you feel like. Then see how it compares to Trump’s wealth.</p>

<div class="viz-container">
  <iframe id="wealth-bubbles-iframe" src="/assets/html/wealth-bubbles-trump.html" title="Interactive wealth comparison: your savings vs. Trump's" scrolling="no" loading="lazy" style="width: 100%; border: none; min-height: 520px; border-radius: 8px; overflow: hidden;">
  </iframe>
</div>

<script>
  window.addEventListener('message', function(e) {
    if (e.data && e.data.iframeHeight) {
      var el = document.getElementById('wealth-bubbles-iframe');
      if (el) el.style.height = Math.max(520, e.data.iframeHeight) + 'px';
    }
  });
</script>

<h2 id="what-the-circles-show">What the circles show</h2>

<p>The area of each circle is proportional to dollar amount. Your circle is the reference — everything else is scaled relative to it. Trump and the other members of the billionaire class have wealth that is beyond the scale of your imagination. Imagine spending $6,500 a day, every day. Donald Trump could do that and not run out of money until April 11, 4764. That’s not a typo. That’s why he doesn’t think about your finances.</p>

<p><em>The visualization above is built with plain SVG and JavaScript — no tracking, no data collection, no cookies.</em></p>]]></content><author><name>Cyrus O&apos;Brien</name></author><category term="Inequality" /><category term="Interactives" /><category term="wealth" /><category term="inequality" /><category term="billionaires" /><category term="visualization" /><category term="interactive" /><category term="games" /><summary type="html"><![CDATA[Donald Trump just told the world, “I don’t think about Americans’ financial situation.”]]></summary></entry></feed>