@empoweredvote/ev-ui 0.8.12 → 0.8.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -90,8 +90,36 @@ __export(index_exports, {
90
90
  module.exports = __toCommonJS(index_exports);
91
91
 
92
92
  // src/RadarChartCore.jsx
93
- var import_react = __toESM(require("react"));
93
+ var import_react2 = __toESM(require("react"));
94
94
  var import_web = require("@react-spring/web");
95
+ var import_react3 = require("react");
96
+
97
+ // src/useTheme.js
98
+ var import_react = require("react");
99
+ function useTheme() {
100
+ const read = () => {
101
+ if (typeof document === "undefined") return false;
102
+ const root = document.documentElement;
103
+ const body = document.body;
104
+ const hasDarkClass = (el) => el && el.classList && el.classList.contains("dark");
105
+ const hasDarkAttr = (el) => el && el.getAttribute && el.getAttribute("data-theme") === "dark";
106
+ return hasDarkClass(root) || hasDarkAttr(root) || hasDarkClass(body) || hasDarkAttr(body);
107
+ };
108
+ const [isDark, setIsDark] = (0, import_react.useState)(read);
109
+ (0, import_react.useEffect)(() => {
110
+ if (typeof document === "undefined" || typeof MutationObserver === "undefined") return;
111
+ const update = () => setIsDark(read());
112
+ update();
113
+ const observer = new MutationObserver(update);
114
+ const opts = { attributes: true, attributeFilter: ["class", "data-theme"] };
115
+ observer.observe(document.documentElement, opts);
116
+ if (document.body) observer.observe(document.body, opts);
117
+ return () => observer.disconnect();
118
+ }, []);
119
+ return { isDark };
120
+ }
121
+
122
+ // src/RadarChartCore.jsx
95
123
  function RadarChartCore({
96
124
  topics,
97
125
  data,
@@ -103,95 +131,83 @@ function RadarChartCore({
103
131
  onReplaceTopic = () => {
104
132
  },
105
133
  size = 400,
106
- labelFontSize = 13,
134
+ labelFontSize = 18,
107
135
  padding = 80,
108
- labelOffset = 52,
109
- tightFit = false,
110
- activeSpoke = null,
111
- writeIns = {},
112
- darkMode = false,
113
- lineColor,
114
- ringColor,
115
- // replacedSpokes: short_titles of substitute spokes (not the user's original defaults)
116
- replacedSpokes = {},
117
- // boldOriginalSpokes: when true, bold spokes that are NOT replacements
118
- boldOriginalSpokes = false,
119
- highlightedSpoke = null
136
+ labelOffset = 20,
137
+ tightFit = false
120
138
  }) {
121
- var _a;
139
+ const { isDark } = useTheme();
122
140
  const radius = size / 2 - 40;
123
- const extRadius = radius * 1.15;
124
141
  const centerX = size / 2;
125
142
  const centerY = size / 2;
126
- const [tooltip, setTooltip] = (0, import_react.useState)(null);
127
143
  const spokes = Object.entries(data);
128
144
  const numSpokes = Math.max(spokes.length, 1);
129
- const prevCountRef = (0, import_react.useRef)(numSpokes);
145
+ const prevCountRef = (0, import_react3.useRef)(numSpokes);
130
146
  const countChanged = numSpokes !== prevCountRef.current;
131
- (0, import_react.useEffect)(() => {
147
+ (0, import_react3.useEffect)(() => {
132
148
  prevCountRef.current = numSpokes;
133
149
  }, [numSpokes]);
134
- function calcAdjusted(value, shortTitle) {
135
- var _a2;
136
- if (!value || Number(value) === 0) return 0;
137
- const topic = topics.find((t) => t.short_title === shortTitle);
138
- const max = ((_a2 = topic == null ? void 0 : topic.stances) == null ? void 0 : _a2.length) || 10;
139
- const pct = Number(value) / max * 10;
140
- return invertedSpokes[shortTitle] ? (max + 1) * 10 / max - pct : pct;
141
- }
142
150
  const pointsArr = spokes.map(([shortTitle, value], index) => {
143
- const adjusted = calcAdjusted(value, shortTitle);
144
- const r = adjusted / 10 * radius;
151
+ var _a;
152
+ const topic = topics.find((t) => t.short_title === shortTitle);
153
+ const max = ((_a = topic == null ? void 0 : topic.stances) == null ? void 0 : _a.length) || 10;
154
+ const pct = Math.min(value / max * 10, 10);
145
155
  const angle = 2 * Math.PI * index / numSpokes;
146
- return [centerX + r * Math.sin(angle), centerY - r * Math.cos(angle)];
156
+ const adjusted = value === 0 ? 0 : invertedSpokes[shortTitle] ? 11 - pct : pct;
157
+ const r = adjusted / 10 * radius;
158
+ const x = centerX + r * Math.sin(angle);
159
+ const y = centerY - r * Math.cos(angle);
160
+ return [x, y];
147
161
  });
148
162
  const targetPoints = pointsArr.map((p) => p.join(",")).join(" ");
149
- const springBase = {
163
+ const spring = (0, import_web.useSpring)({
150
164
  to: { points: targetPoints },
151
165
  immediate: countChanged,
166
+ reset: countChanged,
152
167
  config: { tension: 300, friction: 30 }
153
- };
154
- if (countChanged) springBase.from = { points: targetPoints };
155
- const spring = (0, import_web.useSpring)(springBase);
168
+ });
156
169
  const hasCompareData = Object.keys(compareData).length > 0;
157
170
  const centerPoints = spokes.map(() => `${centerX},${centerY}`).join(" ");
158
171
  let comparePoints = null;
159
172
  let compareCoords = null;
160
173
  if (hasCompareData) {
161
174
  const ccoords = spokes.map(([shortTitle], index) => {
162
- var _a2;
163
- const value = (_a2 = compareData[shortTitle]) != null ? _a2 : 0;
164
- const adjusted = calcAdjusted(value, shortTitle);
165
- const r = adjusted / 10 * radius;
175
+ var _a, _b;
176
+ const value = (_a = compareData[shortTitle]) != null ? _a : 0;
177
+ const topic = topics.find((t) => t.short_title === shortTitle);
178
+ const max = ((_b = topic == null ? void 0 : topic.stances) == null ? void 0 : _b.length) || 10;
179
+ const pct = Math.min(value / max * 10, 10);
166
180
  const angle = 2 * Math.PI * index / numSpokes;
167
- return [centerX + r * Math.sin(angle), centerY - r * Math.cos(angle)];
181
+ const adjusted = value === 0 ? 0 : invertedSpokes[shortTitle] ? 11 - pct : pct;
182
+ const r = adjusted / 10 * radius;
183
+ const x = centerX + r * Math.sin(angle);
184
+ const y = centerY - r * Math.cos(angle);
185
+ return [x, y];
168
186
  });
169
187
  compareCoords = ccoords;
170
188
  comparePoints = ccoords.map((p) => p.join(",")).join(" ");
171
189
  }
172
- const hadCompareDataRef = (0, import_react.useRef)(false);
190
+ const hadCompareDataRef = (0, import_react3.useRef)(false);
173
191
  const compareJustAppeared = hasCompareData && !hadCompareDataRef.current;
174
- (0, import_react.useEffect)(() => {
192
+ (0, import_react3.useEffect)(() => {
175
193
  hadCompareDataRef.current = hasCompareData;
176
194
  }, [hasCompareData]);
177
- const compareSpringBase = {
195
+ const compareSpring = (0, import_web.useSpring)({
178
196
  to: { points: comparePoints || centerPoints || `${centerX},${centerY}` },
179
197
  immediate: countChanged || compareJustAppeared,
198
+ reset: countChanged || compareJustAppeared,
180
199
  config: { tension: 300, friction: 30 }
181
- };
182
- if (countChanged || compareJustAppeared) compareSpringBase.from = compareSpringBase.to;
183
- const compareSpring = (0, import_web.useSpring)(compareSpringBase);
184
- const spokeExtension = spokes.reduce((acc, [shortTitle]) => {
185
- const userAdj = calcAdjusted(data[shortTitle], shortTitle);
186
- const cmpAdj = hasCompareData && compareData[shortTitle] ? calcAdjusted(compareData[shortTitle], shortTitle) : 0;
187
- acc[shortTitle] = userAdj > 10 || cmpAdj > 10;
188
- return acc;
189
- }, {});
200
+ });
190
201
  const labelMeta = spokes.map(([shortTitle], i) => {
191
202
  const angle = 2 * Math.PI * i / numSpokes;
203
+ const baseFSize = labelFontSize;
192
204
  const lines = wrapLabel(shortTitle, 12);
193
- const longestLineLen = lines.reduce((m, ln) => ln.length > m ? ln.length : m, 0);
194
- const estimatedWidth = longestLineLen * labelFontSize * 0.55;
205
+ const longestLineLen = lines.reduce(
206
+ (max, ln) => ln.length > max ? ln.length : max,
207
+ 0
208
+ );
209
+ const fSize = adaptiveFontSize(longestLineLen, baseFSize);
210
+ const estimatedWidth = longestLineLen * fSize * 0.6;
195
211
  const sinA = Math.sin(angle);
196
212
  const side = sinA < -0.1 ? "left" : sinA > 0.1 ? "right" : "center";
197
213
  return { estimatedWidth, side };
@@ -200,9 +216,23 @@ function RadarChartCore({
200
216
  const rightLabelWidths = labelMeta.filter((m) => m.side === "right").map((m) => m.estimatedWidth);
201
217
  const minPadding = 40;
202
218
  const maxPadding = padding * 2;
203
- const rawLeft = Math.min(Math.max(leftLabelWidths.length ? Math.max(...leftLabelWidths) + labelOffset : 0, minPadding), maxPadding);
204
- const rawRight = Math.min(Math.max(rightLabelWidths.length ? Math.max(...rightLabelWidths) + labelOffset : 0, minPadding), maxPadding);
205
- const sidePadding = Math.max(rawLeft, rawRight);
219
+ const rawLeftPadding = Math.min(
220
+ Math.max(
221
+ leftLabelWidths.length ? Math.max(...leftLabelWidths) + labelOffset : 0,
222
+ minPadding
223
+ ),
224
+ maxPadding
225
+ );
226
+ const rawRightPadding = Math.min(
227
+ Math.max(
228
+ rightLabelWidths.length ? Math.max(...rightLabelWidths) + labelOffset : 0,
229
+ minPadding
230
+ ),
231
+ maxPadding
232
+ );
233
+ const symmetricPadding = Math.max(rawLeftPadding, rawRightPadding);
234
+ const leftPadding = symmetricPadding;
235
+ const rightPadding = symmetricPadding;
206
236
  const verticalPadding = padding;
207
237
  let tightTop = -verticalPadding;
208
238
  let tightHeight = size + verticalPadding * 2;
@@ -210,12 +240,11 @@ function RadarChartCore({
210
240
  let yMin = Infinity, yMax = -Infinity;
211
241
  for (let i = 0; i < numSpokes; i++) {
212
242
  const angle = 2 * Math.PI * i / numSpokes;
213
- const effectiveR = spokeExtension[(_a = spokes[i]) == null ? void 0 : _a[0]] ? extRadius : radius;
214
- const y = centerY - effectiveR * Math.cos(angle);
243
+ const y = centerY - radius * Math.cos(angle);
215
244
  if (y < yMin) yMin = y;
216
245
  if (y > yMax) yMax = y;
217
246
  }
218
- const labelMargin = labelOffset + labelFontSize * 2.5;
247
+ const labelMargin = labelOffset + labelFontSize * 1.4 + labelFontSize * 1.1;
219
248
  tightTop = yMin - labelMargin;
220
249
  tightHeight = yMax + labelMargin - tightTop;
221
250
  }
@@ -225,111 +254,101 @@ function RadarChartCore({
225
254
  const ring = [];
226
255
  for (let i = 0; i < numSpokes; i++) {
227
256
  const angle = 2 * Math.PI * i / numSpokes;
228
- ring.push(`${centerX + radius * scale * Math.sin(angle)},${centerY - radius * scale * Math.cos(angle)}`);
257
+ const x = centerX + radius * scale * Math.sin(angle);
258
+ const y = centerY - radius * scale * Math.cos(angle);
259
+ ring.push(`${x},${y}`);
229
260
  }
230
261
  guidePolygons.push(
231
- /* @__PURE__ */ import_react.default.createElement("polygon", { key: level, points: ring.join(" "), fill: "none", stroke: ringColor != null ? ringColor : darkMode ? "#555" : "#ccc" })
262
+ /* @__PURE__ */ import_react2.default.createElement("polygon", { key: level, points: ring.join(" "), fill: "none", stroke: isDark ? "#374151" : "#ccc" })
232
263
  );
233
264
  }
234
- const getStanceText = (shortTitle, value) => {
235
- if (writeIns[shortTitle]) return writeIns[shortTitle];
236
- const topic = topics.find((t) => t.short_title === shortTitle);
237
- const stances = (topic == null ? void 0 : topic.stances) || [];
238
- const idx = Math.round(Number(value)) - 1;
239
- if (idx >= 0 && idx < stances.length) {
240
- return stances[idx].text || shortTitle;
241
- }
242
- return shortTitle;
243
- };
244
- return /* @__PURE__ */ import_react.default.createElement(
265
+ return /* @__PURE__ */ import_react2.default.createElement(
245
266
  "svg",
246
267
  {
247
268
  className: "w-full h-auto max-h-full",
248
- viewBox: `-${sidePadding} ${tightTop} ${size + sidePadding * 2} ${tightHeight}`,
249
- preserveAspectRatio: "xMidYMid meet",
250
- onMouseLeave: () => setTooltip(null)
269
+ viewBox: `-${leftPadding} ${tightTop} ${size + leftPadding + rightPadding} ${tightHeight}`,
270
+ preserveAspectRatio: "xMidYMid meet"
251
271
  },
252
272
  guidePolygons,
253
273
  spokes.map(([shortTitle], i) => {
254
274
  const angle = 2 * Math.PI * i / numSpokes;
255
- const endX = centerX + radius * Math.sin(angle);
256
- const endY = centerY - radius * Math.cos(angle);
275
+ const x = centerX + radius * Math.sin(angle);
276
+ const y = centerY - radius * Math.cos(angle);
257
277
  const isUnanswered = !!unansweredSpokes[shortTitle];
258
- const needsExt = spokeExtension[shortTitle];
259
- const extX = centerX + extRadius * Math.sin(angle);
260
- const extY = centerY - extRadius * Math.cos(angle);
261
- return /* @__PURE__ */ import_react.default.createElement("g", { key: `spoke-${shortTitle}` }, /* @__PURE__ */ import_react.default.createElement(
278
+ return /* @__PURE__ */ import_react2.default.createElement(
262
279
  "line",
263
280
  {
281
+ key: `line-${shortTitle}`,
264
282
  x1: centerX,
265
283
  y1: centerY,
266
- x2: endX,
267
- y2: endY,
268
- stroke: isUnanswered ? "#9ca3af" : lineColor != null ? lineColor : darkMode ? "#bbb" : "#888",
284
+ x2: x,
285
+ y2: y,
286
+ stroke: isUnanswered ? isDark ? "#6b7280" : "#9ca3af" : isDark ? "#d1d5db" : "black",
269
287
  strokeDasharray: isUnanswered ? "4 3" : void 0,
270
288
  opacity: isUnanswered ? 0.6 : 1
271
289
  }
272
- ), needsExt && /* @__PURE__ */ import_react.default.createElement(
273
- "line",
274
- {
275
- x1: endX,
276
- y1: endY,
277
- x2: extX,
278
- y2: extY,
279
- stroke: "#aaa",
280
- strokeDasharray: "4 4",
281
- opacity: 0.4
282
- }
283
- ));
290
+ );
284
291
  }),
285
292
  spokes.map(([shortTitle], i) => {
286
293
  const angle = 2 * Math.PI * i / numSpokes;
294
+ const anchor = angle > Math.PI ? "end" : angle < Math.PI && angle > 0 ? "start" : "middle";
287
295
  const cosA = Math.cos(angle);
288
- const isBottom = cosA < -0.5;
289
296
  const isTop = cosA > 0.5;
297
+ const isBottom = cosA < -0.5;
298
+ const baseFSize = labelFontSize;
290
299
  const lines = wrapLabel(shortTitle, 12);
291
- const longestLine = lines.reduce((m, ln) => ln.length > m ? ln.length : m, 0);
292
- const lineHeight = labelFontSize * 1.2;
293
- const dynamicOffset = lines.length > 1 ? labelOffset + 6 : labelOffset;
294
- const offset2 = radius + dynamicOffset;
300
+ const longestLine = lines.reduce(
301
+ (max, ln) => ln.length > max ? ln.length : max,
302
+ 0
303
+ );
304
+ const fSize = adaptiveFontSize(longestLine, baseFSize);
305
+ const lineHeight = fSize * 1.1;
306
+ const dynamicLabelOffset = lines.length > 1 ? labelOffset + 8 : labelOffset;
307
+ const offset2 = radius + dynamicLabelOffset;
295
308
  const labelX = centerX + offset2 * Math.sin(angle);
296
309
  let labelY = centerY - offset2 * Math.cos(angle);
297
- if (isTop && lines.length > 1) labelY -= (lines.length - 1) * lineHeight;
298
- const isActive = shortTitle === activeSpoke;
310
+ if (isTop && lines.length > 1) {
311
+ labelY -= (lines.length - 1) * lineHeight;
312
+ }
299
313
  const isUnansweredLabel = !!unansweredSpokes[shortTitle];
300
- const isReplaced = !!replacedSpokes[shortTitle];
301
- const shouldBold = boldOriginalSpokes && !isReplaced;
302
- const fSize = labelFontSize;
303
- return /* @__PURE__ */ import_react.default.createElement(
314
+ return /* @__PURE__ */ import_react2.default.createElement(
304
315
  "text",
305
316
  {
306
317
  key: `label-${shortTitle}`,
307
318
  x: labelX,
308
319
  y: labelY,
309
- textAnchor: "middle",
320
+ textAnchor: anchor,
310
321
  dominantBaseline: isBottom ? "hanging" : "auto",
311
322
  onClick: () => onReplaceTopic(shortTitle),
312
- fill: isActive ? "#E85D26" : shortTitle === highlightedSpoke ? darkMode ? "#7DD4E8" : "#59B0C4" : isUnansweredLabel ? "#9ca3af" : darkMode ? "#D3D7DE" : "#555",
313
- fontWeight: isActive || shouldBold ? "bold" : "normal",
314
- style: { cursor: "pointer", userSelect: "none", fontSize: fSize, fontFamily: "sans-serif" }
323
+ className: "text-xl font-medium mb-1 md:text-base md:font-normal",
324
+ fill: isUnansweredLabel ? isDark ? "#6b7280" : "#9ca3af" : isDark ? "#d1d5db" : void 0,
325
+ style: { cursor: "pointer", userSelect: "none", fontSize: fSize }
315
326
  },
316
- isUnansweredLabel && /* @__PURE__ */ import_react.default.createElement("title", null, "No stance on file for this topic."),
317
- lines.map((ln, idx) => /* @__PURE__ */ import_react.default.createElement("tspan", { key: idx, x: labelX, dy: idx === 0 ? "0" : `${lineHeight}` }, ln))
327
+ isUnansweredLabel && /* @__PURE__ */ import_react2.default.createElement("title", null, "No stance on file for this topic."),
328
+ lines.map((ln, idx) => /* @__PURE__ */ import_react2.default.createElement("tspan", { key: idx, x: labelX, dy: idx === 0 ? "0" : `${lineHeight}` }, ln))
318
329
  );
319
330
  }),
320
- countChanged ? /* @__PURE__ */ import_react.default.createElement(
331
+ countChanged ? /* @__PURE__ */ import_react2.default.createElement(
321
332
  "polygon",
322
333
  {
323
334
  key: "user-static",
324
335
  points: targetPoints,
325
- style: { fill: "rgba(124, 107, 158, 0.4)", stroke: "#7C6B9E", strokeWidth: 3 }
336
+ style: {
337
+ fill: "rgba(124, 107, 158, 0.4)",
338
+ stroke: "#7C6B9E",
339
+ strokeWidth: 3
340
+ }
326
341
  }
327
- ) : /* @__PURE__ */ import_react.default.createElement(
342
+ ) : /* @__PURE__ */ import_react2.default.createElement(
328
343
  import_web.animated.polygon,
329
344
  {
330
345
  key: "user-animated",
331
346
  points: spring.points,
332
- style: { fill: "rgba(124, 107, 158, 0.4)", stroke: "#7C6B9E", strokeWidth: 3 }
347
+ style: {
348
+ fill: "rgba(124, 107, 158, 0.4)",
349
+ stroke: "#7C6B9E",
350
+ strokeWidth: 3
351
+ }
333
352
  }
334
353
  ),
335
354
  pointsArr.map(([cx, cy], i) => {
@@ -338,42 +357,39 @@ function RadarChartCore({
338
357
  if (!userVal || Number(userVal) === 0) return null;
339
358
  const compareVal = compareData[shortTitle];
340
359
  const matches = hasCompareData && userVal !== 0 && compareVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
341
- return /* @__PURE__ */ import_react.default.createElement(
360
+ return /* @__PURE__ */ import_react2.default.createElement(
342
361
  "circle",
343
362
  {
344
363
  key: `user-dot-${i}`,
345
364
  cx,
346
365
  cy,
347
- r: matches ? 6 : 5,
366
+ r: matches ? 8 : 7,
348
367
  fill: matches ? "#fed12e" : "#7C6B9E",
349
368
  stroke: "#FFFFFF",
350
- strokeWidth: 2,
351
- style: { pointerEvents: "none" }
369
+ strokeWidth: 3
352
370
  }
353
371
  );
354
372
  }),
355
- hasCompareData && comparePoints ? countChanged || compareJustAppeared ? /* @__PURE__ */ import_react.default.createElement(
373
+ hasCompareData && comparePoints ? countChanged || compareJustAppeared ? /* @__PURE__ */ import_react2.default.createElement(
356
374
  "polygon",
357
375
  {
358
376
  key: "compare-static",
359
377
  points: comparePoints,
360
378
  style: {
361
- fill: darkMode ? "rgba(110, 210, 140, 0.55)" : "rgba(90, 154, 110, 0.45)",
362
- stroke: darkMode ? "#6DD28C" : "#5A9A6E",
363
- strokeWidth: 2,
364
- mixBlendMode: darkMode ? "normal" : "multiply"
379
+ fill: "rgba(90, 154, 110, 0.3)",
380
+ stroke: "#5A9A6E",
381
+ strokeWidth: 2
365
382
  }
366
383
  }
367
- ) : /* @__PURE__ */ import_react.default.createElement(
384
+ ) : /* @__PURE__ */ import_react2.default.createElement(
368
385
  import_web.animated.polygon,
369
386
  {
370
387
  key: "compare-animated",
371
388
  points: compareSpring.points,
372
389
  style: {
373
- fill: darkMode ? "rgba(110, 210, 140, 0.55)" : "rgba(90, 154, 110, 0.45)",
374
- stroke: darkMode ? "#6DD28C" : "#5A9A6E",
375
- strokeWidth: 2,
376
- mixBlendMode: darkMode ? "normal" : "multiply"
390
+ fill: "rgba(90, 154, 110, 0.3)",
391
+ stroke: "#5A9A6E",
392
+ strokeWidth: 2
377
393
  }
378
394
  }
379
395
  ) : null,
@@ -382,117 +398,45 @@ function RadarChartCore({
382
398
  const userVal = spokes[i][1];
383
399
  const compareVal = compareData[shortTitle];
384
400
  if (!compareVal || Number(compareVal) === 0) return null;
385
- const matches = userVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
386
- return /* @__PURE__ */ import_react.default.createElement(
401
+ const matches = userVal !== 0 && compareVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
402
+ return /* @__PURE__ */ import_react2.default.createElement(
387
403
  "circle",
388
404
  {
389
405
  key: `compare-dot-${i}`,
390
406
  cx,
391
407
  cy,
392
- r: matches ? 6 : 5,
393
- fill: matches ? "#fed12e" : darkMode ? "#6DD28C" : "#5A9A6E",
408
+ r: matches ? 8 : 7,
409
+ fill: matches ? "#fed12e" : "#5A9A6E",
394
410
  stroke: "#FFFFFF",
395
- strokeWidth: 2,
396
- style: { pointerEvents: "none" }
411
+ strokeWidth: 3
397
412
  }
398
413
  );
399
414
  }),
400
415
  spokes.map(([shortTitle], i) => {
401
416
  const angle = 2 * Math.PI * i / numSpokes;
402
- const endX = centerX + (spokeExtension[shortTitle] ? extRadius : radius) * Math.sin(angle);
403
- const endY = centerY - (spokeExtension[shortTitle] ? extRadius : radius) * Math.cos(angle);
417
+ const x = centerX + radius * Math.sin(angle);
418
+ const y = centerY - radius * Math.cos(angle);
404
419
  const isUnansweredHitbox = !!unansweredSpokes[shortTitle];
405
- return /* @__PURE__ */ import_react.default.createElement(
420
+ return /* @__PURE__ */ import_react2.default.createElement(
406
421
  "line",
407
422
  {
408
423
  key: `hitbox-${shortTitle}`,
409
424
  x1: centerX,
410
425
  y1: centerY,
411
- x2: endX,
412
- y2: endY,
426
+ x2: x,
427
+ y2: y,
413
428
  stroke: "transparent",
414
429
  strokeWidth: 14,
415
430
  onClick: () => isUnansweredHitbox ? onReplaceTopic(shortTitle) : onToggleInversion(shortTitle),
416
431
  style: { cursor: "pointer" }
417
432
  }
418
433
  );
419
- }),
420
- pointsArr.map(([cx, cy], i) => {
421
- const shortTitle = spokes[i][0];
422
- const userVal = spokes[i][1];
423
- if (!userVal || Number(userVal) === 0) return null;
424
- return /* @__PURE__ */ import_react.default.createElement(
425
- "circle",
426
- {
427
- key: `user-sensor-${i}`,
428
- cx,
429
- cy,
430
- r: 14,
431
- fill: "transparent",
432
- stroke: "none",
433
- style: { cursor: "default" },
434
- onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, userVal) }),
435
- onMouseLeave: () => setTooltip(null)
436
- }
437
- );
438
- }),
439
- hasCompareData && compareCoords && compareCoords.map(([cx, cy], i) => {
440
- const shortTitle = spokes[i][0];
441
- const compareVal = compareData[shortTitle];
442
- if (!compareVal || Number(compareVal) === 0) return null;
443
- return /* @__PURE__ */ import_react.default.createElement(
444
- "circle",
445
- {
446
- key: `compare-sensor-${i}`,
447
- cx,
448
- cy,
449
- r: 14,
450
- fill: "transparent",
451
- stroke: "none",
452
- style: { cursor: "default" },
453
- onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, compareVal) }),
454
- onMouseLeave: () => setTooltip(null)
455
- }
456
- );
457
- }),
458
- tooltip && (() => {
459
- const tipW = 190;
460
- const tipH = 70;
461
- const svgW = size + sidePadding * 2;
462
- const tx = tooltip.x + sidePadding + 12 > svgW - tipW ? tooltip.x - tipW - 12 : tooltip.x + 12;
463
- const ty = tooltip.y - 10;
464
- return /* @__PURE__ */ import_react.default.createElement(
465
- "foreignObject",
466
- {
467
- x: tx,
468
- y: ty,
469
- width: tipW,
470
- height: tipH,
471
- style: { overflow: "visible", pointerEvents: "none" }
472
- },
473
- /* @__PURE__ */ import_react.default.createElement(
474
- "div",
475
- {
476
- xmlns: "http://www.w3.org/1999/xhtml",
477
- style: {
478
- background: darkMode ? "#2F3237" : "#ffffff",
479
- border: darkMode ? "1px solid #59B0C4" : "1px solid #d1d5db",
480
- borderRadius: 8,
481
- padding: "7px 11px",
482
- fontSize: 12,
483
- lineHeight: 1.4,
484
- color: darkMode ? "#EBEDEF" : "#111",
485
- boxShadow: darkMode ? "0 2px 12px rgba(0,0,0,0.4)" : "0 2px 8px rgba(0,0,0,0.12)",
486
- width: tipW + "px",
487
- wordWrap: "break-word"
488
- }
489
- },
490
- tooltip.text
491
- )
492
- );
493
- })()
434
+ })
494
435
  );
495
436
  }
437
+ function adaptiveFontSize(longestLineLen, baseFSize) {
438
+ return Math.max(baseFSize, 10);
439
+ }
496
440
  function wrapLabel(label, maxChars = 12) {
497
441
  const str = String(label);
498
442
  let rawWords;
@@ -526,7 +470,7 @@ function wrapLabel(label, maxChars = 12) {
526
470
  }
527
471
 
528
472
  // src/Header.jsx
529
- var import_react3 = __toESM(require("react"));
473
+ var import_react5 = __toESM(require("react"));
530
474
 
531
475
  // src/tokens.js
532
476
  var colorScales = {
@@ -922,13 +866,13 @@ var breakpoints = {
922
866
  };
923
867
 
924
868
  // src/useMediaQuery.js
925
- var import_react2 = require("react");
869
+ var import_react4 = require("react");
926
870
  function useMediaQuery(query) {
927
- const [matches, setMatches] = (0, import_react2.useState)(() => {
871
+ const [matches, setMatches] = (0, import_react4.useState)(() => {
928
872
  if (typeof window === "undefined") return false;
929
873
  return window.matchMedia(query).matches;
930
874
  });
931
- (0, import_react2.useEffect)(() => {
875
+ (0, import_react4.useEffect)(() => {
932
876
  if (typeof window === "undefined") return;
933
877
  const mql = window.matchMedia(query);
934
878
  const handler = (e) => setMatches(e.matches);
@@ -940,16 +884,6 @@ function useMediaQuery(query) {
940
884
  }
941
885
 
942
886
  // src/Header.jsx
943
- var dark = {
944
- bg: "#1C1F23",
945
- bgElevated: "#2F3237",
946
- bgHover: "#41454E",
947
- border: "#41454E",
948
- link: "#59B0C4",
949
- text: "#D3D7DE",
950
- textMuted: "#9CA3AF",
951
- shadow: "0 10px 40px rgba(0,0,0,0.4)"
952
- };
953
887
  function Header({
954
888
  logoSrc,
955
889
  logoAlt = "Empowered Vote",
@@ -960,15 +894,14 @@ function Header({
960
894
  currentPath,
961
895
  onNavigate,
962
896
  profileMenu,
963
- darkMode = false,
964
897
  style = {}
965
898
  }) {
966
- const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react3.useState)(false);
967
- const [openDropdown, setOpenDropdown] = (0, import_react3.useState)(null);
968
- const [profileOpen, setProfileOpen] = (0, import_react3.useState)(false);
899
+ const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react5.useState)(false);
900
+ const [openDropdown, setOpenDropdown] = (0, import_react5.useState)(null);
901
+ const [profileOpen, setProfileOpen] = (0, import_react5.useState)(false);
969
902
  const isMobile = useMediaQuery("(max-width: 768px)");
970
- const profileRef = (0, import_react3.useRef)(null);
971
- (0, import_react3.useEffect)(() => {
903
+ const profileRef = (0, import_react5.useRef)(null);
904
+ (0, import_react5.useEffect)(() => {
972
905
  if (!profileOpen) return;
973
906
  const handleClickOutside = (e) => {
974
907
  if (profileRef.current && !profileRef.current.contains(e.target)) {
@@ -984,16 +917,9 @@ function Header({
984
917
  onNavigate(href);
985
918
  }
986
919
  };
987
- const linkColor = darkMode ? dark.link : colors.evTeal;
988
- const dropdownBg = darkMode ? dark.bgElevated : colors.bgWhite;
989
- const dropdownShadow = darkMode ? dark.shadow : "0 10px 40px rgba(0,0,0,0.1)";
990
- const hoverBg = darkMode ? dark.bgHover : colors.bgLight;
991
- const borderColor = darkMode ? dark.border : colors.borderLight;
992
- const mobileShadow = darkMode ? "0 4px 20px rgba(0,0,0,0.4)" : "0 4px 20px rgba(0,0,0,0.1)";
993
920
  const styles2 = {
994
921
  header: {
995
- backgroundColor: darkMode ? dark.bg : colors.bgWhite,
996
- borderBottom: darkMode ? `1px solid ${dark.border}` : "none",
922
+ backgroundColor: colors.bgWhite,
997
923
  position: "sticky",
998
924
  top: 0,
999
925
  zIndex: 50,
@@ -1021,7 +947,7 @@ function Header({
1021
947
  fontFamily: fonts.primary,
1022
948
  fontWeight: fontWeights.bold,
1023
949
  fontSize: fontSizes.xl,
1024
- color: linkColor,
950
+ color: colors.evTeal,
1025
951
  textDecoration: "none",
1026
952
  cursor: "pointer",
1027
953
  display: "flex",
@@ -1044,12 +970,11 @@ function Header({
1044
970
  zIndex: 100
1045
971
  },
1046
972
  dropdownInner: {
1047
- backgroundColor: dropdownBg,
973
+ backgroundColor: colors.bgWhite,
1048
974
  borderRadius: borderRadius.lg,
1049
- boxShadow: dropdownShadow,
975
+ boxShadow: "0 10px 40px rgba(0,0,0,0.1)",
1050
976
  minWidth: "200px",
1051
- padding: spacing[2],
1052
- border: darkMode ? `1px solid ${dark.border}` : "none"
977
+ padding: spacing[2]
1053
978
  },
1054
979
  dropdownItem: {
1055
980
  display: "block",
@@ -1057,7 +982,7 @@ function Header({
1057
982
  fontFamily: fonts.primary,
1058
983
  fontWeight: fontWeights.medium,
1059
984
  fontSize: fontSizes.base,
1060
- color: linkColor,
985
+ color: colors.evTeal,
1061
986
  textDecoration: "none",
1062
987
  borderRadius: borderRadius.md,
1063
988
  cursor: "pointer"
@@ -1079,13 +1004,13 @@ function Header({
1079
1004
  display: "inline-flex",
1080
1005
  alignItems: "center",
1081
1006
  backgroundColor: "transparent",
1082
- color: linkColor,
1007
+ color: colors.evTeal,
1083
1008
  fontFamily: fonts.primary,
1084
1009
  fontWeight: fontWeights.bold,
1085
1010
  fontSize: fontSizes.base,
1086
1011
  padding: `${spacing[2]} ${spacing[5]}`,
1087
1012
  borderRadius: borderRadius.full || "999px",
1088
- border: `1.5px solid ${linkColor}`,
1013
+ border: `1.5px solid ${colors.evTeal}`,
1089
1014
  cursor: "pointer",
1090
1015
  textDecoration: "none",
1091
1016
  lineHeight: 1.2,
@@ -1101,7 +1026,7 @@ function Header({
1101
1026
  hamburger: {
1102
1027
  width: "24px",
1103
1028
  height: "2px",
1104
- backgroundColor: linkColor,
1029
+ backgroundColor: colors.evTeal,
1105
1030
  position: "relative"
1106
1031
  },
1107
1032
  mobileMenu: {
@@ -1111,26 +1036,25 @@ function Header({
1111
1036
  top: "100%",
1112
1037
  left: 0,
1113
1038
  right: 0,
1114
- backgroundColor: darkMode ? dark.bg : colors.bgWhite,
1039
+ backgroundColor: colors.bgWhite,
1115
1040
  padding: spacing[4],
1116
- boxShadow: mobileShadow,
1117
- borderTop: darkMode ? `1px solid ${dark.border}` : "none"
1041
+ boxShadow: "0 4px 20px rgba(0,0,0,0.1)"
1118
1042
  },
1119
1043
  mobileNavItem: {
1120
1044
  fontFamily: fonts.primary,
1121
1045
  fontWeight: fontWeights.bold,
1122
1046
  fontSize: fontSizes.lg,
1123
- color: linkColor,
1047
+ color: colors.evTeal,
1124
1048
  textDecoration: "none",
1125
1049
  padding: `${spacing[3]} 0`,
1126
- borderBottom: `1px solid ${borderColor}`
1050
+ borderBottom: `1px solid ${colors.borderLight}`
1127
1051
  },
1128
1052
  profileButton: {
1129
1053
  width: "40px",
1130
1054
  height: "40px",
1131
1055
  borderRadius: borderRadius.full,
1132
- border: `2px solid ${linkColor}`,
1133
- backgroundColor: darkMode ? dark.bgElevated : colors.bgLight,
1056
+ border: `2px solid ${colors.evTeal}`,
1057
+ backgroundColor: colors.bgLight,
1134
1058
  cursor: "pointer",
1135
1059
  display: "flex",
1136
1060
  alignItems: "center",
@@ -1145,12 +1069,11 @@ function Header({
1145
1069
  zIndex: 100
1146
1070
  },
1147
1071
  profileDropdownInner: {
1148
- backgroundColor: dropdownBg,
1072
+ backgroundColor: colors.bgWhite,
1149
1073
  borderRadius: borderRadius.lg,
1150
- boxShadow: dropdownShadow,
1074
+ boxShadow: "0 10px 40px rgba(0,0,0,0.1)",
1151
1075
  minWidth: "160px",
1152
- padding: spacing[2],
1153
- border: darkMode ? `1px solid ${dark.border}` : "none"
1076
+ padding: spacing[2]
1154
1077
  },
1155
1078
  profileDropdownItem: {
1156
1079
  display: "block",
@@ -1159,7 +1082,7 @@ function Header({
1159
1082
  fontFamily: fonts.primary,
1160
1083
  fontWeight: fontWeights.medium,
1161
1084
  fontSize: fontSizes.base,
1162
- color: linkColor,
1085
+ color: colors.evTeal,
1163
1086
  textDecoration: "none",
1164
1087
  borderRadius: borderRadius.md,
1165
1088
  cursor: "pointer",
@@ -1169,7 +1092,7 @@ function Header({
1169
1092
  },
1170
1093
  mobileDivider: {
1171
1094
  height: "1px",
1172
- backgroundColor: borderColor,
1095
+ backgroundColor: colors.borderLight,
1173
1096
  margin: `${spacing[3]} 0`
1174
1097
  },
1175
1098
  profileLabel: {
@@ -1177,8 +1100,8 @@ function Header({
1177
1100
  fontFamily: fonts.primary,
1178
1101
  fontWeight: fontWeights.semibold,
1179
1102
  fontSize: fontSizes.sm,
1180
- color: darkMode ? dark.textMuted : colors.textMuted,
1181
- borderBottom: `1px solid ${borderColor}`,
1103
+ color: colors.textMuted,
1104
+ borderBottom: `1px solid ${colors.borderLight}`,
1182
1105
  marginBottom: spacing[1],
1183
1106
  overflow: "hidden",
1184
1107
  textOverflow: "ellipsis",
@@ -1189,14 +1112,14 @@ function Header({
1189
1112
  const isActive = currentPath === item.href;
1190
1113
  const hasDropdown = item.dropdown && item.dropdown.length > 0;
1191
1114
  const isOpen = openDropdown === item.label;
1192
- return /* @__PURE__ */ import_react3.default.createElement(
1115
+ return /* @__PURE__ */ import_react5.default.createElement(
1193
1116
  "div",
1194
1117
  {
1195
1118
  style: { position: "relative" },
1196
1119
  onMouseEnter: () => hasDropdown && setOpenDropdown(item.label),
1197
1120
  onMouseLeave: () => hasDropdown && setOpenDropdown(null)
1198
1121
  },
1199
- /* @__PURE__ */ import_react3.default.createElement(
1122
+ /* @__PURE__ */ import_react5.default.createElement(
1200
1123
  "a",
1201
1124
  {
1202
1125
  href: item.href,
@@ -1207,7 +1130,7 @@ function Header({
1207
1130
  }
1208
1131
  },
1209
1132
  item.label,
1210
- hasDropdown && /* @__PURE__ */ import_react3.default.createElement(
1133
+ hasDropdown && /* @__PURE__ */ import_react5.default.createElement(
1211
1134
  "svg",
1212
1135
  {
1213
1136
  style: styles2.dropdownIcon,
@@ -1215,11 +1138,11 @@ function Header({
1215
1138
  fill: "none",
1216
1139
  xmlns: "http://www.w3.org/2000/svg"
1217
1140
  },
1218
- /* @__PURE__ */ import_react3.default.createElement(
1141
+ /* @__PURE__ */ import_react5.default.createElement(
1219
1142
  "path",
1220
1143
  {
1221
1144
  d: "M1 1L8 8L15 1",
1222
- stroke: linkColor,
1145
+ stroke: colors.evTeal,
1223
1146
  strokeWidth: "2",
1224
1147
  strokeLinecap: "round",
1225
1148
  strokeLinejoin: "round"
@@ -1227,7 +1150,7 @@ function Header({
1227
1150
  )
1228
1151
  )
1229
1152
  ),
1230
- hasDropdown && isOpen && /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.dropdown }, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.dropdownInner }, item.dropdown.map((dropdownItem, idx) => /* @__PURE__ */ import_react3.default.createElement(
1153
+ hasDropdown && isOpen && /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.dropdown }, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.dropdownInner }, item.dropdown.map((dropdownItem, idx) => /* @__PURE__ */ import_react5.default.createElement(
1231
1154
  "a",
1232
1155
  {
1233
1156
  key: idx,
@@ -1235,7 +1158,7 @@ function Header({
1235
1158
  onClick: (e) => handleNavClick(e, dropdownItem.href),
1236
1159
  style: styles2.dropdownItem,
1237
1160
  onMouseEnter: (e) => {
1238
- e.target.style.backgroundColor = hoverBg;
1161
+ e.target.style.backgroundColor = colors.bgLight;
1239
1162
  },
1240
1163
  onMouseLeave: (e) => {
1241
1164
  e.target.style.backgroundColor = "transparent";
@@ -1245,26 +1168,26 @@ function Header({
1245
1168
  ))))
1246
1169
  );
1247
1170
  };
1248
- return /* @__PURE__ */ import_react3.default.createElement("header", { style: styles2.header }, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.container }, /* @__PURE__ */ import_react3.default.createElement(
1171
+ return /* @__PURE__ */ import_react5.default.createElement("header", { style: styles2.header }, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.container }, /* @__PURE__ */ import_react5.default.createElement(
1249
1172
  "a",
1250
1173
  {
1251
1174
  href: logoHref,
1252
1175
  onClick: (e) => handleNavClick(e, logoHref),
1253
1176
  style: { display: "flex", alignItems: "center" }
1254
1177
  },
1255
- logoSrc ? /* @__PURE__ */ import_react3.default.createElement("img", { src: logoSrc, alt: logoAlt, style: styles2.logo }) : /* @__PURE__ */ import_react3.default.createElement(
1178
+ logoSrc ? /* @__PURE__ */ import_react5.default.createElement("img", { src: logoSrc, alt: logoAlt, style: styles2.logo }) : /* @__PURE__ */ import_react5.default.createElement(
1256
1179
  "span",
1257
1180
  {
1258
1181
  style: {
1259
1182
  fontFamily: fonts.primary,
1260
1183
  fontWeight: fontWeights.bold,
1261
1184
  fontSize: fontSizes["2xl"],
1262
- color: linkColor
1185
+ color: colors.evTeal
1263
1186
  }
1264
1187
  },
1265
1188
  "empowered.vote"
1266
1189
  )
1267
- ), /* @__PURE__ */ import_react3.default.createElement("nav", { style: styles2.nav, className: "ev-header-nav" }, navItems.map((item, idx) => /* @__PURE__ */ import_react3.default.createElement(NavLink, { key: idx, item }))), /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: isMobile ? "none" : "flex", alignItems: "center", gap: spacing[3] } }, secondaryAction && import_react3.default.isValidElement(secondaryAction) && secondaryAction, secondaryAction && !import_react3.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react3.default.createElement(
1190
+ ), /* @__PURE__ */ import_react5.default.createElement("nav", { style: styles2.nav, className: "ev-header-nav" }, navItems.map((item, idx) => /* @__PURE__ */ import_react5.default.createElement(NavLink, { key: idx, item }))), /* @__PURE__ */ import_react5.default.createElement("div", { style: { display: isMobile ? "none" : "flex", alignItems: "center", gap: spacing[3] } }, secondaryAction && import_react5.default.isValidElement(secondaryAction) && secondaryAction, secondaryAction && !import_react5.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react5.default.createElement(
1268
1191
  "a",
1269
1192
  {
1270
1193
  href: secondaryAction.href,
@@ -1278,16 +1201,16 @@ function Header({
1278
1201
  style: styles2.secondaryAction,
1279
1202
  className: "ev-header-secondary",
1280
1203
  onMouseEnter: (e) => {
1281
- e.currentTarget.style.backgroundColor = linkColor;
1204
+ e.currentTarget.style.backgroundColor = colors.evTeal;
1282
1205
  e.currentTarget.style.color = colors.textWhite;
1283
1206
  },
1284
1207
  onMouseLeave: (e) => {
1285
1208
  e.currentTarget.style.backgroundColor = "transparent";
1286
- e.currentTarget.style.color = linkColor;
1209
+ e.currentTarget.style.color = colors.evTeal;
1287
1210
  }
1288
1211
  },
1289
1212
  secondaryAction.label
1290
- ), ctaButton && /* @__PURE__ */ import_react3.default.createElement(
1213
+ ), ctaButton && /* @__PURE__ */ import_react5.default.createElement(
1291
1214
  "a",
1292
1215
  {
1293
1216
  href: ctaButton.href,
@@ -1302,7 +1225,7 @@ function Header({
1302
1225
  }
1303
1226
  },
1304
1227
  ctaButton.label
1305
- ), profileMenu && /* @__PURE__ */ import_react3.default.createElement("div", { ref: profileRef, style: { position: "relative" } }, /* @__PURE__ */ import_react3.default.createElement(
1228
+ ), profileMenu && /* @__PURE__ */ import_react5.default.createElement("div", { ref: profileRef, style: { position: "relative" } }, /* @__PURE__ */ import_react5.default.createElement(
1306
1229
  "button",
1307
1230
  {
1308
1231
  style: styles2.profileButton,
@@ -1310,24 +1233,24 @@ function Header({
1310
1233
  "aria-label": "Profile menu",
1311
1234
  "aria-expanded": profileOpen
1312
1235
  },
1313
- /* @__PURE__ */ import_react3.default.createElement(
1236
+ /* @__PURE__ */ import_react5.default.createElement(
1314
1237
  "svg",
1315
1238
  {
1316
1239
  width: "20",
1317
1240
  height: "20",
1318
1241
  viewBox: "0 0 24 24",
1319
1242
  fill: "none",
1320
- stroke: linkColor,
1243
+ stroke: colors.evTeal,
1321
1244
  strokeWidth: "2",
1322
1245
  strokeLinecap: "round",
1323
1246
  strokeLinejoin: "round"
1324
1247
  },
1325
- /* @__PURE__ */ import_react3.default.createElement("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
1326
- /* @__PURE__ */ import_react3.default.createElement("circle", { cx: "12", cy: "7", r: "4" })
1248
+ /* @__PURE__ */ import_react5.default.createElement("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
1249
+ /* @__PURE__ */ import_react5.default.createElement("circle", { cx: "12", cy: "7", r: "4" })
1327
1250
  )
1328
- ), profileOpen && /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.profileDropdown }, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.profileDropdownInner }, profileMenu.label && /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.profileLabel }, profileMenu.label), profileMenu.items.map((item, idx) => {
1251
+ ), profileOpen && /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.profileDropdown }, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.profileDropdownInner }, profileMenu.label && /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.profileLabel }, profileMenu.label), profileMenu.items.map((item, idx) => {
1329
1252
  if (item.href) {
1330
- return /* @__PURE__ */ import_react3.default.createElement(
1253
+ return /* @__PURE__ */ import_react5.default.createElement(
1331
1254
  "a",
1332
1255
  {
1333
1256
  key: idx,
@@ -1341,7 +1264,7 @@ function Header({
1341
1264
  },
1342
1265
  style: styles2.profileDropdownItem,
1343
1266
  onMouseEnter: (e) => {
1344
- e.target.style.backgroundColor = hoverBg;
1267
+ e.target.style.backgroundColor = colors.bgLight;
1345
1268
  },
1346
1269
  onMouseLeave: (e) => {
1347
1270
  e.target.style.backgroundColor = "transparent";
@@ -1350,7 +1273,7 @@ function Header({
1350
1273
  item.label
1351
1274
  );
1352
1275
  }
1353
- return /* @__PURE__ */ import_react3.default.createElement(
1276
+ return /* @__PURE__ */ import_react5.default.createElement(
1354
1277
  "button",
1355
1278
  {
1356
1279
  key: idx,
@@ -1361,7 +1284,7 @@ function Header({
1361
1284
  },
1362
1285
  style: styles2.profileDropdownItem,
1363
1286
  onMouseEnter: (e) => {
1364
- e.target.style.backgroundColor = hoverBg;
1287
+ e.target.style.backgroundColor = colors.bgLight;
1365
1288
  },
1366
1289
  onMouseLeave: (e) => {
1367
1290
  e.target.style.backgroundColor = "transparent";
@@ -1369,7 +1292,7 @@ function Header({
1369
1292
  },
1370
1293
  item.label
1371
1294
  );
1372
- }))))), /* @__PURE__ */ import_react3.default.createElement(
1295
+ }))))), /* @__PURE__ */ import_react5.default.createElement(
1373
1296
  "button",
1374
1297
  {
1375
1298
  style: styles2.mobileMenuButton,
@@ -1378,7 +1301,7 @@ function Header({
1378
1301
  "aria-label": "Toggle menu",
1379
1302
  "aria-expanded": mobileMenuOpen
1380
1303
  },
1381
- /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.hamburger }, /* @__PURE__ */ import_react3.default.createElement(
1304
+ /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.hamburger }, /* @__PURE__ */ import_react5.default.createElement(
1382
1305
  "span",
1383
1306
  {
1384
1307
  style: {
@@ -1387,10 +1310,10 @@ function Header({
1387
1310
  left: 0,
1388
1311
  width: "100%",
1389
1312
  height: "2px",
1390
- backgroundColor: linkColor
1313
+ backgroundColor: colors.evTeal
1391
1314
  }
1392
1315
  }
1393
- ), /* @__PURE__ */ import_react3.default.createElement(
1316
+ ), /* @__PURE__ */ import_react5.default.createElement(
1394
1317
  "span",
1395
1318
  {
1396
1319
  style: {
@@ -1399,13 +1322,13 @@ function Header({
1399
1322
  left: 0,
1400
1323
  width: "100%",
1401
1324
  height: "2px",
1402
- backgroundColor: linkColor
1325
+ backgroundColor: colors.evTeal
1403
1326
  }
1404
1327
  }
1405
1328
  ))
1406
- )), /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.mobileMenu, className: "ev-header-mobile-menu" }, navItems.map((item, idx) => {
1329
+ )), /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.mobileMenu, className: "ev-header-mobile-menu" }, navItems.map((item, idx) => {
1407
1330
  const hasDropdown = item.dropdown && item.dropdown.length > 0;
1408
- return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, { key: idx }, hasDropdown ? /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(
1331
+ return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, { key: idx }, hasDropdown ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(
1409
1332
  "span",
1410
1333
  {
1411
1334
  style: {
@@ -1415,7 +1338,7 @@ function Header({
1415
1338
  }
1416
1339
  },
1417
1340
  item.label
1418
- ), item.dropdown.map((sub, subIdx) => /* @__PURE__ */ import_react3.default.createElement(
1341
+ ), item.dropdown.map((sub, subIdx) => /* @__PURE__ */ import_react5.default.createElement(
1419
1342
  "a",
1420
1343
  {
1421
1344
  key: subIdx,
@@ -1432,7 +1355,7 @@ function Header({
1432
1355
  }
1433
1356
  },
1434
1357
  sub.label
1435
- ))) : /* @__PURE__ */ import_react3.default.createElement(
1358
+ ))) : /* @__PURE__ */ import_react5.default.createElement(
1436
1359
  "a",
1437
1360
  {
1438
1361
  href: item.href,
@@ -1444,7 +1367,7 @@ function Header({
1444
1367
  },
1445
1368
  item.label
1446
1369
  ));
1447
- }), secondaryAction && import_react3.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react3.default.createElement("div", { style: { marginTop: spacing[4], textAlign: "center" } }, secondaryAction), secondaryAction && !import_react3.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react3.default.createElement(
1370
+ }), secondaryAction && import_react5.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react5.default.createElement("div", { style: { marginTop: spacing[4], textAlign: "center" } }, secondaryAction), secondaryAction && !import_react5.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react5.default.createElement(
1448
1371
  "a",
1449
1372
  {
1450
1373
  href: secondaryAction.href,
@@ -1459,7 +1382,7 @@ function Header({
1459
1382
  style: { ...styles2.secondaryAction, marginTop: spacing[4], textAlign: "center", justifyContent: "center" }
1460
1383
  },
1461
1384
  secondaryAction.label
1462
- ), ctaButton && /* @__PURE__ */ import_react3.default.createElement(
1385
+ ), ctaButton && /* @__PURE__ */ import_react5.default.createElement(
1463
1386
  "a",
1464
1387
  {
1465
1388
  href: ctaButton.href,
@@ -1470,7 +1393,7 @@ function Header({
1470
1393
  style: { ...styles2.ctaButton, marginTop: spacing[4], textAlign: "center" }
1471
1394
  },
1472
1395
  ctaButton.label
1473
- ), profileMenu && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.mobileDivider }), profileMenu.label && /* @__PURE__ */ import_react3.default.createElement(
1396
+ ), profileMenu && /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.mobileDivider }), profileMenu.label && /* @__PURE__ */ import_react5.default.createElement(
1474
1397
  "span",
1475
1398
  {
1476
1399
  style: {
@@ -1486,7 +1409,7 @@ function Header({
1486
1409
  profileMenu.label
1487
1410
  ), profileMenu.items.map((item, idx) => {
1488
1411
  if (item.href) {
1489
- return /* @__PURE__ */ import_react3.default.createElement(
1412
+ return /* @__PURE__ */ import_react5.default.createElement(
1490
1413
  "a",
1491
1414
  {
1492
1415
  key: idx,
@@ -1503,7 +1426,7 @@ function Header({
1503
1426
  item.label
1504
1427
  );
1505
1428
  }
1506
- return /* @__PURE__ */ import_react3.default.createElement(
1429
+ return /* @__PURE__ */ import_react5.default.createElement(
1507
1430
  "button",
1508
1431
  {
1509
1432
  key: idx,
@@ -1527,10 +1450,10 @@ function Header({
1527
1450
  }
1528
1451
 
1529
1452
  // src/SiteHeader.jsx
1530
- var import_react5 = __toESM(require("react"));
1453
+ var import_react7 = __toESM(require("react"));
1531
1454
 
1532
1455
  // src/FeedbackButton.jsx
1533
- var import_react4 = __toESM(require("react"));
1456
+ var import_react6 = __toESM(require("react"));
1534
1457
  var FEEDBACK_BASE_DEFAULT = "https://alpha.empowered.vote/feedback";
1535
1458
  var HOST_FEATURE_MAP = {
1536
1459
  "compass.empowered.vote": "compass",
@@ -1601,7 +1524,7 @@ function FeedbackButton({
1601
1524
  cursor: "pointer"
1602
1525
  };
1603
1526
  const baseStyle = variant === "link" ? linkStyle2 : pillStyle;
1604
- return /* @__PURE__ */ import_react4.default.createElement(
1527
+ return /* @__PURE__ */ import_react6.default.createElement(
1605
1528
  "a",
1606
1529
  {
1607
1530
  href,
@@ -1652,7 +1575,6 @@ function SiteHeader({
1652
1575
  profileMenu,
1653
1576
  secondaryAction,
1654
1577
  feedbackFeature,
1655
- darkMode = false,
1656
1578
  style = {}
1657
1579
  }) {
1658
1580
  const handleNavigate = (href) => {
@@ -1666,11 +1588,11 @@ function SiteHeader({
1666
1588
  if (secondaryAction === false) {
1667
1589
  resolvedSecondary = void 0;
1668
1590
  } else if (secondaryAction === void 0) {
1669
- resolvedSecondary = /* @__PURE__ */ import_react5.default.createElement(FeedbackButton, { feature: feedbackFeature });
1591
+ resolvedSecondary = /* @__PURE__ */ import_react7.default.createElement(FeedbackButton, { feature: feedbackFeature });
1670
1592
  } else {
1671
1593
  resolvedSecondary = secondaryAction;
1672
1594
  }
1673
- return /* @__PURE__ */ import_react5.default.createElement(
1595
+ return /* @__PURE__ */ import_react7.default.createElement(
1674
1596
  Header,
1675
1597
  {
1676
1598
  logoSrc,
@@ -1681,14 +1603,13 @@ function SiteHeader({
1681
1603
  currentPath,
1682
1604
  onNavigate: handleNavigate,
1683
1605
  profileMenu,
1684
- darkMode,
1685
1606
  style
1686
1607
  }
1687
1608
  );
1688
1609
  }
1689
1610
 
1690
1611
  // src/FilterSidebar.jsx
1691
- var import_react6 = __toESM(require("react"));
1612
+ var import_react8 = __toESM(require("react"));
1692
1613
  function FilterSidebar({
1693
1614
  title = "Filter by",
1694
1615
  zipCode = "",
@@ -1842,14 +1763,14 @@ function FilterSidebar({
1842
1763
  fontSize: fontSizes.sm
1843
1764
  }
1844
1765
  };
1845
- return /* @__PURE__ */ import_react6.default.createElement("aside", { style: styles2.sidebar, className: "ev-filter-sidebar" }, !isMobile && /* @__PURE__ */ import_react6.default.createElement("h2", { style: styles2.title }, title), /* @__PURE__ */ import_react6.default.createElement("div", { style: isMobile ? void 0 : styles2.contentTop }, /* @__PURE__ */ import_react6.default.createElement("div", { style: isMobile ? { marginBottom: spacing[3] } : styles2.section }, !isMobile && /* @__PURE__ */ import_react6.default.createElement("label", { style: styles2.sectionLabel }, "Location"), autocompleteContainerRef ? /* @__PURE__ */ import_react6.default.createElement(
1766
+ return /* @__PURE__ */ import_react8.default.createElement("aside", { style: styles2.sidebar, className: "ev-filter-sidebar" }, !isMobile && /* @__PURE__ */ import_react8.default.createElement("h2", { style: styles2.title }, title), /* @__PURE__ */ import_react8.default.createElement("div", { style: isMobile ? void 0 : styles2.contentTop }, /* @__PURE__ */ import_react8.default.createElement("div", { style: isMobile ? { marginBottom: spacing[3] } : styles2.section }, !isMobile && /* @__PURE__ */ import_react8.default.createElement("label", { style: styles2.sectionLabel }, "Location"), autocompleteContainerRef ? /* @__PURE__ */ import_react8.default.createElement(
1846
1767
  "div",
1847
1768
  {
1848
1769
  ref: autocompleteContainerRef,
1849
1770
  style: styles2.zipInputWrapper,
1850
1771
  className: "ev-autocomplete-container"
1851
1772
  }
1852
- ) : /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.zipInputWrapper }, /* @__PURE__ */ import_react6.default.createElement(
1773
+ ) : /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.zipInputWrapper }, /* @__PURE__ */ import_react8.default.createElement(
1853
1774
  "input",
1854
1775
  {
1855
1776
  ref: zipInputRef,
@@ -1861,7 +1782,7 @@ function FilterSidebar({
1861
1782
  style: styles2.zipInput,
1862
1783
  "aria-label": "Search location"
1863
1784
  }
1864
- ), /* @__PURE__ */ import_react6.default.createElement(
1785
+ ), /* @__PURE__ */ import_react8.default.createElement(
1865
1786
  "button",
1866
1787
  {
1867
1788
  type: "button",
@@ -1870,7 +1791,7 @@ function FilterSidebar({
1870
1791
  "aria-label": "Clear ZIP code"
1871
1792
  },
1872
1793
  "\xD7"
1873
- ))), /* @__PURE__ */ import_react6.default.createElement("div", { style: isMobile ? {} : styles2.section }, !isMobile && /* @__PURE__ */ import_react6.default.createElement("label", { style: styles2.sectionLabel }, "Group"), /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.radioGroup, role: "radiogroup", "aria-label": "Filter by group" }, filterOptions.map((option) => /* @__PURE__ */ import_react6.default.createElement("label", { key: option.value, style: styles2.radioLabel }, /* @__PURE__ */ import_react6.default.createElement(
1794
+ ))), /* @__PURE__ */ import_react8.default.createElement("div", { style: isMobile ? {} : styles2.section }, !isMobile && /* @__PURE__ */ import_react8.default.createElement("label", { style: styles2.sectionLabel }, "Group"), /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.radioGroup, role: "radiogroup", "aria-label": "Filter by group" }, filterOptions.map((option) => /* @__PURE__ */ import_react8.default.createElement("label", { key: option.value, style: styles2.radioLabel }, /* @__PURE__ */ import_react8.default.createElement(
1874
1795
  "input",
1875
1796
  {
1876
1797
  type: "radio",
@@ -1880,18 +1801,18 @@ function FilterSidebar({
1880
1801
  onChange: () => onFilterChange == null ? void 0 : onFilterChange(option.value),
1881
1802
  style: styles2.radioInput
1882
1803
  }
1883
- ), option.label))))), !isMobile && /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.imageSection }, locationLabel && /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.locationLabel }, locationLabel), buildingImageSrc ? /* @__PURE__ */ import_react6.default.createElement(
1804
+ ), option.label))))), !isMobile && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.imageSection }, locationLabel && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.locationLabel }, locationLabel), buildingImageSrc ? /* @__PURE__ */ import_react8.default.createElement(
1884
1805
  "img",
1885
1806
  {
1886
1807
  src: buildingImageSrc,
1887
1808
  alt: `${selectedFilter} government building`,
1888
1809
  style: styles2.buildingImage
1889
1810
  }
1890
- ) : /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.buildingPlaceholder }, "No image")));
1811
+ ) : /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.buildingPlaceholder }, "No image")));
1891
1812
  }
1892
1813
 
1893
1814
  // src/PoliticianCard.jsx
1894
- var import_react7 = __toESM(require("react"));
1815
+ var import_react9 = __toESM(require("react"));
1895
1816
  function PoliticianCard({
1896
1817
  id,
1897
1818
  imageSrc,
@@ -2043,7 +1964,7 @@ function PoliticianCard({
2043
1964
  textTransform: "uppercase"
2044
1965
  }
2045
1966
  };
2046
- const CompassIcon2 = () => /* @__PURE__ */ import_react7.default.createElement(
1967
+ const CompassIcon2 = () => /* @__PURE__ */ import_react9.default.createElement(
2047
1968
  "svg",
2048
1969
  {
2049
1970
  style: styles2.compassIcon,
@@ -2051,7 +1972,7 @@ function PoliticianCard({
2051
1972
  fill: "none",
2052
1973
  xmlns: "http://www.w3.org/2000/svg"
2053
1974
  },
2054
- /* @__PURE__ */ import_react7.default.createElement(
1975
+ /* @__PURE__ */ import_react9.default.createElement(
2055
1976
  "polygon",
2056
1977
  {
2057
1978
  points: "12,1 21.5,6.5 21.5,17.5 12,23 2.5,17.5 2.5,6.5",
@@ -2061,13 +1982,13 @@ function PoliticianCard({
2061
1982
  strokeLinejoin: "round"
2062
1983
  }
2063
1984
  ),
2064
- /* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "1", stroke: "currentColor", strokeWidth: "1" }),
2065
- /* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
2066
- /* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
2067
- /* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "23", stroke: "currentColor", strokeWidth: "1" }),
2068
- /* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
2069
- /* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
2070
- /* @__PURE__ */ import_react7.default.createElement(
1985
+ /* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "1", stroke: "currentColor", strokeWidth: "1" }),
1986
+ /* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
1987
+ /* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
1988
+ /* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "23", stroke: "currentColor", strokeWidth: "1" }),
1989
+ /* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
1990
+ /* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
1991
+ /* @__PURE__ */ import_react9.default.createElement(
2071
1992
  "polygon",
2072
1993
  {
2073
1994
  points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
@@ -2075,7 +1996,7 @@ function PoliticianCard({
2075
1996
  opacity: "0.35"
2076
1997
  }
2077
1998
  ),
2078
- /* @__PURE__ */ import_react7.default.createElement(
1999
+ /* @__PURE__ */ import_react9.default.createElement(
2079
2000
  "polygon",
2080
2001
  {
2081
2002
  points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
@@ -2086,8 +2007,8 @@ function PoliticianCard({
2086
2007
  }
2087
2008
  )
2088
2009
  );
2089
- const [imgError, setImgError] = (0, import_react7.useState)(false);
2090
- (0, import_react7.useEffect)(() => {
2010
+ const [imgError, setImgError] = (0, import_react9.useState)(false);
2011
+ (0, import_react9.useEffect)(() => {
2091
2012
  setImgError(false);
2092
2013
  }, [imageSrc]);
2093
2014
  const getInitials = (n) => {
@@ -2096,7 +2017,7 @@ function PoliticianCard({
2096
2017
  const initials = parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_a = parts[0]) == null ? void 0 : _a[0]) || "?";
2097
2018
  return initials.toUpperCase();
2098
2019
  };
2099
- return /* @__PURE__ */ import_react7.default.createElement(
2020
+ return /* @__PURE__ */ import_react9.default.createElement(
2100
2021
  "div",
2101
2022
  {
2102
2023
  style: styles2.card,
@@ -2121,8 +2042,8 @@ function PoliticianCard({
2121
2042
  }
2122
2043
  }
2123
2044
  },
2124
- badge && /* @__PURE__ */ import_react7.default.createElement("span", { style: styles2.badge }, badge),
2125
- /* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.imageWrapper }, imageSrc && !imgError ? /* @__PURE__ */ import_react7.default.createElement(
2045
+ badge && /* @__PURE__ */ import_react9.default.createElement("span", { style: styles2.badge }, badge),
2046
+ /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.imageWrapper }, imageSrc && !imgError ? /* @__PURE__ */ import_react9.default.createElement(
2126
2047
  "img",
2127
2048
  {
2128
2049
  src: imageSrc,
@@ -2130,9 +2051,9 @@ function PoliticianCard({
2130
2051
  style: styles2.image,
2131
2052
  onError: () => setImgError(true)
2132
2053
  }
2133
- ) : /* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.imagePlaceholder }, getInitials(name))),
2134
- /* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.content }, /* @__PURE__ */ import_react7.default.createElement("h3", { style: styles2.name }, name), /* @__PURE__ */ import_react7.default.createElement("p", { style: styles2.title }, title), subtitle && /* @__PURE__ */ import_react7.default.createElement("p", { style: styles2.subtitle }, subtitle), footer && /* @__PURE__ */ import_react7.default.createElement("div", { style: { marginTop: "auto", marginLeft: "-5px" } }, footer)),
2135
- onCompassClick && /* @__PURE__ */ import_react7.default.createElement(
2054
+ ) : /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.imagePlaceholder }, getInitials(name))),
2055
+ /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.content }, /* @__PURE__ */ import_react9.default.createElement("h3", { style: styles2.name }, name), /* @__PURE__ */ import_react9.default.createElement("p", { style: styles2.title }, title), subtitle && /* @__PURE__ */ import_react9.default.createElement("p", { style: styles2.subtitle }, subtitle), footer && /* @__PURE__ */ import_react9.default.createElement("div", { style: { marginTop: "auto", marginLeft: "-5px" } }, footer)),
2056
+ onCompassClick && /* @__PURE__ */ import_react9.default.createElement(
2136
2057
  "button",
2137
2058
  {
2138
2059
  type: "button",
@@ -2147,16 +2068,16 @@ function PoliticianCard({
2147
2068
  },
2148
2069
  "aria-label": `View ${name}'s compass`
2149
2070
  },
2150
- /* @__PURE__ */ import_react7.default.createElement(CompassIcon2, null)
2071
+ /* @__PURE__ */ import_react9.default.createElement(CompassIcon2, null)
2151
2072
  )
2152
2073
  );
2153
2074
  }
2154
2075
 
2155
2076
  // src/CompassCardHorizontal.jsx
2156
- var import_react13 = __toESM(require("react"));
2077
+ var import_react15 = __toESM(require("react"));
2157
2078
 
2158
2079
  // src/PlaceholderRadar.jsx
2159
- var import_react8 = __toESM(require("react"));
2080
+ var import_react10 = __toESM(require("react"));
2160
2081
  function PlaceholderRadar({ size = 250, name = "" }) {
2161
2082
  const cx = size / 2;
2162
2083
  const cy = size / 2;
@@ -2169,7 +2090,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
2169
2090
  const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
2170
2091
  const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
2171
2092
  const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
2172
- return /* @__PURE__ */ import_react8.default.createElement(
2093
+ return /* @__PURE__ */ import_react10.default.createElement(
2173
2094
  "svg",
2174
2095
  {
2175
2096
  width: size,
@@ -2183,7 +2104,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
2183
2104
  flexShrink: 0
2184
2105
  }
2185
2106
  },
2186
- vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
2107
+ vertices.map(([x, y], i) => /* @__PURE__ */ import_react10.default.createElement(
2187
2108
  "line",
2188
2109
  {
2189
2110
  key: i,
@@ -2197,7 +2118,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
2197
2118
  opacity: "0.6"
2198
2119
  }
2199
2120
  )),
2200
- /* @__PURE__ */ import_react8.default.createElement(
2121
+ /* @__PURE__ */ import_react10.default.createElement(
2201
2122
  "polygon",
2202
2123
  {
2203
2124
  points: innerPts,
@@ -2208,7 +2129,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
2208
2129
  opacity: "0.5"
2209
2130
  }
2210
2131
  ),
2211
- /* @__PURE__ */ import_react8.default.createElement(
2132
+ /* @__PURE__ */ import_react10.default.createElement(
2212
2133
  "polygon",
2213
2134
  {
2214
2135
  points: midPts,
@@ -2219,7 +2140,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
2219
2140
  opacity: "0.6"
2220
2141
  }
2221
2142
  ),
2222
- /* @__PURE__ */ import_react8.default.createElement(
2143
+ /* @__PURE__ */ import_react10.default.createElement(
2223
2144
  "polygon",
2224
2145
  {
2225
2146
  points: outerPts,
@@ -2233,16 +2154,16 @@ function PlaceholderRadar({ size = 250, name = "" }) {
2233
2154
  }
2234
2155
 
2235
2156
  // src/CompassCardHorizontalMeta.jsx
2236
- var import_react12 = __toESM(require("react"));
2157
+ var import_react14 = __toESM(require("react"));
2237
2158
 
2238
2159
  // src/IconOverlay.jsx
2239
- var import_react10 = __toESM(require("react"));
2240
- var import_react11 = require("@floating-ui/react");
2160
+ var import_react12 = __toESM(require("react"));
2161
+ var import_react13 = require("@floating-ui/react");
2241
2162
 
2242
2163
  // src/icons.js
2243
- var import_react9 = __toESM(require("react"));
2164
+ var import_react11 = __toESM(require("react"));
2244
2165
  function BallotIcon({ size = 16, color = "currentColor" }) {
2245
- return /* @__PURE__ */ import_react9.default.createElement(
2166
+ return /* @__PURE__ */ import_react11.default.createElement(
2246
2167
  "svg",
2247
2168
  {
2248
2169
  width: size,
@@ -2255,13 +2176,13 @@ function BallotIcon({ size = 16, color = "currentColor" }) {
2255
2176
  strokeLinejoin: "round",
2256
2177
  xmlns: "http://www.w3.org/2000/svg"
2257
2178
  },
2258
- /* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
2259
- /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
2260
- /* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
2179
+ /* @__PURE__ */ import_react11.default.createElement("path", { d: "m9 12 2 2 4-4" }),
2180
+ /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
2181
+ /* @__PURE__ */ import_react11.default.createElement("path", { d: "M22 19H2" })
2261
2182
  );
2262
2183
  }
2263
2184
  function CompassIcon({ size = 16, color = "currentColor" }) {
2264
- return /* @__PURE__ */ import_react9.default.createElement(
2185
+ return /* @__PURE__ */ import_react11.default.createElement(
2265
2186
  "svg",
2266
2187
  {
2267
2188
  width: size,
@@ -2274,27 +2195,27 @@ function CompassIcon({ size = 16, color = "currentColor" }) {
2274
2195
  strokeLinejoin: "round",
2275
2196
  xmlns: "http://www.w3.org/2000/svg"
2276
2197
  },
2277
- /* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
2278
- /* @__PURE__ */ import_react9.default.createElement("path", { d: "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" })
2198
+ /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
2199
+ /* @__PURE__ */ import_react11.default.createElement("path", { d: "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" })
2279
2200
  );
2280
2201
  }
2281
2202
  function BranchIcon({ size = 16, color = "currentColor", branch }) {
2282
2203
  let paths;
2283
2204
  switch (branch) {
2284
2205
  case "executive":
2285
- paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react9.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react9.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
2206
+ paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react11.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react11.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
2286
2207
  break;
2287
2208
  case "legislative":
2288
- paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M15 12h-5" }));
2209
+ paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M15 12h-5" }));
2289
2210
  break;
2290
2211
  case "judicial":
2291
- paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M8 21h8" }));
2212
+ paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M8 21h8" }));
2292
2213
  break;
2293
2214
  default:
2294
- paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M6 18v-7" }));
2215
+ paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M6 18v-7" }));
2295
2216
  break;
2296
2217
  }
2297
- return /* @__PURE__ */ import_react9.default.createElement(
2218
+ return /* @__PURE__ */ import_react11.default.createElement(
2298
2219
  "svg",
2299
2220
  {
2300
2221
  width: size,
@@ -2313,24 +2234,24 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
2313
2234
 
2314
2235
  // src/IconOverlay.jsx
2315
2236
  function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
2316
- const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
2317
- const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
2237
+ const [isOpen, setIsOpen] = (0, import_react12.useState)(false);
2238
+ const { refs, floatingStyles, context } = (0, import_react13.useFloating)({
2318
2239
  open: isOpen,
2319
2240
  onOpenChange: setIsOpen,
2320
- middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
2321
- whileElementsMounted: import_react11.autoUpdate
2241
+ middleware: [(0, import_react13.offset)(8), (0, import_react13.flip)(), (0, import_react13.shift)({ padding: 4 })],
2242
+ whileElementsMounted: import_react13.autoUpdate
2322
2243
  });
2323
- const hover = (0, import_react11.useHover)(context);
2324
- const focus2 = (0, import_react11.useFocus)(context);
2325
- const dismiss = (0, import_react11.useDismiss)(context);
2326
- const role = (0, import_react11.useRole)(context, { role: "tooltip" });
2327
- const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
2244
+ const hover = (0, import_react13.useHover)(context);
2245
+ const focus2 = (0, import_react13.useFocus)(context);
2246
+ const dismiss = (0, import_react13.useDismiss)(context);
2247
+ const role = (0, import_react13.useRole)(context, { role: "tooltip" });
2248
+ const { getReferenceProps, getFloatingProps } = (0, import_react13.useInteractions)([
2328
2249
  hover,
2329
2250
  focus2,
2330
2251
  dismiss,
2331
2252
  role
2332
2253
  ]);
2333
- return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
2254
+ return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(
2334
2255
  "span",
2335
2256
  {
2336
2257
  ref: refs.setReference,
@@ -2343,8 +2264,8 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
2343
2264
  onClick(e);
2344
2265
  } : void 0
2345
2266
  },
2346
- /* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
2347
- ), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
2267
+ /* @__PURE__ */ import_react12.default.createElement(IconComponent, { size, color, ...extraProps })
2268
+ ), isOpen && /* @__PURE__ */ import_react12.default.createElement(import_react13.FloatingPortal, null, /* @__PURE__ */ import_react12.default.createElement(
2348
2269
  "div",
2349
2270
  {
2350
2271
  ref: refs.setFloating,
@@ -2368,7 +2289,7 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
2368
2289
  function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
2369
2290
  if (!ballot && !hasStances && !branch) return null;
2370
2291
  const ballotTooltip = ballot ? `This seat is on your ballot \u2014 ${ballot.electionLabel}: ${new Date(ballot.electionDate).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" })}` : null;
2371
- return /* @__PURE__ */ import_react10.default.createElement(
2292
+ return /* @__PURE__ */ import_react12.default.createElement(
2372
2293
  "div",
2373
2294
  {
2374
2295
  style: {
@@ -2381,7 +2302,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
2381
2302
  // offset icon wrapper padding so icons align flush-left with text
2382
2303
  }
2383
2304
  },
2384
- ballot && /* @__PURE__ */ import_react10.default.createElement(
2305
+ ballot && /* @__PURE__ */ import_react12.default.createElement(
2385
2306
  IconWithTooltip,
2386
2307
  {
2387
2308
  IconComponent: BallotIcon,
@@ -2390,7 +2311,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
2390
2311
  size: 14
2391
2312
  }
2392
2313
  ),
2393
- hasStances && /* @__PURE__ */ import_react10.default.createElement(
2314
+ hasStances && /* @__PURE__ */ import_react12.default.createElement(
2394
2315
  IconWithTooltip,
2395
2316
  {
2396
2317
  IconComponent: CompassIcon,
@@ -2400,7 +2321,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
2400
2321
  onClick: onCompassClick
2401
2322
  }
2402
2323
  ),
2403
- branch && /* @__PURE__ */ import_react10.default.createElement(
2324
+ branch && /* @__PURE__ */ import_react12.default.createElement(
2404
2325
  IconWithTooltip,
2405
2326
  {
2406
2327
  IconComponent: BranchIcon,
@@ -2420,20 +2341,20 @@ function CompassCardHorizontalMeta({
2420
2341
  userAnswers
2421
2342
  }) {
2422
2343
  const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
2423
- return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
2344
+ return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
2424
2345
  flex: 1,
2425
2346
  minWidth: 0,
2426
2347
  display: "flex",
2427
2348
  flexDirection: "column",
2428
2349
  gap: spacing[1]
2429
- } }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2350
+ } }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2430
2351
  fontFamily: fonts.primary,
2431
2352
  fontSize: fontSizes.lg,
2432
2353
  fontWeight: fontWeights.semibold,
2433
2354
  lineHeight: 1.4,
2434
2355
  color: colors.evMutedBlue,
2435
2356
  margin: 0
2436
- } }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2357
+ } }, politician.full_name), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2437
2358
  fontFamily: fonts.primary,
2438
2359
  fontSize: fontSizes.sm,
2439
2360
  fontWeight: fontWeights.semibold,
@@ -2444,7 +2365,7 @@ function CompassCardHorizontalMeta({
2444
2365
  display: "-webkit-box",
2445
2366
  WebkitLineClamp: 2,
2446
2367
  WebkitBoxOrient: "vertical"
2447
- } }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2368
+ } }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2448
2369
  fontFamily: fonts.primary,
2449
2370
  fontSize: fontSizes.sm,
2450
2371
  fontWeight: fontWeights.regular,
@@ -2454,7 +2375,7 @@ function CompassCardHorizontalMeta({
2454
2375
  overflow: "hidden",
2455
2376
  textOverflow: "ellipsis",
2456
2377
  whiteSpace: "nowrap"
2457
- } }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
2378
+ } }, politician.district_label), /* @__PURE__ */ import_react14.default.createElement(
2458
2379
  IconOverlay,
2459
2380
  {
2460
2381
  ballot: politician.ballot || null,
@@ -2503,11 +2424,11 @@ function CompassCardHorizontal({
2503
2424
  onClick
2504
2425
  }) {
2505
2426
  var _a;
2506
- const [hovered, setHovered] = (0, import_react13.useState)(false);
2507
- const [focused, setFocused] = (0, import_react13.useState)(false);
2508
- const [imgError, setImgError] = (0, import_react13.useState)(false);
2509
- const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
2510
- (0, import_react13.useEffect)(() => {
2427
+ const [hovered, setHovered] = (0, import_react15.useState)(false);
2428
+ const [focused, setFocused] = (0, import_react15.useState)(false);
2429
+ const [imgError, setImgError] = (0, import_react15.useState)(false);
2430
+ const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react15.useState)(false);
2431
+ (0, import_react15.useEffect)(() => {
2511
2432
  setImgError(false);
2512
2433
  }, [politician == null ? void 0 : politician.photo_origin_url]);
2513
2434
  const cardStyle = {
@@ -2531,7 +2452,7 @@ function CompassCardHorizontal({
2531
2452
  function renderCompass() {
2532
2453
  var _a2, _b, _c;
2533
2454
  if (!userAnswers || userAnswers.length === 0) {
2534
- return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2455
+ return /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2535
2456
  }
2536
2457
  let topics = [];
2537
2458
  let data = {};
@@ -2567,12 +2488,12 @@ function CompassCardHorizontal({
2567
2488
  }, {}) : politician.stances;
2568
2489
  }
2569
2490
  if (topics.length === 0) {
2570
- return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2491
+ return /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2571
2492
  }
2572
2493
  } catch (err) {
2573
- return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2494
+ return /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2574
2495
  }
2575
- return /* @__PURE__ */ import_react13.default.createElement(
2496
+ return /* @__PURE__ */ import_react15.default.createElement(
2576
2497
  RadarChartCore,
2577
2498
  {
2578
2499
  topics,
@@ -2594,7 +2515,7 @@ function CompassCardHorizontal({
2594
2515
  var _a2, _b, _c;
2595
2516
  const imageSrc = (politician == null ? void 0 : politician.photo_origin_url) || (politician == null ? void 0 : politician.images) && ((_a2 = politician.images[0]) == null ? void 0 : _a2.url) || null;
2596
2517
  if (imageSrc && !imgError) {
2597
- return /* @__PURE__ */ import_react13.default.createElement(
2518
+ return /* @__PURE__ */ import_react15.default.createElement(
2598
2519
  "img",
2599
2520
  {
2600
2521
  src: imageSrc,
@@ -2612,7 +2533,7 @@ function CompassCardHorizontal({
2612
2533
  }
2613
2534
  const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
2614
2535
  const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
2615
- return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2536
+ return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
2616
2537
  width: "100%",
2617
2538
  height: "100%",
2618
2539
  backgroundColor: colors.evMutedBlue,
@@ -2626,7 +2547,7 @@ function CompassCardHorizontal({
2626
2547
  } }, initials);
2627
2548
  }
2628
2549
  function renderEmptyVariant() {
2629
- return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2550
+ return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
2630
2551
  width: "100%",
2631
2552
  height: "100%",
2632
2553
  display: "flex",
@@ -2637,14 +2558,14 @@ function CompassCardHorizontal({
2637
2558
  padding: "12px 14px",
2638
2559
  boxSizing: "border-box",
2639
2560
  backgroundColor: colorScales.teal["050"]
2640
- } }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
2561
+ } }, /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react15.default.createElement("p", { style: {
2641
2562
  margin: 0,
2642
2563
  fontSize: fontSizes.xs,
2643
2564
  color: colors.textMuted,
2644
2565
  textAlign: "center",
2645
2566
  lineHeight: 1.4,
2646
2567
  fontFamily: fonts.primary
2647
- } }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
2568
+ } }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react15.default.createElement(
2648
2569
  "button",
2649
2570
  {
2650
2571
  type: "button",
@@ -2672,7 +2593,7 @@ function CompassCardHorizontal({
2672
2593
  ));
2673
2594
  }
2674
2595
  function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
2675
- return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2596
+ return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
2676
2597
  width: "100%",
2677
2598
  height: "100%",
2678
2599
  backgroundColor: colorScales.teal["050"],
@@ -2681,7 +2602,7 @@ function CompassCardHorizontal({
2681
2602
  justifyContent: "center",
2682
2603
  padding: spacing[4],
2683
2604
  boxSizing: "border-box"
2684
- } }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
2605
+ } }, /* @__PURE__ */ import_react15.default.createElement("p", { style: {
2685
2606
  fontSize: fontSizes.sm,
2686
2607
  fontWeight: fontWeights.semibold,
2687
2608
  lineHeight: 1.4,
@@ -2700,7 +2621,7 @@ function CompassCardHorizontal({
2700
2621
  const name = (politician == null ? void 0 : politician.full_name) || "this official";
2701
2622
  return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
2702
2623
  }
2703
- return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2624
+ return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
2704
2625
  width: "100%",
2705
2626
  height: "100%",
2706
2627
  display: "flex",
@@ -2710,7 +2631,7 @@ function CompassCardHorizontal({
2710
2631
  boxSizing: "border-box"
2711
2632
  } }, renderCompass());
2712
2633
  }
2713
- return /* @__PURE__ */ import_react13.default.createElement(
2634
+ return /* @__PURE__ */ import_react15.default.createElement(
2714
2635
  "div",
2715
2636
  {
2716
2637
  role: "article",
@@ -2729,7 +2650,7 @@ function CompassCardHorizontal({
2729
2650
  onFocus: () => setFocused(true),
2730
2651
  onBlur: () => setFocused(false)
2731
2652
  },
2732
- /* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2653
+ /* @__PURE__ */ import_react15.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react15.default.createElement("div", { style: {
2733
2654
  position: "absolute",
2734
2655
  bottom: "15px",
2735
2656
  left: 0,
@@ -2744,7 +2665,7 @@ function CompassCardHorizontal({
2744
2665
  padding: "6px 0",
2745
2666
  pointerEvents: "none"
2746
2667
  } }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed")),
2747
- /* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
2668
+ /* @__PURE__ */ import_react15.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react15.default.createElement(
2748
2669
  CompassCardHorizontalMeta,
2749
2670
  {
2750
2671
  politician,
@@ -2756,7 +2677,7 @@ function CompassCardHorizontal({
2756
2677
  }
2757
2678
 
2758
2679
  // src/CompassCardVertical.jsx
2759
- var import_react14 = __toESM(require("react"));
2680
+ var import_react16 = __toESM(require("react"));
2760
2681
  var RADAR_SIZE2 = 400;
2761
2682
  function CompassCardVertical({
2762
2683
  politician,
@@ -2770,11 +2691,11 @@ function CompassCardVertical({
2770
2691
  onClick
2771
2692
  }) {
2772
2693
  var _a;
2773
- const [hovered, setHovered] = (0, import_react14.useState)(false);
2774
- const [focused, setFocused] = (0, import_react14.useState)(false);
2775
- const [imgError, setImgError] = (0, import_react14.useState)(false);
2776
- const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react14.useState)(false);
2777
- (0, import_react14.useEffect)(() => {
2694
+ const [hovered, setHovered] = (0, import_react16.useState)(false);
2695
+ const [focused, setFocused] = (0, import_react16.useState)(false);
2696
+ const [imgError, setImgError] = (0, import_react16.useState)(false);
2697
+ const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react16.useState)(false);
2698
+ (0, import_react16.useEffect)(() => {
2778
2699
  setImgError(false);
2779
2700
  }, [politician == null ? void 0 : politician.photo_origin_url]);
2780
2701
  const cardStyle = {
@@ -2797,7 +2718,7 @@ function CompassCardVertical({
2797
2718
  function renderCompass() {
2798
2719
  var _a2, _b, _c;
2799
2720
  if (!userAnswers || userAnswers.length === 0) {
2800
- return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
2721
+ return /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
2801
2722
  }
2802
2723
  let topics = [];
2803
2724
  let data = {};
@@ -2833,17 +2754,17 @@ function CompassCardVertical({
2833
2754
  }, {}) : politician.stances;
2834
2755
  }
2835
2756
  if (topics.length === 0) {
2836
- return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
2757
+ return /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
2837
2758
  }
2838
2759
  } catch {
2839
- return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
2760
+ return /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
2840
2761
  }
2841
2762
  const unansweredSpokes = {};
2842
2763
  for (const t of topics) {
2843
2764
  const v = compareData[t.short_title];
2844
2765
  if (!v || Number(v) === 0) unansweredSpokes[t.short_title] = true;
2845
2766
  }
2846
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: { width: RADAR_SIZE2 + 240, maxWidth: "100%", flexShrink: 0 } }, /* @__PURE__ */ import_react14.default.createElement(
2767
+ return /* @__PURE__ */ import_react16.default.createElement("div", { style: { width: RADAR_SIZE2 + 240, maxWidth: "100%", flexShrink: 0 } }, /* @__PURE__ */ import_react16.default.createElement(
2847
2768
  RadarChartCore,
2848
2769
  {
2849
2770
  topics,
@@ -2878,7 +2799,7 @@ function CompassCardVertical({
2878
2799
  justifyContent: "center"
2879
2800
  };
2880
2801
  if (imageSrc && !imgError) {
2881
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react14.default.createElement(
2802
+ return /* @__PURE__ */ import_react16.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react16.default.createElement(
2882
2803
  "img",
2883
2804
  {
2884
2805
  src: imageSrc,
@@ -2896,7 +2817,7 @@ function CompassCardVertical({
2896
2817
  }
2897
2818
  const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
2898
2819
  const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
2899
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react14.default.createElement("span", { style: {
2820
+ return /* @__PURE__ */ import_react16.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react16.default.createElement("span", { style: {
2900
2821
  color: colors.textWhite,
2901
2822
  fontFamily: fonts.primary,
2902
2823
  fontWeight: fontWeights.bold,
@@ -2907,7 +2828,7 @@ function CompassCardVertical({
2907
2828
  var _a2, _b, _c;
2908
2829
  const imageSrc = (politician == null ? void 0 : politician.photo_origin_url) || (politician == null ? void 0 : politician.images) && ((_a2 = politician.images[0]) == null ? void 0 : _a2.url) || null;
2909
2830
  if (imageSrc && !imgError) {
2910
- return /* @__PURE__ */ import_react14.default.createElement(
2831
+ return /* @__PURE__ */ import_react16.default.createElement(
2911
2832
  "img",
2912
2833
  {
2913
2834
  src: imageSrc,
@@ -2926,7 +2847,7 @@ function CompassCardVertical({
2926
2847
  }
2927
2848
  const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
2928
2849
  const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
2929
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
2850
+ return /* @__PURE__ */ import_react16.default.createElement("div", { style: {
2930
2851
  width: RADAR_SIZE2,
2931
2852
  height: RADAR_SIZE2,
2932
2853
  backgroundColor: colors.evMutedBlue,
@@ -2941,7 +2862,7 @@ function CompassCardVertical({
2941
2862
  } }, initials);
2942
2863
  }
2943
2864
  function renderEmptyVariant() {
2944
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
2865
+ return /* @__PURE__ */ import_react16.default.createElement("div", { style: {
2945
2866
  width: "100%",
2946
2867
  height: "100%",
2947
2868
  flex: 1,
@@ -2954,14 +2875,14 @@ function CompassCardVertical({
2954
2875
  boxSizing: "border-box",
2955
2876
  backgroundColor: colorScales.teal["050"],
2956
2877
  borderRadius: borderRadius.md
2957
- } }, /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: 220, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2878
+ } }, /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: 220, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react16.default.createElement("p", { style: {
2958
2879
  margin: 0,
2959
2880
  fontSize: fontSizes.sm,
2960
2881
  color: colors.textMuted,
2961
2882
  textAlign: "center",
2962
2883
  lineHeight: 1.4,
2963
2884
  fontFamily: fonts.primary
2964
- } }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react14.default.createElement(
2885
+ } }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react16.default.createElement(
2965
2886
  "button",
2966
2887
  {
2967
2888
  type: "button",
@@ -2987,7 +2908,7 @@ function CompassCardVertical({
2987
2908
  ));
2988
2909
  }
2989
2910
  function renderUnavailablePlate(message) {
2990
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
2911
+ return /* @__PURE__ */ import_react16.default.createElement("div", { style: {
2991
2912
  width: "100%",
2992
2913
  height: "100%",
2993
2914
  flex: 1,
@@ -2998,7 +2919,7 @@ function CompassCardVertical({
2998
2919
  justifyContent: "center",
2999
2920
  padding: spacing[6],
3000
2921
  boxSizing: "border-box"
3001
- } }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2922
+ } }, /* @__PURE__ */ import_react16.default.createElement("p", { style: {
3002
2923
  fontSize: fontSizes.base,
3003
2924
  fontWeight: fontWeights.semibold,
3004
2925
  lineHeight: 1.4,
@@ -3019,7 +2940,7 @@ function CompassCardVertical({
3019
2940
  }
3020
2941
  return renderCompass();
3021
2942
  }
3022
- return /* @__PURE__ */ import_react14.default.createElement(
2943
+ return /* @__PURE__ */ import_react16.default.createElement(
3023
2944
  "div",
3024
2945
  {
3025
2946
  role: "article",
@@ -3038,21 +2959,21 @@ function CompassCardVertical({
3038
2959
  onFocus: () => setFocused(true),
3039
2960
  onBlur: () => setFocused(false)
3040
2961
  },
3041
- /* @__PURE__ */ import_react14.default.createElement("div", { style: { padding: spacing[4], paddingBottom: spacing[3], display: "flex", alignItems: "stretch", gap: spacing[3], flexShrink: 0 } }, renderAvatar(), /* @__PURE__ */ import_react14.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: spacing[1], minWidth: 0, flex: 1 } }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2962
+ /* @__PURE__ */ import_react16.default.createElement("div", { style: { padding: spacing[4], paddingBottom: spacing[3], display: "flex", alignItems: "stretch", gap: spacing[3], flexShrink: 0 } }, renderAvatar(), /* @__PURE__ */ import_react16.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: spacing[1], minWidth: 0, flex: 1 } }, /* @__PURE__ */ import_react16.default.createElement("p", { style: {
3042
2963
  fontFamily: fonts.primary,
3043
2964
  fontSize: fontSizes.xl,
3044
2965
  fontWeight: fontWeights.semibold,
3045
2966
  lineHeight: 1.3,
3046
2967
  color: colors.evMutedBlue,
3047
2968
  margin: 0
3048
- } }, politician.full_name), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2969
+ } }, politician.full_name), /* @__PURE__ */ import_react16.default.createElement("p", { style: {
3049
2970
  fontFamily: fonts.primary,
3050
2971
  fontSize: fontSizes.sm,
3051
2972
  fontWeight: fontWeights.semibold,
3052
2973
  lineHeight: 1.4,
3053
2974
  color: colors.textSecondary,
3054
2975
  margin: 0
3055
- } }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react14.default.createElement("p", { style: {
2976
+ } }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react16.default.createElement("p", { style: {
3056
2977
  fontFamily: fonts.primary,
3057
2978
  fontSize: fontSizes.sm,
3058
2979
  fontWeight: fontWeights.regular,
@@ -3062,7 +2983,7 @@ function CompassCardVertical({
3062
2983
  overflow: "hidden",
3063
2984
  textOverflow: "ellipsis",
3064
2985
  whiteSpace: "nowrap"
3065
- } }, politician.district_label), /* @__PURE__ */ import_react14.default.createElement("div", { style: { marginTop: "auto" } }, /* @__PURE__ */ import_react14.default.createElement(
2986
+ } }, politician.district_label), /* @__PURE__ */ import_react16.default.createElement("div", { style: { marginTop: "auto" } }, /* @__PURE__ */ import_react16.default.createElement(
3066
2987
  IconOverlay,
3067
2988
  {
3068
2989
  ballot: politician.ballot || null,
@@ -3070,7 +2991,7 @@ function CompassCardVertical({
3070
2991
  branch: politician.branch || null
3071
2992
  }
3072
2993
  )))),
3073
- surface === "elections" && politician.withdrawn && /* @__PURE__ */ import_react14.default.createElement("div", { style: {
2994
+ surface === "elections" && politician.withdrawn && /* @__PURE__ */ import_react16.default.createElement("div", { style: {
3074
2995
  margin: `0 ${spacing[4]} ${spacing[3]}`,
3075
2996
  backgroundColor: "rgba(120,0,0,0.85)",
3076
2997
  color: "#fff",
@@ -3082,7 +3003,7 @@ function CompassCardVertical({
3082
3003
  padding: "6px 0",
3083
3004
  borderRadius: borderRadius.sm
3084
3005
  } }, "Withdrawn"),
3085
- surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */ import_react14.default.createElement("div", { style: {
3006
+ surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */ import_react16.default.createElement("div", { style: {
3086
3007
  margin: `0 ${spacing[4]} ${spacing[3]}`,
3087
3008
  backgroundColor: "rgba(0,0,0,0.75)",
3088
3009
  color: "#fff",
@@ -3094,7 +3015,7 @@ function CompassCardVertical({
3094
3015
  padding: "6px 0",
3095
3016
  borderRadius: borderRadius.sm
3096
3017
  } }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed"),
3097
- /* @__PURE__ */ import_react14.default.createElement("div", { style: {
3018
+ /* @__PURE__ */ import_react16.default.createElement("div", { style: {
3098
3019
  flex: 1,
3099
3020
  padding: spacing[4],
3100
3021
  paddingTop: 0,
@@ -3108,7 +3029,7 @@ function CompassCardVertical({
3108
3029
  }
3109
3030
 
3110
3031
  // src/CompassKey.jsx
3111
- var import_react15 = __toESM(require("react"));
3032
+ var import_react17 = __toESM(require("react"));
3112
3033
 
3113
3034
  // src/evContext.js
3114
3035
  var DEFAULT_BROKER_URL = "https://ev-context.empowered.vote/";
@@ -3353,9 +3274,9 @@ var evContext = {
3353
3274
 
3354
3275
  // src/CompassKey.jsx
3355
3276
  function CompassKey({ compact = false } = {}) {
3356
- const [dismissed, setDismissed] = (0, import_react15.useState)(false);
3357
- const [loaded, setLoaded] = (0, import_react15.useState)(false);
3358
- (0, import_react15.useEffect)(() => {
3277
+ const [dismissed, setDismissed] = (0, import_react17.useState)(false);
3278
+ const [loaded, setLoaded] = (0, import_react17.useState)(false);
3279
+ (0, import_react17.useEffect)(() => {
3359
3280
  let cancelled = false;
3360
3281
  evContext.get().then((shared) => {
3361
3282
  if (cancelled) return;
@@ -3385,7 +3306,7 @@ function CompassKey({ compact = false } = {}) {
3385
3306
  persistDismissed(false);
3386
3307
  }
3387
3308
  if (!loaded) return null;
3388
- const Swatch = ({ color, label, ring }) => /* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react15.default.createElement("span", { style: {
3309
+ const Swatch = ({ color, label, ring }) => /* @__PURE__ */ import_react17.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
3389
3310
  display: "inline-block",
3390
3311
  width: 12,
3391
3312
  height: 12,
@@ -3393,9 +3314,9 @@ function CompassKey({ compact = false } = {}) {
3393
3314
  background: color,
3394
3315
  border: `2px solid ${ring || "#fff"}`,
3395
3316
  boxShadow: "0 0 0 1px rgba(0,0,0,0.08)"
3396
- } }), /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, label));
3317
+ } }), /* @__PURE__ */ import_react17.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, label));
3397
3318
  if (dismissed) {
3398
- return /* @__PURE__ */ import_react15.default.createElement(
3319
+ return /* @__PURE__ */ import_react17.default.createElement(
3399
3320
  "button",
3400
3321
  {
3401
3322
  type: "button",
@@ -3416,11 +3337,11 @@ function CompassKey({ compact = false } = {}) {
3416
3337
  cursor: "pointer"
3417
3338
  }
3418
3339
  },
3419
- /* @__PURE__ */ import_react15.default.createElement("span", { "aria-hidden": "true" }, "?"),
3340
+ /* @__PURE__ */ import_react17.default.createElement("span", { "aria-hidden": "true" }, "?"),
3420
3341
  " Compass key"
3421
3342
  );
3422
3343
  }
3423
- return /* @__PURE__ */ import_react15.default.createElement(
3344
+ return /* @__PURE__ */ import_react17.default.createElement(
3424
3345
  "div",
3425
3346
  {
3426
3347
  role: "region",
@@ -3439,17 +3360,17 @@ function CompassKey({ compact = false } = {}) {
3439
3360
  boxSizing: "border-box"
3440
3361
  }
3441
3362
  },
3442
- !compact && /* @__PURE__ */ import_react15.default.createElement("span", { style: {
3363
+ !compact && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
3443
3364
  fontSize: fontSizes.xs,
3444
3365
  fontWeight: fontWeights.semibold,
3445
3366
  color: colors.textMuted,
3446
3367
  textTransform: "uppercase",
3447
3368
  letterSpacing: "0.5px"
3448
3369
  } }, "Compass key"),
3449
- /* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#7C6B9E", label: "You" }),
3450
- /* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#5A9A6E", label: "Politician" }),
3451
- /* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#fed12e", label: "Match" }),
3452
- /* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react15.default.createElement("span", { style: {
3370
+ /* @__PURE__ */ import_react17.default.createElement(Swatch, { color: "#7C6B9E", label: "You" }),
3371
+ /* @__PURE__ */ import_react17.default.createElement(Swatch, { color: "#5A9A6E", label: "Politician" }),
3372
+ /* @__PURE__ */ import_react17.default.createElement(Swatch, { color: "#fed12e", label: "Match" }),
3373
+ /* @__PURE__ */ import_react17.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
3453
3374
  fontSize: fontSizes.xs,
3454
3375
  fontWeight: fontWeights.semibold,
3455
3376
  color: "#9ca3af",
@@ -3457,8 +3378,8 @@ function CompassKey({ compact = false } = {}) {
3457
3378
  textDecoration: "underline",
3458
3379
  textDecorationStyle: "dashed",
3459
3380
  textUnderlineOffset: "3px"
3460
- } }, "Topic"), /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, "= no stance")),
3461
- /* @__PURE__ */ import_react15.default.createElement(
3381
+ } }, "Topic"), /* @__PURE__ */ import_react17.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, "= no stance")),
3382
+ /* @__PURE__ */ import_react17.default.createElement(
3462
3383
  "button",
3463
3384
  {
3464
3385
  type: "button",
@@ -3481,7 +3402,7 @@ function CompassKey({ compact = false } = {}) {
3481
3402
  }
3482
3403
 
3483
3404
  // src/CategorySection.jsx
3484
- var import_react16 = __toESM(require("react"));
3405
+ var import_react18 = __toESM(require("react"));
3485
3406
  function CategorySection({
3486
3407
  title,
3487
3408
  infoTooltip,
@@ -3491,7 +3412,7 @@ function CategorySection({
3491
3412
  tier
3492
3413
  }) {
3493
3414
  var _a, _b;
3494
- const [showTooltip, setShowTooltip] = (0, import_react16.useState)(false);
3415
+ const [showTooltip, setShowTooltip] = (0, import_react18.useState)(false);
3495
3416
  const tierStyle = tier ? tierColors[tier] : null;
3496
3417
  const styles2 = {
3497
3418
  section: {
@@ -3559,7 +3480,7 @@ function CategorySection({
3559
3480
  gap: spacing[4]
3560
3481
  }
3561
3482
  };
3562
- return /* @__PURE__ */ import_react16.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react16.default.createElement(
3483
+ return /* @__PURE__ */ import_react18.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react18.default.createElement(
3563
3484
  "button",
3564
3485
  {
3565
3486
  type: "button",
@@ -3571,8 +3492,8 @@ function CategorySection({
3571
3492
  "aria-label": `Info about ${title}`
3572
3493
  },
3573
3494
  "i",
3574
- showTooltip && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
3575
- ), websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
3495
+ showTooltip && /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
3496
+ ), websiteUrl && /* @__PURE__ */ import_react18.default.createElement(
3576
3497
  "a",
3577
3498
  {
3578
3499
  href: websiteUrl,
@@ -3581,7 +3502,7 @@ function CategorySection({
3581
3502
  style: styles2.externalLink,
3582
3503
  "aria-label": `Visit official website for ${title}`
3583
3504
  },
3584
- /* @__PURE__ */ import_react16.default.createElement(
3505
+ /* @__PURE__ */ import_react18.default.createElement(
3585
3506
  "svg",
3586
3507
  {
3587
3508
  viewBox: "0 0 24 24",
@@ -3589,7 +3510,7 @@ function CategorySection({
3589
3510
  xmlns: "http://www.w3.org/2000/svg",
3590
3511
  style: { width: "14px", height: "14px" }
3591
3512
  },
3592
- /* @__PURE__ */ import_react16.default.createElement(
3513
+ /* @__PURE__ */ import_react18.default.createElement(
3593
3514
  "path",
3594
3515
  {
3595
3516
  d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
@@ -3600,11 +3521,11 @@ function CategorySection({
3600
3521
  }
3601
3522
  )
3602
3523
  )
3603
- )), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
3524
+ )), /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
3604
3525
  }
3605
3526
 
3606
3527
  // src/SubGroupSection.jsx
3607
- var import_react17 = __toESM(require("react"));
3528
+ var import_react19 = __toESM(require("react"));
3608
3529
  function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap, justifyContent }) {
3609
3530
  const styles2 = {
3610
3531
  section: {
@@ -3639,7 +3560,7 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
3639
3560
  width: "100%"
3640
3561
  }
3641
3562
  };
3642
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react17.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react17.default.createElement(
3563
+ return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react19.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react19.default.createElement(
3643
3564
  "a",
3644
3565
  {
3645
3566
  href: websiteUrl,
@@ -3647,12 +3568,12 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
3647
3568
  rel: "noopener noreferrer",
3648
3569
  style: styles2.link
3649
3570
  },
3650
- /* @__PURE__ */ import_react17.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
3651
- )), /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
3571
+ /* @__PURE__ */ import_react19.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
3572
+ )), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
3652
3573
  }
3653
3574
 
3654
3575
  // src/GovernmentBodySection.jsx
3655
- var import_react18 = __toESM(require("react"));
3576
+ var import_react20 = __toESM(require("react"));
3656
3577
  function GovernmentBodySection({
3657
3578
  title,
3658
3579
  websiteUrl,
@@ -3661,7 +3582,7 @@ function GovernmentBodySection({
3661
3582
  children
3662
3583
  }) {
3663
3584
  var _a;
3664
- const [expanded, setExpanded] = (0, import_react18.useState)(defaultExpanded);
3585
+ const [expanded, setExpanded] = (0, import_react20.useState)(defaultExpanded);
3665
3586
  const tierStyle = tier ? tierColors[tier] : null;
3666
3587
  const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
3667
3588
  const styles2 = {
@@ -3701,7 +3622,7 @@ function GovernmentBodySection({
3701
3622
  display: expanded ? "block" : "none"
3702
3623
  }
3703
3624
  };
3704
- return /* @__PURE__ */ import_react18.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react18.default.createElement(
3625
+ return /* @__PURE__ */ import_react20.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react20.default.createElement(
3705
3626
  "div",
3706
3627
  {
3707
3628
  style: styles2.header,
@@ -3717,8 +3638,8 @@ function GovernmentBodySection({
3717
3638
  "aria-expanded": expanded,
3718
3639
  "aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
3719
3640
  },
3720
- /* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.title }, title),
3721
- websiteUrl && /* @__PURE__ */ import_react18.default.createElement(
3641
+ /* @__PURE__ */ import_react20.default.createElement("span", { style: styles2.title }, title),
3642
+ websiteUrl && /* @__PURE__ */ import_react20.default.createElement(
3722
3643
  "a",
3723
3644
  {
3724
3645
  href: websiteUrl,
@@ -3728,14 +3649,14 @@ function GovernmentBodySection({
3728
3649
  onClick: (e) => e.stopPropagation(),
3729
3650
  "aria-label": `Visit ${title} website`
3730
3651
  },
3731
- /* @__PURE__ */ import_react18.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react18.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react18.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
3652
+ /* @__PURE__ */ import_react20.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react20.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react20.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
3732
3653
  ),
3733
- /* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
3734
- ), /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.content }, children));
3654
+ /* @__PURE__ */ import_react20.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
3655
+ ), /* @__PURE__ */ import_react20.default.createElement("div", { style: styles2.content }, children));
3735
3656
  }
3736
3657
 
3737
3658
  // src/SocialLinks.jsx
3738
- var import_react19 = __toESM(require("react"));
3659
+ var import_react21 = __toESM(require("react"));
3739
3660
  var SOCIAL_PLATFORMS = [
3740
3661
  { test: /facebook\.com/i, platform: "facebook" },
3741
3662
  { test: /twitter\.com|x\.com/i, platform: "twitter" },
@@ -3807,7 +3728,7 @@ function SocialLinks({
3807
3728
  }
3808
3729
  };
3809
3730
  const platformIconMap = {
3810
- twitter: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement(
3731
+ twitter: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement(
3811
3732
  "path",
3812
3733
  {
3813
3734
  d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
@@ -3817,7 +3738,7 @@ function SocialLinks({
3817
3738
  strokeLinejoin: "round"
3818
3739
  }
3819
3740
  )),
3820
- facebook: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement(
3741
+ facebook: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement(
3821
3742
  "path",
3822
3743
  {
3823
3744
  d: "M18 2H15C13.6739 2 12.4021 2.52678 11.4645 3.46447C10.5268 4.40215 10 5.67392 10 7V10H7V14H10V22H14V14H17L18 10H14V7C14 6.73478 14.1054 6.48043 14.2929 6.29289C14.4804 6.10536 14.7348 6 15 6H18V2Z",
@@ -3827,8 +3748,8 @@ function SocialLinks({
3827
3748
  strokeLinejoin: "round"
3828
3749
  }
3829
3750
  )),
3830
- instagram: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
3831
- linkedin: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement(
3751
+ instagram: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
3752
+ linkedin: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement(
3832
3753
  "path",
3833
3754
  {
3834
3755
  d: "M16 8C17.5913 8 19.1174 8.63214 20.2426 9.75736C21.3679 10.8826 22 12.4087 22 14V21H18V14C18 13.4696 17.7893 12.9609 17.4142 12.5858C17.0391 12.2107 16.5304 12 16 12C15.4696 12 14.9609 12.2107 14.5858 12.5858C14.2107 12.9609 14 13.4696 14 14V21H10V14C10 12.4087 10.6321 10.8826 11.7574 9.75736C12.8826 8.63214 14.4087 8 16 8Z",
@@ -3837,8 +3758,8 @@ function SocialLinks({
3837
3758
  strokeLinecap: "round",
3838
3759
  strokeLinejoin: "round"
3839
3760
  }
3840
- ), /* @__PURE__ */ import_react19.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
3841
- youtube: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
3761
+ ), /* @__PURE__ */ import_react21.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
3762
+ youtube: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
3842
3763
  };
3843
3764
  const links = [
3844
3765
  {
@@ -3864,7 +3785,7 @@ function SocialLinks({
3864
3785
  {
3865
3786
  href: website,
3866
3787
  label: "Website",
3867
- icon: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement(
3788
+ icon: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement(
3868
3789
  "path",
3869
3790
  {
3870
3791
  d: "M2 12H22M12 2C14.5 4.5 16 8 16 12C16 16 14.5 19.5 12 22C9.5 19.5 8 16 8 12C8 8 9.5 4.5 12 2Z",
@@ -3894,7 +3815,7 @@ function SocialLinks({
3894
3815
  if (links.length === 0) {
3895
3816
  return null;
3896
3817
  }
3897
- return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react19.default.createElement(
3818
+ return /* @__PURE__ */ import_react21.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react21.default.createElement(
3898
3819
  "a",
3899
3820
  {
3900
3821
  key: link.label,
@@ -3917,7 +3838,7 @@ function SocialLinks({
3917
3838
  }
3918
3839
 
3919
3840
  // src/IssueTags.jsx
3920
- var import_react20 = __toESM(require("react"));
3841
+ var import_react22 = __toESM(require("react"));
3921
3842
  function IssueTags({
3922
3843
  tags = [],
3923
3844
  selectedTags = [],
@@ -3960,9 +3881,9 @@ function IssueTags({
3960
3881
  onTagClick(tag.value);
3961
3882
  }
3962
3883
  };
3963
- return /* @__PURE__ */ import_react20.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
3884
+ return /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
3964
3885
  const isSelected = selectedTags.includes(tag.value);
3965
- return /* @__PURE__ */ import_react20.default.createElement(
3886
+ return /* @__PURE__ */ import_react22.default.createElement(
3966
3887
  "span",
3967
3888
  {
3968
3889
  key: tag.value,
@@ -3991,7 +3912,7 @@ function IssueTags({
3991
3912
  }
3992
3913
 
3993
3914
  // src/CommitteeTable.jsx
3994
- var import_react21 = __toESM(require("react"));
3915
+ var import_react23 = __toESM(require("react"));
3995
3916
  var ROLE_ORDER = {
3996
3917
  "chair": 0,
3997
3918
  "co-chair": 1,
@@ -4016,10 +3937,9 @@ function CommitteeTable({
4016
3937
  committees = [],
4017
3938
  title = "Committee Memberships",
4018
3939
  maxVisible = 6,
4019
- style = {},
4020
- darkMode = false
3940
+ style = {}
4021
3941
  }) {
4022
- const [showAll, setShowAll] = (0, import_react21.useState)(false);
3942
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
4023
3943
  if (committees.length === 0) {
4024
3944
  return null;
4025
3945
  }
@@ -4037,7 +3957,7 @@ function CommitteeTable({
4037
3957
  fontFamily: fonts.primary,
4038
3958
  fontWeight: fontWeights.semibold,
4039
3959
  fontSize: "18px",
4040
- color: darkMode ? "#f3f4f6" : "#101828",
3960
+ color: "#101828",
4041
3961
  margin: 0,
4042
3962
  marginBottom: spacing[3]
4043
3963
  },
@@ -4046,7 +3966,7 @@ function CommitteeTable({
4046
3966
  borderCollapse: "collapse"
4047
3967
  },
4048
3968
  row: {
4049
- borderBottom: `1px solid ${darkMode ? "#374151" : "#F3F4F6"}`
3969
+ borderBottom: "1px solid #F3F4F6"
4050
3970
  },
4051
3971
  cell: {
4052
3972
  padding: `${spacing[2]} 0`,
@@ -4055,16 +3975,16 @@ function CommitteeTable({
4055
3975
  verticalAlign: "top"
4056
3976
  },
4057
3977
  nameCell: {
4058
- color: darkMode ? "#d1d5db" : "#364153",
3978
+ color: "#364153",
4059
3979
  paddingRight: spacing[4]
4060
3980
  },
4061
3981
  positionCell: {
4062
- color: darkMode ? "#9ca3af" : "#6A7282",
3982
+ color: "#6A7282",
4063
3983
  textAlign: "right",
4064
3984
  whiteSpace: "nowrap"
4065
3985
  },
4066
3986
  link: {
4067
- color: darkMode ? "#d1d5db" : "#364153",
3987
+ color: "#364153",
4068
3988
  textDecoration: "none"
4069
3989
  },
4070
3990
  toggle: {
@@ -4074,14 +3994,14 @@ function CommitteeTable({
4074
3994
  fontFamily: fonts.primary,
4075
3995
  fontSize: "14px",
4076
3996
  fontWeight: fontWeights.medium,
4077
- color: darkMode ? "#9ca3af" : "#6A7282",
3997
+ color: "#6A7282",
4078
3998
  background: "none",
4079
3999
  border: "none",
4080
4000
  padding: `${spacing[2]} 0`,
4081
4001
  cursor: "pointer"
4082
4002
  }
4083
4003
  };
4084
- return /* @__PURE__ */ import_react21.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react21.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react21.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react21.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react21.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react21.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react21.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react21.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react21.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react21.default.createElement(
4004
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react23.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react23.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react23.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react23.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react23.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react23.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react23.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react23.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react23.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react23.default.createElement(
4085
4005
  "a",
4086
4006
  {
4087
4007
  href: committee.url,
@@ -4096,7 +4016,7 @@ function CommitteeTable({
4096
4016
  }
4097
4017
  },
4098
4018
  committee.name
4099
- ) : committee.name), /* @__PURE__ */ import_react21.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react21.default.createElement(
4019
+ ) : committee.name), /* @__PURE__ */ import_react23.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react23.default.createElement(
4100
4020
  "button",
4101
4021
  {
4102
4022
  type: "button",
@@ -4104,7 +4024,7 @@ function CommitteeTable({
4104
4024
  onClick: () => setShowAll(!showAll)
4105
4025
  },
4106
4026
  showAll ? "Show less" : `Show all ${sorted.length} committees`,
4107
- /* @__PURE__ */ import_react21.default.createElement(
4027
+ /* @__PURE__ */ import_react23.default.createElement(
4108
4028
  "svg",
4109
4029
  {
4110
4030
  width: "14",
@@ -4117,16 +4037,16 @@ function CommitteeTable({
4117
4037
  strokeLinejoin: "round",
4118
4038
  style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
4119
4039
  },
4120
- /* @__PURE__ */ import_react21.default.createElement("polyline", { points: "6 9 12 15 18 9" })
4040
+ /* @__PURE__ */ import_react23.default.createElement("polyline", { points: "6 9 12 15 18 9" })
4121
4041
  )
4122
4042
  ));
4123
4043
  }
4124
4044
 
4125
4045
  // src/PoliticianProfile.jsx
4126
- var import_react24 = __toESM(require("react"));
4046
+ var import_react26 = __toESM(require("react"));
4127
4047
 
4128
4048
  // src/LegislativeInlineSummary.jsx
4129
- var import_react22 = __toESM(require("react"));
4049
+ var import_react24 = __toESM(require("react"));
4130
4050
  function normalizePosition(pos) {
4131
4051
  if (!pos) return "";
4132
4052
  return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -4234,7 +4154,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
4234
4154
  fontSize: fontSizes.sm,
4235
4155
  fontWeight: fontWeights.medium
4236
4156
  };
4237
- return /* @__PURE__ */ import_react22.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react22.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react22.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react22.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react22.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react22.default.createElement("div", null), /* @__PURE__ */ import_react22.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react22.default.createElement(
4157
+ return /* @__PURE__ */ import_react24.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react24.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react24.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react24.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react24.default.createElement("div", null), /* @__PURE__ */ import_react24.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react24.default.createElement(
4238
4158
  "button",
4239
4159
  {
4240
4160
  onClick: () => {
@@ -4259,12 +4179,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
4259
4179
  }
4260
4180
  },
4261
4181
  "View Full Legislative Record",
4262
- /* @__PURE__ */ import_react22.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M9 18l6-6-6-6" }))
4182
+ /* @__PURE__ */ import_react24.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M9 18l6-6-6-6" }))
4263
4183
  )));
4264
4184
  }
4265
4185
 
4266
4186
  // src/JudicialScorecard.jsx
4267
- var import_react23 = __toESM(require("react"));
4187
+ var import_react25 = __toESM(require("react"));
4268
4188
 
4269
4189
  // src/judicialUtils.js
4270
4190
  function formatDate(dateStr) {
@@ -4382,7 +4302,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
4382
4302
  onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
4383
4303
  }
4384
4304
  };
4385
- return /* @__PURE__ */ import_react23.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react23.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react23.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react23.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react23.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react23.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react23.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react23.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react23.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
4305
+ return /* @__PURE__ */ import_react25.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react25.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react25.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react25.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react25.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react25.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react25.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react25.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react25.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
4386
4306
  }
4387
4307
 
4388
4308
  // src/PoliticianProfile.jsx
@@ -4408,10 +4328,12 @@ function stripRetain(s) {
4408
4328
  return (s || "").replace(/\s*\(Retain\s+.+?\?\)/, "");
4409
4329
  }
4410
4330
  function qualifyLocalTitle(baseTitle, pol) {
4411
- if (!pol.government_name || !baseTitle) return baseTitle;
4331
+ if (!baseTitle) return baseTitle;
4412
4332
  const dt = pol.district_type || "";
4413
4333
  if (!dt.startsWith("LOCAL") && dt !== "COUNTY") return baseTitle;
4414
- const gov = pol.government_name.split(",")[0].trim();
4334
+ const govRaw = pol.government_name || pol.representing_city || "";
4335
+ if (!govRaw) return baseTitle;
4336
+ const gov = govRaw.split(",")[0].trim();
4415
4337
  const govCore = gov.replace(/^City of\s+/i, "").replace(/\s+County$/i, "").trim();
4416
4338
  if (govCore && baseTitle.toLowerCase().includes(govCore.toLowerCase())) return baseTitle;
4417
4339
  let prefix = dt === "COUNTY" ? gov : gov.replace(/^City of\s+/i, "");
@@ -4419,6 +4341,17 @@ function qualifyLocalTitle(baseTitle, pol) {
4419
4341
  prefix = prefix.replace(/\s+County$/, "");
4420
4342
  return `${prefix} ${baseTitle}`;
4421
4343
  }
4344
+ function deriveSeatSubtitle(pol, cleanTitle) {
4345
+ const dt = pol.district_type || "";
4346
+ if (!dt.startsWith("LOCAL") && dt !== "COUNTY") return null;
4347
+ const t = cleanTitle || "";
4348
+ if (/\bat[- ]large\b/i.test(t)) return "At-Large";
4349
+ let m = t.match(/\bward\s+(\d+)/i);
4350
+ if (m) return `Ward ${m[1]}`;
4351
+ m = t.match(/\bdistrict\s+(\d+)/i);
4352
+ if (m) return `District ${m[1]}`;
4353
+ return null;
4354
+ }
4422
4355
  function buildTitleAndSubtitle(pol) {
4423
4356
  const cleanTitle = stripRetain(pol.office_title);
4424
4357
  const cleanChamber = stripRetain(pol.chamber_name);
@@ -4439,6 +4372,8 @@ function buildTitleAndSubtitle(pol) {
4439
4372
  if (dashIdx > 0) return normalizeDistrictSubtitle(cleanTitle.slice(dashIdx + 3));
4440
4373
  if (pol.district_type === "NATIONAL_JUDICIAL")
4441
4374
  return cleanChamber || null;
4375
+ const seatFromTitle = deriveSeatSubtitle(pol, cleanTitle);
4376
+ if (seatFromTitle) return seatFromTitle;
4442
4377
  if (pol.district_id && /^[1-9]\d*$/.test(pol.district_id))
4443
4378
  return `District ${pol.district_id}`;
4444
4379
  if (pol.district_id === "0" && !/(_EXEC)$/.test(pol.district_type))
@@ -4543,13 +4478,13 @@ function formatAddress(addr) {
4543
4478
  if (cityStateZip) lines.push(cityStateZip);
4544
4479
  return lines;
4545
4480
  }
4546
- var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
4547
- var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
4548
- var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react24.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
4549
- var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.8 19.79 19.79 0 01.07 2.18 2 2 0 012.02 0h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L6.09 7.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" }));
4550
- var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M4 4H20C21.1 4 22 4.9 22 6V18C22 19.1 21.1 20 20 20H4C2.9 20 2 19.1 2 18V6C2 4.9 2.9 4 4 4Z" }), /* @__PURE__ */ import_react24.default.createElement("path", { d: "M22 6L12 13L2 6" }));
4551
- var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react24.default.createElement("path", { d: "M2 12H22M12 2C14.5 4.5 16 8 16 12C16 16 14.5 19.5 12 22C9.5 19.5 8 16 8 12C8 8 9.5 4.5 12 2Z" }));
4552
- var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
4481
+ var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
4482
+ var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
4483
+ var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react26.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
4484
+ var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.8 19.79 19.79 0 01.07 2.18 2 2 0 012.02 0h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L6.09 7.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" }));
4485
+ var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M4 4H20C21.1 4 22 4.9 22 6V18C22 19.1 21.1 20 20 20H4C2.9 20 2 19.1 2 18V6C2 4.9 2.9 4 4 4Z" }), /* @__PURE__ */ import_react26.default.createElement("path", { d: "M22 6L12 13L2 6" }));
4486
+ var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react26.default.createElement("path", { d: "M2 12H22M12 2C14.5 4.5 16 8 16 12C16 16 14.5 19.5 12 22C9.5 19.5 8 16 8 12C8 8 9.5 4.5 12 2Z" }));
4487
+ var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
4553
4488
  function PoliticianProfile({
4554
4489
  politician = {},
4555
4490
  onBack,
@@ -4577,8 +4512,8 @@ function PoliticianProfile({
4577
4512
  return pol.photo_origin_url;
4578
4513
  })();
4579
4514
  const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
4580
- const [imgError, setImgError] = (0, import_react24.useState)(false);
4581
- (0, import_react24.useEffect)(() => {
4515
+ const [imgError, setImgError] = (0, import_react26.useState)(false);
4516
+ (0, import_react26.useEffect)(() => {
4582
4517
  setImgError(false);
4583
4518
  }, [profileImageUrl]);
4584
4519
  const getSocialHandle = (type) => {
@@ -4878,7 +4813,7 @@ function PoliticianProfile({
4878
4813
  borderRadius: borderRadius.full
4879
4814
  }
4880
4815
  };
4881
- return /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react24.default.createElement(
4816
+ return /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react26.default.createElement(
4882
4817
  "button",
4883
4818
  {
4884
4819
  type: "button",
@@ -4891,9 +4826,9 @@ function PoliticianProfile({
4891
4826
  e.currentTarget.style.textDecoration = "none";
4892
4827
  }
4893
4828
  },
4894
- /* @__PURE__ */ import_react24.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
4829
+ /* @__PURE__ */ import_react26.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
4895
4830
  label
4896
- ), /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react24.default.createElement(
4831
+ ), /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react26.default.createElement(
4897
4832
  "img",
4898
4833
  {
4899
4834
  src: profileImageUrl,
@@ -4901,7 +4836,7 @@ function PoliticianProfile({
4901
4836
  style: styles2.photo,
4902
4837
  onError: () => setImgError(true)
4903
4838
  }
4904
- ) : /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react24.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react24.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react24.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react24.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react24.default.createElement(ClockIcon, { size: 14 }), pol.total_years_in_office, " ", pol.total_years_in_office === 1 ? "year" : "years", " in office")), pol.web_form_url && /* @__PURE__ */ import_react24.default.createElement(
4839
+ ) : /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react26.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react26.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react26.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react26.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react26.default.createElement(ClockIcon, { size: 14 }), pol.total_years_in_office, " ", pol.total_years_in_office === 1 ? "year" : "years", " in office")), pol.web_form_url && /* @__PURE__ */ import_react26.default.createElement(
4905
4840
  "a",
4906
4841
  {
4907
4842
  href: pol.web_form_url,
@@ -4915,9 +4850,9 @@ function PoliticianProfile({
4915
4850
  e.currentTarget.style.background = colors.evTeal;
4916
4851
  }
4917
4852
  },
4918
- /* @__PURE__ */ import_react24.default.createElement(ExternalLinkIcon, { size: 14 }),
4853
+ /* @__PURE__ */ import_react26.default.createElement(ExternalLinkIcon, { size: 14 }),
4919
4854
  "Submit a Message"
4920
- ))), hasContactInfo && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react24.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react24.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react24.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react24.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react24.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react24.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react24.default.createElement(
4855
+ ))), hasContactInfo && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react26.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react26.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react26.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react26.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react26.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react26.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react26.default.createElement(
4921
4856
  "a",
4922
4857
  {
4923
4858
  href: `tel:${phone}`,
@@ -4930,7 +4865,7 @@ function PoliticianProfile({
4930
4865
  }
4931
4866
  },
4932
4867
  phone
4933
- )))))), hasEmails && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react24.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), emails.filter((e) => e && e.trim()).map((email, j) => /* @__PURE__ */ import_react24.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react24.default.createElement(
4868
+ )))))), hasEmails && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react26.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), emails.filter((e) => e && e.trim()).map((email, j) => /* @__PURE__ */ import_react26.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react26.default.createElement(
4934
4869
  "a",
4935
4870
  {
4936
4871
  href: `mailto:${email}`,
@@ -4943,7 +4878,7 @@ function PoliticianProfile({
4943
4878
  }
4944
4879
  },
4945
4880
  email
4946
- )))))), hasWebsitesCol && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react24.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react24.default.createElement(
4881
+ )))))), hasWebsitesCol && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react26.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react26.default.createElement(
4947
4882
  "a",
4948
4883
  {
4949
4884
  href: url,
@@ -4958,7 +4893,7 @@ function PoliticianProfile({
4958
4893
  }
4959
4894
  },
4960
4895
  extractDomain(url)
4961
- ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react24.default.createElement(
4896
+ ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react26.default.createElement(
4962
4897
  SocialLinks,
4963
4898
  {
4964
4899
  twitter,
@@ -4970,14 +4905,14 @@ function PoliticianProfile({
4970
4905
  darkMode,
4971
4906
  style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
4972
4907
  }
4973
- )))), committees.length > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react24.default.createElement(CommitteeTable, { committees, darkMode })), pol.is_judicial ? /* @__PURE__ */ import_react24.default.createElement(
4908
+ )))), committees.length > 0 && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react26.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react26.default.createElement(
4974
4909
  JudicialScorecard,
4975
4910
  {
4976
4911
  judicialRecord,
4977
4912
  politicianId,
4978
4913
  onNavigateToRecord
4979
4914
  }
4980
- ) : /* @__PURE__ */ import_react24.default.createElement(
4915
+ ) : /* @__PURE__ */ import_react26.default.createElement(
4981
4916
  LegislativeInlineSummary,
4982
4917
  {
4983
4918
  summary: legislativeSummary,
@@ -4988,7 +4923,7 @@ function PoliticianProfile({
4988
4923
  }
4989
4924
 
4990
4925
  // src/LegislativeRecord.jsx
4991
- var import_react25 = __toESM(require("react"));
4926
+ var import_react27 = __toESM(require("react"));
4992
4927
  var DEFAULT_LIMIT = 25;
4993
4928
  function normalizeText(str) {
4994
4929
  if (!str) return "";
@@ -5068,7 +5003,7 @@ function getPositionBadge(position) {
5068
5003
  return { bg: colors.borderLight, text: colors.textSecondary };
5069
5004
  }
5070
5005
  function Badge({ label, bg, text }) {
5071
- return /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5006
+ return /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5072
5007
  display: "inline-block",
5073
5008
  background: bg,
5074
5009
  color: text,
@@ -5081,18 +5016,18 @@ function Badge({ label, bg, text }) {
5081
5016
  } }, label);
5082
5017
  }
5083
5018
  function SectionHeader({ title, yearFilter, years, onYearChange }) {
5084
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
5019
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: {
5085
5020
  display: "flex",
5086
5021
  alignItems: "center",
5087
5022
  justifyContent: "space-between",
5088
5023
  marginBottom: spacing[4]
5089
- } }, /* @__PURE__ */ import_react25.default.createElement("h2", { style: {
5024
+ } }, /* @__PURE__ */ import_react27.default.createElement("h2", { style: {
5090
5025
  fontFamily: fonts.primary,
5091
5026
  fontSize: fontSizes.xl,
5092
5027
  fontWeight: fontWeights.bold,
5093
5028
  color: colors.evTeal,
5094
5029
  margin: 0
5095
- } }, title), years && years.length > 0 && /* @__PURE__ */ import_react25.default.createElement(
5030
+ } }, title), years && years.length > 0 && /* @__PURE__ */ import_react27.default.createElement(
5096
5031
  "select",
5097
5032
  {
5098
5033
  value: yearFilter,
@@ -5108,13 +5043,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
5108
5043
  cursor: "pointer"
5109
5044
  }
5110
5045
  },
5111
- /* @__PURE__ */ import_react25.default.createElement("option", { value: "All" }, "All years"),
5112
- years.map((y) => /* @__PURE__ */ import_react25.default.createElement("option", { key: y, value: y }, y))
5046
+ /* @__PURE__ */ import_react27.default.createElement("option", { value: "All" }, "All years"),
5047
+ years.map((y) => /* @__PURE__ */ import_react27.default.createElement("option", { key: y, value: y }, y))
5113
5048
  ));
5114
5049
  }
5115
5050
  function ShowAllLink({ totalCount, visibleCount, onClick }) {
5116
5051
  if (totalCount <= visibleCount) return null;
5117
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react25.default.createElement(
5052
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react27.default.createElement(
5118
5053
  "button",
5119
5054
  {
5120
5055
  type: "button",
@@ -5142,7 +5077,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
5142
5077
  ));
5143
5078
  }
5144
5079
  function EmptyState({ message }) {
5145
- return /* @__PURE__ */ import_react25.default.createElement("p", { style: {
5080
+ return /* @__PURE__ */ import_react27.default.createElement("p", { style: {
5146
5081
  fontFamily: fonts.primary,
5147
5082
  fontSize: fontSizes.sm,
5148
5083
  color: colors.textMuted,
@@ -5152,24 +5087,24 @@ function EmptyState({ message }) {
5152
5087
  } }, message);
5153
5088
  }
5154
5089
  function Spinner() {
5155
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
5090
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: {
5156
5091
  display: "flex",
5157
5092
  justifyContent: "center",
5158
5093
  alignItems: "center",
5159
5094
  padding: spacing[10]
5160
- } }, /* @__PURE__ */ import_react25.default.createElement("div", { style: {
5095
+ } }, /* @__PURE__ */ import_react27.default.createElement("div", { style: {
5161
5096
  width: "40px",
5162
5097
  height: "40px",
5163
5098
  borderRadius: borderRadius.full,
5164
5099
  border: `3px solid ${colors.borderLight}`,
5165
5100
  borderTopColor: colors.evTeal,
5166
5101
  animation: "ev-spin 0.8s linear infinite"
5167
- } }), /* @__PURE__ */ import_react25.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
5102
+ } }), /* @__PURE__ */ import_react27.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
5168
5103
  }
5169
5104
  function CommitteesSection({ committees, leadership }) {
5170
- const [showAll, setShowAll] = (0, import_react25.useState)(false);
5105
+ const [showAll, setShowAll] = (0, import_react27.useState)(false);
5171
5106
  const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
5172
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
5107
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react27.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react27.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
5173
5108
  display: "inline-flex",
5174
5109
  alignItems: "center",
5175
5110
  gap: spacing[1],
@@ -5180,23 +5115,23 @@ function CommitteesSection({ committees, leadership }) {
5180
5115
  fontFamily: fonts.primary,
5181
5116
  fontSize: fontSizes.sm,
5182
5117
  fontWeight: fontWeights.semibold
5183
- } }, role.title, role.chamber && /* @__PURE__ */ import_react25.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react25.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("div", null, visible.map((c, i) => {
5118
+ } }, role.title, role.chamber && /* @__PURE__ */ import_react27.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react27.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("div", null, visible.map((c, i) => {
5184
5119
  const badge = getRoleBadge(c.role);
5185
- return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
5120
+ return /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
5186
5121
  display: "flex",
5187
5122
  alignItems: "center",
5188
5123
  justifyContent: "space-between",
5189
5124
  padding: `${spacing[3]} 0`,
5190
5125
  borderBottom: `1px solid ${colors.borderLight}`,
5191
5126
  gap: spacing[3]
5192
- } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5127
+ } }, /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5193
5128
  fontFamily: fonts.primary,
5194
5129
  fontSize: fontSizes.sm,
5195
5130
  color: colors.textSecondary,
5196
5131
  flex: 1,
5197
5132
  minWidth: 0
5198
- } }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react25.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react25.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
5199
- })), !showAll && /* @__PURE__ */ import_react25.default.createElement(
5133
+ } }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react27.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react27.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
5134
+ })), !showAll && /* @__PURE__ */ import_react27.default.createElement(
5200
5135
  ShowAllLink,
5201
5136
  {
5202
5137
  totalCount: committees.length,
@@ -5207,15 +5142,15 @@ function CommitteesSection({ committees, leadership }) {
5207
5142
  }
5208
5143
  function LegislationSection({ bills, isMobile }) {
5209
5144
  const years = getYears(bills, "introduced_at");
5210
- const [yearFilter, setYearFilter] = (0, import_react25.useState)("All");
5211
- const [showAll, setShowAll] = (0, import_react25.useState)(false);
5145
+ const [yearFilter, setYearFilter] = (0, import_react27.useState)("All");
5146
+ const [showAll, setShowAll] = (0, import_react27.useState)(false);
5212
5147
  const handleYearChange = (y) => {
5213
5148
  setYearFilter(y);
5214
5149
  setShowAll(false);
5215
5150
  };
5216
5151
  const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
5217
5152
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
5218
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(
5153
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react27.default.createElement(
5219
5154
  SectionHeader,
5220
5155
  {
5221
5156
  title: "Sponsored Legislation",
@@ -5223,42 +5158,42 @@ function LegislationSection({ bills, isMobile }) {
5223
5158
  years,
5224
5159
  onYearChange: handleYearChange
5225
5160
  }
5226
- ), bills.length === 0 ? /* @__PURE__ */ import_react25.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("div", null, visible.map((bill, i) => {
5161
+ ), bills.length === 0 ? /* @__PURE__ */ import_react27.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("div", null, visible.map((bill, i) => {
5227
5162
  const statusBadge = getStatusBadge(bill.status_label);
5228
- return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
5163
+ return /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
5229
5164
  display: "flex",
5230
5165
  flexDirection: isMobile ? "column" : "row",
5231
5166
  alignItems: isMobile ? "flex-start" : "center",
5232
5167
  gap: isMobile ? spacing[1] : spacing[3],
5233
5168
  padding: `${spacing[3]} 0`,
5234
5169
  borderBottom: `1px solid ${colors.borderLight}`
5235
- } }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5170
+ } }, /* @__PURE__ */ import_react27.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5236
5171
  fontFamily: fonts.primary,
5237
5172
  fontSize: fontSizes.xs,
5238
5173
  fontWeight: fontWeights.bold,
5239
5174
  color: colors.textSecondary,
5240
5175
  marginRight: spacing[2]
5241
- } }, bill.number), /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5176
+ } }, bill.number), /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5242
5177
  fontFamily: fonts.primary,
5243
5178
  fontSize: fontSizes.sm,
5244
5179
  color: colors.textSecondary
5245
- } }, bill.title)), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
5180
+ } }, bill.title)), /* @__PURE__ */ import_react27.default.createElement("div", { style: {
5246
5181
  display: "flex",
5247
5182
  alignItems: "center",
5248
5183
  gap: spacing[2],
5249
5184
  flexShrink: 0,
5250
5185
  flexWrap: "wrap"
5251
- } }, /* @__PURE__ */ import_react25.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5186
+ } }, /* @__PURE__ */ import_react27.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5252
5187
  fontFamily: fonts.primary,
5253
5188
  fontSize: fontSizes.xs,
5254
5189
  color: colors.textMuted
5255
- } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5190
+ } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5256
5191
  fontFamily: fonts.primary,
5257
5192
  fontSize: fontSizes.xs,
5258
5193
  color: colors.textMuted,
5259
5194
  fontStyle: "italic"
5260
5195
  } }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
5261
- })), !showAll && /* @__PURE__ */ import_react25.default.createElement(
5196
+ })), !showAll && /* @__PURE__ */ import_react27.default.createElement(
5262
5197
  ShowAllLink,
5263
5198
  {
5264
5199
  totalCount: filtered.length,
@@ -5269,15 +5204,15 @@ function LegislationSection({ bills, isMobile }) {
5269
5204
  }
5270
5205
  function VotingSection({ votes, isMobile }) {
5271
5206
  const years = getYears(votes, "vote_date");
5272
- const [yearFilter, setYearFilter] = (0, import_react25.useState)("All");
5273
- const [showAll, setShowAll] = (0, import_react25.useState)(false);
5207
+ const [yearFilter, setYearFilter] = (0, import_react27.useState)("All");
5208
+ const [showAll, setShowAll] = (0, import_react27.useState)(false);
5274
5209
  const handleYearChange = (y) => {
5275
5210
  setYearFilter(y);
5276
5211
  setShowAll(false);
5277
5212
  };
5278
5213
  const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
5279
5214
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
5280
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(
5215
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react27.default.createElement(
5281
5216
  SectionHeader,
5282
5217
  {
5283
5218
  title: "Voting Record",
@@ -5285,38 +5220,38 @@ function VotingSection({ votes, isMobile }) {
5285
5220
  years,
5286
5221
  onYearChange: handleYearChange
5287
5222
  }
5288
- ), votes.length === 0 ? /* @__PURE__ */ import_react25.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("div", null, visible.map((vote, i) => {
5223
+ ), votes.length === 0 ? /* @__PURE__ */ import_react27.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("div", null, visible.map((vote, i) => {
5289
5224
  const positionBadge = getPositionBadge(vote.position);
5290
5225
  const normPosition = normalizeText(vote.position);
5291
5226
  const topic = vote.bill_title || vote.vote_question;
5292
5227
  const sourceUrl = vote.bill_url;
5293
- return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
5228
+ return /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
5294
5229
  display: "flex",
5295
5230
  flexDirection: isMobile ? "column" : "row",
5296
5231
  alignItems: isMobile ? "flex-start" : "center",
5297
5232
  gap: isMobile ? spacing[1] : spacing[3],
5298
5233
  padding: `${spacing[3]} 0`,
5299
5234
  borderBottom: `1px solid ${colors.borderLight}`
5300
- } }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5235
+ } }, /* @__PURE__ */ import_react27.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5301
5236
  fontFamily: fonts.primary,
5302
5237
  fontSize: fontSizes.sm,
5303
5238
  color: colors.textSecondary
5304
- } }, topic)), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
5239
+ } }, topic)), /* @__PURE__ */ import_react27.default.createElement("div", { style: {
5305
5240
  display: "flex",
5306
5241
  alignItems: "center",
5307
5242
  gap: spacing[2],
5308
5243
  flexShrink: 0,
5309
5244
  flexWrap: "wrap"
5310
- } }, vote.vote_date && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5245
+ } }, vote.vote_date && /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5311
5246
  fontFamily: fonts.primary,
5312
5247
  fontSize: fontSizes.xs,
5313
5248
  color: colors.textMuted
5314
- } }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react25.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
5249
+ } }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react27.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react27.default.createElement("span", { style: {
5315
5250
  fontFamily: fonts.primary,
5316
5251
  fontSize: fontSizes.xs,
5317
5252
  color: vote.result === "Passed" ? colors.success : colors.textMuted,
5318
5253
  fontWeight: fontWeights.medium
5319
- } }, vote.result), sourceUrl && /* @__PURE__ */ import_react25.default.createElement(
5254
+ } }, vote.result), sourceUrl && /* @__PURE__ */ import_react27.default.createElement(
5320
5255
  "a",
5321
5256
  {
5322
5257
  href: sourceUrl,
@@ -5337,7 +5272,7 @@ function VotingSection({ votes, isMobile }) {
5337
5272
  },
5338
5273
  "Source"
5339
5274
  )));
5340
- })), !showAll && /* @__PURE__ */ import_react25.default.createElement(
5275
+ })), !showAll && /* @__PURE__ */ import_react27.default.createElement(
5341
5276
  ShowAllLink,
5342
5277
  {
5343
5278
  totalCount: filtered.length,
@@ -5356,20 +5291,20 @@ function LegislativeRecord({
5356
5291
  }) {
5357
5292
  const isMobile = useMediaQuery("(max-width: 768px)");
5358
5293
  if (loading) {
5359
- return /* @__PURE__ */ import_react25.default.createElement(Spinner, null);
5294
+ return /* @__PURE__ */ import_react27.default.createElement(Spinner, null);
5360
5295
  }
5361
- return /* @__PURE__ */ import_react25.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react25.default.createElement("h1", { style: {
5296
+ return /* @__PURE__ */ import_react27.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react27.default.createElement("h1", { style: {
5362
5297
  fontFamily: fonts.primary,
5363
5298
  fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
5364
5299
  fontWeight: fontWeights.bold,
5365
5300
  color: colors.evTeal,
5366
5301
  marginBottom: spacing[8],
5367
5302
  marginTop: 0
5368
- } }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react25.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react25.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react25.default.createElement(VotingSection, { votes, isMobile }));
5303
+ } }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react27.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react27.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react27.default.createElement(VotingSection, { votes, isMobile }));
5369
5304
  }
5370
5305
 
5371
5306
  // src/JudicialRecordDetail.jsx
5372
- var import_react26 = __toESM(require("react"));
5307
+ var import_react28 = __toESM(require("react"));
5373
5308
  var containerStyle = {
5374
5309
  fontFamily: "'Manrope', sans-serif",
5375
5310
  maxWidth: "800px"
@@ -5454,7 +5389,7 @@ var emptyStateStyle = {
5454
5389
  function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
5455
5390
  var _a;
5456
5391
  if (!judicialRecord) {
5457
- return /* @__PURE__ */ import_react26.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react26.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react26.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
5392
+ return /* @__PURE__ */ import_react28.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react28.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react28.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
5458
5393
  }
5459
5394
  const {
5460
5395
  judge_detail: detail,
@@ -5463,13 +5398,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
5463
5398
  disciplinary_records: disciplinary = []
5464
5399
  } = judicialRecord;
5465
5400
  const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
5466
- return /* @__PURE__ */ import_react26.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react26.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react26.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react26.default.createElement("p", { style: roleStyle }, (detail == null ? void 0 : detail.court_role) || politician.office_title, (detail == null ? void 0 : detail.date_seated) && ` \xB7 Seated ${formatDate(detail.date_seated)}`), detail && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.election_type === "retention" ? "Retention (Yes/No)" : "Contested Election")), ((_a = detail.areas_of_focus) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react26.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react26.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react26.default.createElement("thead", null, /* @__PURE__ */ import_react26.default.createElement("tr", null, /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react26.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react26.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react26.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react26.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react26.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react26.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react26.default.createElement("thead", null, /* @__PURE__ */ import_react26.default.createElement("tr", null, /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react26.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react26.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react26.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react26.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: i, style: {
5401
+ return /* @__PURE__ */ import_react28.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react28.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react28.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react28.default.createElement("p", { style: roleStyle }, (detail == null ? void 0 : detail.court_role) || politician.office_title, (detail == null ? void 0 : detail.date_seated) && ` \xB7 Seated ${formatDate(detail.date_seated)}`), detail && /* @__PURE__ */ import_react28.default.createElement(import_react28.default.Fragment, null, /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.election_type === "retention" ? "Retention (Yes/No)" : "Contested Election")), ((_a = detail.areas_of_focus) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react28.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react28.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react28.default.createElement("thead", null, /* @__PURE__ */ import_react28.default.createElement("tr", null, /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react28.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react28.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react28.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react28.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react28.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react28.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react28.default.createElement("thead", null, /* @__PURE__ */ import_react28.default.createElement("tr", null, /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react28.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react28.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react28.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react28.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react28.default.createElement(import_react28.default.Fragment, null, /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react28.default.createElement("div", { key: i, style: {
5467
5402
  borderLeft: "3px solid #fc8181",
5468
5403
  backgroundColor: "#fff5f5",
5469
5404
  borderRadius: "0 6px 6px 0",
5470
5405
  padding: "12px 16px",
5471
5406
  marginBottom: "10px"
5472
- } }, /* @__PURE__ */ import_react26.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react26.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react26.default.createElement(
5407
+ } }, /* @__PURE__ */ import_react28.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react28.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react28.default.createElement(
5473
5408
  "a",
5474
5409
  {
5475
5410
  href: d.source_url,
@@ -5482,7 +5417,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
5482
5417
  }
5483
5418
 
5484
5419
  // src/AuthForm.jsx
5485
- var import_react27 = __toESM(require("react"));
5420
+ var import_react29 = __toESM(require("react"));
5486
5421
  function AuthForm({
5487
5422
  logoSrc = "/EVLogo.svg",
5488
5423
  appName = "Empowered Vote",
@@ -5493,11 +5428,11 @@ function AuthForm({
5493
5428
  error = null,
5494
5429
  submitting = false
5495
5430
  }) {
5496
- const [username, setUsername] = (0, import_react27.useState)("");
5497
- const [password, setPassword] = (0, import_react27.useState)("");
5498
- const [confirmPassword, setConfirmPassword] = (0, import_react27.useState)("");
5499
- const [showPasswords, setShowPasswords] = (0, import_react27.useState)(false);
5500
- const [passwordMismatch, setPasswordMismatch] = (0, import_react27.useState)(false);
5431
+ const [username, setUsername] = (0, import_react29.useState)("");
5432
+ const [password, setPassword] = (0, import_react29.useState)("");
5433
+ const [confirmPassword, setConfirmPassword] = (0, import_react29.useState)("");
5434
+ const [showPasswords, setShowPasswords] = (0, import_react29.useState)(false);
5435
+ const [passwordMismatch, setPasswordMismatch] = (0, import_react29.useState)(false);
5501
5436
  const isLogin = mode === "login";
5502
5437
  const handleSubmit = (e) => {
5503
5438
  e.preventDefault();
@@ -5509,7 +5444,7 @@ function AuthForm({
5509
5444
  setPasswordMismatch(false);
5510
5445
  onSubmit == null ? void 0 : onSubmit(username.trim(), password);
5511
5446
  };
5512
- const EyeOpen = () => /* @__PURE__ */ import_react27.default.createElement(
5447
+ const EyeOpen = () => /* @__PURE__ */ import_react29.default.createElement(
5513
5448
  "svg",
5514
5449
  {
5515
5450
  xmlns: "http://www.w3.org/2000/svg",
@@ -5519,7 +5454,7 @@ function AuthForm({
5519
5454
  stroke: "currentColor",
5520
5455
  style: { width: "20px", height: "20px" }
5521
5456
  },
5522
- /* @__PURE__ */ import_react27.default.createElement(
5457
+ /* @__PURE__ */ import_react29.default.createElement(
5523
5458
  "path",
5524
5459
  {
5525
5460
  strokeLinecap: "round",
@@ -5527,7 +5462,7 @@ function AuthForm({
5527
5462
  d: "M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
5528
5463
  }
5529
5464
  ),
5530
- /* @__PURE__ */ import_react27.default.createElement(
5465
+ /* @__PURE__ */ import_react29.default.createElement(
5531
5466
  "path",
5532
5467
  {
5533
5468
  strokeLinecap: "round",
@@ -5536,7 +5471,7 @@ function AuthForm({
5536
5471
  }
5537
5472
  )
5538
5473
  );
5539
- const EyeClosed = () => /* @__PURE__ */ import_react27.default.createElement(
5474
+ const EyeClosed = () => /* @__PURE__ */ import_react29.default.createElement(
5540
5475
  "svg",
5541
5476
  {
5542
5477
  xmlns: "http://www.w3.org/2000/svg",
@@ -5546,7 +5481,7 @@ function AuthForm({
5546
5481
  stroke: "currentColor",
5547
5482
  style: { width: "20px", height: "20px" }
5548
5483
  },
5549
- /* @__PURE__ */ import_react27.default.createElement(
5484
+ /* @__PURE__ */ import_react29.default.createElement(
5550
5485
  "path",
5551
5486
  {
5552
5487
  strokeLinecap: "round",
@@ -5555,17 +5490,17 @@ function AuthForm({
5555
5490
  }
5556
5491
  )
5557
5492
  );
5558
- const PasswordToggle = () => /* @__PURE__ */ import_react27.default.createElement(
5493
+ const PasswordToggle = () => /* @__PURE__ */ import_react29.default.createElement(
5559
5494
  "button",
5560
5495
  {
5561
5496
  type: "button",
5562
5497
  onClick: () => setShowPasswords((prev) => !prev),
5563
5498
  style: styles.passwordToggle
5564
5499
  },
5565
- showPasswords ? /* @__PURE__ */ import_react27.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react27.default.createElement(EyeClosed, null)
5500
+ showPasswords ? /* @__PURE__ */ import_react29.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react29.default.createElement(EyeClosed, null)
5566
5501
  );
5567
5502
  const displayError = passwordMismatch ? "Passwords do not match." : error;
5568
- return /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react27.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react27.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react27.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react27.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react27.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react27.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react27.default.createElement(
5503
+ return /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react29.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react29.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react29.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react29.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react29.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react29.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react29.default.createElement(
5569
5504
  "input",
5570
5505
  {
5571
5506
  type: "text",
@@ -5582,7 +5517,7 @@ function AuthForm({
5582
5517
  },
5583
5518
  required: true
5584
5519
  }
5585
- )), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react27.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react27.default.createElement(
5520
+ )), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react29.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react29.default.createElement(
5586
5521
  "input",
5587
5522
  {
5588
5523
  type: showPasswords ? "text" : "password",
@@ -5598,7 +5533,7 @@ function AuthForm({
5598
5533
  },
5599
5534
  required: true
5600
5535
  }
5601
- ), /* @__PURE__ */ import_react27.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react27.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react27.default.createElement(
5536
+ ), /* @__PURE__ */ import_react29.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react29.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react29.default.createElement(
5602
5537
  "input",
5603
5538
  {
5604
5539
  type: showPasswords ? "text" : "password",
@@ -5614,7 +5549,7 @@ function AuthForm({
5614
5549
  },
5615
5550
  required: true
5616
5551
  }
5617
- ), /* @__PURE__ */ import_react27.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react27.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react27.default.createElement(
5552
+ ), /* @__PURE__ */ import_react29.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react29.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react29.default.createElement(
5618
5553
  "button",
5619
5554
  {
5620
5555
  type: "submit",
@@ -5632,7 +5567,7 @@ function AuthForm({
5632
5567
  }
5633
5568
  },
5634
5569
  submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
5635
- ), onModeSwitch && /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react27.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react27.default.createElement(
5570
+ ), onModeSwitch && /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react29.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react29.default.createElement(
5636
5571
  "button",
5637
5572
  {
5638
5573
  type: "button",
@@ -5805,9 +5740,9 @@ var styles = {
5805
5740
  };
5806
5741
 
5807
5742
  // src/TopicTierBadge.jsx
5808
- var import_react28 = __toESM(require("react"));
5743
+ var import_react30 = __toESM(require("react"));
5809
5744
  function LandmarkIcon({ size = 14 }) {
5810
- return /* @__PURE__ */ import_react28.default.createElement(
5745
+ return /* @__PURE__ */ import_react30.default.createElement(
5811
5746
  "svg",
5812
5747
  {
5813
5748
  width: size,
@@ -5821,16 +5756,16 @@ function LandmarkIcon({ size = 14 }) {
5821
5756
  xmlns: "http://www.w3.org/2000/svg",
5822
5757
  "aria-hidden": "true"
5823
5758
  },
5824
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 18v-7" }),
5825
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }),
5826
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M14 18v-7" }),
5827
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M18 18v-7" }),
5828
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M3 22h18" }),
5829
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 18v-7" })
5759
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 18v-7" }),
5760
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }),
5761
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M14 18v-7" }),
5762
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M18 18v-7" }),
5763
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M3 22h18" }),
5764
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 18v-7" })
5830
5765
  );
5831
5766
  }
5832
5767
  function Building2Icon({ size = 14 }) {
5833
- return /* @__PURE__ */ import_react28.default.createElement(
5768
+ return /* @__PURE__ */ import_react30.default.createElement(
5834
5769
  "svg",
5835
5770
  {
5836
5771
  width: size,
@@ -5844,17 +5779,17 @@ function Building2Icon({ size = 14 }) {
5844
5779
  xmlns: "http://www.w3.org/2000/svg",
5845
5780
  "aria-hidden": "true"
5846
5781
  },
5847
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
5848
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
5849
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
5850
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 6h4" }),
5851
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 10h4" }),
5852
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 14h4" }),
5853
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 18h4" })
5782
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
5783
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
5784
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
5785
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 6h4" }),
5786
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 10h4" }),
5787
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 14h4" }),
5788
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 18h4" })
5854
5789
  );
5855
5790
  }
5856
5791
  function HomeIcon({ size = 14 }) {
5857
- return /* @__PURE__ */ import_react28.default.createElement(
5792
+ return /* @__PURE__ */ import_react30.default.createElement(
5858
5793
  "svg",
5859
5794
  {
5860
5795
  width: size,
@@ -5868,8 +5803,8 @@ function HomeIcon({ size = 14 }) {
5868
5803
  xmlns: "http://www.w3.org/2000/svg",
5869
5804
  "aria-hidden": "true"
5870
5805
  },
5871
- /* @__PURE__ */ import_react28.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
5872
- /* @__PURE__ */ import_react28.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
5806
+ /* @__PURE__ */ import_react30.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
5807
+ /* @__PURE__ */ import_react30.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
5873
5808
  );
5874
5809
  }
5875
5810
  var TIER_INFO = {
@@ -5929,7 +5864,7 @@ function TopicTierBadge({
5929
5864
  userSelect: "none"
5930
5865
  };
5931
5866
  };
5932
- return /* @__PURE__ */ import_react28.default.createElement(
5867
+ return /* @__PURE__ */ import_react30.default.createElement(
5933
5868
  "span",
5934
5869
  {
5935
5870
  className: "ev-topic-tier-badge",
@@ -5939,13 +5874,13 @@ function TopicTierBadge({
5939
5874
  },
5940
5875
  effectiveTiers.map((tier) => {
5941
5876
  const { label, Icon } = TIER_INFO[tier];
5942
- return /* @__PURE__ */ import_react28.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react28.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react28.default.createElement("span", null, label));
5877
+ return /* @__PURE__ */ import_react30.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react30.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react30.default.createElement("span", null, label));
5943
5878
  })
5944
5879
  );
5945
5880
  }
5946
5881
 
5947
5882
  // src/CompassCoverageCallout.jsx
5948
- var import_react29 = __toESM(require("react"));
5883
+ var import_react31 = __toESM(require("react"));
5949
5884
  var TIER_LABELS = {
5950
5885
  federal: "federal",
5951
5886
  state: "state",
@@ -5958,7 +5893,7 @@ function CompassCoverageCallout({
5958
5893
  compassUrl,
5959
5894
  onDismiss
5960
5895
  }) {
5961
- const [dismissed, setDismissed] = (0, import_react29.useState)(false);
5896
+ const [dismissed, setDismissed] = (0, import_react31.useState)(false);
5962
5897
  if (dismissed) return null;
5963
5898
  const tierLabel = TIER_LABELS[tier] || tier;
5964
5899
  const tierStyle = tierColors[tier] || tierColors.federal;
@@ -6009,15 +5944,15 @@ function CompassCoverageCallout({
6009
5944
  setDismissed(true);
6010
5945
  if (onDismiss) onDismiss();
6011
5946
  };
6012
- return /* @__PURE__ */ import_react29.default.createElement(
5947
+ return /* @__PURE__ */ import_react31.default.createElement(
6013
5948
  "div",
6014
5949
  {
6015
5950
  className: "ev-compass-coverage-callout",
6016
5951
  role: "status",
6017
5952
  style: containerStyle2
6018
5953
  },
6019
- /* @__PURE__ */ import_react29.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react29.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react29.default.createElement("div", null, count === 0 ? `None of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. ` : `Only ${count} of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. `, "Add more ", tierLabel, "-applicable topics to get better comparisons with ", tierLabel, " officials."), /* @__PURE__ */ import_react29.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
6020
- onDismiss !== void 0 && /* @__PURE__ */ import_react29.default.createElement(
5954
+ /* @__PURE__ */ import_react31.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react31.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react31.default.createElement("div", null, count === 0 ? `None of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. ` : `Only ${count} of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. `, "Add more ", tierLabel, "-applicable topics to get better comparisons with ", tierLabel, " officials."), /* @__PURE__ */ import_react31.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
5955
+ onDismiss !== void 0 && /* @__PURE__ */ import_react31.default.createElement(
6021
5956
  "button",
6022
5957
  {
6023
5958
  onClick: handleDismiss,
@@ -6030,7 +5965,7 @@ function CompassCoverageCallout({
6030
5965
  }
6031
5966
 
6032
5967
  // src/ExpandCompassNudge.jsx
6033
- var import_react30 = __toESM(require("react"));
5968
+ var import_react32 = __toESM(require("react"));
6034
5969
  function ExpandCompassNudge({
6035
5970
  politicianName,
6036
5971
  missingCount,
@@ -6077,7 +6012,7 @@ function ExpandCompassNudge({
6077
6012
  };
6078
6013
  const topicsLabel = missingCount === 1 ? "topic" : "topics";
6079
6014
  const speakerName = politicianName || "This politician";
6080
- return /* @__PURE__ */ import_react30.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react30.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react30.default.createElement("p", { style: bodyStyle }, speakerName, " has stances on ", missingCount, " more ", topicsLabel, " you haven't answered yet. Expand your compass to see where you stand on all of them."), /* @__PURE__ */ import_react30.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
6015
+ return /* @__PURE__ */ import_react32.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react32.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react32.default.createElement("p", { style: bodyStyle }, speakerName, " has stances on ", missingCount, " more ", topicsLabel, " you haven't answered yet. Expand your compass to see where you stand on all of them."), /* @__PURE__ */ import_react32.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
6081
6016
  }
6082
6017
 
6083
6018
  // src/computeTierCoverage.js
@@ -6098,7 +6033,7 @@ function computeTierCoverage(topics) {
6098
6033
  }
6099
6034
 
6100
6035
  // src/useEvContextPromotion.js
6101
- var import_react31 = require("react");
6036
+ var import_react33 = require("react");
6102
6037
  function useEvContextPromotion({
6103
6038
  domain,
6104
6039
  isLoggedIn,
@@ -6107,23 +6042,23 @@ function useEvContextPromotion({
6107
6042
  apiWriter,
6108
6043
  enabled = true
6109
6044
  }) {
6110
- const [shouldPrompt, setShouldPrompt] = (0, import_react31.useState)(false);
6111
- const [payload, setPayload] = (0, import_react31.useState)(null);
6112
- const [status, setStatus] = (0, import_react31.useState)("idle");
6113
- const [error, setError] = (0, import_react31.useState)(null);
6114
- const apiDataRef = (0, import_react31.useRef)(apiData);
6045
+ const [shouldPrompt, setShouldPrompt] = (0, import_react33.useState)(false);
6046
+ const [payload, setPayload] = (0, import_react33.useState)(null);
6047
+ const [status, setStatus] = (0, import_react33.useState)("idle");
6048
+ const [error, setError] = (0, import_react33.useState)(null);
6049
+ const apiDataRef = (0, import_react33.useRef)(apiData);
6115
6050
  apiDataRef.current = apiData;
6116
- const userIdRef = (0, import_react31.useRef)(userId);
6051
+ const userIdRef = (0, import_react33.useRef)(userId);
6117
6052
  userIdRef.current = userId;
6118
- const isLoggedInRef = (0, import_react31.useRef)(isLoggedIn);
6053
+ const isLoggedInRef = (0, import_react33.useRef)(isLoggedIn);
6119
6054
  isLoggedInRef.current = isLoggedIn;
6120
- const enabledRef = (0, import_react31.useRef)(enabled);
6055
+ const enabledRef = (0, import_react33.useRef)(enabled);
6121
6056
  enabledRef.current = enabled;
6122
- const domainRef = (0, import_react31.useRef)(domain);
6057
+ const domainRef = (0, import_react33.useRef)(domain);
6123
6058
  domainRef.current = domain;
6124
- const apiWriterRef = (0, import_react31.useRef)(apiWriter);
6059
+ const apiWriterRef = (0, import_react33.useRef)(apiWriter);
6125
6060
  apiWriterRef.current = apiWriter;
6126
- const detect = (0, import_react31.useCallback)(async () => {
6061
+ const detect = (0, import_react33.useCallback)(async () => {
6127
6062
  const _enabled = enabledRef.current;
6128
6063
  const _isLoggedIn = isLoggedInRef.current;
6129
6064
  const _userId = userIdRef.current;
@@ -6162,16 +6097,16 @@ function useEvContextPromotion({
6162
6097
  setPayload(null);
6163
6098
  }
6164
6099
  }, []);
6165
- (0, import_react31.useEffect)(() => {
6100
+ (0, import_react33.useEffect)(() => {
6166
6101
  detect();
6167
6102
  }, [detect, isLoggedIn, userId, apiData, enabled, domain]);
6168
- (0, import_react31.useEffect)(() => {
6103
+ (0, import_react33.useEffect)(() => {
6169
6104
  const unsub = evContext.subscribe(() => {
6170
6105
  detect();
6171
6106
  });
6172
6107
  return unsub;
6173
6108
  }, [detect]);
6174
- const promote = (0, import_react31.useCallback)(async () => {
6109
+ const promote = (0, import_react33.useCallback)(async () => {
6175
6110
  const _userId = userIdRef.current;
6176
6111
  const _domain = domainRef.current;
6177
6112
  const _writer = apiWriterRef.current;
@@ -6198,7 +6133,7 @@ function useEvContextPromotion({
6198
6133
  setError(err instanceof Error ? err : new Error(String(err)));
6199
6134
  }
6200
6135
  }, [payload]);
6201
- const dismiss = (0, import_react31.useCallback)(async () => {
6136
+ const dismiss = (0, import_react33.useCallback)(async () => {
6202
6137
  const _userId = userIdRef.current;
6203
6138
  const _domain = domainRef.current;
6204
6139
  if (!_userId) return;
@@ -6257,14 +6192,14 @@ function isGuestPopulated(domain, fullEvContext) {
6257
6192
  }
6258
6193
 
6259
6194
  // src/StanceAccordion.jsx
6260
- var import_react33 = __toESM(require("react"));
6195
+ var import_react35 = __toESM(require("react"));
6261
6196
 
6262
6197
  // src/Favicon.jsx
6263
- var import_react32 = __toESM(require("react"));
6198
+ var import_react34 = __toESM(require("react"));
6264
6199
  function Favicon({ url, size = 16 }) {
6265
6200
  try {
6266
6201
  const domain = new URL(url).hostname;
6267
- return /* @__PURE__ */ import_react32.default.createElement(
6202
+ return /* @__PURE__ */ import_react34.default.createElement(
6268
6203
  "img",
6269
6204
  {
6270
6205
  src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
@@ -6275,7 +6210,7 @@ function Favicon({ url, size = 16 }) {
6275
6210
  }
6276
6211
  );
6277
6212
  } catch {
6278
- return /* @__PURE__ */ import_react32.default.createElement(
6213
+ return /* @__PURE__ */ import_react34.default.createElement(
6279
6214
  "svg",
6280
6215
  {
6281
6216
  width: size,
@@ -6286,8 +6221,8 @@ function Favicon({ url, size = 16 }) {
6286
6221
  strokeWidth: "1.5",
6287
6222
  style: { verticalAlign: "middle", flexShrink: 0 }
6288
6223
  },
6289
- /* @__PURE__ */ import_react32.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
6290
- /* @__PURE__ */ import_react32.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
6224
+ /* @__PURE__ */ import_react34.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
6225
+ /* @__PURE__ */ import_react34.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
6291
6226
  );
6292
6227
  }
6293
6228
  }
@@ -6318,11 +6253,11 @@ function StanceAccordion({
6318
6253
  apiUrl = "https://api.empowered.vote"
6319
6254
  }) {
6320
6255
  var _a;
6321
- const [expandedTopicId, setExpandedTopicId] = (0, import_react33.useState)(null);
6322
- const [loadingId, setLoadingId] = (0, import_react33.useState)(null);
6323
- const [showAll, setShowAll] = (0, import_react33.useState)(false);
6324
- const contextCache = (0, import_react33.useRef)(/* @__PURE__ */ new Map());
6325
- const quotesCache = (0, import_react33.useRef)(null);
6256
+ const [expandedTopicId, setExpandedTopicId] = (0, import_react35.useState)(null);
6257
+ const [loadingId, setLoadingId] = (0, import_react35.useState)(null);
6258
+ const [showAll, setShowAll] = (0, import_react35.useState)(false);
6259
+ const contextCache = (0, import_react35.useRef)(/* @__PURE__ */ new Map());
6260
+ const quotesCache = (0, import_react35.useRef)(null);
6326
6261
  const polAnswerMap = {};
6327
6262
  if (polAnswers) {
6328
6263
  polAnswers.forEach((a) => {
@@ -6381,7 +6316,7 @@ function StanceAccordion({
6381
6316
  quotesCache.current = [];
6382
6317
  }
6383
6318
  }
6384
- const handleToggle = (0, import_react33.useCallback)(
6319
+ const handleToggle = (0, import_react35.useCallback)(
6385
6320
  async (topicId) => {
6386
6321
  if (expandedTopicId === topicId) {
6387
6322
  setExpandedTopicId(null);
@@ -6398,7 +6333,7 @@ function StanceAccordion({
6398
6333
  },
6399
6334
  [expandedTopicId, politicianId, apiUrl]
6400
6335
  );
6401
- (0, import_react33.useEffect)(() => {
6336
+ (0, import_react35.useEffect)(() => {
6402
6337
  if (initialExpandedTopicId && topics && topics.length > 0) {
6403
6338
  handleToggle(String(initialExpandedTopicId));
6404
6339
  }
@@ -6414,13 +6349,13 @@ function StanceAccordion({
6414
6349
  visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
6415
6350
  }
6416
6351
  }
6417
- return /* @__PURE__ */ import_react33.default.createElement(
6352
+ return /* @__PURE__ */ import_react35.default.createElement(
6418
6353
  "div",
6419
6354
  {
6420
6355
  className: "flex flex-col",
6421
6356
  style: { fontFamily: "'Manrope', sans-serif" }
6422
6357
  },
6423
- /* @__PURE__ */ import_react33.default.createElement(
6358
+ /* @__PURE__ */ import_react35.default.createElement(
6424
6359
  "h3",
6425
6360
  {
6426
6361
  className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
@@ -6443,15 +6378,15 @@ function StanceAccordion({
6443
6378
  if (topic.topic_key) return q.issue === topic.topic_key;
6444
6379
  return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
6445
6380
  }) : [];
6446
- return /* @__PURE__ */ import_react33.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react33.default.createElement(
6381
+ return /* @__PURE__ */ import_react35.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react35.default.createElement(
6447
6382
  "button",
6448
6383
  {
6449
6384
  type: "button",
6450
6385
  onClick: () => handleToggle(topicId),
6451
6386
  className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
6452
6387
  },
6453
- /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
6454
- /* @__PURE__ */ import_react33.default.createElement(
6388
+ /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
6389
+ /* @__PURE__ */ import_react35.default.createElement(
6455
6390
  "svg",
6456
6391
  {
6457
6392
  width: "16",
@@ -6468,9 +6403,9 @@ function StanceAccordion({
6468
6403
  transition: "transform 0.2s ease"
6469
6404
  }
6470
6405
  },
6471
- /* @__PURE__ */ import_react33.default.createElement("polyline", { points: "9 18 15 12 9 6" })
6406
+ /* @__PURE__ */ import_react35.default.createElement("polyline", { points: "9 18 15 12 9 6" })
6472
6407
  )
6473
- ), /* @__PURE__ */ import_react33.default.createElement(
6408
+ ), /* @__PURE__ */ import_react35.default.createElement(
6474
6409
  "div",
6475
6410
  {
6476
6411
  style: {
@@ -6479,7 +6414,7 @@ function StanceAccordion({
6479
6414
  transition: "grid-template-rows 0.25s ease"
6480
6415
  }
6481
6416
  },
6482
- /* @__PURE__ */ import_react33.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react33.default.createElement(
6417
+ /* @__PURE__ */ import_react35.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react35.default.createElement(
6483
6418
  "div",
6484
6419
  {
6485
6420
  style: {
@@ -6491,14 +6426,14 @@ function StanceAccordion({
6491
6426
  animation: "ev-spin 0.8s linear infinite"
6492
6427
  }
6493
6428
  }
6494
- )), !isLoading && cached && /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react33.default.createElement(
6429
+ )), !isLoading && cached && /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react35.default.createElement(
6495
6430
  "p",
6496
6431
  {
6497
6432
  className: "text-sm text-neutral-700 mb-3",
6498
6433
  style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
6499
6434
  },
6500
6435
  cached.reasoning
6501
- ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react33.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react33.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react33.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react33.default.createElement(
6436
+ ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react35.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react35.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react35.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react35.default.createElement(
6502
6437
  "a",
6503
6438
  {
6504
6439
  href: src,
@@ -6506,9 +6441,9 @@ function StanceAccordion({
6506
6441
  rel: "noreferrer",
6507
6442
  className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
6508
6443
  },
6509
- /* @__PURE__ */ import_react33.default.createElement(Favicon, { url: src }),
6510
- /* @__PURE__ */ import_react33.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
6511
- ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react33.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react33.default.createElement(
6444
+ /* @__PURE__ */ import_react35.default.createElement(Favicon, { url: src }),
6445
+ /* @__PURE__ */ import_react35.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
6446
+ ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react35.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react35.default.createElement(
6512
6447
  "p",
6513
6448
  {
6514
6449
  style: {
@@ -6525,7 +6460,7 @@ function StanceAccordion({
6525
6460
  const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
6526
6461
  const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
6527
6462
  const sourceName = quote.source_name || quote.sourceName;
6528
- return /* @__PURE__ */ import_react33.default.createElement(
6463
+ return /* @__PURE__ */ import_react35.default.createElement(
6529
6464
  "div",
6530
6465
  {
6531
6466
  key: quote.id,
@@ -6537,7 +6472,7 @@ function StanceAccordion({
6537
6472
  marginBottom: "8px"
6538
6473
  }
6539
6474
  },
6540
- /* @__PURE__ */ import_react33.default.createElement(
6475
+ /* @__PURE__ */ import_react35.default.createElement(
6541
6476
  "p",
6542
6477
  {
6543
6478
  style: {
@@ -6550,7 +6485,7 @@ function StanceAccordion({
6550
6485
  },
6551
6486
  quote.text
6552
6487
  ),
6553
- verdict === "agreed" && /* @__PURE__ */ import_react33.default.createElement(
6488
+ verdict === "agreed" && /* @__PURE__ */ import_react35.default.createElement(
6554
6489
  "span",
6555
6490
  {
6556
6491
  style: {
@@ -6567,10 +6502,10 @@ function StanceAccordion({
6567
6502
  flexShrink: 0
6568
6503
  }
6569
6504
  },
6570
- /* @__PURE__ */ import_react33.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react33.default.createElement("path", { d: "M5 13l4 4L19 7" })),
6505
+ /* @__PURE__ */ import_react35.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react35.default.createElement("path", { d: "M5 13l4 4L19 7" })),
6571
6506
  "Agreed"
6572
6507
  ),
6573
- verdict === "disagreed" && /* @__PURE__ */ import_react33.default.createElement(
6508
+ verdict === "disagreed" && /* @__PURE__ */ import_react35.default.createElement(
6574
6509
  "span",
6575
6510
  {
6576
6511
  style: {
@@ -6587,10 +6522,10 @@ function StanceAccordion({
6587
6522
  flexShrink: 0
6588
6523
  }
6589
6524
  },
6590
- /* @__PURE__ */ import_react33.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react33.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
6525
+ /* @__PURE__ */ import_react35.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react35.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
6591
6526
  "Disagreed"
6592
6527
  ),
6593
- sourceName && /* @__PURE__ */ import_react33.default.createElement(
6528
+ sourceName && /* @__PURE__ */ import_react35.default.createElement(
6594
6529
  "a",
6595
6530
  {
6596
6531
  href: quote.source_url || quote.sourceUrl,
@@ -6607,10 +6542,10 @@ function StanceAccordion({
6607
6542
  sourceName
6608
6543
  )
6609
6544
  );
6610
- })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
6545
+ })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
6611
6546
  ));
6612
6547
  }),
6613
- hasToggle && /* @__PURE__ */ import_react33.default.createElement(
6548
+ hasToggle && /* @__PURE__ */ import_react35.default.createElement(
6614
6549
  "button",
6615
6550
  {
6616
6551
  type: "button",