@empoweredvote/ev-ui 0.4.5 → 0.5.1

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
@@ -34,12 +34,14 @@ __export(index_exports, {
34
34
  BranchIcon: () => BranchIcon,
35
35
  CategorySection: () => CategorySection,
36
36
  CommitteeTable: () => CommitteeTable,
37
+ CompassCardHorizontal: () => CompassCardHorizontal,
37
38
  CompassCoverageCallout: () => CompassCoverageCallout,
38
39
  CompassIcon: () => CompassIcon,
39
40
  ExpandCompassNudge: () => ExpandCompassNudge,
40
41
  FilterSidebar: () => FilterSidebar,
41
42
  GovernmentBodySection: () => GovernmentBodySection,
42
43
  Header: () => Header,
44
+ IconOverlay: () => IconOverlay,
43
45
  IssueTags: () => IssueTags,
44
46
  JudicialRecordDetail: () => JudicialRecordDetail,
45
47
  JudicialScorecard: () => JudicialScorecard,
@@ -254,9 +256,9 @@ function RadarChartCore({
254
256
  const fSize = adaptiveFontSize(longestLine, baseFSize);
255
257
  const lineHeight = fSize * 1.1;
256
258
  const dynamicLabelOffset = lines.length > 1 ? labelOffset + 8 : labelOffset;
257
- const offset = radius + dynamicLabelOffset;
258
- const labelX = centerX + offset * Math.sin(angle);
259
- let labelY = centerY - offset * Math.cos(angle);
259
+ const offset2 = radius + dynamicLabelOffset;
260
+ const labelX = centerX + offset2 * Math.sin(angle);
261
+ let labelY = centerY - offset2 * Math.cos(angle);
260
262
  if (isTop && lines.length > 1) {
261
263
  labelY -= (lines.length - 1) * lineHeight;
262
264
  }
@@ -1841,8 +1843,610 @@ function PoliticianCard({
1841
1843
  );
1842
1844
  }
1843
1845
 
1844
- // src/CategorySection.jsx
1846
+ // src/CompassCardHorizontal.jsx
1847
+ var import_react13 = __toESM(require("react"));
1848
+
1849
+ // src/PlaceholderRadar.jsx
1845
1850
  var import_react8 = __toESM(require("react"));
1851
+ function PlaceholderRadar({ size = 250, name = "" }) {
1852
+ const cx = size / 2;
1853
+ const cy = size / 2;
1854
+ const r = size / 2 * 0.65;
1855
+ const n = 8;
1856
+ const vertices = Array.from({ length: n }, (_, i) => {
1857
+ const a = 2 * Math.PI * i / n;
1858
+ return [cx + r * Math.sin(a), cy - r * Math.cos(a)];
1859
+ });
1860
+ const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
1861
+ const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
1862
+ const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
1863
+ return /* @__PURE__ */ import_react8.default.createElement(
1864
+ "svg",
1865
+ {
1866
+ width: size,
1867
+ height: size,
1868
+ viewBox: `0 0 ${size} ${size}`,
1869
+ role: "img",
1870
+ "aria-label": name ? `${name} \u2014 compass data unavailable` : "compass data unavailable",
1871
+ style: {
1872
+ backgroundColor: colorScales.teal["050"],
1873
+ borderRadius: borderRadius.sm,
1874
+ flexShrink: 0
1875
+ }
1876
+ },
1877
+ vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
1878
+ "line",
1879
+ {
1880
+ key: i,
1881
+ x1: cx,
1882
+ y1: cy,
1883
+ x2: x,
1884
+ y2: y,
1885
+ stroke: colorScales.gray["200"],
1886
+ strokeWidth: "1",
1887
+ strokeDasharray: "2 3",
1888
+ opacity: "0.6"
1889
+ }
1890
+ )),
1891
+ /* @__PURE__ */ import_react8.default.createElement(
1892
+ "polygon",
1893
+ {
1894
+ points: innerPts,
1895
+ fill: "none",
1896
+ stroke: colorScales.gray["200"],
1897
+ strokeWidth: "1",
1898
+ strokeDasharray: "2 3",
1899
+ opacity: "0.5"
1900
+ }
1901
+ ),
1902
+ /* @__PURE__ */ import_react8.default.createElement(
1903
+ "polygon",
1904
+ {
1905
+ points: midPts,
1906
+ fill: "none",
1907
+ stroke: colorScales.gray["200"],
1908
+ strokeWidth: "1",
1909
+ strokeDasharray: "3 3",
1910
+ opacity: "0.6"
1911
+ }
1912
+ ),
1913
+ /* @__PURE__ */ import_react8.default.createElement(
1914
+ "polygon",
1915
+ {
1916
+ points: outerPts,
1917
+ fill: "none",
1918
+ stroke: colorScales.gray["200"],
1919
+ strokeWidth: "1.5",
1920
+ strokeDasharray: "4 3"
1921
+ }
1922
+ )
1923
+ );
1924
+ }
1925
+
1926
+ // src/CompassCardHorizontalMeta.jsx
1927
+ var import_react12 = __toESM(require("react"));
1928
+
1929
+ // src/IconOverlay.jsx
1930
+ var import_react10 = __toESM(require("react"));
1931
+ var import_react11 = require("@floating-ui/react");
1932
+
1933
+ // src/icons.js
1934
+ var import_react9 = __toESM(require("react"));
1935
+ function BallotIcon({ size = 16, color = "currentColor" }) {
1936
+ return /* @__PURE__ */ import_react9.default.createElement(
1937
+ "svg",
1938
+ {
1939
+ width: size,
1940
+ height: size,
1941
+ viewBox: "0 0 24 24",
1942
+ fill: "none",
1943
+ stroke: color,
1944
+ strokeWidth: "2",
1945
+ strokeLinecap: "round",
1946
+ strokeLinejoin: "round",
1947
+ xmlns: "http://www.w3.org/2000/svg"
1948
+ },
1949
+ /* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
1950
+ /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
1951
+ /* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
1952
+ );
1953
+ }
1954
+ function CompassIcon({ size = 16, color = "currentColor" }) {
1955
+ return /* @__PURE__ */ import_react9.default.createElement(
1956
+ "svg",
1957
+ {
1958
+ width: size,
1959
+ height: size,
1960
+ viewBox: "0 0 24 24",
1961
+ fill: "none",
1962
+ stroke: color,
1963
+ strokeWidth: "2",
1964
+ strokeLinecap: "round",
1965
+ strokeLinejoin: "round",
1966
+ xmlns: "http://www.w3.org/2000/svg"
1967
+ },
1968
+ /* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
1969
+ /* @__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" })
1970
+ );
1971
+ }
1972
+ function BranchIcon({ size = 16, color = "currentColor", branch }) {
1973
+ let paths;
1974
+ switch (branch) {
1975
+ case "executive":
1976
+ 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" }));
1977
+ break;
1978
+ case "legislative":
1979
+ 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" }));
1980
+ break;
1981
+ case "judicial":
1982
+ 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" }));
1983
+ break;
1984
+ default:
1985
+ 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" }));
1986
+ break;
1987
+ }
1988
+ return /* @__PURE__ */ import_react9.default.createElement(
1989
+ "svg",
1990
+ {
1991
+ width: size,
1992
+ height: size,
1993
+ viewBox: "0 0 24 24",
1994
+ fill: "none",
1995
+ stroke: color,
1996
+ strokeWidth: "2",
1997
+ strokeLinecap: "round",
1998
+ strokeLinejoin: "round",
1999
+ xmlns: "http://www.w3.org/2000/svg"
2000
+ },
2001
+ paths
2002
+ );
2003
+ }
2004
+
2005
+ // src/IconOverlay.jsx
2006
+ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
2007
+ const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
2008
+ const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
2009
+ open: isOpen,
2010
+ onOpenChange: setIsOpen,
2011
+ middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
2012
+ whileElementsMounted: import_react11.autoUpdate
2013
+ });
2014
+ const hover = (0, import_react11.useHover)(context);
2015
+ const focus2 = (0, import_react11.useFocus)(context);
2016
+ const dismiss = (0, import_react11.useDismiss)(context);
2017
+ const role = (0, import_react11.useRole)(context, { role: "tooltip" });
2018
+ const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
2019
+ hover,
2020
+ focus2,
2021
+ dismiss,
2022
+ role
2023
+ ]);
2024
+ return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
2025
+ "span",
2026
+ {
2027
+ ref: refs.setReference,
2028
+ "aria-label": tooltip,
2029
+ tabIndex: 0,
2030
+ style: { display: "inline-flex", padding: spacing[1], ...onClick ? { cursor: "pointer" } : {} },
2031
+ ...getReferenceProps(),
2032
+ onClick: onClick ? (e) => {
2033
+ e.stopPropagation();
2034
+ onClick(e);
2035
+ } : void 0
2036
+ },
2037
+ /* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
2038
+ ), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
2039
+ "div",
2040
+ {
2041
+ ref: refs.setFloating,
2042
+ style: {
2043
+ ...floatingStyles,
2044
+ zIndex: 70,
2045
+ background: semanticTokens.light.tooltip.background,
2046
+ color: semanticTokens.light.tooltip.text,
2047
+ padding: "4px 8px",
2048
+ borderRadius: "6px",
2049
+ fontSize: "14px",
2050
+ fontFamily: "'Manrope', sans-serif",
2051
+ pointerEvents: "none",
2052
+ whiteSpace: "nowrap"
2053
+ },
2054
+ ...getFloatingProps()
2055
+ },
2056
+ tooltip
2057
+ )));
2058
+ }
2059
+ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
2060
+ if (!ballot && !hasStances && !branch) return null;
2061
+ 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;
2062
+ return /* @__PURE__ */ import_react10.default.createElement(
2063
+ "div",
2064
+ {
2065
+ style: {
2066
+ display: "flex",
2067
+ gap: 4,
2068
+ alignItems: "center",
2069
+ justifyContent: "flex-start",
2070
+ padding: 0,
2071
+ marginLeft: "-4px"
2072
+ // offset icon wrapper padding so icons align flush-left with text
2073
+ }
2074
+ },
2075
+ ballot && /* @__PURE__ */ import_react10.default.createElement(
2076
+ IconWithTooltip,
2077
+ {
2078
+ IconComponent: BallotIcon,
2079
+ color: colors.evMutedBlue,
2080
+ tooltip: ballotTooltip,
2081
+ size: 14
2082
+ }
2083
+ ),
2084
+ hasStances && /* @__PURE__ */ import_react10.default.createElement(
2085
+ IconWithTooltip,
2086
+ {
2087
+ IconComponent: CompassIcon,
2088
+ color: colors.evMutedBlue,
2089
+ tooltip: "Compare your views",
2090
+ size: 14,
2091
+ onClick: onCompassClick
2092
+ }
2093
+ ),
2094
+ branch && /* @__PURE__ */ import_react10.default.createElement(
2095
+ IconWithTooltip,
2096
+ {
2097
+ IconComponent: BranchIcon,
2098
+ color: colors.evMutedBlue,
2099
+ tooltip: `${branch} branch`,
2100
+ size: 14,
2101
+ extraProps: { branch: branch.toLowerCase() }
2102
+ }
2103
+ )
2104
+ );
2105
+ }
2106
+
2107
+ // src/CompassCardHorizontalMeta.jsx
2108
+ function CompassCardHorizontalMeta({
2109
+ politician,
2110
+ surface = "representatives",
2111
+ userAnswers
2112
+ }) {
2113
+ const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
2114
+ return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
2115
+ flex: 1,
2116
+ minWidth: 0,
2117
+ display: "flex",
2118
+ flexDirection: "column",
2119
+ gap: spacing[1]
2120
+ } }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2121
+ fontFamily: fonts.primary,
2122
+ fontSize: fontSizes.lg,
2123
+ fontWeight: fontWeights.semibold,
2124
+ lineHeight: 1.4,
2125
+ color: colors.evMutedBlue,
2126
+ margin: 0
2127
+ } }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2128
+ fontFamily: fonts.primary,
2129
+ fontSize: fontSizes.sm,
2130
+ fontWeight: fontWeights.semibold,
2131
+ lineHeight: 1.4,
2132
+ color: colors.textSecondary,
2133
+ margin: 0,
2134
+ overflow: "hidden",
2135
+ display: "-webkit-box",
2136
+ WebkitLineClamp: 2,
2137
+ WebkitBoxOrient: "vertical"
2138
+ } }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2139
+ fontFamily: fonts.primary,
2140
+ fontSize: fontSizes.sm,
2141
+ fontWeight: fontWeights.regular,
2142
+ lineHeight: 1.5,
2143
+ color: colors.textMuted,
2144
+ margin: 0,
2145
+ overflow: "hidden",
2146
+ textOverflow: "ellipsis",
2147
+ whiteSpace: "nowrap"
2148
+ } }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
2149
+ IconOverlay,
2150
+ {
2151
+ ballot: politician.ballot || null,
2152
+ hasStances: Boolean(userAnswers && userAnswers.length > 0) || Boolean(politician.hasStances),
2153
+ branch: politician.branch || null
2154
+ }
2155
+ ));
2156
+ }
2157
+
2158
+ // src/compassHelpers.js
2159
+ function buildAnswerMapByShortTitle(allTopics, allAnswers, allowedShorts) {
2160
+ var _a;
2161
+ const allowed = new Set(allowedShorts.map((s) => s.toLowerCase()));
2162
+ const topicById = new Map(allTopics.map((t) => [t.id, t]));
2163
+ const shortById = new Map(allTopics.map((t) => [t.id, t.short_title]));
2164
+ const out = {};
2165
+ const topicByShortLower = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
2166
+ for (const s of allowedShorts) {
2167
+ const t = topicByShortLower.get(s.toLowerCase());
2168
+ if (t) out[t.short_title] = 0;
2169
+ }
2170
+ for (const a of allAnswers) {
2171
+ const st = shortById.get(a.topic_id);
2172
+ if (!st) continue;
2173
+ if (allowed.has(String(st).toLowerCase())) {
2174
+ out[st] = (_a = a.value) != null ? _a : 0;
2175
+ }
2176
+ }
2177
+ const topicByShort = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
2178
+ const topicsFiltered = allowedShorts.map((s) => topicByShort.get(s.toLowerCase())).filter(Boolean);
2179
+ return { topicsFiltered, answersByShort: out };
2180
+ }
2181
+
2182
+ // src/CompassCardHorizontal.jsx
2183
+ var RADAR_SIZE = 250;
2184
+ var SLOT_WIDTH = 260;
2185
+ function CompassCardHorizontal({
2186
+ politician,
2187
+ userAnswers = null,
2188
+ tierVisuals = null,
2189
+ view = "compass",
2190
+ surface = "representatives",
2191
+ variant = "compass",
2192
+ onBuildCompass = null,
2193
+ onClick
2194
+ }) {
2195
+ var _a;
2196
+ const [hovered, setHovered] = (0, import_react13.useState)(false);
2197
+ const [focused, setFocused] = (0, import_react13.useState)(false);
2198
+ const [imgError, setImgError] = (0, import_react13.useState)(false);
2199
+ const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
2200
+ (0, import_react13.useEffect)(() => {
2201
+ setImgError(false);
2202
+ }, [politician == null ? void 0 : politician.photo_origin_url]);
2203
+ const cardStyle = {
2204
+ position: "relative",
2205
+ display: "flex",
2206
+ flexDirection: "row",
2207
+ alignItems: "center",
2208
+ backgroundColor: (_a = tierVisuals == null ? void 0 : tierVisuals.bg) != null ? _a : colors.bgWhite,
2209
+ border: `1px solid ${colors.borderLight}`,
2210
+ borderRadius: borderRadius.xl,
2211
+ overflow: "hidden",
2212
+ // clips slot corners via card border-radius — no padding needed
2213
+ boxShadow: focused ? focus.ring : hovered ? shadows.cardHover : shadows.md,
2214
+ transform: hovered ? "translateY(-2px)" : "none",
2215
+ transition: `box-shadow ${duration.normal} ease, transform ${duration.normal} ease`,
2216
+ cursor: onClick ? "pointer" : "default",
2217
+ fontFamily: fonts.primary,
2218
+ outline: "none"
2219
+ };
2220
+ const slotStyle = { width: SLOT_WIDTH, height: SLOT_WIDTH, flexShrink: 0, overflow: "hidden", position: "relative" };
2221
+ function renderCompass() {
2222
+ var _a2, _b, _c;
2223
+ if (!userAnswers || userAnswers.length === 0) {
2224
+ return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2225
+ }
2226
+ let topics = [];
2227
+ let data = {};
2228
+ let compareData = {};
2229
+ try {
2230
+ if (Array.isArray(userAnswers) && userAnswers.length > 0) {
2231
+ const hasEmbeddedTopics = (_b = (_a2 = userAnswers[0]) == null ? void 0 : _a2.topic) == null ? void 0 : _b.short_title;
2232
+ if (hasEmbeddedTopics) {
2233
+ const allowedShorts = userAnswers.map((a) => a.topic.short_title);
2234
+ const allTopics = userAnswers.map((a) => a.topic);
2235
+ const { topicsFiltered, answersByShort } = buildAnswerMapByShortTitle(
2236
+ allTopics,
2237
+ userAnswers,
2238
+ allowedShorts
2239
+ );
2240
+ topics = topicsFiltered;
2241
+ data = answersByShort;
2242
+ } else {
2243
+ if (!Array.isArray(userAnswers[0])) {
2244
+ topics = userAnswers.filter((a) => a.short_title).map((a) => ({ id: a.topic_id || a.short_title, short_title: a.short_title, title: a.short_title }));
2245
+ data = {};
2246
+ for (const a of userAnswers) {
2247
+ if (a.short_title) data[a.short_title] = (_c = a.value) != null ? _c : 0;
2248
+ }
2249
+ }
2250
+ }
2251
+ }
2252
+ if ((politician == null ? void 0 : politician.stances) && typeof politician.stances === "object") {
2253
+ compareData = Array.isArray(politician.stances) ? politician.stances.reduce((acc, s) => {
2254
+ var _a3;
2255
+ if (s.short_title) acc[s.short_title] = (_a3 = s.value) != null ? _a3 : 0;
2256
+ return acc;
2257
+ }, {}) : politician.stances;
2258
+ }
2259
+ if (topics.length === 0) {
2260
+ return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2261
+ }
2262
+ } catch (err) {
2263
+ return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2264
+ }
2265
+ return /* @__PURE__ */ import_react13.default.createElement(
2266
+ RadarChartCore,
2267
+ {
2268
+ topics,
2269
+ data,
2270
+ compareData,
2271
+ invertedSpokes: {},
2272
+ onToggleInversion: () => {
2273
+ },
2274
+ onReplaceTopic: () => {
2275
+ },
2276
+ size: RADAR_SIZE,
2277
+ padding: 20,
2278
+ labelOffset: 5,
2279
+ labelFontSize: 12
2280
+ }
2281
+ );
2282
+ }
2283
+ function renderPortrait() {
2284
+ var _a2, _b, _c;
2285
+ 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;
2286
+ if (imageSrc && !imgError) {
2287
+ return /* @__PURE__ */ import_react13.default.createElement(
2288
+ "img",
2289
+ {
2290
+ src: imageSrc,
2291
+ alt: `${politician.full_name} portrait`,
2292
+ style: {
2293
+ width: "100%",
2294
+ height: "100%",
2295
+ objectFit: "cover",
2296
+ objectPosition: (_b = politician.imageFocalPoint) != null ? _b : "center 20%",
2297
+ display: "block"
2298
+ },
2299
+ onError: () => setImgError(true)
2300
+ }
2301
+ );
2302
+ }
2303
+ const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
2304
+ const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
2305
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2306
+ width: "100%",
2307
+ height: "100%",
2308
+ backgroundColor: colors.evMutedBlue,
2309
+ color: colors.textWhite,
2310
+ display: "flex",
2311
+ alignItems: "center",
2312
+ justifyContent: "center",
2313
+ fontFamily: fonts.primary,
2314
+ fontWeight: fontWeights.bold,
2315
+ fontSize: fontSizes["4xl"]
2316
+ } }, initials);
2317
+ }
2318
+ function renderEmptyVariant() {
2319
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2320
+ width: "100%",
2321
+ height: "100%",
2322
+ display: "flex",
2323
+ flexDirection: "column",
2324
+ alignItems: "center",
2325
+ justifyContent: "center",
2326
+ gap: "8px",
2327
+ padding: "12px 14px",
2328
+ boxSizing: "border-box",
2329
+ backgroundColor: colorScales.teal["050"]
2330
+ } }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
2331
+ margin: 0,
2332
+ fontSize: fontSizes.xs,
2333
+ color: colors.textMuted,
2334
+ textAlign: "center",
2335
+ lineHeight: 1.4,
2336
+ fontFamily: fonts.primary
2337
+ } }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
2338
+ "button",
2339
+ {
2340
+ type: "button",
2341
+ onClick: onBuildCompass || void 0,
2342
+ onMouseEnter: () => setEmptyCtaHovered(true),
2343
+ onMouseLeave: () => setEmptyCtaHovered(false),
2344
+ style: {
2345
+ minWidth: "160px",
2346
+ height: "40px",
2347
+ padding: "0 16px",
2348
+ backgroundColor: emptyCtaHovered ? semanticTokens.light.buttonPrimary.background.hovered : semanticTokens.light.buttonPrimary.background.default,
2349
+ color: colors.textWhite,
2350
+ fontSize: fontSizes.xs,
2351
+ fontWeight: fontWeights.semibold,
2352
+ fontFamily: fonts.primary,
2353
+ borderRadius: borderRadius.full,
2354
+ border: "none",
2355
+ cursor: onBuildCompass ? "pointer" : "default",
2356
+ whiteSpace: "nowrap",
2357
+ transition: `background ${duration.normal} ease`,
2358
+ flexShrink: 0
2359
+ }
2360
+ },
2361
+ "Calibrate your compass"
2362
+ ));
2363
+ }
2364
+ function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
2365
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2366
+ width: "100%",
2367
+ height: "100%",
2368
+ backgroundColor: colorScales.teal["050"],
2369
+ display: "flex",
2370
+ alignItems: "center",
2371
+ justifyContent: "center",
2372
+ padding: spacing[4],
2373
+ boxSizing: "border-box"
2374
+ } }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
2375
+ fontSize: fontSizes.sm,
2376
+ fontWeight: fontWeights.semibold,
2377
+ lineHeight: 1.4,
2378
+ color: colors.textMuted,
2379
+ textAlign: "center",
2380
+ maxWidth: "180px",
2381
+ margin: 0,
2382
+ fontFamily: fonts.primary
2383
+ } }, message));
2384
+ }
2385
+ function renderSlotContent() {
2386
+ if (view === "portrait") return renderPortrait();
2387
+ if (variant === "empty") return renderEmptyVariant();
2388
+ if (variant === "administrative" || variant === "judicial") return renderUnavailablePlate();
2389
+ if (variant === "no-stances") {
2390
+ const name = (politician == null ? void 0 : politician.full_name) || "this official";
2391
+ return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
2392
+ }
2393
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2394
+ width: "100%",
2395
+ height: "100%",
2396
+ display: "flex",
2397
+ alignItems: "center",
2398
+ justifyContent: "center",
2399
+ padding: spacing[3],
2400
+ boxSizing: "border-box"
2401
+ } }, renderCompass());
2402
+ }
2403
+ return /* @__PURE__ */ import_react13.default.createElement(
2404
+ "div",
2405
+ {
2406
+ role: "article",
2407
+ "aria-label": `${politician.full_name}, ${politician.office_title || ""}`,
2408
+ tabIndex: 0,
2409
+ style: cardStyle,
2410
+ onClick,
2411
+ onKeyDown: (e) => {
2412
+ if (onClick && (e.key === "Enter" || e.key === " ")) {
2413
+ e.preventDefault();
2414
+ onClick();
2415
+ }
2416
+ },
2417
+ onMouseEnter: () => setHovered(true),
2418
+ onMouseLeave: () => setHovered(false),
2419
+ onFocus: () => setFocused(true),
2420
+ onBlur: () => setFocused(false)
2421
+ },
2422
+ /* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2423
+ position: "absolute",
2424
+ bottom: "15px",
2425
+ left: 0,
2426
+ width: "100%",
2427
+ backgroundColor: "rgba(0,0,0,0.35)",
2428
+ color: "#fff",
2429
+ fontSize: "12px",
2430
+ fontWeight: 700,
2431
+ letterSpacing: "0.4px",
2432
+ textAlign: "center",
2433
+ textTransform: "uppercase",
2434
+ padding: "6px 0",
2435
+ pointerEvents: "none"
2436
+ } }, "Running Unopposed")),
2437
+ /* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
2438
+ CompassCardHorizontalMeta,
2439
+ {
2440
+ politician,
2441
+ surface,
2442
+ userAnswers
2443
+ }
2444
+ ))
2445
+ );
2446
+ }
2447
+
2448
+ // src/CategorySection.jsx
2449
+ var import_react14 = __toESM(require("react"));
1846
2450
  function CategorySection({
1847
2451
  title,
1848
2452
  infoTooltip,
@@ -1852,7 +2456,7 @@ function CategorySection({
1852
2456
  tier
1853
2457
  }) {
1854
2458
  var _a, _b;
1855
- const [showTooltip, setShowTooltip] = (0, import_react8.useState)(false);
2459
+ const [showTooltip, setShowTooltip] = (0, import_react14.useState)(false);
1856
2460
  const tierStyle = tier ? tierColors[tier] : null;
1857
2461
  const styles2 = {
1858
2462
  section: {
@@ -1920,7 +2524,7 @@ function CategorySection({
1920
2524
  gap: spacing[4]
1921
2525
  }
1922
2526
  };
1923
- return /* @__PURE__ */ import_react8.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react8.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react8.default.createElement(
2527
+ return /* @__PURE__ */ import_react14.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react14.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react14.default.createElement(
1924
2528
  "button",
1925
2529
  {
1926
2530
  type: "button",
@@ -1932,8 +2536,8 @@ function CategorySection({
1932
2536
  "aria-label": `Info about ${title}`
1933
2537
  },
1934
2538
  "i",
1935
- showTooltip && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
1936
- ), websiteUrl && /* @__PURE__ */ import_react8.default.createElement(
2539
+ showTooltip && /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
2540
+ ), websiteUrl && /* @__PURE__ */ import_react14.default.createElement(
1937
2541
  "a",
1938
2542
  {
1939
2543
  href: websiteUrl,
@@ -1942,7 +2546,7 @@ function CategorySection({
1942
2546
  style: styles2.externalLink,
1943
2547
  "aria-label": `Visit official website for ${title}`
1944
2548
  },
1945
- /* @__PURE__ */ import_react8.default.createElement(
2549
+ /* @__PURE__ */ import_react14.default.createElement(
1946
2550
  "svg",
1947
2551
  {
1948
2552
  viewBox: "0 0 24 24",
@@ -1950,7 +2554,7 @@ function CategorySection({
1950
2554
  xmlns: "http://www.w3.org/2000/svg",
1951
2555
  style: { width: "14px", height: "14px" }
1952
2556
  },
1953
- /* @__PURE__ */ import_react8.default.createElement(
2557
+ /* @__PURE__ */ import_react14.default.createElement(
1954
2558
  "path",
1955
2559
  {
1956
2560
  d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
@@ -1961,11 +2565,11 @@ function CategorySection({
1961
2565
  }
1962
2566
  )
1963
2567
  )
1964
- )), /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
2568
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
1965
2569
  }
1966
2570
 
1967
2571
  // src/SubGroupSection.jsx
1968
- var import_react9 = __toESM(require("react"));
2572
+ var import_react15 = __toESM(require("react"));
1969
2573
  function SubGroupSection({ title, websiteUrl, children }) {
1970
2574
  const styles2 = {
1971
2575
  section: {
@@ -1998,7 +2602,7 @@ function SubGroupSection({ title, websiteUrl, children }) {
1998
2602
  gap: spacing[2]
1999
2603
  }
2000
2604
  };
2001
- return /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react9.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react9.default.createElement(
2605
+ return /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react15.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react15.default.createElement(
2002
2606
  "a",
2003
2607
  {
2004
2608
  href: websiteUrl,
@@ -2006,12 +2610,12 @@ function SubGroupSection({ title, websiteUrl, children }) {
2006
2610
  rel: "noopener noreferrer",
2007
2611
  style: styles2.link
2008
2612
  },
2009
- /* @__PURE__ */ import_react9.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react9.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" }))
2010
- )), /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
2613
+ /* @__PURE__ */ import_react15.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react15.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react15.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" }))
2614
+ )), /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
2011
2615
  }
2012
2616
 
2013
2617
  // src/GovernmentBodySection.jsx
2014
- var import_react10 = __toESM(require("react"));
2618
+ var import_react16 = __toESM(require("react"));
2015
2619
  function GovernmentBodySection({
2016
2620
  title,
2017
2621
  websiteUrl,
@@ -2020,7 +2624,7 @@ function GovernmentBodySection({
2020
2624
  children
2021
2625
  }) {
2022
2626
  var _a;
2023
- const [expanded, setExpanded] = (0, import_react10.useState)(defaultExpanded);
2627
+ const [expanded, setExpanded] = (0, import_react16.useState)(defaultExpanded);
2024
2628
  const tierStyle = tier ? tierColors[tier] : null;
2025
2629
  const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
2026
2630
  const styles2 = {
@@ -2060,7 +2664,7 @@ function GovernmentBodySection({
2060
2664
  display: expanded ? "block" : "none"
2061
2665
  }
2062
2666
  };
2063
- return /* @__PURE__ */ import_react10.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react10.default.createElement(
2667
+ return /* @__PURE__ */ import_react16.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react16.default.createElement(
2064
2668
  "div",
2065
2669
  {
2066
2670
  style: styles2.header,
@@ -2076,8 +2680,8 @@ function GovernmentBodySection({
2076
2680
  "aria-expanded": expanded,
2077
2681
  "aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
2078
2682
  },
2079
- /* @__PURE__ */ import_react10.default.createElement("span", { style: styles2.title }, title),
2080
- websiteUrl && /* @__PURE__ */ import_react10.default.createElement(
2683
+ /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.title }, title),
2684
+ websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
2081
2685
  "a",
2082
2686
  {
2083
2687
  href: websiteUrl,
@@ -2087,14 +2691,14 @@ function GovernmentBodySection({
2087
2691
  onClick: (e) => e.stopPropagation(),
2088
2692
  "aria-label": `Visit ${title} website`
2089
2693
  },
2090
- /* @__PURE__ */ import_react10.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react10.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react10.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" }))
2694
+ /* @__PURE__ */ import_react16.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react16.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" }))
2091
2695
  ),
2092
- /* @__PURE__ */ import_react10.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
2093
- ), /* @__PURE__ */ import_react10.default.createElement("div", { style: styles2.content }, children));
2696
+ /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
2697
+ ), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.content }, children));
2094
2698
  }
2095
2699
 
2096
2700
  // src/SocialLinks.jsx
2097
- var import_react11 = __toESM(require("react"));
2701
+ var import_react17 = __toESM(require("react"));
2098
2702
  var SOCIAL_PLATFORMS = [
2099
2703
  { test: /facebook\.com/i, platform: "facebook" },
2100
2704
  { test: /twitter\.com|x\.com/i, platform: "twitter" },
@@ -2165,7 +2769,7 @@ function SocialLinks({
2165
2769
  }
2166
2770
  };
2167
2771
  const platformIconMap = {
2168
- twitter: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement(
2772
+ twitter: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement(
2169
2773
  "path",
2170
2774
  {
2171
2775
  d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
@@ -2175,7 +2779,7 @@ function SocialLinks({
2175
2779
  strokeLinejoin: "round"
2176
2780
  }
2177
2781
  )),
2178
- facebook: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement(
2782
+ facebook: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement(
2179
2783
  "path",
2180
2784
  {
2181
2785
  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",
@@ -2185,8 +2789,8 @@ function SocialLinks({
2185
2789
  strokeLinejoin: "round"
2186
2790
  }
2187
2791
  )),
2188
- instagram: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
2189
- linkedin: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement(
2792
+ instagram: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
2793
+ linkedin: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement(
2190
2794
  "path",
2191
2795
  {
2192
2796
  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",
@@ -2195,8 +2799,8 @@ function SocialLinks({
2195
2799
  strokeLinecap: "round",
2196
2800
  strokeLinejoin: "round"
2197
2801
  }
2198
- ), /* @__PURE__ */ import_react11.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
2199
- youtube: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
2802
+ ), /* @__PURE__ */ import_react17.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
2803
+ youtube: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
2200
2804
  };
2201
2805
  const links = [
2202
2806
  {
@@ -2222,7 +2826,7 @@ function SocialLinks({
2222
2826
  {
2223
2827
  href: website,
2224
2828
  label: "Website",
2225
- icon: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement(
2829
+ icon: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement(
2226
2830
  "path",
2227
2831
  {
2228
2832
  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",
@@ -2252,7 +2856,7 @@ function SocialLinks({
2252
2856
  if (links.length === 0) {
2253
2857
  return null;
2254
2858
  }
2255
- return /* @__PURE__ */ import_react11.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react11.default.createElement(
2859
+ return /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react17.default.createElement(
2256
2860
  "a",
2257
2861
  {
2258
2862
  key: link.label,
@@ -2275,7 +2879,7 @@ function SocialLinks({
2275
2879
  }
2276
2880
 
2277
2881
  // src/IssueTags.jsx
2278
- var import_react12 = __toESM(require("react"));
2882
+ var import_react18 = __toESM(require("react"));
2279
2883
  function IssueTags({
2280
2884
  tags = [],
2281
2885
  selectedTags = [],
@@ -2318,9 +2922,9 @@ function IssueTags({
2318
2922
  onTagClick(tag.value);
2319
2923
  }
2320
2924
  };
2321
- return /* @__PURE__ */ import_react12.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
2925
+ return /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
2322
2926
  const isSelected = selectedTags.includes(tag.value);
2323
- return /* @__PURE__ */ import_react12.default.createElement(
2927
+ return /* @__PURE__ */ import_react18.default.createElement(
2324
2928
  "span",
2325
2929
  {
2326
2930
  key: tag.value,
@@ -2349,7 +2953,7 @@ function IssueTags({
2349
2953
  }
2350
2954
 
2351
2955
  // src/CommitteeTable.jsx
2352
- var import_react13 = __toESM(require("react"));
2956
+ var import_react19 = __toESM(require("react"));
2353
2957
  var ROLE_ORDER = {
2354
2958
  "chair": 0,
2355
2959
  "co-chair": 1,
@@ -2376,7 +2980,7 @@ function CommitteeTable({
2376
2980
  maxVisible = 6,
2377
2981
  style = {}
2378
2982
  }) {
2379
- const [showAll, setShowAll] = (0, import_react13.useState)(false);
2983
+ const [showAll, setShowAll] = (0, import_react19.useState)(false);
2380
2984
  if (committees.length === 0) {
2381
2985
  return null;
2382
2986
  }
@@ -2438,7 +3042,7 @@ function CommitteeTable({
2438
3042
  cursor: "pointer"
2439
3043
  }
2440
3044
  };
2441
- return /* @__PURE__ */ import_react13.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react13.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react13.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react13.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react13.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react13.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react13.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react13.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react13.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react13.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react13.default.createElement(
3045
+ return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react19.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react19.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react19.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react19.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react19.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react19.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react19.default.createElement(
2442
3046
  "a",
2443
3047
  {
2444
3048
  href: committee.url,
@@ -2453,7 +3057,7 @@ function CommitteeTable({
2453
3057
  }
2454
3058
  },
2455
3059
  committee.name
2456
- ) : committee.name), /* @__PURE__ */ import_react13.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react13.default.createElement(
3060
+ ) : committee.name), /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react19.default.createElement(
2457
3061
  "button",
2458
3062
  {
2459
3063
  type: "button",
@@ -2461,7 +3065,7 @@ function CommitteeTable({
2461
3065
  onClick: () => setShowAll(!showAll)
2462
3066
  },
2463
3067
  showAll ? "Show less" : `Show all ${sorted.length} committees`,
2464
- /* @__PURE__ */ import_react13.default.createElement(
3068
+ /* @__PURE__ */ import_react19.default.createElement(
2465
3069
  "svg",
2466
3070
  {
2467
3071
  width: "14",
@@ -2474,16 +3078,16 @@ function CommitteeTable({
2474
3078
  strokeLinejoin: "round",
2475
3079
  style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
2476
3080
  },
2477
- /* @__PURE__ */ import_react13.default.createElement("polyline", { points: "6 9 12 15 18 9" })
3081
+ /* @__PURE__ */ import_react19.default.createElement("polyline", { points: "6 9 12 15 18 9" })
2478
3082
  )
2479
3083
  ));
2480
3084
  }
2481
3085
 
2482
3086
  // src/PoliticianProfile.jsx
2483
- var import_react16 = __toESM(require("react"));
3087
+ var import_react22 = __toESM(require("react"));
2484
3088
 
2485
3089
  // src/LegislativeInlineSummary.jsx
2486
- var import_react14 = __toESM(require("react"));
3090
+ var import_react20 = __toESM(require("react"));
2487
3091
  function normalizePosition(pos) {
2488
3092
  if (!pos) return "";
2489
3093
  return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -2591,7 +3195,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
2591
3195
  fontSize: fontSizes.sm,
2592
3196
  fontWeight: fontWeights.medium
2593
3197
  };
2594
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react14.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react14.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react14.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react14.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react14.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react14.default.createElement("div", null), /* @__PURE__ */ import_react14.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react14.default.createElement(
3198
+ return /* @__PURE__ */ import_react20.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react20.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react20.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react20.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react20.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react20.default.createElement("div", null), /* @__PURE__ */ import_react20.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react20.default.createElement(
2595
3199
  "button",
2596
3200
  {
2597
3201
  onClick: () => {
@@ -2616,12 +3220,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
2616
3220
  }
2617
3221
  },
2618
3222
  "View Full Legislative Record",
2619
- /* @__PURE__ */ import_react14.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_react14.default.createElement("path", { d: "M9 18l6-6-6-6" }))
3223
+ /* @__PURE__ */ import_react20.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_react20.default.createElement("path", { d: "M9 18l6-6-6-6" }))
2620
3224
  )));
2621
3225
  }
2622
3226
 
2623
3227
  // src/JudicialScorecard.jsx
2624
- var import_react15 = __toESM(require("react"));
3228
+ var import_react21 = __toESM(require("react"));
2625
3229
 
2626
3230
  // src/judicialUtils.js
2627
3231
  function formatDate(dateStr) {
@@ -2739,7 +3343,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
2739
3343
  onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
2740
3344
  }
2741
3345
  };
2742
- return /* @__PURE__ */ import_react15.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react15.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react15.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react15.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react15.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react15.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react15.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react15.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react15.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
3346
+ return /* @__PURE__ */ import_react21.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react21.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react21.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react21.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react21.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react21.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react21.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react21.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react21.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react21.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react21.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react21.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
2743
3347
  }
2744
3348
 
2745
3349
  // src/PoliticianProfile.jsx
@@ -2890,13 +3494,13 @@ function formatAddress(addr) {
2890
3494
  if (cityStateZip) lines.push(cityStateZip);
2891
3495
  return lines;
2892
3496
  }
2893
- var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
2894
- var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react16.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
2895
- var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
2896
- var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.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" }));
2897
- var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.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_react16.default.createElement("path", { d: "M22 6L12 13L2 6" }));
2898
- var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react16.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" }));
2899
- var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react16.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
3497
+ var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
3498
+ var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react22.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
3499
+ var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react22.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
3500
+ var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.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" }));
3501
+ var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.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_react22.default.createElement("path", { d: "M22 6L12 13L2 6" }));
3502
+ var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react22.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" }));
3503
+ var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react22.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
2900
3504
  function PoliticianProfile({
2901
3505
  politician = {},
2902
3506
  onBack,
@@ -2923,8 +3527,8 @@ function PoliticianProfile({
2923
3527
  return pol.photo_origin_url;
2924
3528
  })();
2925
3529
  const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
2926
- const [imgError, setImgError] = (0, import_react16.useState)(false);
2927
- (0, import_react16.useEffect)(() => {
3530
+ const [imgError, setImgError] = (0, import_react22.useState)(false);
3531
+ (0, import_react22.useEffect)(() => {
2928
3532
  setImgError(false);
2929
3533
  }, [profileImageUrl]);
2930
3534
  const getSocialHandle = (type) => {
@@ -3224,7 +3828,7 @@ function PoliticianProfile({
3224
3828
  borderRadius: borderRadius.full
3225
3829
  }
3226
3830
  };
3227
- return /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react16.default.createElement(
3831
+ return /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react22.default.createElement(
3228
3832
  "button",
3229
3833
  {
3230
3834
  type: "button",
@@ -3237,9 +3841,9 @@ function PoliticianProfile({
3237
3841
  e.currentTarget.style.textDecoration = "none";
3238
3842
  }
3239
3843
  },
3240
- /* @__PURE__ */ import_react16.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
3844
+ /* @__PURE__ */ import_react22.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
3241
3845
  label
3242
- ), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react16.default.createElement(
3846
+ ), /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react22.default.createElement(
3243
3847
  "img",
3244
3848
  {
3245
3849
  src: profileImageUrl,
@@ -3247,7 +3851,7 @@ function PoliticianProfile({
3247
3851
  style: styles2.photo,
3248
3852
  onError: () => setImgError(true)
3249
3853
  }
3250
- ) : /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react16.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react16.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react16.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_react16.default.createElement(
3854
+ ) : /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react22.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react22.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react22.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react22.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react22.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_react22.default.createElement(
3251
3855
  "a",
3252
3856
  {
3253
3857
  href: pol.web_form_url,
@@ -3261,9 +3865,9 @@ function PoliticianProfile({
3261
3865
  e.currentTarget.style.background = colors.evTeal;
3262
3866
  }
3263
3867
  },
3264
- /* @__PURE__ */ import_react16.default.createElement(ExternalLinkIcon, { size: 14 }),
3868
+ /* @__PURE__ */ import_react22.default.createElement(ExternalLinkIcon, { size: 14 }),
3265
3869
  "Submit a Message"
3266
- ))), hasContactInfo && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react16.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react16.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react16.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react16.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react16.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react16.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react16.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react16.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react16.default.createElement(
3870
+ ))), hasContactInfo && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react22.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react22.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react22.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react22.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react22.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react22.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react22.default.createElement(
3267
3871
  "a",
3268
3872
  {
3269
3873
  href: `tel:${phone}`,
@@ -3276,7 +3880,7 @@ function PoliticianProfile({
3276
3880
  }
3277
3881
  },
3278
3882
  phone
3279
- )))))), hasEmails && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react16.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react16.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_react16.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react16.default.createElement(
3883
+ )))))), hasEmails && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react22.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_react22.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react22.default.createElement(
3280
3884
  "a",
3281
3885
  {
3282
3886
  href: `mailto:${email}`,
@@ -3289,7 +3893,7 @@ function PoliticianProfile({
3289
3893
  }
3290
3894
  },
3291
3895
  email
3292
- )))))), hasWebsitesCol && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react16.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react16.default.createElement(
3896
+ )))))), hasWebsitesCol && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react22.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react22.default.createElement(
3293
3897
  "a",
3294
3898
  {
3295
3899
  href: url,
@@ -3304,7 +3908,7 @@ function PoliticianProfile({
3304
3908
  }
3305
3909
  },
3306
3910
  extractDomain(url)
3307
- ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react16.default.createElement(
3911
+ ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react22.default.createElement(
3308
3912
  SocialLinks,
3309
3913
  {
3310
3914
  twitter,
@@ -3315,14 +3919,14 @@ function PoliticianProfile({
3315
3919
  size: "sm",
3316
3920
  style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
3317
3921
  }
3318
- )))), committees.length > 0 && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react16.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react16.default.createElement(
3922
+ )))), committees.length > 0 && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react22.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react22.default.createElement(
3319
3923
  JudicialScorecard,
3320
3924
  {
3321
3925
  judicialRecord,
3322
3926
  politicianId,
3323
3927
  onNavigateToRecord
3324
3928
  }
3325
- ) : /* @__PURE__ */ import_react16.default.createElement(
3929
+ ) : /* @__PURE__ */ import_react22.default.createElement(
3326
3930
  LegislativeInlineSummary,
3327
3931
  {
3328
3932
  summary: legislativeSummary,
@@ -3333,7 +3937,7 @@ function PoliticianProfile({
3333
3937
  }
3334
3938
 
3335
3939
  // src/LegislativeRecord.jsx
3336
- var import_react17 = __toESM(require("react"));
3940
+ var import_react23 = __toESM(require("react"));
3337
3941
  var DEFAULT_LIMIT = 25;
3338
3942
  function normalizeText(str) {
3339
3943
  if (!str) return "";
@@ -3413,7 +4017,7 @@ function getPositionBadge(position) {
3413
4017
  return { bg: colors.borderLight, text: colors.textSecondary };
3414
4018
  }
3415
4019
  function Badge({ label, bg, text }) {
3416
- return /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4020
+ return /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3417
4021
  display: "inline-block",
3418
4022
  background: bg,
3419
4023
  color: text,
@@ -3426,18 +4030,18 @@ function Badge({ label, bg, text }) {
3426
4030
  } }, label);
3427
4031
  }
3428
4032
  function SectionHeader({ title, yearFilter, years, onYearChange }) {
3429
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4033
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3430
4034
  display: "flex",
3431
4035
  alignItems: "center",
3432
4036
  justifyContent: "space-between",
3433
4037
  marginBottom: spacing[4]
3434
- } }, /* @__PURE__ */ import_react17.default.createElement("h2", { style: {
4038
+ } }, /* @__PURE__ */ import_react23.default.createElement("h2", { style: {
3435
4039
  fontFamily: fonts.primary,
3436
4040
  fontSize: fontSizes.xl,
3437
4041
  fontWeight: fontWeights.bold,
3438
4042
  color: colors.evTeal,
3439
4043
  margin: 0
3440
- } }, title), years && years.length > 0 && /* @__PURE__ */ import_react17.default.createElement(
4044
+ } }, title), years && years.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
3441
4045
  "select",
3442
4046
  {
3443
4047
  value: yearFilter,
@@ -3453,13 +4057,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
3453
4057
  cursor: "pointer"
3454
4058
  }
3455
4059
  },
3456
- /* @__PURE__ */ import_react17.default.createElement("option", { value: "All" }, "All years"),
3457
- years.map((y) => /* @__PURE__ */ import_react17.default.createElement("option", { key: y, value: y }, y))
4060
+ /* @__PURE__ */ import_react23.default.createElement("option", { value: "All" }, "All years"),
4061
+ years.map((y) => /* @__PURE__ */ import_react23.default.createElement("option", { key: y, value: y }, y))
3458
4062
  ));
3459
4063
  }
3460
4064
  function ShowAllLink({ totalCount, visibleCount, onClick }) {
3461
4065
  if (totalCount <= visibleCount) return null;
3462
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react17.default.createElement(
4066
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react23.default.createElement(
3463
4067
  "button",
3464
4068
  {
3465
4069
  type: "button",
@@ -3487,7 +4091,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
3487
4091
  ));
3488
4092
  }
3489
4093
  function EmptyState({ message }) {
3490
- return /* @__PURE__ */ import_react17.default.createElement("p", { style: {
4094
+ return /* @__PURE__ */ import_react23.default.createElement("p", { style: {
3491
4095
  fontFamily: fonts.primary,
3492
4096
  fontSize: fontSizes.sm,
3493
4097
  color: colors.textMuted,
@@ -3497,24 +4101,24 @@ function EmptyState({ message }) {
3497
4101
  } }, message);
3498
4102
  }
3499
4103
  function Spinner() {
3500
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4104
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3501
4105
  display: "flex",
3502
4106
  justifyContent: "center",
3503
4107
  alignItems: "center",
3504
4108
  padding: spacing[10]
3505
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4109
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3506
4110
  width: "40px",
3507
4111
  height: "40px",
3508
4112
  borderRadius: borderRadius.full,
3509
4113
  border: `3px solid ${colors.borderLight}`,
3510
4114
  borderTopColor: colors.evTeal,
3511
4115
  animation: "ev-spin 0.8s linear infinite"
3512
- } }), /* @__PURE__ */ import_react17.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
4116
+ } }), /* @__PURE__ */ import_react23.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
3513
4117
  }
3514
4118
  function CommitteesSection({ committees, leadership }) {
3515
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4119
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3516
4120
  const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
3517
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react17.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4121
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3518
4122
  display: "inline-flex",
3519
4123
  alignItems: "center",
3520
4124
  gap: spacing[1],
@@ -3525,23 +4129,23 @@ function CommitteesSection({ committees, leadership }) {
3525
4129
  fontFamily: fonts.primary,
3526
4130
  fontSize: fontSizes.sm,
3527
4131
  fontWeight: fontWeights.semibold
3528
- } }, role.title, role.chamber && /* @__PURE__ */ import_react17.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react17.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", null, visible.map((c, i) => {
4132
+ } }, role.title, role.chamber && /* @__PURE__ */ import_react23.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react23.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("div", null, visible.map((c, i) => {
3529
4133
  const badge = getRoleBadge(c.role);
3530
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4134
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3531
4135
  display: "flex",
3532
4136
  alignItems: "center",
3533
4137
  justifyContent: "space-between",
3534
4138
  padding: `${spacing[3]} 0`,
3535
4139
  borderBottom: `1px solid ${colors.borderLight}`,
3536
4140
  gap: spacing[3]
3537
- } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4141
+ } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3538
4142
  fontFamily: fonts.primary,
3539
4143
  fontSize: fontSizes.sm,
3540
4144
  color: colors.textSecondary,
3541
4145
  flex: 1,
3542
4146
  minWidth: 0
3543
- } }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react17.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react17.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
3544
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4147
+ } }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react23.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react23.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
4148
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3545
4149
  ShowAllLink,
3546
4150
  {
3547
4151
  totalCount: committees.length,
@@ -3552,15 +4156,15 @@ function CommitteesSection({ committees, leadership }) {
3552
4156
  }
3553
4157
  function LegislationSection({ bills, isMobile }) {
3554
4158
  const years = getYears(bills, "introduced_at");
3555
- const [yearFilter, setYearFilter] = (0, import_react17.useState)("All");
3556
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4159
+ const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
4160
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3557
4161
  const handleYearChange = (y) => {
3558
4162
  setYearFilter(y);
3559
4163
  setShowAll(false);
3560
4164
  };
3561
4165
  const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
3562
4166
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
3563
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(
4167
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
3564
4168
  SectionHeader,
3565
4169
  {
3566
4170
  title: "Sponsored Legislation",
@@ -3568,42 +4172,42 @@ function LegislationSection({ bills, isMobile }) {
3568
4172
  years,
3569
4173
  onYearChange: handleYearChange
3570
4174
  }
3571
- ), bills.length === 0 ? /* @__PURE__ */ import_react17.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", null, visible.map((bill, i) => {
4175
+ ), bills.length === 0 ? /* @__PURE__ */ import_react23.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("div", null, visible.map((bill, i) => {
3572
4176
  const statusBadge = getStatusBadge(bill.status_label);
3573
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4177
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3574
4178
  display: "flex",
3575
4179
  flexDirection: isMobile ? "column" : "row",
3576
4180
  alignItems: isMobile ? "flex-start" : "center",
3577
4181
  gap: isMobile ? spacing[1] : spacing[3],
3578
4182
  padding: `${spacing[3]} 0`,
3579
4183
  borderBottom: `1px solid ${colors.borderLight}`
3580
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4184
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3581
4185
  fontFamily: fonts.primary,
3582
4186
  fontSize: fontSizes.xs,
3583
4187
  fontWeight: fontWeights.bold,
3584
4188
  color: colors.textSecondary,
3585
4189
  marginRight: spacing[2]
3586
- } }, bill.number), /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4190
+ } }, bill.number), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3587
4191
  fontFamily: fonts.primary,
3588
4192
  fontSize: fontSizes.sm,
3589
4193
  color: colors.textSecondary
3590
- } }, bill.title)), /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4194
+ } }, bill.title)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3591
4195
  display: "flex",
3592
4196
  alignItems: "center",
3593
4197
  gap: spacing[2],
3594
4198
  flexShrink: 0,
3595
4199
  flexWrap: "wrap"
3596
- } }, /* @__PURE__ */ import_react17.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4200
+ } }, /* @__PURE__ */ import_react23.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3597
4201
  fontFamily: fonts.primary,
3598
4202
  fontSize: fontSizes.xs,
3599
4203
  color: colors.textMuted
3600
- } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4204
+ } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3601
4205
  fontFamily: fonts.primary,
3602
4206
  fontSize: fontSizes.xs,
3603
4207
  color: colors.textMuted,
3604
4208
  fontStyle: "italic"
3605
4209
  } }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
3606
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4210
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3607
4211
  ShowAllLink,
3608
4212
  {
3609
4213
  totalCount: filtered.length,
@@ -3614,15 +4218,15 @@ function LegislationSection({ bills, isMobile }) {
3614
4218
  }
3615
4219
  function VotingSection({ votes, isMobile }) {
3616
4220
  const years = getYears(votes, "vote_date");
3617
- const [yearFilter, setYearFilter] = (0, import_react17.useState)("All");
3618
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4221
+ const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
4222
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3619
4223
  const handleYearChange = (y) => {
3620
4224
  setYearFilter(y);
3621
4225
  setShowAll(false);
3622
4226
  };
3623
4227
  const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
3624
4228
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
3625
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(
4229
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
3626
4230
  SectionHeader,
3627
4231
  {
3628
4232
  title: "Voting Record",
@@ -3630,38 +4234,38 @@ function VotingSection({ votes, isMobile }) {
3630
4234
  years,
3631
4235
  onYearChange: handleYearChange
3632
4236
  }
3633
- ), votes.length === 0 ? /* @__PURE__ */ import_react17.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", null, visible.map((vote, i) => {
4237
+ ), votes.length === 0 ? /* @__PURE__ */ import_react23.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("div", null, visible.map((vote, i) => {
3634
4238
  const positionBadge = getPositionBadge(vote.position);
3635
4239
  const normPosition = normalizeText(vote.position);
3636
4240
  const topic = vote.bill_title || vote.vote_question;
3637
4241
  const sourceUrl = vote.bill_url;
3638
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4242
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3639
4243
  display: "flex",
3640
4244
  flexDirection: isMobile ? "column" : "row",
3641
4245
  alignItems: isMobile ? "flex-start" : "center",
3642
4246
  gap: isMobile ? spacing[1] : spacing[3],
3643
4247
  padding: `${spacing[3]} 0`,
3644
4248
  borderBottom: `1px solid ${colors.borderLight}`
3645
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4249
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3646
4250
  fontFamily: fonts.primary,
3647
4251
  fontSize: fontSizes.sm,
3648
4252
  color: colors.textSecondary
3649
- } }, topic)), /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4253
+ } }, topic)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3650
4254
  display: "flex",
3651
4255
  alignItems: "center",
3652
4256
  gap: spacing[2],
3653
4257
  flexShrink: 0,
3654
4258
  flexWrap: "wrap"
3655
- } }, vote.vote_date && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4259
+ } }, vote.vote_date && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3656
4260
  fontFamily: fonts.primary,
3657
4261
  fontSize: fontSizes.xs,
3658
4262
  color: colors.textMuted
3659
- } }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react17.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4263
+ } }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react23.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3660
4264
  fontFamily: fonts.primary,
3661
4265
  fontSize: fontSizes.xs,
3662
4266
  color: vote.result === "Passed" ? colors.success : colors.textMuted,
3663
4267
  fontWeight: fontWeights.medium
3664
- } }, vote.result), sourceUrl && /* @__PURE__ */ import_react17.default.createElement(
4268
+ } }, vote.result), sourceUrl && /* @__PURE__ */ import_react23.default.createElement(
3665
4269
  "a",
3666
4270
  {
3667
4271
  href: sourceUrl,
@@ -3682,7 +4286,7 @@ function VotingSection({ votes, isMobile }) {
3682
4286
  },
3683
4287
  "Source"
3684
4288
  )));
3685
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4289
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3686
4290
  ShowAllLink,
3687
4291
  {
3688
4292
  totalCount: filtered.length,
@@ -3701,20 +4305,20 @@ function LegislativeRecord({
3701
4305
  }) {
3702
4306
  const isMobile = useMediaQuery("(max-width: 768px)");
3703
4307
  if (loading) {
3704
- return /* @__PURE__ */ import_react17.default.createElement(Spinner, null);
4308
+ return /* @__PURE__ */ import_react23.default.createElement(Spinner, null);
3705
4309
  }
3706
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react17.default.createElement("h1", { style: {
4310
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react23.default.createElement("h1", { style: {
3707
4311
  fontFamily: fonts.primary,
3708
4312
  fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
3709
4313
  fontWeight: fontWeights.bold,
3710
4314
  color: colors.evTeal,
3711
4315
  marginBottom: spacing[8],
3712
4316
  marginTop: 0
3713
- } }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react17.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react17.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react17.default.createElement(VotingSection, { votes, isMobile }));
4317
+ } }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react23.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react23.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react23.default.createElement(VotingSection, { votes, isMobile }));
3714
4318
  }
3715
4319
 
3716
4320
  // src/JudicialRecordDetail.jsx
3717
- var import_react18 = __toESM(require("react"));
4321
+ var import_react24 = __toESM(require("react"));
3718
4322
  var containerStyle = {
3719
4323
  fontFamily: "'Manrope', sans-serif",
3720
4324
  maxWidth: "800px"
@@ -3799,7 +4403,7 @@ var emptyStateStyle = {
3799
4403
  function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3800
4404
  var _a;
3801
4405
  if (!judicialRecord) {
3802
- return /* @__PURE__ */ import_react18.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react18.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react18.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
4406
+ return /* @__PURE__ */ import_react24.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react24.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react24.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
3803
4407
  }
3804
4408
  const {
3805
4409
  judge_detail: detail,
@@ -3808,13 +4412,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3808
4412
  disciplinary_records: disciplinary = []
3809
4413
  } = judicialRecord;
3810
4414
  const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
3811
- return /* @__PURE__ */ import_react18.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react18.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react18.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react18.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_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react18.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_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react18.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react18.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react18.default.createElement("thead", null, /* @__PURE__ */ import_react18.default.createElement("tr", null, /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react18.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react18.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react18.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react18.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react18.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react18.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react18.default.createElement("thead", null, /* @__PURE__ */ import_react18.default.createElement("tr", null, /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react18.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react18.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react18.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react18.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react18.default.createElement("div", { key: i, style: {
4415
+ return /* @__PURE__ */ import_react24.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react24.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react24.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react24.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_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react24.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react24.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react24.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_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react24.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react24.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react24.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react24.default.createElement("thead", null, /* @__PURE__ */ import_react24.default.createElement("tr", null, /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react24.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react24.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react24.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react24.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react24.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react24.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react24.default.createElement("thead", null, /* @__PURE__ */ import_react24.default.createElement("tr", null, /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react24.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react24.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react24.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react24.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: i, style: {
3812
4416
  borderLeft: "3px solid #fc8181",
3813
4417
  backgroundColor: "#fff5f5",
3814
4418
  borderRadius: "0 6px 6px 0",
3815
4419
  padding: "12px 16px",
3816
4420
  marginBottom: "10px"
3817
- } }, /* @__PURE__ */ import_react18.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react18.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react18.default.createElement(
4421
+ } }, /* @__PURE__ */ import_react24.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react24.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react24.default.createElement(
3818
4422
  "a",
3819
4423
  {
3820
4424
  href: d.source_url,
@@ -3827,7 +4431,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3827
4431
  }
3828
4432
 
3829
4433
  // src/AuthForm.jsx
3830
- var import_react19 = __toESM(require("react"));
4434
+ var import_react25 = __toESM(require("react"));
3831
4435
  function AuthForm({
3832
4436
  logoSrc = "/EVLogo.svg",
3833
4437
  appName = "Empowered Vote",
@@ -3838,11 +4442,11 @@ function AuthForm({
3838
4442
  error = null,
3839
4443
  submitting = false
3840
4444
  }) {
3841
- const [username, setUsername] = (0, import_react19.useState)("");
3842
- const [password, setPassword] = (0, import_react19.useState)("");
3843
- const [confirmPassword, setConfirmPassword] = (0, import_react19.useState)("");
3844
- const [showPasswords, setShowPasswords] = (0, import_react19.useState)(false);
3845
- const [passwordMismatch, setPasswordMismatch] = (0, import_react19.useState)(false);
4445
+ const [username, setUsername] = (0, import_react25.useState)("");
4446
+ const [password, setPassword] = (0, import_react25.useState)("");
4447
+ const [confirmPassword, setConfirmPassword] = (0, import_react25.useState)("");
4448
+ const [showPasswords, setShowPasswords] = (0, import_react25.useState)(false);
4449
+ const [passwordMismatch, setPasswordMismatch] = (0, import_react25.useState)(false);
3846
4450
  const isLogin = mode === "login";
3847
4451
  const handleSubmit = (e) => {
3848
4452
  e.preventDefault();
@@ -3854,7 +4458,7 @@ function AuthForm({
3854
4458
  setPasswordMismatch(false);
3855
4459
  onSubmit == null ? void 0 : onSubmit(username.trim(), password);
3856
4460
  };
3857
- const EyeOpen = () => /* @__PURE__ */ import_react19.default.createElement(
4461
+ const EyeOpen = () => /* @__PURE__ */ import_react25.default.createElement(
3858
4462
  "svg",
3859
4463
  {
3860
4464
  xmlns: "http://www.w3.org/2000/svg",
@@ -3864,7 +4468,7 @@ function AuthForm({
3864
4468
  stroke: "currentColor",
3865
4469
  style: { width: "20px", height: "20px" }
3866
4470
  },
3867
- /* @__PURE__ */ import_react19.default.createElement(
4471
+ /* @__PURE__ */ import_react25.default.createElement(
3868
4472
  "path",
3869
4473
  {
3870
4474
  strokeLinecap: "round",
@@ -3872,7 +4476,7 @@ function AuthForm({
3872
4476
  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"
3873
4477
  }
3874
4478
  ),
3875
- /* @__PURE__ */ import_react19.default.createElement(
4479
+ /* @__PURE__ */ import_react25.default.createElement(
3876
4480
  "path",
3877
4481
  {
3878
4482
  strokeLinecap: "round",
@@ -3881,7 +4485,7 @@ function AuthForm({
3881
4485
  }
3882
4486
  )
3883
4487
  );
3884
- const EyeClosed = () => /* @__PURE__ */ import_react19.default.createElement(
4488
+ const EyeClosed = () => /* @__PURE__ */ import_react25.default.createElement(
3885
4489
  "svg",
3886
4490
  {
3887
4491
  xmlns: "http://www.w3.org/2000/svg",
@@ -3891,7 +4495,7 @@ function AuthForm({
3891
4495
  stroke: "currentColor",
3892
4496
  style: { width: "20px", height: "20px" }
3893
4497
  },
3894
- /* @__PURE__ */ import_react19.default.createElement(
4498
+ /* @__PURE__ */ import_react25.default.createElement(
3895
4499
  "path",
3896
4500
  {
3897
4501
  strokeLinecap: "round",
@@ -3900,17 +4504,17 @@ function AuthForm({
3900
4504
  }
3901
4505
  )
3902
4506
  );
3903
- const PasswordToggle = () => /* @__PURE__ */ import_react19.default.createElement(
4507
+ const PasswordToggle = () => /* @__PURE__ */ import_react25.default.createElement(
3904
4508
  "button",
3905
4509
  {
3906
4510
  type: "button",
3907
4511
  onClick: () => setShowPasswords((prev) => !prev),
3908
4512
  style: styles.passwordToggle
3909
4513
  },
3910
- showPasswords ? /* @__PURE__ */ import_react19.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react19.default.createElement(EyeClosed, null)
4514
+ showPasswords ? /* @__PURE__ */ import_react25.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react25.default.createElement(EyeClosed, null)
3911
4515
  );
3912
4516
  const displayError = passwordMismatch ? "Passwords do not match." : error;
3913
- return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react19.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react19.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react19.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react19.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react19.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react19.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react19.default.createElement(
4517
+ return /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react25.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react25.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react25.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react25.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react25.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react25.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react25.default.createElement(
3914
4518
  "input",
3915
4519
  {
3916
4520
  type: "text",
@@ -3927,7 +4531,7 @@ function AuthForm({
3927
4531
  },
3928
4532
  required: true
3929
4533
  }
3930
- )), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react19.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react19.default.createElement(
4534
+ )), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react25.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react25.default.createElement(
3931
4535
  "input",
3932
4536
  {
3933
4537
  type: showPasswords ? "text" : "password",
@@ -3943,7 +4547,7 @@ function AuthForm({
3943
4547
  },
3944
4548
  required: true
3945
4549
  }
3946
- ), /* @__PURE__ */ import_react19.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react19.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react19.default.createElement(
4550
+ ), /* @__PURE__ */ import_react25.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react25.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react25.default.createElement(
3947
4551
  "input",
3948
4552
  {
3949
4553
  type: showPasswords ? "text" : "password",
@@ -3959,7 +4563,7 @@ function AuthForm({
3959
4563
  },
3960
4564
  required: true
3961
4565
  }
3962
- ), /* @__PURE__ */ import_react19.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react19.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react19.default.createElement(
4566
+ ), /* @__PURE__ */ import_react25.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react25.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react25.default.createElement(
3963
4567
  "button",
3964
4568
  {
3965
4569
  type: "submit",
@@ -3977,7 +4581,7 @@ function AuthForm({
3977
4581
  }
3978
4582
  },
3979
4583
  submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
3980
- ), onModeSwitch && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react19.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react19.default.createElement(
4584
+ ), onModeSwitch && /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react25.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react25.default.createElement(
3981
4585
  "button",
3982
4586
  {
3983
4587
  type: "button",
@@ -4150,9 +4754,9 @@ var styles = {
4150
4754
  };
4151
4755
 
4152
4756
  // src/TopicTierBadge.jsx
4153
- var import_react20 = __toESM(require("react"));
4757
+ var import_react26 = __toESM(require("react"));
4154
4758
  function LandmarkIcon({ size = 14 }) {
4155
- return /* @__PURE__ */ import_react20.default.createElement(
4759
+ return /* @__PURE__ */ import_react26.default.createElement(
4156
4760
  "svg",
4157
4761
  {
4158
4762
  width: size,
@@ -4166,16 +4770,16 @@ function LandmarkIcon({ size = 14 }) {
4166
4770
  xmlns: "http://www.w3.org/2000/svg",
4167
4771
  "aria-hidden": "true"
4168
4772
  },
4169
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 18v-7" }),
4170
- /* @__PURE__ */ import_react20.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" }),
4171
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M14 18v-7" }),
4172
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M18 18v-7" }),
4173
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M3 22h18" }),
4174
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 18v-7" })
4773
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18v-7" }),
4774
+ /* @__PURE__ */ import_react26.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" }),
4775
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M14 18v-7" }),
4776
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 18v-7" }),
4777
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M3 22h18" }),
4778
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 18v-7" })
4175
4779
  );
4176
4780
  }
4177
4781
  function Building2Icon({ size = 14 }) {
4178
- return /* @__PURE__ */ import_react20.default.createElement(
4782
+ return /* @__PURE__ */ import_react26.default.createElement(
4179
4783
  "svg",
4180
4784
  {
4181
4785
  width: size,
@@ -4189,17 +4793,17 @@ function Building2Icon({ size = 14 }) {
4189
4793
  xmlns: "http://www.w3.org/2000/svg",
4190
4794
  "aria-hidden": "true"
4191
4795
  },
4192
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
4193
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
4194
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
4195
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 6h4" }),
4196
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 10h4" }),
4197
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 14h4" }),
4198
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 18h4" })
4796
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
4797
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
4798
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
4799
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 6h4" }),
4800
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 10h4" }),
4801
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 14h4" }),
4802
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18h4" })
4199
4803
  );
4200
4804
  }
4201
4805
  function HomeIcon({ size = 14 }) {
4202
- return /* @__PURE__ */ import_react20.default.createElement(
4806
+ return /* @__PURE__ */ import_react26.default.createElement(
4203
4807
  "svg",
4204
4808
  {
4205
4809
  width: size,
@@ -4213,8 +4817,8 @@ function HomeIcon({ size = 14 }) {
4213
4817
  xmlns: "http://www.w3.org/2000/svg",
4214
4818
  "aria-hidden": "true"
4215
4819
  },
4216
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
4217
- /* @__PURE__ */ import_react20.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
4820
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
4821
+ /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
4218
4822
  );
4219
4823
  }
4220
4824
  var TIER_INFO = {
@@ -4274,7 +4878,7 @@ function TopicTierBadge({
4274
4878
  userSelect: "none"
4275
4879
  };
4276
4880
  };
4277
- return /* @__PURE__ */ import_react20.default.createElement(
4881
+ return /* @__PURE__ */ import_react26.default.createElement(
4278
4882
  "span",
4279
4883
  {
4280
4884
  className: "ev-topic-tier-badge",
@@ -4284,13 +4888,13 @@ function TopicTierBadge({
4284
4888
  },
4285
4889
  effectiveTiers.map((tier) => {
4286
4890
  const { label, Icon } = TIER_INFO[tier];
4287
- return /* @__PURE__ */ import_react20.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react20.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react20.default.createElement("span", null, label));
4891
+ return /* @__PURE__ */ import_react26.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react26.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react26.default.createElement("span", null, label));
4288
4892
  })
4289
4893
  );
4290
4894
  }
4291
4895
 
4292
4896
  // src/CompassCoverageCallout.jsx
4293
- var import_react21 = __toESM(require("react"));
4897
+ var import_react27 = __toESM(require("react"));
4294
4898
  var TIER_LABELS = {
4295
4899
  federal: "federal",
4296
4900
  state: "state",
@@ -4303,7 +4907,7 @@ function CompassCoverageCallout({
4303
4907
  compassUrl,
4304
4908
  onDismiss
4305
4909
  }) {
4306
- const [dismissed, setDismissed] = (0, import_react21.useState)(false);
4910
+ const [dismissed, setDismissed] = (0, import_react27.useState)(false);
4307
4911
  if (dismissed) return null;
4308
4912
  const tierLabel = TIER_LABELS[tier] || tier;
4309
4913
  const tierStyle = tierColors[tier] || tierColors.federal;
@@ -4354,15 +4958,15 @@ function CompassCoverageCallout({
4354
4958
  setDismissed(true);
4355
4959
  if (onDismiss) onDismiss();
4356
4960
  };
4357
- return /* @__PURE__ */ import_react21.default.createElement(
4961
+ return /* @__PURE__ */ import_react27.default.createElement(
4358
4962
  "div",
4359
4963
  {
4360
4964
  className: "ev-compass-coverage-callout",
4361
4965
  role: "status",
4362
4966
  style: containerStyle2
4363
4967
  },
4364
- /* @__PURE__ */ import_react21.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react21.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react21.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_react21.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
4365
- onDismiss !== void 0 && /* @__PURE__ */ import_react21.default.createElement(
4968
+ /* @__PURE__ */ import_react27.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react27.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react27.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_react27.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
4969
+ onDismiss !== void 0 && /* @__PURE__ */ import_react27.default.createElement(
4366
4970
  "button",
4367
4971
  {
4368
4972
  onClick: handleDismiss,
@@ -4375,7 +4979,7 @@ function CompassCoverageCallout({
4375
4979
  }
4376
4980
 
4377
4981
  // src/ExpandCompassNudge.jsx
4378
- var import_react22 = __toESM(require("react"));
4982
+ var import_react28 = __toESM(require("react"));
4379
4983
  function ExpandCompassNudge({
4380
4984
  politicianName,
4381
4985
  missingCount,
@@ -4422,7 +5026,7 @@ function ExpandCompassNudge({
4422
5026
  };
4423
5027
  const topicsLabel = missingCount === 1 ? "topic" : "topics";
4424
5028
  const speakerName = politicianName || "This politician";
4425
- return /* @__PURE__ */ import_react22.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react22.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react22.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_react22.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
5029
+ return /* @__PURE__ */ import_react28.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react28.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react28.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_react28.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
4426
5030
  }
4427
5031
 
4428
5032
  // src/computeTierCoverage.js
@@ -4443,14 +5047,14 @@ function computeTierCoverage(topics) {
4443
5047
  }
4444
5048
 
4445
5049
  // src/StanceAccordion.jsx
4446
- var import_react24 = __toESM(require("react"));
5050
+ var import_react30 = __toESM(require("react"));
4447
5051
 
4448
5052
  // src/Favicon.jsx
4449
- var import_react23 = __toESM(require("react"));
5053
+ var import_react29 = __toESM(require("react"));
4450
5054
  function Favicon({ url, size = 16 }) {
4451
5055
  try {
4452
5056
  const domain = new URL(url).hostname;
4453
- return /* @__PURE__ */ import_react23.default.createElement(
5057
+ return /* @__PURE__ */ import_react29.default.createElement(
4454
5058
  "img",
4455
5059
  {
4456
5060
  src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
@@ -4461,7 +5065,7 @@ function Favicon({ url, size = 16 }) {
4461
5065
  }
4462
5066
  );
4463
5067
  } catch {
4464
- return /* @__PURE__ */ import_react23.default.createElement(
5068
+ return /* @__PURE__ */ import_react29.default.createElement(
4465
5069
  "svg",
4466
5070
  {
4467
5071
  width: size,
@@ -4472,8 +5076,8 @@ function Favicon({ url, size = 16 }) {
4472
5076
  strokeWidth: "1.5",
4473
5077
  style: { verticalAlign: "middle", flexShrink: 0 }
4474
5078
  },
4475
- /* @__PURE__ */ import_react23.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4476
- /* @__PURE__ */ import_react23.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" })
5079
+ /* @__PURE__ */ import_react29.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
5080
+ /* @__PURE__ */ import_react29.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" })
4477
5081
  );
4478
5082
  }
4479
5083
  }
@@ -4504,11 +5108,11 @@ function StanceAccordion({
4504
5108
  apiUrl = "https://api.empowered.vote"
4505
5109
  }) {
4506
5110
  var _a;
4507
- const [expandedTopicId, setExpandedTopicId] = (0, import_react24.useState)(null);
4508
- const [loadingId, setLoadingId] = (0, import_react24.useState)(null);
4509
- const [showAll, setShowAll] = (0, import_react24.useState)(false);
4510
- const contextCache = (0, import_react24.useRef)(/* @__PURE__ */ new Map());
4511
- const quotesCache = (0, import_react24.useRef)(null);
5111
+ const [expandedTopicId, setExpandedTopicId] = (0, import_react30.useState)(null);
5112
+ const [loadingId, setLoadingId] = (0, import_react30.useState)(null);
5113
+ const [showAll, setShowAll] = (0, import_react30.useState)(false);
5114
+ const contextCache = (0, import_react30.useRef)(/* @__PURE__ */ new Map());
5115
+ const quotesCache = (0, import_react30.useRef)(null);
4512
5116
  const polAnswerMap = {};
4513
5117
  if (polAnswers) {
4514
5118
  polAnswers.forEach((a) => {
@@ -4567,7 +5171,7 @@ function StanceAccordion({
4567
5171
  quotesCache.current = [];
4568
5172
  }
4569
5173
  }
4570
- const handleToggle = (0, import_react24.useCallback)(
5174
+ const handleToggle = (0, import_react30.useCallback)(
4571
5175
  async (topicId) => {
4572
5176
  if (expandedTopicId === topicId) {
4573
5177
  setExpandedTopicId(null);
@@ -4584,7 +5188,7 @@ function StanceAccordion({
4584
5188
  },
4585
5189
  [expandedTopicId, politicianId, apiUrl]
4586
5190
  );
4587
- (0, import_react24.useEffect)(() => {
5191
+ (0, import_react30.useEffect)(() => {
4588
5192
  if (initialExpandedTopicId && topics && topics.length > 0) {
4589
5193
  handleToggle(String(initialExpandedTopicId));
4590
5194
  }
@@ -4600,13 +5204,13 @@ function StanceAccordion({
4600
5204
  visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
4601
5205
  }
4602
5206
  }
4603
- return /* @__PURE__ */ import_react24.default.createElement(
5207
+ return /* @__PURE__ */ import_react30.default.createElement(
4604
5208
  "div",
4605
5209
  {
4606
5210
  className: "flex flex-col",
4607
5211
  style: { fontFamily: "'Manrope', sans-serif" }
4608
5212
  },
4609
- /* @__PURE__ */ import_react24.default.createElement(
5213
+ /* @__PURE__ */ import_react30.default.createElement(
4610
5214
  "h3",
4611
5215
  {
4612
5216
  className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
@@ -4628,15 +5232,15 @@ function StanceAccordion({
4628
5232
  if (topic.topic_key) return q.issue === topic.topic_key;
4629
5233
  return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
4630
5234
  }) : [];
4631
- return /* @__PURE__ */ import_react24.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react24.default.createElement(
5235
+ return /* @__PURE__ */ import_react30.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react30.default.createElement(
4632
5236
  "button",
4633
5237
  {
4634
5238
  type: "button",
4635
5239
  onClick: () => handleToggle(topicId),
4636
5240
  className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
4637
5241
  },
4638
- /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
4639
- /* @__PURE__ */ import_react24.default.createElement(
5242
+ /* @__PURE__ */ import_react30.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
5243
+ /* @__PURE__ */ import_react30.default.createElement(
4640
5244
  "svg",
4641
5245
  {
4642
5246
  width: "16",
@@ -4653,9 +5257,9 @@ function StanceAccordion({
4653
5257
  transition: "transform 0.2s ease"
4654
5258
  }
4655
5259
  },
4656
- /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "9 18 15 12 9 6" })
5260
+ /* @__PURE__ */ import_react30.default.createElement("polyline", { points: "9 18 15 12 9 6" })
4657
5261
  )
4658
- ), /* @__PURE__ */ import_react24.default.createElement(
5262
+ ), /* @__PURE__ */ import_react30.default.createElement(
4659
5263
  "div",
4660
5264
  {
4661
5265
  style: {
@@ -4664,7 +5268,7 @@ function StanceAccordion({
4664
5268
  transition: "grid-template-rows 0.25s ease"
4665
5269
  }
4666
5270
  },
4667
- /* @__PURE__ */ import_react24.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react24.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react24.default.createElement(
5271
+ /* @__PURE__ */ import_react30.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react30.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react30.default.createElement(
4668
5272
  "div",
4669
5273
  {
4670
5274
  style: {
@@ -4676,14 +5280,14 @@ function StanceAccordion({
4676
5280
  animation: "ev-spin 0.8s linear infinite"
4677
5281
  }
4678
5282
  }
4679
- )), !isLoading && cached && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react24.default.createElement(
5283
+ )), !isLoading && cached && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react30.default.createElement(
4680
5284
  "p",
4681
5285
  {
4682
5286
  className: "text-sm text-neutral-700 mb-3",
4683
5287
  style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
4684
5288
  },
4685
5289
  cached.reasoning
4686
- ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react24.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react24.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react24.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react24.default.createElement(
5290
+ ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react30.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react30.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react30.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react30.default.createElement(
4687
5291
  "a",
4688
5292
  {
4689
5293
  href: src,
@@ -4691,9 +5295,9 @@ function StanceAccordion({
4691
5295
  rel: "noreferrer",
4692
5296
  className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
4693
5297
  },
4694
- /* @__PURE__ */ import_react24.default.createElement(Favicon, { url: src }),
4695
- /* @__PURE__ */ import_react24.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
4696
- ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react24.default.createElement(
5298
+ /* @__PURE__ */ import_react30.default.createElement(Favicon, { url: src }),
5299
+ /* @__PURE__ */ import_react30.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
5300
+ ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react30.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react30.default.createElement(
4697
5301
  "p",
4698
5302
  {
4699
5303
  style: {
@@ -4710,7 +5314,7 @@ function StanceAccordion({
4710
5314
  const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
4711
5315
  const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
4712
5316
  const sourceName = quote.source_name || quote.sourceName;
4713
- return /* @__PURE__ */ import_react24.default.createElement(
5317
+ return /* @__PURE__ */ import_react30.default.createElement(
4714
5318
  "div",
4715
5319
  {
4716
5320
  key: quote.id,
@@ -4722,7 +5326,7 @@ function StanceAccordion({
4722
5326
  marginBottom: "8px"
4723
5327
  }
4724
5328
  },
4725
- /* @__PURE__ */ import_react24.default.createElement(
5329
+ /* @__PURE__ */ import_react30.default.createElement(
4726
5330
  "p",
4727
5331
  {
4728
5332
  style: {
@@ -4735,7 +5339,7 @@ function StanceAccordion({
4735
5339
  },
4736
5340
  quote.text
4737
5341
  ),
4738
- verdict === "agreed" && /* @__PURE__ */ import_react24.default.createElement(
5342
+ verdict === "agreed" && /* @__PURE__ */ import_react30.default.createElement(
4739
5343
  "span",
4740
5344
  {
4741
5345
  style: {
@@ -4752,10 +5356,10 @@ function StanceAccordion({
4752
5356
  flexShrink: 0
4753
5357
  }
4754
5358
  },
4755
- /* @__PURE__ */ import_react24.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_react24.default.createElement("path", { d: "M5 13l4 4L19 7" })),
5359
+ /* @__PURE__ */ import_react30.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_react30.default.createElement("path", { d: "M5 13l4 4L19 7" })),
4756
5360
  "Agreed"
4757
5361
  ),
4758
- verdict === "disagreed" && /* @__PURE__ */ import_react24.default.createElement(
5362
+ verdict === "disagreed" && /* @__PURE__ */ import_react30.default.createElement(
4759
5363
  "span",
4760
5364
  {
4761
5365
  style: {
@@ -4772,10 +5376,10 @@ function StanceAccordion({
4772
5376
  flexShrink: 0
4773
5377
  }
4774
5378
  },
4775
- /* @__PURE__ */ import_react24.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_react24.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
5379
+ /* @__PURE__ */ import_react30.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_react30.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
4776
5380
  "Disagreed"
4777
5381
  ),
4778
- sourceName && /* @__PURE__ */ import_react24.default.createElement(
5382
+ sourceName && /* @__PURE__ */ import_react30.default.createElement(
4779
5383
  "a",
4780
5384
  {
4781
5385
  href: quote.source_url || quote.sourceUrl,
@@ -4792,10 +5396,10 @@ function StanceAccordion({
4792
5396
  sourceName
4793
5397
  )
4794
5398
  );
4795
- })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react24.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
5399
+ })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
4796
5400
  ));
4797
5401
  }),
4798
- hasToggle && /* @__PURE__ */ import_react24.default.createElement(
5402
+ hasToggle && /* @__PURE__ */ import_react30.default.createElement(
4799
5403
  "button",
4800
5404
  {
4801
5405
  type: "button",
@@ -4807,78 +5411,6 @@ function StanceAccordion({
4807
5411
  )
4808
5412
  );
4809
5413
  }
4810
-
4811
- // src/icons.js
4812
- var import_react25 = __toESM(require("react"));
4813
- function BallotIcon({ size = 16, color = "currentColor" }) {
4814
- return /* @__PURE__ */ import_react25.default.createElement(
4815
- "svg",
4816
- {
4817
- width: size,
4818
- height: size,
4819
- viewBox: "0 0 24 24",
4820
- fill: "none",
4821
- stroke: color,
4822
- strokeWidth: "2",
4823
- strokeLinecap: "round",
4824
- strokeLinejoin: "round",
4825
- xmlns: "http://www.w3.org/2000/svg"
4826
- },
4827
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "m9 12 2 2 4-4" }),
4828
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
4829
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "M22 19H2" })
4830
- );
4831
- }
4832
- function CompassIcon({ size = 16, color = "currentColor" }) {
4833
- return /* @__PURE__ */ import_react25.default.createElement(
4834
- "svg",
4835
- {
4836
- width: size,
4837
- height: size,
4838
- viewBox: "0 0 24 24",
4839
- fill: "none",
4840
- stroke: color,
4841
- strokeWidth: "2",
4842
- strokeLinecap: "round",
4843
- strokeLinejoin: "round",
4844
- xmlns: "http://www.w3.org/2000/svg"
4845
- },
4846
- /* @__PURE__ */ import_react25.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4847
- /* @__PURE__ */ import_react25.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" })
4848
- );
4849
- }
4850
- function BranchIcon({ size = 16, color = "currentColor", branch }) {
4851
- let paths;
4852
- switch (branch) {
4853
- case "executive":
4854
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react25.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react25.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
4855
- break;
4856
- case "legislative":
4857
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.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_react25.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M15 12h-5" }));
4858
- break;
4859
- case "judicial":
4860
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M8 21h8" }));
4861
- break;
4862
- default:
4863
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react25.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_react25.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M6 18v-7" }));
4864
- break;
4865
- }
4866
- return /* @__PURE__ */ import_react25.default.createElement(
4867
- "svg",
4868
- {
4869
- width: size,
4870
- height: size,
4871
- viewBox: "0 0 24 24",
4872
- fill: "none",
4873
- stroke: color,
4874
- strokeWidth: "2",
4875
- strokeLinecap: "round",
4876
- strokeLinejoin: "round",
4877
- xmlns: "http://www.w3.org/2000/svg"
4878
- },
4879
- paths
4880
- );
4881
- }
4882
5414
  // Annotate the CommonJS export names for ESM import in node:
4883
5415
  0 && (module.exports = {
4884
5416
  AuthForm,
@@ -4886,12 +5418,14 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
4886
5418
  BranchIcon,
4887
5419
  CategorySection,
4888
5420
  CommitteeTable,
5421
+ CompassCardHorizontal,
4889
5422
  CompassCoverageCallout,
4890
5423
  CompassIcon,
4891
5424
  ExpandCompassNudge,
4892
5425
  FilterSidebar,
4893
5426
  GovernmentBodySection,
4894
5427
  Header,
5428
+ IconOverlay,
4895
5429
  IssueTags,
4896
5430
  JudicialRecordDetail,
4897
5431
  JudicialScorecard,