1import{r as b,j as e}from"./vendor-react-CUONVlCP.js";import{g as o}from"./index-CTGPOZ4R.js";import"./vendor-date-DzfCe5iw.js";import"./vendor-radix-BAOE030p.js";import"./vendor-icons-CQnQVqwt.js";const f=[{id:"what-this-is",label:"What this site is"},{id:"what-covered",label:"What VoteLog covers"},{id:"discovery",label:"How bills are discovered"},{id:"labeling",label:"The four labels"},{id:"rules",label:"Classification rules"},{id:"ihra",label:"The IHRA antisemitism call"},{id:"lean-score",label:"Member lean score"},{id:"persuadability-v2",label:"Persuadability score (multi-signal)"},{id:"pac-money",label:"PAC money trail"},{id:"bundling-network",label:"AIPAC bundling network"},{id:"race-money",label:"Senate primary money pages"},{id:"news-video",label:"News, statements, video"},{id:"sources",label:"Sources & sync cadence"},{id:"not-tracked",label:"What we don't track"},{id:"corrections",label:"Corrections"}];function A(){return b.useEffect(()=>{const t=()=>{const s=window.location.hash.slice(1);s&&requestAnimationFrame(()=>{const n=document.getElementById(s);n&&n.scrollIntoView({behavior:"smooth",block:"start"})})};return t(),window.addEventListener("hashchange",t),()=>window.removeEventListener("hashchange",t)},[]),e.jsxs("div",{className:"container mx-auto px-4 lg:px-8 py-10 lg:py-14 max-w-6xl",children:[e.jsxs("header",{className:"mb-12 max-w-3xl",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-500 dark:text-slate-400 mb-2",children:"How we classify bills, votes, members & money"}),e.jsx("h1",{className:"text-4xl sm:text-5xl font-serif font-bold tracking-tight mb-4",children:"Methodology & editorial framework"}),e.jsxs("p",{className:"text-lg text-foreground/80 leading-relaxed",children:["This site is a public accountability tool. The framing â that there"," ",e.jsx("em",{children:"is"})," a moral question worth tracking â is editorial. The data underneath is primary-sourced from government APIs and linked back so you can verify every claim. This page documents every editorial and technical decision behind what you see on the rest of the site. Every change to these classifications is logged publicly in the"," ",e.jsx(o,{href:"/changelog",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"changelog"}),", bills removed as irrelevant are listed on the"," ",e.jsx(o,{href:"/excluded",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"exclusions page"}),", and the campaign-finance methodology is documented separately on the"," ",e.jsx(o,{href:"/campaign-finance",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"campaign-finance methodology page"}),"."]})]}),e.jsxs("div",{className:"mb-12 max-w-3xl rounded-xl border bg-slate-50 dark:bg-slate-950/40 p-5",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-600 dark:text-slate-400 mb-3",children:"Dashboard insight pages"}),e.jsx("p",{className:"text-sm text-foreground/80 leading-relaxed mb-3",children:"Each dashboard chart has its own dedicated explainer with full methodology, caveats, and the unfiltered ranking:"}),e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{children:[e.jsx(o,{href:"/insights/shape-of-support",className:"font-semibold underline decoration-dotted hover:decoration-solid",children:"Shape of support â"})," ",e.jsx("span",{className:"text-muted-foreground",children:"Why pro-Israel support is broad and gradual while pro-Palestine support is a cliff â and what that means strategically."})]}),e.jsxs("li",{children:[e.jsx(o,{href:"/insights/persuadability",className:"font-semibold underline decoration-dotted hover:decoration-solid",children:"Persuadability â coverage-adjusted velocity â"})," ",e.jsx("span",{className:"text-muted-foreground",children:"The velocity metric (with a 2023 dataset floor so long-tenured members aren't unfairly diluted), the four tiers, the defection signal, and how the persuadable-pro-Israel ranking is computed."})]}),e.jsxs("li",{children:[e.jsx(o,{href:"/insights/america-first",className:"font-semibold underline decoration-dotted hover:decoration-solid",children:"America First metric â"})," ",e.jsx("span",{className:"text-muted-foreground",children:"Why Republicans like Massie, Roy, and Boebert vote Nay on Israel-aid bills â and how to define a cohort that captures non-interventionists without excluding the purest of them."})]})]})]}),e.jsx("nav",{"aria-label":"Methodology sections",className:"lg:hidden sticky top-0 z-20 -mx-4 mt-2 mb-6 border-y border-border bg-background/90 backdrop-blur supports-[backdrop-filter]:bg-background/70",children:e.jsxs("div",{className:"flex items-center gap-2 overflow-x-auto overflow-y-hidden px-4 py-2.5 text-[13px] whitespace-nowrap",children:[e.jsx("span",{className:"shrink-0 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground mr-1",children:"On this page"}),f.map(t=>e.jsx("a",{href:`#${t.id}`,className:"shrink-0 rounded-full border border-border px-3 py-1 font-medium text-foreground
1/75 hover:text-foreground hover:border-slate-400 dark:hover:border-slate-500 transition-colors",children:t.label},t.id))]})}),e.jsxs("div",{className:"lg:grid lg:grid-cols-[220px_1fr] lg:gap-12",children:[e.jsx("aside",{className:"hidden lg:block",children:e.jsxs("nav",{"aria-label":"Methodology sections",className:"sticky top-6",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-slate-500 dark:text-slate-400 mb-3 pl-3",children:"On this page"}),e.jsx("ol",{className:"space-y-1 text-sm",children:f.map((t,s)=>e.jsx("li",{children:e.jsxs("a",{href:`#${t.id}`,className:"group flex items-baseline gap-2 px-3 py-1.5 rounded text-foreground/70 hover:text-foreground hover:bg-slate-100 dark:hover:bg-slate-900 transition-colors",children:[e.jsx("span",{className:"text-[10px] font-mono tabular-nums text-slate-400 dark:text-slate-600 group-hover:text-slate-600 dark:group-hover:text-slate-400",children:String(s+1).padStart(2,"0")}),e.jsx("span",{children:t.label})]})},t.id))})]})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs(i,{n:1,id:"what-this-is",title:"What this site is â and isn't",children:[e.jsxs("p",{children:["VoteLog is a public-accountability dashboard for the United States Congress on a single, narrow set of policy questions: ",e.jsx("em",{children:"What has each member of the House and Senate done, voted, sponsored, said, and been paid for in connection with Israel and Palestine?"})]}),e.jsxs("p",{children:["We are not a neutral aggregator. The decision to ",e.jsx("em",{children:"have"}),' this site at all reflects an editorial judgment that this is a moral question worth tracking publicly, and that voters deserve a one-click answer to "where does my representative actually stand." Wherever an editorial call is made â most visibly in how we label bills â we say so explicitly on this page and link to the underlying primary sources so anyone can disagree on the merits.']}),e.jsx(a,{tone:"slate",label:"Two principles we hold to",children:e.jsxs("ul",{className:"list-disc pl-5 space-y-1 mt-2",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Primary sources only."})," No commentary, no advocacy summaries. Every datum comes from Congress.gov, the FEC, the member's own press feed, or major news APIs â and is linked back so you can verify it."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Discovery, not just outcomes."})," A bill that died in committee still tells you who chose to put their name on it. We track introductions and cosponsorships as first-class signals, not just floor votes."]})]})})]}),e.jsx(i,{n:2,id:"what-covered",title:"What VoteLog covers",children:e.jsx("p",{children:"VoteLog tracks United States congressional legislation on Israel and Palestine. The core of the database is legislation that directly addresses Israel, Palestine, or the conflict: aid and arms, sanctions, diplomacy and recognition, humanitarian policy, and commemorative measures. The database also deliberately includes three connected categories, because they function as Israel/Palestine policy in practice: Iran legislation aimed at Iranâs nuclear program or external threat posture, measures targeting the International Criminal Court in response to its Israel-related cases, and antisemitism legislation that incorporates Israel-related speech enforcement. The classification rules below explain how each is labeled."})}),e.jsxs(i,{n:3,id:"discovery",title:"How bills are discovered",children:[e.jsx("p",{children:"Discovery starts wide and automated; the published list is reviewed. On every sync pass we paginate through the Congress.gov v3 API searching for legislation whose title, summary, or full text contains any of the following tokens (case-insensitive, word-boundary anchored):"}),e.jsx(y,{words:["Israel","Israeli","Palestine","Palestinian","Gaza","Hamas","Hezbollah","West Bank","East Jerusalem","IDF","AIPAC","UNRWA","Zionist","Knesset","Iron Dome","Antisemitism","IHRA","October 7","Two-state","Jewish state","Mossad","Nakba","Intifada","Arab-Israeli","Middle East peace"]}),e.jsxs("p",{children:["For each match we fetch the full bill record (text + actions + sponsor + every cosponsor), deduplicate against bills we've already stored by their canonical ",e.jsx("code",{className:"rounded bg-slate-100 dar
1k:bg-slate-900 px-1.5 py-0.5 text-[12px]",children:"{congress}-{type}-{number}"})," ","ID (e.g. ",e.jsx("code",{className:"rounded bg-slate-100 dark:bg-slate-900 px-1.5 py-0.5 text-[12px]",children:"119-hr-1234"}),"), and then individually review the bill before it appears on the site. Keyword search produces false positives (a âsettlementâ search returns Native American land claims and legal settlements; âintifadaâ matches unrelated commemorative resolutions; âIron Domeâ sometimes appears in defense-budget boilerplate), so raw matches are not the product; the reviewed database is."]}),e.jsxs("p",{children:["A bill is excluded when it has no identifiable Israel/Palestine content: keyword artifacts, country-agnostic measures that merely touch adjacent subjects such as hostages or refugees, and general legislation with no provision relating to the conflict. Bills removed as irrelevant are listed on a"," ",e.jsx(o,{href:"/excluded",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"public exclusions page"})," ","rather than silently deleted, and every reclassification is recorded in a"," ",e.jsx(o,{href:"/changelog",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"public changelog"})," ","with a date and reason."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Coverage window:"})," every Congress from the 108th (2003â04) through the current one â twelve full Congresses of legislation. Everything older than the 108th predates most sitting members entirely and is excluded."]})]}),e.jsxs(i,{n:4,id:"labeling",title:"The four labels",children:[e.jsx("span",{id:"labels",className:"block scroll-mt-24","aria-hidden":"true"}),e.jsx("p",{children:"Every bill carries exactly one label. The label describes the direction of the bill itself, measured against the policy agendas of the two sides of the conflict. It is not a moral judgment and not a claim about any legislatorâs motives."}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-3 my-4",children:[e.jsx(h,{color:"rose",title:"Pro-Israel",examples:["Resolutions condemning Hamas","Expanding aid or weapons transfers to the IDF","Sanctioning ICC or UN officials investigating Israel","Defunding UNRWA","Codifying the IHRA definition of antisemitism (see §6)"]}),e.jsx(h,{color:"emerald",title:"Pro-Palestine",examples:["Conditioning military aid on human-rights compliance","Restricting offensive-weapons transfers","Recognizing Palestinian statehood","Investigating settler violence in the West Bank"]}),e.jsx(h,{color:"slate",title:"Neutral",examples:["Procedural / technical reauthorizations","Non-substantive commemorations","Most hate-crime, community-security & remembrance bills"]}),e.jsx(h,{color:"amber",title:"Bundled",examples:["NDAAs with Israeli Cooperative Programs missile-defense line items","Appropriations acts containing Israel/Palestine provisions","Omnibus packages â never labeled Pro-Israel or Pro-Palestine"]})]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Pro-Israel."})," The bill advances positions of the Israeli government or the institutional pro-Israel lobby: aid and arms transfers, sanctions on Israelâs adversaries, diplomatic backing, anti-boycott enforcement, or Israel-related speech enforcement."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Pro-Palestine."})," The bill advances Palestinian rights, recognition, protection, or accountability for violations against Palestinians: conditioning or halting arms, recognition of Palestinian statehood or peoplehood, humanitarian protection, or accountability for the pro-Israel lobbyâs influence operations."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Neutral."})," The bill touches the subject area but does not advance either sideâs agenda. Most hate-crime, community-security, and remembrance legislation lands here."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Bundled."})," A multi-title vehicle (an NDAA, an appropriations act, an omnibus) that contains identifiable Israel/Palestine provisions inside a much larger package. Where identified, a note on the bill page names the relevant provision (for example, Israeli Cooperative Programs missile defense line items)."]}),e.jsxs("p",{children:["The label reflects the bill's ",e.jsx("em",{children:"policy effect"}),`, not the sponsor's party, not the title, and not how the sponsor's press release frames it. A bill titled "Promoting Peace in the Middle East" that in o
1perative text bans US officials from speaking with Hamas would land Pro-Israel, because that's what the bill actually does.`]}),e.jsxs("p",{children:["Where a bill is genuinely mixed â e.g. an aid package that",e.jsx("em",{children:"both"})," increases offensive weapons transfers and creates new human-rights reporting requirements â we label it by the larger dollar/operative effect and explain in the bill detail page."]})]}),e.jsxs(i,{n:5,id:"rules",title:"Classification rules",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"The text decides."})," Labels are assigned from what a billâs operative text does, supplemented where necessary by the documented record of the institutions it funds or empowers. Bills with identical or companion text always carry the same label across chambers and congresses."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Antisemitism legislation."})," Antisemitism bills are neutral by default, because opposing antisemitism is not an Israel policy position. A bill is classified pro-Israel when any of the following apply: it creates, funds, or elevates the Special Envoy to Monitor and Combat Antisemitism, an office with a continuous bipartisan record of treating boycotts of Israel abroad as antisemitism under the IHRA definition; it mandates or requires consideration of the IHRA working definition, whose contemporary examples cover Israel-related speech; or its text treats connection to or support for Israel as the protected characteristic, or builds enforcement machinery aimed at Israel-related speech. Bills whose text explicitly rejects the conflation of antisemitism with criticism of Israel are neutral. Pure hate-crime, synagogue-security, Holocaust-education, and remembrance bills are neutral. (The full editorial reasoning behind the IHRA call is in"," ",e.jsx("a",{href:"#ihra",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"§6 below"}),".)"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Commemorative and victim resolutions."})," ","Resolutions honoring a stateâs officials, national figures, symbols, or anniversaries carry that sideâs label, because honoring a head of state is inherently a statement about the state. Resolutions honoring private individuals or communities are neutral unless the text itself does national-question work: clauses affirming support for the State of Israel flip a resolution pro-Israel; clauses recognizing Palestinian peoplehood, culture, or statehood, or addressing Israeli policy, flip a resolution pro-Palestine. Pure mourning and condemnation of violence stays neutral regardless of the community mourned."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Iran legislation."})," Iran bills targeting the nuclear program, the IRGC, sanctions architecture, or Iranâs proxy network are pro-Israel; their own findings routinely ground them in the threat to Israel, and they have been scored as priorities by pro-Israel lobby organizations for two decades. Iran measures about internal human rights, protest solidarity, or bilateral matters with no Israel nexus are neutral."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Omnibus vehicles."})," An omnibus appears in the database only when it contains an identifiable Israel/Palestine provision, and it is always labeled bundled, never pro-Israel or pro-Palestine, no matter how large the provision."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Lobby accountability."})," Legislation imposing transparency or registration requirements on pro-Israel lobbying organizations is classified pro-Palestine, reflecting its position in the conflictâs advocacy landscape."]})]}),e.jsxs(i,{n:6,id:"ihra",title:"The IHRA antisemitism call",tone:"amber",children:[e.jsx("p",{children:"This is the most consequential and most contested editorial call we make, so it gets its own section."}),e.jsxs("p",{children:[e.jsx("strong",{children:"The pattern:"})," bills with titles like the"," ",e.jsx("em",{children:"Antisemitism Awareness Act"})," (H.R. 6090, passed House May 2024), ",e.jsx("em",{children:"Countering Antisemitism Act"}),", and various"," ",e.jsx("em",{children:"Holocaust education"})," measures all share a common operative clause â they adopt or reference the"," ",e.jsx("strong",{children:"IHRA working definition of antisemitism"}),". That definition was codified into US enforcement policy via"," ",e.jsx("em",{children:"Executive Order 13899"})," (Dec 2019) and reaffirmed by the Biden administration's 2023 National Strategy to Counter Antisemitism."]}),e.jsxs("p",{children:["The IHRA definition itself is one sentence. The controversy lives in its ",e.jsx("strong",{children:"eleven contemporary examples"}),", seven of which concern criticism of the State of Israel. Those examples explicitly label the following as antisemitic:"]}),e.jsxs("ul",{className:"list-disc pl-6 space-y-1 my-3",children:[e.jsx("li",{children:'Calling the existence of the State of Israel "a racist endeavor"'}),e.jsx("li",{children:`Applying "double standards" to Israel that aren't applied to other democracies`}),e.jsx("li",{children:"Drawing comparisons between Israeli policy and that of the Nazis"}),e.jsx("li",{children:"Holding Jewish citizens collectively responsible for actions of the State of Israel"})]}),e.jsxs("p",{children:["Civil-liberties organizations including the ",e.jsx("strong",{children:"ACLU"})," and"," ",e.jsx("strong",{children:"FIRE"}),", and progressive Jewish groups including"," ",e.jsx("strong",{children:"J Street"})," (which is itself pro-Israel â see §9),"," ",e.jsx("strong",{children:"Jewish Voice for Peace"}),", and ",e.jsx("strong",{children:"T'ruah"}),", argue this conflates protected political speech against a foreign government with genuine bigotry, and warn it has been used to discipline students, fire faculty, and shut down Palestine solidarity organizing on campuses. ",e.jsx("strong",{children:"Kenneth Stern"}),", the lead drafter of the IHRA definition, has publicly opposed its codification into law for exactly this reason."]}),e.jsxs("p",{children:["We classify these bills ",e.jsx(d,{color:"rose",children:"Pro-Israel"})," ","because their ",e.jsx("em",{children:"policy effect"})," â regardless of how the title reads or how a sponsor describes their intent â is to legally insulate Israeli government conduct from a defined set of criticisms by treating those criticisms as discriminatory rather than political. That is a meaningful tilt of the regulatory and educational playing field, and members who vote for these bills are casting a vote that has Israel-policy consequences."]}),e.jsx("p",{children:`Reasonable people disagree with this call. We make it explicitly and consistently rather than burying these bills under a "civil rights" label that would obscure their actual policy effect. If you spot a bill where this rule is misapplied â for example, a general hate-crimes b
1ill that doesn't reference IHRA â the underlying bill text is one click away and we welcome corrections.`})]}),e.jsxs(i,{n:7,id:"lean-score",title:"Member lean score",children:[e.jsxs("p",{children:["Each member's overall lean is a single label â"," ",e.jsx(d,{color:"rose",children:"Pro-Israel"}),","," ",e.jsx(d,{color:"emerald",children:"Pro-Palestine"}),","," ",e.jsx("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-200 dark:bg-amber-900 text-amber-900 dark:text-amber-100 px-1.5 py-px uppercase tracking-wider text-[9px] font-semibold align-middle",children:"Mixed"}),", or"," ",e.jsx("span",{className:"inline-flex items-center gap-1 rounded-full bg-slate-200 dark:bg-slate-800 text-slate-700 dark:text-slate-300 px-1.5 py-px uppercase tracking-wider text-[9px] font-semibold align-middle",children:"No record"})," ","â derived from every classified bill the member has acted on in the coverage window."]}),e.jsxs("p",{children:["Each ",e.jsx("em",{children:"action"})," on a classified bill earns weighted points toward one side. We weight by depth of commitment â authoring the legislation is a stronger signal than signing on, which is a stronger signal than a single floor vote:"]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-4 my-4",children:[e.jsxs("div",{className:"rounded-xl bg-white dark:bg-slate-900 ring-1 ring-red-200 dark:ring-red-700/60 overflow-hidden",children:[e.jsxs("div",{className:"bg-red-50 dark:bg-red-950/40 px-4 py-2 text-[10px] font-semibold uppercase tracking-[0.12em] text-red-700 dark:text-red-300 border-b border-red-200 dark:border-red-900/60",children:["Action on a bill labeled ",e.jsx(d,{color:"rose",children:"Pro-Israel"})]}),e.jsx("table",{className:"w-full text-sm",children:e.jsxs("tbody",{className:"divide-y divide-slate-100 dark:divide-slate-800",children:[e.jsx(l,{action:"Primary sponsor (you wrote it)",weight:"+3 Pro-Israel"}),e.jsx(l,{action:"Authored a pro-Israel amendment",weight:"+3 Pro-Israel"}),e.jsx(l,{action:"Cosponsor (you signed on)",weight:"+2 Pro-Israel"}),e.jsx(l,{action:"Voted Yea on a floor vote",weight:"+1 Pro-Israel"}),e.jsx(l,{action:"Voted Nay on a floor vote",weight:"+1 Pro-Palestine"}),e.jsx(l,{action:"Missed the vote / no action",weight:"0"})]})})]}),e.jsxs("div",{className:"rounded-xl bg-white dark:bg-slate-900 ring-1 ring-emerald-200 dark:ring-emerald-900/60 overflow-hidden",children:[e.jsxs("div",{className:"bg-emerald-50 dark:bg-emerald-950/40 px-4 py-2 text-[10px] font-semibold uppercase tracking-[0.12em] text-emerald-800 dark:text-emerald-300 border-b border-emerald-200 dark:border-emerald-900/60",children:["Action on a bill labeled ",e.jsx(d,{color:"emerald",children:"Pro-Palestine"})]}),e.jsx("table",{className:"w-full text-sm",children:e.jsxs("tbody",{className:"divide-y divide-slate-100 dark:divide-slate-800",children:[e.jsx(l,{action:"Primary sponsor (you wrote it)",weight:"+3 Pro-Palestine"}),e.jsx(l,{action:"Authored a pro-Palestine amendment",weight:"+3 Pro-Palestine"}),e.jsx(l,{action:"Cosponsor (you signed on)",weight:"+2 Pro-Palestine"}),e.jsx(l,{action:"Voted Yea on a floor vote",weight:"+1 Pro-Palestine"}),e.jsx(l,{action:"Voted Nay on a floor vote",weight:"+1 Pro-Israel"}),e.jsx(l,{action:"Missed the vote / no action",weight:"0"})]})})]})]}),e.jsxs("p",{children:["Bills labeled ",e.jsx(x,{})," never move the score in either direction â members do not accumulate score from consensus gestures. ",e.jsx("strong",{children:"Bundled bills also contribute zero points"})," ","to member scores, because a vote on a thousand-page package is not a position on Israel/Palestine. Votes of Present and absences contribute nothing."]}),e.jsx(a,{tone:"slate",label:"Floor amendments score exactly like bills",children:e.jsxs("p",{className:"mt-2",children:["Israel/Palestine-related ",e.jsx("strong",{children:"amendments"})," offered to tracked bills are scored with the same weights."," ",e.jsx("strong",{children:"Authoring an amendment earns +3"})," toward the amendmentâs side â the same weight as primary-sponsoring a bill â even if leadership blocked it from ever receiving a floor vote, because offering an amendment is a public position taken in writing. Each recorded roll-call vote on an amendment earns ±1 directionally, with the same motion-to-table inversion described below. An amendmentâs lean is classified independently of the bill it amends: an amendment to strike Israel aid from a pro-Israel spending package is a pro-Palestine signal, and votes on it are scored against ",e.jsx("em",{children:"the amendmentâs"})," lean, not the billâs."]})}),e.jsx(a,{tone:"slate",label:"Votes are scored by effect, not by the word âYeaâ",children:e.jsxs("p",{className:"mt-2",children:["Not every roll call is a clean up-or-down vote on the bill itself. Congress frequently votes on ",e.jsx("em",{children:"procedural motions"})," ","whose meaning is inverted â a Yea on a"," ",e.jsx("strong",{children:"motion to table"})," a pro-Israel resolution is a vote ",e.jsx("em",{children:"against"})," that resolution, not for it. We classify each roll callâs question type and score the vote by its directional effect: a Yea that kills a pro-Israel measure counts as a pro-Palestine point, and vice versa. Raw vote-count displays (e.g. â217â198â on a bill page) stay literal; only the ",e.jsx("em",{children:"scoring"})," applies the directional interpretation."]})}),e.jsx("p",{children:"Many resolutions pass by unanimous consent or voice vote. These produce no recorded individual votes; bill pages mark them âpassed by unanimous consent (no recorded vote),â and only sponsorship and cosponsorship are scored. Scores measure recorded legislative behavior, not motive; a member who opposes a bill for reasons unrelated to the conflict still registers the vote they cast."}),e.jsxs("p",{children:["From those tallies we compute a single signed ",e.jsx("em",{children:"net score"}),":"]}
1),e.jsx("pre",{className:"rounded-lg bg-slate-100 dark:bg-slate-900 ring-1 ring-slate-200 dark:ring-slate-800 px-4 py-3 text-[12px] font-mono overflow-x-auto my-3",children:e.jsx("code",{children:"netScore = proIsraelPoints â proPalestinePoints"})}),e.jsxs("p",{children:["The net score is a raw integer, not a percentage. A representative who primary-sponsored 12 pro-Palestine bills (12 à 3 = 36 points) and cosponsored 4 more (+4) earns far more weight than one who voted Yea on a handful (+4). On the homepage leaderboards the score is shown as ",e.jsx("code",{className:"text-xs",children:"+N pts"}),' in the column color â red for pro-Israel, emerald for pro-Palestine â with a per-side breakdown of how many bills were sponsored, cosponsored, and voted on. We deliberately avoid normalizing to a percent because doing so would let a representative with 4-of-4 modest actions tie one with 30+ actions at "100%", erasing the difference between authoring legislation and casting a single supportive vote.']}),e.jsx("p",{children:"The Pro/Mixed/No-record labels on individual member profiles use the same weighted point totals. The label cutoffs are deliberately conservative:"}),e.jsxs("ul",{className:"list-disc pl-6 space-y-1 my-3",children:[e.jsxs("li",{children:[e.jsx("code",{className:"rounded bg-slate-100 dark:bg-slate-900 px-1.5 py-0.5 text-[12px]",children:"leanScore ⥠0.5"})," â ",e.jsx(d,{color:"rose",children:"Pro-Israel"})," (at least 75% of signaled actions back the pro-Israel side)"]}),e.jsxs("li",{children:[e.jsx("code",{className:"rounded bg-slate-100 dark:bg-slate-900 px-1.5 py-0.5 text-[12px]",children:"leanScore ⤠â0.5"})," â ",e.jsx(d,{color:"emerald",children:"Pro-Palestine"})]}),e.jsxs("li",{children:["Anywhere in between â ",e.jsx("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-200 dark:bg-amber-900 text-amber-900 dark:text-amber-100 px-1.5 py-px uppercase tracking-wider text-[9px] font-semibold align-middle",children:"Mixed"})," â the member has acted on both sides without a clear majority pattern"]}),e.jsx("li",{children:"Total signaled actions = 0 â no record yet, the member is shown as unclassified rather than artificially neutral so silence isn't confused for balance"})]}),e.jsxs(a,{tone:"slate",label:"Coverage window: why 2023?",children:[e.jsxs("p",{className:"mt-2",children:["Wherever a member's record is divided by âyears of coverageâ â on the persuadability ranking, the velocity scatter, the America First table, individual profile cards â the denominator is floored at ",e.jsx("strong",{children:"2023"}),", not at the year the member took office. The reason is honest about a real limitation: our bill discovery is keyword-based against Congress.gov, and that pipeline returns fewer than 20 Israel/Palestine-related bills per year before 2023 (compared to 80+/year after). That's a sync coverage limit, not a real absence of legislative activity. Dividing a 30-year senator's net score by 30 years would make Bernie Sanders or Mitch McConnell look less committed than a freshman, purely because we don't have data on their first 28 years. So we cap coverage at the first year our dataset is dense enough to be representative."]}),e.jsx("p",{className:"mt-2",children:"Practical effect: long-tenured members' velocity numbers are computed over the years they served since 2023, not over their full career (the tenure figure on member cards, by contrast, counts every year actually served in either chamber, with gaps in service excluded). As our backfill of older Congresses improves, this floor will move backward."})]})]}),e.jsxs(i,{n:8,id:"persuadability-v2",title:"Persuadability score",children:[e.jsxs(a,{tone:"slate",label:"What you see on a member's profile",children:[e.jsxs("p",{className:"mt-2",children:["Each pro-Israel memberâs profile shows a"," ",e.jsx("strong",{children:"persuadability score in [0, 1]"})," â the V2 multi-signal composite described below. Higher = more movable. The score is broken out into its five contributing signals (V/S/I/R/C) so you can see"," ",e.jsx("em",{children:"why"})," a member ranks where they do: a 0.40 persuadability driven mostly by a weak voting record (V) reads very differently from one driven by a borderline institutional alignment (I)."]}),e.jsxs("p",{className:"mt-2",children:["Pro-Palestine members are not ranked â persuadability measures movement ",e.jsx("em",{children:"off"})," the pro-Israel side, so members already on the pro-Palestine side are not persuasion targets by definition."]}),e.jsxs("p",{className:"mt-2 text-xs",children:[e.jsx("strong",{children:"Current signal coverage:"})," V (voting) is complete back to the 117th Congress. S (statements) draws from ~5,500 news articles, ~85 floor statements, and ~50 tweets â classification runs nightly and is additive. I (institutional alignment) merges money, endorsements, and sponsored trips: every hardline pro-Israel committee in the §9 registry plus per-member FEC backfill (split into super-PAC independent expenditures, direct PAC contributions, and individual donors), DMFI PAC endorsements, and AIPAC/AIEF Israel-tr
1ip attendance. R (representation) uses ACS Arab/MENA ancestry and Brandeis state Jewish-population estimates. C (caucus) covers the 5 most-aligned caucuses on each side. Where a signal is thin for a specific member, its"," ",e.jsx("em",{children:"confidence"})," shows it â and the eligibility floors below prevent thin signals from producing spurious rankings."]})]}),e.jsxs("p",{children:["The lean score in §7 captures ",e.jsx("em",{children:"where"})," a member stands. Persuadability asks a different question:"," ",e.jsx("em",{children:"how movable is the member from that position?"})," A senator with a +6 record from one cosponsorship and no statements is very different from a senator with +6 from twelve floor votes, two AIPAC speeches, $400k in pro-Israel PAC money, and a leadership chair â even though the lean score reads identical. The V2 composite below is the more nuanced version of velocity that powers the dashboard ranking."]}),e.jsxs("p",{children:['V2 replaces the old single-axis "tenure-adjusted velocity" with a five-component composite. Each component contributes a lean in',e.jsx("code",{className:"mx-1 rounded bg-slate-100 dark:bg-slate-900 px-1.5 py-0.5 text-[12px]",children:"[-1, +1]"}),"and a confidence in",e.jsx("code",{className:"mx-1 rounded bg-slate-100 dark:bg-slate-900 px-1.5 py-0.5 text-[12px]",children:"[0, 1]"}),":"]}),e.jsx("div",{className:"overflow-x-auto rounded-xl ring-1 ring-slate-200 dark:ring-slate-800 my-4",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-slate-50 dark:bg-slate-900 text-[10px] uppercase tracking-wider text-slate-600 dark:text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-3 py-2 text-left font-semibold",children:"Code"}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold",children:"Component"}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold",children:"Weight"}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold",children:"What it measures"})]})}),e.jsxs("tbody",{className:"divide-y divide-slate-100 dark:divide-slate-800",children:[e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-2 font-mono",children:"V"}),e.jsx("td",{className:"px-3 py-2",children:"Voting + sponsorship"}),e.jsx("td",{className:"px-3 py-2 text-right tabular-nums",children:"0.45"}),e.jsxs("td",{className:"px-3 py-2 text-foreground/80",children:["Share of weighted directional points on tracked I/P bills: ",e.jsx("code",{className:"text-xs",children:"(proIsrael â proPal) / total"}),". Revealed behavior â the closest thing we have to ground truth, so it carries the plurality of the weight. Tenure is absorbed by confidence."]})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-2 font-mono",children:"S"}),e.jsx("td",{className:"px-3 py-2",children:"Statements"}),e.jsx("td",{className:"px-3 py-2 text-right tabular-nums",children:"0.25"}),e.jsx("td",{className:"px-3 py-2 text-foreground/80",children:"Floor speeches, press releases, news quotes, tweets â classified by a regex tier with a Claude AI fallback for ambiguous cases. The strongest non-vote predictor of the voting record (r â 0.64)."})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-2 font-mono",children:"I"}),e.jsx("td",{className:"px-3 py-2",children:"Institutional alignment"}),e.jsx("td",{className:"px-3 py-2 text-right tabular-nums",children:"0.23"}),e.jsxs("td",{className:"px-3 py-2 text-foreground/80",children:["Organized backing, merged into one signal: super-PAC independent expenditures, direct PAC contributions, and individual donors (weighted ",e.jsx("strong",{children:"IE > PAC > individuals"}),"), plus DMFI endorsement and AIPAC/AIEF trip as pro-Israel evidence and a J Street endorsement as a pro-Palestinian counter. Money is magnitude-aware: a bigger total raises the signalâs confidence (r â 0.60, present for 93% of members)."]})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-2 font-mono",children:"R"}),e.jsx("td",{className:"px-3 py-2",children:"Representation"}),e.jsx("td",{className:"px-3 py-2 text-right tabular-nums",children:"0.03"}
1),e.jsx("td",{className:"px-3 py-2 text-foreground/80",children:"District demographics: Census Arab/MENA ancestry % and Brandeis-sourced state Jewish-population %. In our data it barely tracks the voting record (r â â0.18), so itâs kept only as minor context."})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-3 py-2 font-mono",children:"C"}),e.jsx("td",{className:"px-3 py-2",children:"Caucus"}),e.jsx("td",{className:"px-3 py-2 text-right tabular-nums",children:"0.04"}),e.jsxs("td",{className:"px-3 py-2 text-foreground/80",children:["Membership in aligned caucuses (Squad / Progressives / Justice on the pro-Palestine side; RJC / Bipartisan Israel Caucus on the pro-Israel side). Low coverage and near-constant in our data, so a small nudge. Leadership ",e.jsx("em",{children:"tier"})," is excluded here â it feeds lock-in below."]})]})]})]})}),e.jsx("p",{children:"The composite math:"}),e.jsx("pre",{className:"rounded-lg bg-slate-100 dark:bg-slate-900 ring-1 ring-slate-200 dark:ring-slate-800 px-4 py-3 text-[12px] font-mono overflow-x-auto my-3 leading-relaxed",children:e.jsx("code",{children:`raw_lean = Σ (wáµ¢ · leanáµ¢ · confáµ¢) / Σ (wáµ¢ · confáµ¢) 2lean = tanh(2 · raw_lean) # squashes outliers, preserves rank 3disagreement = sqrt( Σ wᵢ·confᵢ·(leanáµ¢ â raw_lean)² / Σ wᵢ·confáµ¢ ) 4confidence = log(1 + N) / log(1 + 30) · (1 â 0.5 · disagreement) # N capped at 30 5lock_in = (leadership à caucus à money_reliance) / 4.48 # structural, direction-independent 6persuadability = (1 â lock_in) · confidence · (1 â lean) # for lean > 0; 0 otherwise`})}),e.jsxs("p",{children:["Three design choices deserve their own line. First,"," ",e.jsx("em",{children:"multiplicative"})," lock-in: a member with leadership rank, an aligned caucus seat, AND heavy financial reliance is fundamentally less movable than the sum of those signals would suggest, because they reinforce each other. Lock-in is now purely ",e.jsx("em",{children:"structural"})," â endorsements and Israel trips used to live here, but theyâve moved into the visible institutional (I) lean so they arenât counted twice. Second, the ",e.jsx("em",{children:"disagreement penalty"}),": when a memberâs signals point in conflicting directions (money screams +1 but votes say â0.2), we trust the composite less, so confidence is discounted by the confidence-weighted spread of the component leans â one strong indicator canât paper over a conflicting one. Third, persuadability uses"," ",e.jsx("code",{className:"text-xs",children:"(1 â lean)"}),` on the pro-Israel side: a member whose record is borderline (lean â 0.2) is far more movable than a committed champion (lean â 1.0), so the score rewards distance from full commitment. Pro-Palestine members are excluded entirely â they're not "persuadable toward pro-Palestine"; they're already there. Persuadability is asymmetric by design, measuring movement`," ",e.jsx("em",{children:"off"})," the pro-Israel side."]}),e.jsxs(a,{tone:"slate",label:"Endorsements & sponsored trips: now in the institutional lean",children:[e.jsxs("p",{className:"mt-2",children:["Two relationship signals feed the visible Institutional (I) lean â not lock-in. A"," ",e.jsx("strong",{children:"Democratic Majority for Israel (DMFI) PAC endorsement"})," ","(from"," ",e.jsx("a",{className:"underline decoration-dotted underline-offset-2",href:"https://dmfipac.org/candidates/",target:"_blank",rel:"noreferrer",children:"dmfipac.org"}),")"," ","and a ",e.jsx("strong",{children:"sponsored congressional trip to Israel"})," on an AIPAC / American Israel Education Foundation delegation (attendee lists from"," ",e.jsx("a",{className:"underline decoration-dotted underline-offset-2",href:"https://jewishinsider.com/2023/08/hakeem-jeffries-house-democrats-israel-trip/",target:"_blank",rel:"noreferrer",children:"2023"})," ","and"," ",e.jsx("a",{className:"underline decoration-dotted underline-offset-2",href:"https://ca.cair.com/updates/ca-house-democrats-joined-aipac-funded-trip-to-israel/",target:"_blank",rel:"noreferrer",children:"2025"})," ","delegations) each count as pro-Israel ",e.jsx("em",{children:"evidence"}),", on the same log-dollar scale as the money strengths â a real but non-dominant push, so seven-figure super-PAC money still dominates the I lean. A"," ",e.jsx("strong",{children:"J Street end
6orsement is the counter-signal"})," ","(pro-peace, supports conditioning aid): it pulls the I lean pro-Palestinian. This is the change from the previous version, where these fed a hidden lock-in multiplier; surfacing them in the visible lean is more honest and avoids double-counting."]}),e.jsxs("p",{className:"mt-2",children:["Two deliberate non-choices: AIPAC's endorsement of"," ",e.jsx("em",{children:"sitting"})," members is ",e.jsx("strong",{children:"not"})," added separately â that backing already flows through the FEC money signal (AIPAC PAC + United Democracy Project), and counting it twice would inflate the signal artificially. And trip coverage is a lower bound â only delegations with a published, verifiable attendee list are included."]})]}),e.jsx(a,{tone:"slate",label:"Eligibility floors",children:e.jsxs("p",{className:"mt-2",children:["Members are scored only when"," ",e.jsx("code",{className:"text-xs",children:"confidence ⥠0.4"})," AND the member has a positive pro-Israel lean"," ",e.jsx("code",{className:"text-xs",children:"(lean > 0)"}),`. Below the confidence floor, or with no pro-Israel lean, we still return the score in the API but flag it ineligible â the UI shows "insufficient evidence" or "already pro-Palestinian" rather than dropping the member. We refuse to rank a freshman with two votes; we refuse to call a member with no pro-Israel lean "persuadable" because there's nothing to persuade them off of; and we refuse to call a pro-Palestinian member persuadable because they're already on the side we're measuring movement`," ",e.jsx("em",{children:"toward"}),". A weak ",e.jsx("em",{children:"positive"})," lean is not excluded, though â a near-neutral member with low structural lock-in is precisely the most movable, and scores highest."]})}),e.jsxs("p",{children:["Confidence saturates at 30 evidence items: a member with 30+ total signals (votes + sponsorships + statements + money items) gets confidence 1.0; with 5 items they're at 0.53; with one item they're at 0.20. This is the same logarithmic shape used for money â it rewards ",e.jsx("em",{children:"some"})," evidence sharply and additional evidence with diminishing returns, so we don't spuriously rank members with unusually heavy press coverage above members with quieter but more substantive records."]}),e.jsx(a,{tone:"slate",label:"How the weights were set (and published)",children:e.jsxs("p",{className:"mt-2",children:["The weights arenât guesses. Votes (V) are the revealed behavior we ultimately care about, so V is anchored as the plurality. The other signals earn their weight by"," ",e.jsx("em",{children:"how well they track the vote record in our own data"}),": for every member we measured the correlation between each componentâs lean and the voting lean. Statements track votes strongly (r â 0.64) and institutional alignment nearly as well with far broader coverage (r â 0.60, present for 93% of members), so both carry real weight. District representation barely tracks votes (r â
6 â0.18) and caucus membership is near-constant with thin coverage, so both are demoted to small context terms. As coverage and the underlying data improve, these correlations â and therefore the weights â will be re-estimated and re-published here."]})}),e.jsxs(a,{tone:"slate",label:"Where the design comes from (citations)",children:[e.jsx("p",{className:"mt-2",children:"The approach borrows from established political-science and composite-index methodology rather than inventing scoring out of thin air:"}),e.jsxs("ul",{className:"mt-2 list-disc pl-5 space-y-1.5 text-sm",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Continuous latent positions, not buckets."})," ","Modeling each member as a point on a continuous â1â¦+1 scale (with uncertainty) follows the ideal-point tradition of"," ","Poole & Rosenthalâs"," ",e.jsx("a",{className:"underline decoration-dotted underline-offset-2",href:"https://voteview.com/about",target:"_blank",rel:"noreferrer",children:"DW-NOMINATE"}),", which scales legislators from roll-call votes."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Money as an alignment signal."})," Treating campaign finance as a measurable ideological signal â weighted by how organized/targeted the money is â follows"," ","Adam Bonicaâs"," ",e.jsx("a",{className:"underline decoration-dotted underline-offset-2",href:"https://data.stanford.edu/dime",target:"_blank",rel:"noreferrer",children:"CFscores / DIME"})," ","(Stanford), which derives ideal points from contribution patterns."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Weighting & aggregation."})," Normalizing each indicator, weighting transparently, and penalizing conflicting indicators (so one strong signal canât fully compensate for a contradictory one) follows the"," ",e.jsx("a",{className:"underline decoration-dotted underline-offset-2",href:"https://www.oecd.org/en/publications/handbook-on-constructing-composite-indicators-methodology-and-user-guide_9789264043466-en.html",target:"_blank",rel:"noreferrer",children:"OECD Handbook on Constructing Composite Indicators"}),"."]})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground italic",children:["V2 runs alongside the V1 velocity score â both are exposed via the API. The dashboard surfaces V2; deep-link analyses on"," ",e.jsx(o,{href:"/insights/persuadability",className:"underline decoration-dotted hover:decoration-solid",children:"/insights/persuadability"})," ","still use V1 for backwards comparison."]})]}),e.jsxs(i,{n:9,id:"pac-money",title:"PAC money trail",children:[e.jsxs("p",{children:["On every member profile we surface FEC-reported money flowing to or against that candidate from every committee in our curated Israel-money registry. The card answers one question:"," ",e.jsx("em",{children:"how much pro-Israel money is in this race, and which way is it pointed?"})," Members with a large pro-Israel super-PAC expenditure either supporting them or against them tend to behave very differently on the floor than members without one, and that's worth surfacing on its own."]}),e.jsxs("p",{children:["The registry currently tracks ",e.jsx("strong",{children:"20 FEC committees in three tiers"}),": fifteen hardline pro-Israel committees (fourteen active â the Zionist Organization of America entry is retained but marked inactive because ZOA operates no registered federal PAC), three liberal pro-Israel committees (the J Street family), and two progressive committees whose endorsement slates consistently track the pro-Palestine side. Every entry is pinned to its FEC committee ID, shown on the member-profile money cards, so any figure can be checked against the FECâs own records for that committee. The registry gets corrected, too: several entries were found in 2026 to be pointing at the wrong FEC committee entirely (one âNORPACâ ID was actually a memberâs own campaign committee), and we keep an internal record of each correction rather than silently swapping IDs."]}),e.jsx("p",{children:"The heavyweight hardline committees:"}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-3 my-4",children:[e.jsx(m,{name:"AIPAC PAC",fec:"C00797670",note:"Direct contributions from the American Israel Public Affairs Committee's connected PAC."}),e.jsx(m,{name:"United Democracy Project",fec:"C00799031",note:"AIPAC's super PAC. Spends unlimited sums in independent expenditures â over $100M in the 2024 cycle â mostly in Democratic primaries against candidates who have criticized Israel. The largest single source of pro-Israel campaign spending."}),e.jsx(m,{name:"DMFI PAC",fec:"C00688010",note:"Democratic Majority for Israel's connected PAC. Founded 2019 to defend pro-Israel Democrats from progressive primary challenges with direct contributions."}),e.jsx(m,{name:"DMFI Action Fund",fec:"C00710848",note:"DMFI's super-PAC arm â independent expenditures alongside the direct PAC giving."})]}),e.jsxs("p",{children:["The rest of the hardline tier: ",e.jsx("strong",{children:"NORPAC"})," ","(long-running bipartisan bundling operation),"," ",e.jsx("strong",{children:"Pro-Israel America PAC"})," (AIPAC-adjacent, focused on bundled small-dollar giving), ",e.jsx("strong",{children:"JACPAC"})," ","(pro-Israel Democratic womenâs PAC),"," ",e.jsx("strong",{children:"Republican Jewish Coalition PAC"})," and the"," ",e.jsx("strong",{children:"RJC Victory Fund"})," (the RJCâs independent-expenditure-only super PAC â roughly $3.6M opposing Thomas Massie in the 2026 KY-04 primary alone),"," ",e.jsx("strong",{children:"Mainstream Democrats PAC"})," (founded 2022 to defeat progressive primary challengers, frequently aligned with DMFI/AIPAC in Israel-related primaries),"," ",e.jsx("strong",{children:"US Israel PAC"}),", ",e.jsx("strong",{children:"CUFI Action Fund"})," ","(Christians United for Israelâs federal arm â an IE-only filer, so its money appears as support/oppose expenditures rather than direct contributions),"," ",e.jsx("strong",{children:"Friends of Israel PAC"}),", and"," ",e.jsx("strong",{children:"Pro-Choice Majority Action"})," â the pass-through case explained below."]}),e.jsx(a,{tone:"slate",label:"Pass-through committees",children:e.jsxs("p",{className:"mt-2",children:["Not all pro-Israel money arrives under a pro-Israel brand."," ",e.jsx("strong",{children:"Pro-Choice Majority Action"})," is a hybrid PAC formed in May 2026 as a legal affiliate of EDW Action Fund. FEC transfer records document AIPACâs United Democracy Project routing $750k to EDW Action Fund, which then moved $876k into this committee â which in turn spent $1.27M supporting a candidate against a ceasefire-supporting primary challenger. We classify committees like this by where the money originates, not by the brand on the door â and only when the FEC paper trail is complete. EDW Action Fund itself is ",e.jsx("em",{children:"not"})," in the registry, because it is a genuine multi-purpose womenâs PAC and wholesale classification would mislabel non-Israel money as Israel money."]})}),e.jsxs("p",{children:["The liberal pro-Israel tier is the J Street family:"," ",e.jsx("strong",{children:"J Street PAC"})," (direct contributions),"," ",e.jsx("strong",{children:"J Street Action Fund"})," (its super-PAC arm), and J Streetâs separate independent-expenditure filer."]}),e.jsxs(a,{tone:"slate",id:"jstreet-tier",label:"Why J Street is in its own tier",children:[e.jsxs("p",{className:"mt-2",children:["J Street is pro-Israel by its own self-definition â it endorses candidates based on their support for the USâIsrael relationship and a two-state outcome that preserves Israel as a Jewish democratic state. But it is ",e.jsx("em",{children:"not"}
6)," anti-Palestine in the AIPAC/DMFI sense: it opposes settlement expansion, opposes the hardline bills the other PACs in this list back (including the IHRA codification discussed in §6), and routinely"," ",e.jsx("em",{children:"endorses pro-Palestine progressives"})," â for example Delia Ramirez, who is simultaneously backed by J Street and attacked by DMFI's super PAC."]}),e.jsxs("p",{className:"mt-2",children:[`Lumping J Street in with AIPAC/UDP/DMFI in a single red "pro-Israel money" bucket would misrepresent those members â it would make a J Streetâbacked progressive look like they were funded by anti-Palestine money, which is the opposite of what's happening. So J Street appears in its own`," ",e.jsx("strong",{children:"liberal pro-Israel"}),' tier on member pages, in a distinct slate-grey block, and is excluded from the "money spent against this member" alarm math.']})]}),e.jsxs("p",{children:["For every committee we pull two FEC schedules."," ",e.jsx("strong",{children:"Direct"})," (Schedule B) means the committee contributed from its own treasury to the candidate's campaign committee. ",e.jsx("strong",{children:"IE (independent expenditure, Schedule E)"})," ","means a super PAC spent unlimited sums for or against the candidate without coordinating with the campaign. Each committee row on a member profile opens into a per-cycle breakdown of both. We highlight any case where a pro-Israel super PAC spent more than $100,000 ",e.jsx("em",{children:"against"})," a member, because that's typically a primary-challenge story that explains a lot of subsequent voting behavior."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"How the headline number is built."})," The red âhardline pro-Israel moneyâ figure on a member profile sums direct contributions and supporting independent expenditures from the hardline tier, plus the individual donor network and hardline bundled money described in"," ",e.jsx("a",{href:"#bundling-network",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"§10"}),". J Street money is never in that number â it sits in its own tier. And money spent ",e.jsx("em",{children:"against"})," a member is never netted out of the headline: it is displayed as its own separate figure, because â$500k for, $300k againstâ and â$200k forâ are very different stories that a single netted number would erase."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"One direction per committee."})," FEC filings occasionally miscode an expenditure's support/oppose flag, which would make the same committee appear to spend both for and against the same member. Where the two conflict, we keep the dominant side by dollar volume â a committee never appears on both sides of one member's ledger."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Not included:"})," 501(c)(4) âdark moneyâ spending that never appears in FEC filings, and money routed through committees we haven't identified â the registry is a floor, not a ceiling. Bundled individual donations, which an earlier version of this page excluded, are now tracked and broken out separately in"," ",e.jsx("a",{href:"#bundling-network",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"§10"}),"."]})]}),e.jsxs(i,{n:10,id:"bundling-network",title:"AIPAC bundling network",children:[e.jsxs("p",{children:["The PAC card above tracks money moved through committee treasuries. But a large and well-documented share of the pro-Israel money picture moves through"," ",e.jsx("strong",{children:"bundled individual donations"})," instead â wealthy donors hosting fundraisers, soliciting maxed-out personal checks from their networks, and delivering the bundle to a candidate. Federal law treats individual giving as legally distinct from PAC giving, so none of it shows up in the PAC schedules; it appears on FEC Schedule A as many separate individual contributions. We recover this layer two ways."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"First, earmarked conduit records."})," When an individual gives ",e.jsx("em",{children:"through"})," an organization's own donation platform â as AIPAC members do through AIPAC's portal â the FEC record identifies the conduit that forwarded the earmarked check (contribution type 15E). We ingest these records from the FEC's bulk filing data, deduplicate them by FEC record ID, and show them on member profiles as ",e.jsx("strong",{children:"bundled money"}),", broken out from PAC treasury money so the two are never conflated or double-counted. This channel is not a rounding error: for many members, conduit-bundled individual checks are the single largest pro-Israel money stream â larger than the PAC contributions themselves."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Second, the recurring-donor registry."})," We also maintain a registry of recurring high-dollar individual donors who repeatedly max out to the same set of AIPAC-endorsed candidates across cycles. The card on each member page shows"," ",e.jsx("strong",{children:"named donors above a $5,000 cumulative network-detection threshold"})," who appear in the bundling registry and have given to that member's principal campaign committee."]}),e.jsxs(a,{tone:"slate",label:"How donors enter the registry",children:[e.jsx("p",{className:"mt-2",children:"A donor is added to the registry when their cumulative giving across the tracked pro-Israel candidate slate crosses the detection threshold across multiple cycles (one-off maxed-out gifts don't qualify â we're looking for sustained, network-pattern giving). Once in the registry, all of that donor's Schedule A contributions to tracked members are aggregated into the member's bundling card. The registry is derived from FEC Schedule A itself, not from any third-party leaderboard â every name and every dollar links back to the FEC filing it came from."}),e.jsx("p",{className:"mt-2",children:"The threshold and the aggregation are conservative by design: an individual maxing out to one or tw
6o pro-Israel campaigns doesn't enter the registry, because that pattern is indistinguishable from ordinary policy-aligned personal giving. The registry catches the cohort that consistently shows up across the slate, cycle after cycle â which is where the bundling story actually lives."})]}),e.jsxs("p",{children:[e.jsx("strong",{children:"What this is not:"})," we are ",e.jsx("em",{children:"not"})," ","attributing a bundler's individual donation to AIPAC the organization. AIPAC PAC's own giving is in the section above and is tracked separately. The bundling-network card shows individuals; the PAC card shows committees. We keep them visually distinct on every member page so a reader can see both layers without conflating them."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Known undercount:"})," donors who max out below the network-detection threshold, donors who give under aliases or via family members with different surnames, and donors whose pro-Israel giving is routed through a non-pro-Israel candidate (e.g. a centrist whose victory is itself the pro-Israel outcome) are not captured. The bundling card is a floor on the real number, not a ceiling."]})]}),e.jsxs(i,{n:11,id:"race-money",title:"Senate race money pages",children:[e.jsxs("p",{children:["Four investigation pages â"," ",e.jsx("a",{className:"underline decoration-dotted hover:decoration-solid",href:"/investigations/michigan-senate-primary-money",children:"Michigan Senate primary: all funding"}),","," ",e.jsx("a",{className:"underline decoration-dotted hover:decoration-solid",href:"/investigations/minnesota-senate-primary-money",children:"Minnesota Senate primary: all funding"}),","," ",e.jsx("a",{className:"underline decoration-dotted hover:decoration-solid",href:"/investigations/illinois-senate-primary-money",children:"Illinois Senate primary: all funding"})," ","and"," ",e.jsx("a",{className:"underline decoration-dotted hover:decoration-solid",href:"/investigations/michigan-senate-general-money",children:"Michigan Senate general election: all funding"})," ","â answer a different question from the member-profile money cards in §9 and §10. Those cards ask how much"," ",e.jsx("em",{children:"Israel-related"})," money touches a member, using the curated committee registry. The race pages ask how much money of ",e.jsx("em",{children:"any"})," kind was deployed in one race â a primary or a general election â by whom, and for whom. They use a separate, race-scoped pipeline with no ideological classification at all: every FEC filer active in the race is included, labeled neutrally, and linked to its own FEC page. Nothing on those pages is an estimate â every figure is a filed FEC number."]}),e.jsxs("dl",{className:"space-y-4 my-4",children:[e.jsx(r,{term:"Sources",children:"Two channels, both straight from the FEC. (1) The FEC's published bulk files for the cycle: the independent-expenditure file, the committee and candidate summary files, operating expenditures (Schedule B), committee-to-candidate transactions, the committee master, the individual-contributions file, electioneering communications and communication costs. (2) Each committee's own electronic filings on the FEC's document server: regular reports (Form 3/3X) for donor lines, 24/48-hour independent-expenditure notices (Form 24/5) and 48-hour contribution notices (Form 6). The second channel exists because bulk files lag e-filings by days to weeks, which matters most in the final week of a primary. No ad-tracker reservations, press estimates or third-party leaderboards are used."}),e.jsxs(r,{term:"Scope",children:["The named candidates (two in Michigan and Minnesota, three in Illinois), resolved by FEC ",e.jsx("em",{children:"Senate"})," ","candidate ID (not a former House record) and principal committee ID. Money that targeted only another candidate is excluded from the race accounting and footnoted on the page. The accounting is also cut at primary day: the attribution rule below only holds while the candidates are in the same race, so independent expenditures disseminated after the primary are general-election spending. They are kept out of the primary totals and never credited to any primary candidate, but they are not hidden: the page lists them in full, by committee and direction, in an appendix at the very bottom of the page, and every row is in the JSON download. The header states the primary date and the date the filings were last processed. The Michigan general-election page applies the same cut from the other side: the two nominees are set by primary day, so only independent expenditures disseminated ",e.jsx("em",{children:"after"})," ","primary day enter its two-way tables, with no upper cutoff (election day and post-election filings included). Anything naming either nominee on or before primary day is primary-period money â before that day each nominee was running against different opponents, so opposing one did not benef
6it the other â and is listed in full, by committee and direction, in that page's appendix, never credited to either nominee. Money that targeted only a candidate eliminated in the primaries is excluded and footnoted. Campaign-side figures on that page (receipts, disbursements, cash on hand, PAC and conduit contributions) are the FEC summary file's cycle-to-date totals, which do not separate primary from general-election activity; the page says so beside each figure and names the next report that will extend them."]}),e.jsx(r,{term:"Outside-spending ledger",children:`The same independent expenditure can appear up to three times â as a raw e-filing row, as a 24/48-hour notice, and re-itemized in the committee's regular report â with amendments adding further copies. We collapse amendment chains, read each filing's form type from the filing itself, and then, per committee, keep regular-report rows disseminated on or before the coverage end of its latest filed report plus notice rows disseminated after that date. A notice inside the covered window is dropped only if that committee's processed report rows are actually present in the bulk file; otherwise it is kept, because discarding it would delete real money the bulk file has not caught up with yet. Exact duplicates are removed by filing and transaction number, memo entries and $0 rows are excluded, and every row is bucketed by purpose (TV/radio, digital, mail, field, and so on) from its stated purpose text. A few small committees report independent expenditures only on their regular reports and never appear in the FEC's independent-expenditure file; for a committee with no rows in that file, its 24A/24E rows from the committee-to-candidate file are added to the ledger (form type "PAS2") so the money is counted rather than lost. The independent-expenditure file remains the sole source for any committee it contains, which is what prevents double counting.`}),e.jsx(r,{term:"Attribution",children:`In a two-candidate race (the Michigan and Minnesota primaries and the Michigan general election), spending that supports a candidate benefits that candidate and spending that opposes a candidate benefits the opponent; "outside money benefiting" a candidate is therefore support for them plus opposition to the other candidate. The for and against columns are also shown separately for every committee, so the raw direction is never hidden behind the combined figure. In a primary with three or more candidates (Illinois) opposition has no single beneficiary, so the rule changes: "benefiting" is support only, opposition is shown per target and summed for the race as its own figure, and it is never credited to any rival. The page's headline is then "all money deployed" â campaign spending plus every supporting and every opposing dollar â with the support-only "benefiting" total shown beside it, so the two figures cannot be confused.`}),e.jsx(r,{term:"Money carried in from earlier campaigns",children:"Where a Senate candidate is a sitting House member (Illinois: Krishnamoorthi and Kelly), the transfers-from-authorized- committees line is split by source â the House committee and joint fundraising committees â from the itemized committee-to-committee file, and any gap to the FEC summary line is stated. AIPAC PAC's direct contributions to those House committees in earlier cycles (from those cycles' committee-to- candidate files) and its current-cycle earmarks to them are listed under the House committee, with a link to the member's VoteLog profile; dollars inside a committee are fungible, so the page states that some of that money may have reached the Senate race through the transfers but never adds it to a Senate total. How each House committee raised what it transferred is shown cycle by cycle (raised, from individuals, from PACs, spent, transferred out, cash at cycle end) from each cycle's FEC candidate summary file, with the House committee's own reported transfers out cross-checked against what the Senate committee itemizes receiving from it."}
6),e.jsx(r,{term:"Campaign finances",children:"Receipts, transfers from authorized committees, disbursements, cash on hand, self-funding and the individual/committee split come from the FEC candidate summary file, current through each campaign's latest filed report (the coverage date is printed on the page). Campaign spending categories come from itemized operating expenditures, bucketed by purpose."}),e.jsx(r,{term:"PACs giving directly",children:"From the committee-to-candidate file, cash (type 24K) and in-kind (type 24Z) contributions only. That file also carries the committees' independent expenditures (types 24A/24E); those are never counted as direct money â they belong to the ledger above. The candidate's own authorized committees are excluded, since their transfers already appear on the receipts line. Nothing filtered out of that table is dropped from the page: a reconciliation list under it states the dollar total of each excluded type and where on the page it is shown, and coordinated party expenditures (type 24C â party money spent in coordination with a campaign, which is neither a contribution nor independent spending) get their own table."}),e.jsx(r,{term:"Donors and conduits",children:"Super PAC donor lists are read from each committee's own latest regular reports (Schedule A receipt lines, memo entries excluded, newest amendment wins), with the bulk file as a fallback; the disclosure cutoff for each committee is footnoted. AIPAC PAC's earmarked contributions are read from AIPAC PAC's own Schedule A, where each earmark names the receiving campaign committee; they are shown as an overlay statistic and never added to another total. Where the receiving committee's own itemized receipts are in the bulk file, the page cross-checks the conduit's itemization against them, marks any line the conduit repeated (same donor, date and amount) and states the recipient-corroborated figure beside the as-filed total. The Minnesota page also cross-references super PAC donors against the site's committed United Democracy Project and AIPAC PAC top-donor lists."}),e.jsx(r,{term:"Donor-network cross-match",children:"The Michigan general-election page (§7.9b) reports how many of each nominee's itemized individual donors also appear in AIPAC PAC's own receipts. Nominee side: every authorized committee's regular Form 3 reports for the cycle, Schedule A individual lines, memo entries and non-individual entities excluded, newest amendment per period. Network side: AIPAC PAC's regular Form 3X reports over two cycles (2023 onward), direct PAC contributions and earmarks to any candidate alike. Identity = surname letters (suffixes dropped) plus first given-name token (honorifics dropped) plus ZIP5, the unit at which gifts are grouped and chargebacks netted on both sides; only a ZIP-level identity with no counterpart falls back to a same-name, same-state comparison, reported as its own tier. Both nominees run through the identical procedure, so the opponent's block shows what the same method yields on the other donor list (a comparison, not a measured error rate). The result is donor overlap, shown as an overlay statistic and never added to any total; it does not establish that AIPAC PAC solicited or bundled the money (only the §7.9 earmarks and any Form 3L bundling reports show conduit passage). Unitemized receipts cannot be matched; refunds are not netted. Every matched donor is downloadable as CSV from the page."}),e.jsx(r,{term:"Freshness",children:'Each page prints "data current through" dates per stream. The published server re-runs the pipeline on a schedule (3-hourly in primary week, then daily, then weekly through early November; the Illinois page, whose primary was March 17, 2026, refreshes weekly; the Michigan general-election page refreshes every 48 hours through October 14, daily through November 1, every 3 hours from November 2 to 4, daily through November 20, then weekly through December 20, after the post-general reports due December 3 are processed) and only replaces the snapshot when a run completes; a failed run leaves the last good data in place. Where a filer reports monthly versus quarterly, or routes money through a nonprofit that is not required to disclose its own donors, the page says so explicitly.'})]}),e.jsx(a,{tone:"slate",label:"How this differs from the member-profile money method",children:e.jsxs("ul",{className:"list-disc pl-5 mt-2 space-y-1",children:[e.jsx("li",{children:"Universe: every committee in the race, not the Israel-money registry."}),e.jsx("li",{children:'Direction: the two-way race pages publish a combined "benefiting" figure (support plus opposition to the opponent) alongside the raw columns, and the three-way Illinois page a support-only one; member profiles never net or combine directions.'}),e.jsx("li",{children:"Donors: full Schedule A donor lists per super PAC, no network-detection threshold."}),e.jsx("li",{children:"Bundled money: read from the conduit's own filings rather than from campaign-side 15E records."}),e.jsx("li",{children:"No liberal/hardline tiers, no persuadability inputs, no scores â descriptive accounting only."})]})})]}),e.jsxs(i,{n:12,id:"news-video",title:"News, statements & video",children:[e.jsx("p",{children:"Each member profile pulls three additional streams to give context beyond the roll-call record:"}),e.jsxs("dl",{className:"space-y-4 my-4",children:[e.jsx(r,{term:"Press releases",children:"Pulled directly from each office's official press feed when one is published, filtered by the same Israel/Palestine topic regex used for bill discovery. These are the member's own words about their own positions."}),e.jsx(r,{term:"News coverage",children:"Aggregated from Google News and NewsAPI, filtered by topic and deduped by URL. We rank by an AI relevance score (so an offhand quote in a budget article doesn't outrank a substantive Israel-policy interview), with a recency bonus."}),e.jsx(r,{term:"Video appearances",children:"YouTube Data API search for the member's dis
6play name combined with Israel/Palestine/Gaza topics, using multiple AI-generated query variants per member. Sorted by view count first, with recency as a tiebreaker, then re-ranked by an AI relevance pass to drop unrelated clips. Subject to YouTube's daily quota, so coverage is built up in paced batches â members with no relevant clips are recorded as checked rather than retried indefinitely."})]})]}),e.jsxs(i,{n:13,id:"sources",title:"Sources & sync cadence",children:[e.jsxs("ul",{className:"list-disc pl-6 space-y-2",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Bills, sponsors, votes, member metadata"})," â"," ",e.jsx("a",{className:"underline decoration-dotted hover:decoration-solid",href:"https://api.congress.gov/",target:"_blank",rel:"noopener noreferrer",children:"Congress.gov v3 API"})," ","(the official US government API), refreshed in operator-run sync passes."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Campaign finance"})," â Federal Election Commission data via the"," ",e.jsx("a",{className:"underline decoration-dotted hover:decoration-solid",href:"https://api.open.fec.gov/",target:"_blank",rel:"noopener noreferrer",children:"openFEC API"})," ","and the FEC's published bulk filing data: direct contributions (Schedule B), independent expenditures (Schedule E), and earmarked individual contributions routed through conduits (Schedule A) for the bundled-money layer in §10. Backfilled for every current member with a resolvable FEC candidate ID."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Senate primary money pages"})," â FEC bulk files for the cycle plus each committee's own e-filed reports and notices on the FEC document server; no API, no third-party estimates. Method in §11."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"News & press releases"})," â Google News RSS, NewsAPI, and direct scrapes of official .house.gov / .senate.gov press pages where available."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Video appearances"})," â YouTube Data API v3."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Member demographics, district shape, party"})," â US Census Bureau API plus Congress.gov member records."]})]}),e.jsxs(a,{tone:"slate",label:"Sync cadence & how updates reach the site",children:[e.jsx("p",{className:"mt-2",children:"Data collection is operator-run, not continuous. A full bill sync takes hours because we paginate through every keyword and pull cosponsor lists per bill, rate-limited by Congress.gov; a faster targeted pass keeps the current Congress fresh between full syncs. FEC money data is backfilled in batches and refreshed every few weeks. News, statements, and video coverage grow additively in paced batches."}),e.jsxs("p",{className:"mt-2",children:["The published site serves a ",e.jsx("strong",{children:"static snapshot"})," of the database, rebuilt and republished after each data refresh. That means numbers on the site update in discrete steps rather than in real time â a bill introduced yesterday may take days to appear. We choose this deliberately: every published number comes from a reviewed, internally consistent snapshot rather than a live feed that could shift mid-read."]})]})]}),e.jsx(i,{n:14,id:"not-tracked",title:"What we don't track (and why)",children:e.jsxs("ul",{className:"list-disc pl-6 space-y-2",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"State and local legislation."})," Many of the most consequential anti-BDS and IHRA-codification fights have happened in state legislatures and on university boards. We track only federal Congress because that's where our primary-source pipeline is reliable."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Closed-door committee work, classified briefings, whip pressure."})," A great deal of the Israel-policy story happens in rooms with no transcript. We can only show you what ends up in a filing or on the record."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Bundled individual donations (only partially)."})," ","Federal law treats bundling as legally distinct from PAC giving, so there is no formal FEC record of who bundled what. The bundling-network registry in §10 recovers part of this layer from Schedule A patterns, but it is a known undercount â donors below the detection threshold, giving under aliases, or routing through family members are missed. The true bundled money picture is understated, especially for members who receive a lot of bundled support."]}
6),e.jsxs("li",{children:[e.jsx("strong",{children:"Speeches outside the chamber."})," Floor speeches are in the Congressional Record. Off-the-cuff remarks at AIPAC conferences or in donor calls are not."]})]})}),e.jsxs(i,{n:15,id:"corrections",title:"Corrections",children:[e.jsxs("p",{children:["Classifications are reviewed on an ongoing basis. Every change is logged publicly with the date, the old and new label, and the reason. Scores are recalculated when classifications change, and recalculations are noted in the"," ",e.jsx(o,{href:"/changelog",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"changelog"}),". Readers who believe a bill is misclassified can"," ",e.jsx(o,{href:"/contact",className:"underline decoration-dotted hover:decoration-solid font-medium",children:"submit a correction"})," ","with reference to the bill text; the classification rules above, not editorial sympathy, decide the outcome."]}),e.jsx("p",{children:"Every bill, vote, and contribution row links back to its primary source. If you spot a misclassification, a wrongly attributed vote, a stale member record, or a PAC contribution that should be attributed differently, the underlying record is one click away and the data will be re-fetched on the next sync."}),e.jsx("p",{children:"We try to be transparent about the calls we make rather than hiding them behind a veneer of neutrality. If you read this page and disagree with the editorial framing, that's a healthy reaction to have â and the underlying data is exposed precisely so you can draw a different conclusion from the same primary sources."})]}),e.jsx("div",{className:"border-t border-border pt-6 text-sm text-muted-foreground",children:e.jsx(o,{href:"/",className:"hover:underline",children:"â Back to dashboard"})})]})]})]})}function i({n:t,id:s,title:n,tone:c="default",children:p}){const u=c==="amber"?"rounded-2xl bg-amber-50 dark:bg-amber-950/30 ring-1 ring-amber-200 dark:ring-amber-900 p-6 sm:p-8 mb-12 scroll-mt-24":"mb-12 scroll-mt-24";return e.jsxs("section",{id:s,className:u,children:[e.jsxs("div",{className:"flex items-baseline gap-3 mb-4",children:[e.jsx("span",{className:"text-[11px] font-mono tabular-nums text-slate-400 dark:text-slate-600",children:String(t).padStart(2,"0")}),e.jsx("h2",{className:"text-2xl sm:text-3xl font-serif font-bold tracking-tight",children:n})]}),e.jsx("div",{className:"text-foreground/85 leading-relaxed space-y-3 [&_p]:leading-relaxed",children:p})]})}function d({color:t,children:s}){const n=t==="rose"?"bg-red-700":"bg-emerald-600";return e.jsx("span",{className:`inline-flex items-center gap-1 rounded-full ${n} text-white px-1.5 py-px uppercase tracking-wider text-[9px] font-semibold align-middle`,children:s})}function x(){return e.jsx("span",{className:"inline-flex items-center gap-1 rounded-full bg-slate-200 dark:bg-slate-800 text-slate-700 dark:text-slate-300 px-1.5 py-px uppercase tracking-wider text-[9px] font-semibold align-middle",children:"Neutral"})}function a({tone:t,label:s,children:n,id:c}){return e.jsxs("aside",{id:c,className:"my-4 rounded-lg border-l-4 border-slate-400 dark:border-slate-600 bg-slate-50 dark:bg-slate-900/50 px-5 py-4 text-sm scroll-mt-24",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400",children:s}),e.jsx("div",{className:"text-foreground/85",children:n})]})}function y({words:t}){return e.jsx("div",{className:"flex flex-wrap gap-1.5 my-3",children:t.map(s=>e.jsx("span",{className:"inline-flex items-center rounded-md bg-slate-100 dark:bg-slate-900 ring-1 ring-slate-200 dark:ring-slate-800 px-2 py-0.5 text-xs font-mono text-slate-700 dark:text-slate-300",children:s},s))})}function h({color:t,title:s,examples:n}){const c=t==="rose"?"ring-red-200 dark:ring-red-700":t==="emerald"?"ring-emerald-200 dark:ring-emerald-900":t==="amber"?"ring-amber-200 dark:ring-amber-900":"ring-slate-200 dark:ring-slate-800",p=t==="rose"?"bg-red-50 dark:bg-red-950/30":t==="emerald"?"bg-emerald-50 dark:bg-emerald-950/30":t==="amber"?"bg-amber-50 dark:bg-amber-950/30":"bg-slate-50 dark:bg-slate-900/50",u=t==="rose"?"bg-red-700":t==="emerald"?"bg-emerald-600":t==="amber"?"bg-amber-500":"bg-slate-400";return e.jsxs("div",{className:`rounded-xl ${p} ring-1 ${c} p-4 text-sm`,children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("span",{className:`inline-block w-2 h-2 rounded-full ${u}`,"aria-hidden":"true"}),e.jsx("span",{className:"font-semibold text-foreground",children:s})]}),e.jsx("ul",{className:"list-disc pl-5 space-y-1 text-foreground
6/80 leading-snug",children:n.map(g=>e.jsx("li",{children:g},g))})]})}function l({action:t,weight:s}){return e.jsxs("tr",{children:[e.jsx("td",{className:"py-2.5 px-4 text-foreground/85",children:t}),e.jsx("td",{className:"py-2.5 px-4 text-right font-mono tabular-nums text-foreground",children:s})]})}function m({name:t,fec:s,note:n}){return e.jsxs("div",{className:"rounded-xl bg-white dark:bg-slate-900 ring-1 ring-slate-200 dark:ring-slate-800 p-4 text-sm",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-3 mb-1",children:[e.jsx("div",{className:"font-semibold text-foreground",children:t}),e.jsx("code",{className:"text-[10px] font-mono text-slate-500 dark:text-slate-400",children:s})]}),e.jsx("p",{className:"text-foreground/75 leading-relaxed text-[13px]",children:n})]})}function r({term:t,children:s}){return e.jsxs("div",{className:"grid sm:grid-cols-[180px_1fr] gap-2 sm:gap-6",children:[e.jsx("dt",{className:"font-semibold text-foreground",children:t}),e.jsx("dd",{className:"text-foreground/85 leading-relaxed",children:s})]})}export{A as Methodology};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.