---
format: typebulb/v1
name: Points of View
---

**code.tsx**

```tsx
import React, { useState, useEffect } from "react";
import { createRoot } from "react-dom/client";

interface Perspective {
  discipline: string;
  icon: string;
  alignment: "agrees" | "partially_agrees" | "neutral" | "partially_disagrees" | "disagrees";
  tags: string[];
  summary: string;
  explanation: string;
  keyArguments: string[];
  notableVoices: string;
  blindSpots: string;
  weight: number; // 0-10, how central this claim is to their discipline
}

interface Insight {
  claim: string;
  perspectives: Perspective[];
}
const alignmentConfig: Record<string, { label: string; bg: string; text: string; border: string }> = {
  agrees: { label: "Agrees", bg: "var(--stance-agrees-bg)", text: "var(--stance-agrees-text)", border: "var(--stance-agrees-border)" },
  partially_agrees: { label: "Partially Agrees", bg: "var(--stance-partial-bg)", text: "var(--stance-partial-text)", border: "var(--stance-partial-border)" },
  neutral: { label: "Neutral", bg: "var(--stance-neutral-bg)", text: "var(--stance-neutral-text)", border: "var(--stance-neutral-border)" },
  partially_disagrees: { label: "Partially Disagrees", bg: "var(--stance-disagrees-bg)", text: "var(--stance-disagrees-text)", border: "var(--stance-disagrees-border)" },
  disagrees: { label: "Disagrees", bg: "var(--stance-disagrees-bg)", text: "var(--stance-disagrees-text)", border: "var(--stance-disagrees-border)" },
};

function AlignmentBadge({ alignment, tags }: { alignment: string; tags: string[] }) {
  const config = alignmentConfig[alignment] || alignmentConfig.neutral;
  return (
    <div className="badge-row">
      <span
        className="stance-badge"
        style={{ background: config.bg, color: config.text, borderColor: config.border }}
      >
        {config.label}
      </span>
      {tags.map((tag, i) => (
        <span key={i} className="stance-badge tag-badge">{tag}</span>
      ))}
    </div>
  );
}

function PerspectiveCard({ p, index }: { p: Perspective; index: number }) {
  const [expanded, setExpanded] = useState(false);

  return (
    <div
      className={`perspective-card ${expanded ? "expanded" : ""}`}
      style={{ animationDelay: `${index * 0.08}s` }}
      onClick={() => setExpanded(!expanded)}
    >
      <div className="card-header">
        <div className="card-title-row">
          <span className="card-icon">{p.icon}</span>
          <h3 className="card-title">{p.discipline}</h3>
          <AlignmentBadge alignment={p.alignment} tags={p.tags} />
        </div>
        <p className="card-summary">
          {p.summary}{" "}
          <button
            type="button"
            className="summary-toggle"
            aria-expanded={expanded}
            onClick={(e) => {
              e.stopPropagation();
              setExpanded(!expanded);
            }}
          >
            {expanded ? "less" : "more"}
          </button>
        </p>
      </div>

      {expanded && (
        <div className="card-body">
          <div className="card-section">
            <h4>Analysis</h4>
            <p>{p.explanation}</p>
          </div>

          <div className="card-section">
            <h4>Key Arguments</h4>
            <ul>
              {p.keyArguments.map((arg, i) => (
                <li key={i}>{arg}</li>
              ))}
            </ul>
          </div>

          <div className="card-section">
            <h4>Notable Voices</h4>
            <p className="notable-voices">{p.notableVoices}</p>
          </div>

          <div className="card-section">
            <h4>Blind Spots</h4>
            <p className="blind-spots">{p.blindSpots}</p>
          </div>
        </div>
      )}
    </div>
  );
}

function App() {
  const [insight, setInsight] = useState<Insight | null>(tb.insight<Insight>() ?? null);
  const [loading, setLoading] = useState(false);
  const [dataText, setDataText] = useState(tb.data(0));

  async function runInference() {
    setLoading(true);
    try {
      const result = await tb.infer<Insight>();
      if (result) {
        setDataText(tb.data(0));
        setInsight(result);
      }
    } finally {
      setLoading(false);
    }
  }

  if (!insight) {
    return (
      <div className="empty-state">
        <div className="empty-icon">🔺</div>
        <h1>Points of View</h1>
        <p className="subtitle">One statement. Every take.</p>
        <p className="empty-description">
          Enter a claim about <strong>society, technology, nature, or philosophy</strong> and see how the most relevant intellectual tribes would predictably react.
        </p>
        <div className="claim-preview">
          <span className="claim-label">Statement</span>
          <blockquote>{dataText}</blockquote>
        </div>
        <button className="run-btn" onClick={runInference} disabled={loading}>
          {loading ? (
            <span className="spinner-wrap"><span className="spinner" /> Splitting into takes...</span>
          ) : (
            "⚡ Split Through Points of View"
          )}
        </button>
      </div>
    );
  }

  // Sorting logic: High weight (wheelhouse) and strong alignment first
  const getSortScore = (p: Perspective) => {
    const alignmentWeight = (p.alignment === "agrees" || p.alignment === "disagrees") ? 2 : 1;
    return p.weight * alignmentWeight;
  };

  const sortPerspectives = (perspectives: Perspective[]) => {
    return [...perspectives].sort((a, b) => getSortScore(b) - getSortScore(a));
  };

  const agreeSide = sortPerspectives(
    insight.perspectives.filter(p => p.alignment === "agrees" || p.alignment === "partially_agrees")
  );
  const disagreeSide = sortPerspectives(
    insight.perspectives.filter(p => p.alignment === "disagrees" || p.alignment === "partially_disagrees")
  );
  const neutralSide = sortPerspectives(insight.perspectives.filter(p => p.alignment === "neutral"));
  return (
    <div className="app-container">
      <header className="app-header">
        <div className="header-top">
          <h1>🔺 Points of View</h1>
          <button className="rerun-btn" onClick={runInference} disabled={loading}>
            {loading ? <span className="spinner" /> : "↻"} Analyze new statement
          </button>
        </div>
        <div className="claim-box">
          <span className="claim-label">Statement</span>
          <blockquote>{insight.claim}</blockquote>
        </div>
      </header>

      <div className="debate-layout">
        <div className="debate-side">
          <h2 className="side-title side-agrees">Agrees / Aligned</h2>
          <div className="perspectives-column">
            {agreeSide.map((p, i) => (
              <PerspectiveCard key={'a'+i} p={p} index={i} />
            ))}
          </div>
        </div>
        <div className="debate-side">
          <h2 className="side-title side-disagrees">Disagrees / Opposed</h2>
          <div className="perspectives-column">
            {disagreeSide.map((p, i) => (
              <PerspectiveCard key={'d'+i} p={p} index={i} />
            ))}
          </div>
        </div>
      </div>

      {neutralSide.length > 0 && (
        <div className="neutral-section">
          <h2 className="side-title side-neutral">Neutral / Orthogonal</h2>
          <div className="perspectives-grid">
            {neutralSide.map((p, i) => (
              <PerspectiveCard key={'n'+i} p={p} index={i} />
            ))}
          </div>
        </div>
      )}
    </div>
  );
}

const container = document.getElementById("root");
const root = createRoot(container!);
root.render(<App />);

```
**styles.css**

```css
:root {
  --bg: #f8f9fb;
  --surface: #ffffff;
  --surface-hover: #f0f2f5;
  --text: #1a1a2e;
  --text-secondary: #5a5a7a;
  --border: #e2e4ea;
  --accent: #6366f1;
  --accent-light: #eef2ff;
  --radius: 12px;

  --stance-agrees-bg: #dcfce7;
  --stance-agrees-text: #166534;
  --stance-agrees-border: #86efac;
  --stance-partial-bg: #fef9c3;
  --stance-partial-text: #854d0e;
  --stance-partial-border: #fde047;
  --stance-disagrees-bg: #fee2e2;
  --stance-disagrees-text: #991b1b;
  --stance-disagrees-border: #fca5a5;
  --stance-neutral-bg: #f3f4f6;
  --stance-neutral-text: #374151;
  --stance-neutral-border: #d1d5db;
  --stance-reframes-bg: #ede9fe;
  --stance-reframes-text: #5b21b6;
  --stance-reframes-border: #c4b5fd;
}

html[data-theme="dark"] {
  --bg: #111111;
  --surface: #1b1b1b;
  --surface-hover: #252525;
  --text: #ebebeb;
  --text-secondary: #a3a3a3;
  --border: #323232;
  --accent: #818cf8;
  --accent-light: #27272a;

  --stance-agrees-bg: #052e16;
  --stance-agrees-text: #86efac;
  --stance-agrees-border: #166534;
  --stance-partial-bg: #422006;
  --stance-partial-text: #fde047;
  --stance-partial-border: #854d0e;
  --stance-disagrees-bg: #450a0a;
  --stance-disagrees-text: #fca5a5;
  --stance-disagrees-border: #991b1b;
  --stance-neutral-bg: #1f2937;
  --stance-neutral-text: #e5e7eb;
  --stance-neutral-border: #374151;
  --stance-reframes-bg: #1e1048;
  --stance-reframes-text: #c4b5fd;
  --stance-reframes-border: #5b21b6;
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  background: var(--bg);
  color: var(--text);
  line-height: 1.6;
  padding: 16px;
  max-width: 960px;
  margin: 0 auto;
}

/* Empty state */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 80vh;
  text-align: center;
  gap: 16px;
  padding: 24px;
}

.empty-icon {
  font-size: 64px;
  margin-bottom: 8px;
}

.empty-state h1 {
  font-size: 2.4rem;
  font-weight: 700;
  background: linear-gradient(135deg, var(--accent), #a855f7);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.subtitle {
  font-size: 1.1rem;
  font-weight: 500;
  color: var(--text-secondary);
  margin-top: -8px;
  letter-spacing: 0.02em;
}

.empty-description {
  color: var(--text-secondary);
  max-width: 480px;
  font-size: 1rem;
}

.claim-preview {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 20px;
  max-width: 520px;
  width: 100%;
}

.claim-label {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--accent);
}

blockquote {
  font-style: italic;
  margin-top: 6px;
  color: var(--text);
  font-size: 1.05rem;
  border-left: 3px solid var(--accent);
  padding-left: 12px;
}

.run-btn {
  background: linear-gradient(135deg, var(--accent), #a855f7);
  color: white;
  border: none;
  padding: 14px 32px;
  border-radius: var(--radius);
  font-size: 1rem;
  font-weight: 600;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s;
  margin-top: 8px;
}

.run-btn:hover:not(:disabled) {
  transform: translateY(-1px);
  box-shadow: 0 8px 24px rgba(99, 102, 241, 0.35);
}

.run-btn:disabled {
  opacity: 0.7;
  cursor: not-allowed;
}

.spinner-wrap {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.spinner {
  display: inline-block;
  width: 16px;
  height: 16px;
  border: 2px solid rgba(255,255,255,0.3);
  border-top-color: white;
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* App */
.app-container {
  padding-bottom: 40px;
}

.app-header {
  margin-bottom: 24px;
}

.header-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
  flex-wrap: wrap;
  gap: 12px;
}

.header-top h1 {
  font-size: 1.4rem;
  font-weight: 700;
}

.rerun-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--surface);
  border: 1px solid var(--border);
  padding: 8px 16px;
  border-radius: 8px;
  font-size: 0.85rem;
  font-weight: 600;
  cursor: pointer;
  color: var(--text);
  transition: background 0.15s;
}

.rerun-btn:hover:not(:disabled) {
  background: var(--surface-hover);
}

.claim-box {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 8px 18px 14px;
  margin-bottom: 10px;
}
/* Debate Layout */
.debate-layout {
  display: flex;
  gap: 20px;
  margin-bottom: 32px;
}
.debate-side {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.perspectives-column {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.side-title {
  font-size: 0.9rem;
  font-weight: 700;
  margin-bottom: 16px;
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  border-bottom: 2px solid var(--border);
  padding-bottom: 8px;
}

.side-agrees {
  color: var(--stance-agrees-text);
  border-bottom-color: var(--stance-agrees-border);
}

.side-disagrees {
  color: var(--stance-disagrees-text);
  border-bottom-color: var(--stance-disagrees-border);
}

.side-neutral {
  color: var(--text-secondary);
  border-bottom-color: var(--stance-neutral-border);
}

.neutral-section {
  margin-top: 32px;
}
/* Grid */
.perspectives-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 400px), 1fr));
  gap: 14px;
}

/* Cards */
.perspective-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 10px 16px;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s, border-color 0.15s;
  animation: fadeUp 0.4s ease both;
}

@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.perspective-card:hover {
  border-color: var(--accent);
  box-shadow: 0 4px 16px rgba(99, 102, 241, 0.1);
}

.card-header {
  margin-bottom: 4px;
}

.card-title-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}

.badge-row {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.card-icon {
  font-size: 1.5rem;
}

.card-title {
  font-size: 1rem;
  font-weight: 700;
  flex: 1;
}

.stance-badge {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 3px 10px;
  border-radius: 20px;
  border: 1px solid;
  white-space: nowrap;
}

.tag-badge {
  background: var(--stance-reframes-bg);
  color: var(--stance-reframes-text);
  border-color: var(--stance-reframes-border);
}

.card-summary {
  color: var(--text-secondary);
  font-size: 0.9rem;
}

.summary-toggle {
  display: inline;
  background: none;
  border: 0;
  padding: 0;
  margin-left: 4px;
  color: var(--accent);
  font: inherit;
  line-height: inherit;
  text-decoration: underline;
  text-underline-offset: 0.08em;
  opacity: 0.72;
  cursor: pointer;
}

.summary-toggle:hover {
  opacity: 1;
}

.card-body {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
  animation: fadeUp 0.25s ease;
}

.card-section {
  margin-bottom: 14px;
}

.card-section:last-child {
  margin-bottom: 0;
}

.card-section h4 {
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--accent);
  margin-bottom: 6px;
}

.card-section p {
  font-size: 0.9rem;
  color: var(--text);
}

.card-section ul {
  padding-left: 18px;
  font-size: 0.88rem;
}

.card-section li {
  margin-bottom: 4px;
  color: var(--text);
}

.notable-voices {
  font-style: italic;
  color: var(--text-secondary) !important;
}

.blind-spots {
  color: var(--text-secondary) !important;
  font-size: 0.88rem !important;
}

@media (max-width: 600px) {
  body {
    padding: 10px;
  }
  .empty-state h1 {
    font-size: 1.4rem;
  }
  .debate-layout {
    flex-direction: column;
  }
  .perspectives-grid {
    grid-template-columns: 1fr;
  }
}
```
**index.html**

```html
<div id="root"></div>

```
**data.txt**

```txt
Minimum wage is good policy.
```
**infer.md**

```md
# Points of View Inference Instructions

You are an expert in social theory, psychology, and cultural studies. You are given a **cultural statement, a behavioral claim, or a social dynamic**. 

Your task is to deconstruct this statement through multiple distinct intellectual lenses, producing the most "canonical" or expected response the most relevant disciplines or stakeholders would provide.

## Perspective Selection:
- **Dynamic Selection**: Choose 5 to 8 distinct intellectual tribes, academic disciplines, or stakeholder groups specifically relevant to the provided statement.
- **Relevance**: Only include perspectives that would naturally have a strong "wheelhouse" take on the issue. For example, use "AI Ethicists" for technology questions, or "Theological" for moral ones.
- **Diversity**: Ensure a balanced mix of ideological, scientific, and philosophical viewpoints to show the full spectrum of the debate.

## Content Requirements:
- **alignment**: Must be exactly one of: `"agrees"`, `"partially_agrees"`, `"neutral"`, `"partially_disagrees"`, `"disagrees"`. 
  - "Agrees" and "Disagrees" are for bottom-line functional leanings. 
  - Even if a discipline uses a "Reframe," it usually lands on one side of the debate functionally.
- **tags**: An array of labels like `["reframes"]` or `["critiques"]`. Use `"reframes"` if the discipline rejects the premise's framing but takes a side anyway.
- **weight**: A number from 1 to 10. 
  - 10 = This topic is the discipline's central "wheelhouse" (e.g., gender claims for EvoPsych or Feminism).
  - 1 = The discipline has a take, but it's a peripheral or niche interest for them.
- **discipline**: Use self-identified names (e.g., "Radical Feminist" not "Man-hater").
- **explanation**: 3-5 sentences of dense, jargon-rich academic prose.
- **summary**: 1 sharp sentence.

## Logic:
If a Feminist perspective thinks the claim is a patriarchal myth, their `alignment` is likely `"disagrees"` or `"partially_disagrees"`, even if they `reframe` the reason.
If Evolutionary Psychology thinks the claim is a biological fundamental, their `alignment` is `"agrees"` and their `weight` is `10`.

## Formatting:
Output valid JSON matching the TypeScript interfaces in code.tsx.
```
**insight.json**

```json
{
  "claim": "Minimum wage is good policy.",
  "perspectives": [
    {
      "discipline": "Neoclassical Economics",
      "icon": "📉",
      "alignment": "disagrees",
      "tags": ["critiques"],
      "weight": 10,
      "summary": "Market-clearing prices are distorted by artificial floors, resulting in suboptimal allocation of human capital and involuntary unemployment.",
      "explanation": "In a competitive equilibrium framework, labor is a factor of production subject to the law of demand; thus, an exogenous price floor above the market-clearing wage necessitates a contraction in labor demand. This 'disemployment effect' typically impacts the most marginal workers—those with the lowest marginal product of labor—leading to deadweight loss and the substitution of capital for labor through automation. Consequently, the policy is seen as a blunt instrument that inadvertently harms the very low-skilled cohorts it intends to protect by erecting barriers to entry-level employment.",
      "keyArguments": [
        "Incentivizes labor-to-capital substitution (automation)",
        "Reduces the quantity of labor demanded, leading to structural unemployment",
        "Distorts price signals necessary for efficient human capital allocation"
      ],
      "notableVoices": "Milton Friedman, Gregory Mankiw, Thomas Sowell",
      "blindSpots": "Often ignores the reality of monopsonistic competition where employers possess disproportionate market power to suppress wages below productivity."
    },
    {
      "discipline": "Institutional/Labor Economics",
      "icon": "⚖️",
      "alignment": "agrees",
      "tags": [],
      "weight": 10,
      "summary": "Wage floors address the inherent power asymmetry in labor markets, fostering macroeconomic stability through increased aggregate demand.",
      "explanation": "Modern empirical research, particularly in the vein of 'New Economics of the Minimum Wage,' posits that labor markets frequently deviate from perfect competition, exhibiting monopsonistic traits where employers set wages below the marginal revenue product. By internalizing the external costs of poverty and reducing costly employee turnover, a mandated minimum wage can actually enhance labor market efficiency rather than diminish it. Furthermore, the 'marginal propensity to consume' is significantly higher among low-wage earners, meaning wage increases translate directly into robust aggregate demand, creating a virtuous cycle of economic activity.",
      "keyArguments": [
        "Corrects for monopsony power and bargaining asymmetries",
        "Reduces search and friction costs associated with high labor turnover",
        "Stimulates the economy through increased consumer spending at the bottom of the pyramid"
      ],
      "notableVoices": "David Card, Alan Krueger, Arindrajit Dube",
      "blindSpots": "May underestimate the idiosyncratic 'scale effects' that disproportionately burden small businesses compared to large corporations."
    },
    {
      "discipline": "Libertarianism",
      "icon": "🗽",
      "alignment": "disagrees",
      "tags": ["critiques"],
      "weight": 9,
      "summary": "The state lacks the moral and epistemic authority to override voluntary contracts between consenting adults, violating the non-aggression principle.",
      "explanation": "From a deontological perspective, the minimum wage is an act of state coercion that forcibly prevents individuals from selling their labor at a price they deem acceptable. This intervention is viewed as a violation of property rights and the freedom of association, as it criminalizes mutually beneficial, low-wage employment opportunities. Furthermore, libertarians argue that this policy 'kicks away the bottom rung of the economic ladder,' denying young or unskilled workers the ability to gain the foundational experience necessary for upward mobility in a free society.",
      "keyArguments": [
        "Interferes with the individual's right to self-ownership and contract",
        "Acts as a barrier to entry for the most vulnerable and inexperienced workers",
        "State-mandated prices ignore the subjective value and local conditions of diverse labor markets"
      ],
      "notableVoices": "Murray Rothbard, Friedrich Hayek, Ron Paul",
      "blindSpots": "Fails to account for the 'coercion of necessity' that characterizes the labor market for those without safety nets or alternative resources."
    },
    {
      "discipline": "Marxist / Conflict Theory",
      "icon": "🚩",
      "alignment": "partially_agrees",
      "tags": ["reframes"],
      "weight": 8,
      "summary": "While providing temporary relief from immiseration, minimum wage is a reformist mechanism that leaves the core extraction of surplus value intact.",
      "explanation": "In this framework, the minimum wage is interpreted as a 'concession' by the capitalist state to maintain social reproduction and prevent the revolutionary collapse of the system. It is a tool of 'organized irresponsibility' that manages the conflict between the bourgeoisie and the proletariat without addressing the fundamental exploitation inherent in the wage-labor relationship. While Marxists support higher wages to improve the material conditions of the working class, they argue that true liberation requires the abolition of the wage system entirely, rather than its legislative tinkering.",
      "keyArguments": [
        "Necessary for the reproduction of labor power under capitalism",
        "Functions as a 'safety valve' to prevent radicalized class struggle",
        "Obscures the fundamental theft of surplus value through price-based reforms"
      ],
      "notableVoices": "Richard Wolff, David Harvey, Rosa Luxemburg",
      "blindSpots": "Can be overly dismissive of the tangible, life-saving impacts that incremental policy gains have on the immediate survival of the poor."
    },
    {
      "discipline": "Social Justice / Moral Philosophy",
      "icon": "🕯️",
      "alignment": "agrees",
      "tags": [],
      "weight": 8,
      "summary": "Economic structures must be subordinate to the moral requirement that every worker receives a wage sufficient for a dignified existence.",
      "explanation": "This lens prioritizes the 'dignity of the human person' over abstract metrics of market efficiency, arguing that any economy that produces 'working poor' is fundamentally failing its ethical purpose. Drawing on concepts of distributive justice, it asserts that a 'living wage' is a basic human right, as labor is not a mere commodity but an essential component of human flourishing. Therefore, the minimum wage is a necessary moral guardrail to ensure that the fruits of social cooperation are shared in a way that prevents systemic indigence and social exclusion.",
      "keyArguments": [
        "The 'Living Wage' as a prerequisite for full participation in a democratic society",
        "Prevents the exploitation of vulnerable populations by capital-heavy interests",
        "Subordinates market logic to the teleological end of human well-being"
      ],
      "notableVoices": "John Rawls, Martha Nussbaum, Pope Francis",
      "blindSpots": "May lack a rigorous account of the unintended technical consequences, such as potential job losses that could diminish the dignity of the unemployed."
    },
    {
      "discipline": "Behavioral Economics",
      "icon": "🧠",
      "alignment": "partially_agrees",
      "tags": ["reframes"],
      "weight": 7,
      "summary": "Higher wage floors can trigger 'efficiency wage' effects, where increased reciprocity and reduced cognitive load improve firm-level productivity.",
      "explanation": "Behavioralists argue that labor is not a standard commodity because humans respond to 'fairness' signals through reciprocity and effort. The 'gift-exchange' model suggests that when workers are paid a wage they perceive as fair—anchored by a state-mandated minimum—they increase their productivity, reduce 'shirking,' and stay with the firm longer. Furthermore, by alleviating the 'cognitive tax' of extreme poverty, a higher minimum wage can improve the executive function and decision-making capabilities of workers, leading to higher overall organizational efficiency that offsets the increased labor cost.",
      "keyArguments": [
        "Efficiency wages reduce the need for costly supervision and monitoring",
        "Reduces 'poverty-induced cognitive load,' enhancing worker reliability",
        "Fairness norms act as a psychological motivator that standard neoclassical models ignore"
      ],
      "notableVoices": "George Akerlof, Janet Yellen, Sendhil Mullainathan",
      "blindSpots": "The 'efficiency wage' effect may reach a point of diminishing returns where wage costs exceed any possible gain in worker productivity."
    }
  ]
}
```
**config.json**

```json
{
  "description": "One statement. Every take. See what the most relevant intellectual tribes, disciplines, and stakeholders would predictably say about any given claim.",
  "inference": {
    "title": "Points of View",
    "dataTitle": "Statement",
    "submitTitle": "Get Points of View"
  },
  "dependencies": {
    "react": "^19.2.4",
    "react-dom": "^19.2.4"
  }
}
```