@empoweredvote/ev-ui 0.4.4 → 0.5.0

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
  }
@@ -1840,8 +1842,606 @@ function PoliticianCard({
1840
1842
  );
1841
1843
  }
1842
1844
 
1843
- // src/CategorySection.jsx
1845
+ // src/CompassCardHorizontal.jsx
1846
+ var import_react13 = __toESM(require("react"));
1847
+
1848
+ // src/PlaceholderRadar.jsx
1844
1849
  var import_react8 = __toESM(require("react"));
1850
+ function PlaceholderRadar({ size = 250, name = "" }) {
1851
+ const cx = size / 2;
1852
+ const cy = size / 2;
1853
+ const r = size / 2 * 0.65;
1854
+ const n = 8;
1855
+ const vertices = Array.from({ length: n }, (_, i) => {
1856
+ const a = 2 * Math.PI * i / n;
1857
+ return [cx + r * Math.sin(a), cy - r * Math.cos(a)];
1858
+ });
1859
+ const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
1860
+ const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
1861
+ const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
1862
+ return /* @__PURE__ */ import_react8.default.createElement(
1863
+ "svg",
1864
+ {
1865
+ width: size,
1866
+ height: size,
1867
+ viewBox: `0 0 ${size} ${size}`,
1868
+ role: "img",
1869
+ "aria-label": name ? `${name} \u2014 compass data unavailable` : "compass data unavailable",
1870
+ style: {
1871
+ backgroundColor: colorScales.teal["050"],
1872
+ borderRadius: borderRadius.sm,
1873
+ flexShrink: 0
1874
+ }
1875
+ },
1876
+ vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
1877
+ "line",
1878
+ {
1879
+ key: i,
1880
+ x1: cx,
1881
+ y1: cy,
1882
+ x2: x,
1883
+ y2: y,
1884
+ stroke: colorScales.gray["200"],
1885
+ strokeWidth: "1",
1886
+ strokeDasharray: "2 3",
1887
+ opacity: "0.6"
1888
+ }
1889
+ )),
1890
+ /* @__PURE__ */ import_react8.default.createElement(
1891
+ "polygon",
1892
+ {
1893
+ points: innerPts,
1894
+ fill: "none",
1895
+ stroke: colorScales.gray["200"],
1896
+ strokeWidth: "1",
1897
+ strokeDasharray: "2 3",
1898
+ opacity: "0.5"
1899
+ }
1900
+ ),
1901
+ /* @__PURE__ */ import_react8.default.createElement(
1902
+ "polygon",
1903
+ {
1904
+ points: midPts,
1905
+ fill: "none",
1906
+ stroke: colorScales.gray["200"],
1907
+ strokeWidth: "1",
1908
+ strokeDasharray: "3 3",
1909
+ opacity: "0.6"
1910
+ }
1911
+ ),
1912
+ /* @__PURE__ */ import_react8.default.createElement(
1913
+ "polygon",
1914
+ {
1915
+ points: outerPts,
1916
+ fill: "none",
1917
+ stroke: colorScales.gray["200"],
1918
+ strokeWidth: "1.5",
1919
+ strokeDasharray: "4 3"
1920
+ }
1921
+ )
1922
+ );
1923
+ }
1924
+
1925
+ // src/CompassCardHorizontalMeta.jsx
1926
+ var import_react12 = __toESM(require("react"));
1927
+
1928
+ // src/IconOverlay.jsx
1929
+ var import_react10 = __toESM(require("react"));
1930
+ var import_react11 = require("@floating-ui/react");
1931
+
1932
+ // src/icons.js
1933
+ var import_react9 = __toESM(require("react"));
1934
+ function BallotIcon({ size = 16, color = "currentColor" }) {
1935
+ return /* @__PURE__ */ import_react9.default.createElement(
1936
+ "svg",
1937
+ {
1938
+ width: size,
1939
+ height: size,
1940
+ viewBox: "0 0 24 24",
1941
+ fill: "none",
1942
+ stroke: color,
1943
+ strokeWidth: "2",
1944
+ strokeLinecap: "round",
1945
+ strokeLinejoin: "round",
1946
+ xmlns: "http://www.w3.org/2000/svg"
1947
+ },
1948
+ /* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
1949
+ /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
1950
+ /* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
1951
+ );
1952
+ }
1953
+ function CompassIcon({ size = 16, color = "currentColor" }) {
1954
+ return /* @__PURE__ */ import_react9.default.createElement(
1955
+ "svg",
1956
+ {
1957
+ width: size,
1958
+ height: size,
1959
+ viewBox: "0 0 24 24",
1960
+ fill: "none",
1961
+ stroke: color,
1962
+ strokeWidth: "2",
1963
+ strokeLinecap: "round",
1964
+ strokeLinejoin: "round",
1965
+ xmlns: "http://www.w3.org/2000/svg"
1966
+ },
1967
+ /* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
1968
+ /* @__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" })
1969
+ );
1970
+ }
1971
+ function BranchIcon({ size = 16, color = "currentColor", branch }) {
1972
+ let paths;
1973
+ switch (branch) {
1974
+ case "executive":
1975
+ 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" }));
1976
+ break;
1977
+ case "legislative":
1978
+ 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" }));
1979
+ break;
1980
+ case "judicial":
1981
+ 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" }));
1982
+ break;
1983
+ default:
1984
+ 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" }));
1985
+ break;
1986
+ }
1987
+ return /* @__PURE__ */ import_react9.default.createElement(
1988
+ "svg",
1989
+ {
1990
+ width: size,
1991
+ height: size,
1992
+ viewBox: "0 0 24 24",
1993
+ fill: "none",
1994
+ stroke: color,
1995
+ strokeWidth: "2",
1996
+ strokeLinecap: "round",
1997
+ strokeLinejoin: "round",
1998
+ xmlns: "http://www.w3.org/2000/svg"
1999
+ },
2000
+ paths
2001
+ );
2002
+ }
2003
+
2004
+ // src/IconOverlay.jsx
2005
+ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
2006
+ const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
2007
+ const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
2008
+ open: isOpen,
2009
+ onOpenChange: setIsOpen,
2010
+ middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
2011
+ whileElementsMounted: import_react11.autoUpdate
2012
+ });
2013
+ const hover = (0, import_react11.useHover)(context);
2014
+ const focus2 = (0, import_react11.useFocus)(context);
2015
+ const dismiss = (0, import_react11.useDismiss)(context);
2016
+ const role = (0, import_react11.useRole)(context, { role: "tooltip" });
2017
+ const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
2018
+ hover,
2019
+ focus2,
2020
+ dismiss,
2021
+ role
2022
+ ]);
2023
+ return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
2024
+ "span",
2025
+ {
2026
+ ref: refs.setReference,
2027
+ "aria-label": tooltip,
2028
+ tabIndex: 0,
2029
+ style: { display: "inline-flex", padding: spacing[1], ...onClick ? { cursor: "pointer" } : {} },
2030
+ ...getReferenceProps(),
2031
+ onClick: onClick ? (e) => {
2032
+ e.stopPropagation();
2033
+ onClick(e);
2034
+ } : void 0
2035
+ },
2036
+ /* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
2037
+ ), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
2038
+ "div",
2039
+ {
2040
+ ref: refs.setFloating,
2041
+ style: {
2042
+ ...floatingStyles,
2043
+ zIndex: 70,
2044
+ background: semanticTokens.light.tooltip.background,
2045
+ color: semanticTokens.light.tooltip.text,
2046
+ padding: "4px 8px",
2047
+ borderRadius: "6px",
2048
+ fontSize: "14px",
2049
+ fontFamily: "'Manrope', sans-serif",
2050
+ pointerEvents: "none",
2051
+ whiteSpace: "nowrap"
2052
+ },
2053
+ ...getFloatingProps()
2054
+ },
2055
+ tooltip
2056
+ )));
2057
+ }
2058
+ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
2059
+ if (!ballot && !hasStances && !branch) return null;
2060
+ 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;
2061
+ return /* @__PURE__ */ import_react10.default.createElement(
2062
+ "div",
2063
+ {
2064
+ style: {
2065
+ display: "flex",
2066
+ gap: 4,
2067
+ alignItems: "center",
2068
+ justifyContent: "flex-start",
2069
+ padding: 0,
2070
+ marginLeft: "-4px"
2071
+ // offset icon wrapper padding so icons align flush-left with text
2072
+ }
2073
+ },
2074
+ ballot && /* @__PURE__ */ import_react10.default.createElement(
2075
+ IconWithTooltip,
2076
+ {
2077
+ IconComponent: BallotIcon,
2078
+ color: colors.evMutedBlue,
2079
+ tooltip: ballotTooltip,
2080
+ size: 14
2081
+ }
2082
+ ),
2083
+ hasStances && /* @__PURE__ */ import_react10.default.createElement(
2084
+ IconWithTooltip,
2085
+ {
2086
+ IconComponent: CompassIcon,
2087
+ color: colors.evMutedBlue,
2088
+ tooltip: "Compare your views",
2089
+ size: 14,
2090
+ onClick: onCompassClick
2091
+ }
2092
+ ),
2093
+ branch && /* @__PURE__ */ import_react10.default.createElement(
2094
+ IconWithTooltip,
2095
+ {
2096
+ IconComponent: BranchIcon,
2097
+ color: colors.evMutedBlue,
2098
+ tooltip: `${branch} branch`,
2099
+ size: 14,
2100
+ extraProps: { branch: branch.toLowerCase() }
2101
+ }
2102
+ )
2103
+ );
2104
+ }
2105
+
2106
+ // src/CompassCardHorizontalMeta.jsx
2107
+ function CompassCardHorizontalMeta({
2108
+ politician,
2109
+ surface = "representatives",
2110
+ userAnswers
2111
+ }) {
2112
+ const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
2113
+ return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
2114
+ flex: 1,
2115
+ minWidth: 0,
2116
+ display: "flex",
2117
+ flexDirection: "column",
2118
+ gap: spacing[1]
2119
+ } }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2120
+ fontFamily: fonts.primary,
2121
+ fontSize: fontSizes.lg,
2122
+ fontWeight: fontWeights.semibold,
2123
+ lineHeight: 1.4,
2124
+ color: colors.evMutedBlue,
2125
+ margin: 0
2126
+ } }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2127
+ fontFamily: fonts.primary,
2128
+ fontSize: fontSizes.sm,
2129
+ fontWeight: fontWeights.semibold,
2130
+ lineHeight: 1.4,
2131
+ color: colors.textSecondary,
2132
+ margin: 0,
2133
+ overflow: "hidden",
2134
+ display: "-webkit-box",
2135
+ WebkitLineClamp: 2,
2136
+ WebkitBoxOrient: "vertical"
2137
+ } }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
2138
+ fontFamily: fonts.primary,
2139
+ fontSize: fontSizes.sm,
2140
+ fontWeight: fontWeights.regular,
2141
+ lineHeight: 1.5,
2142
+ color: colors.textMuted,
2143
+ margin: 0,
2144
+ overflow: "hidden",
2145
+ textOverflow: "ellipsis",
2146
+ whiteSpace: "nowrap"
2147
+ } }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
2148
+ IconOverlay,
2149
+ {
2150
+ ballot: politician.ballot || null,
2151
+ hasStances: Boolean(userAnswers && userAnswers.length > 0) || Boolean(politician.hasStances),
2152
+ branch: politician.branch || null
2153
+ }
2154
+ ));
2155
+ }
2156
+
2157
+ // src/compassHelpers.js
2158
+ function buildAnswerMapByShortTitle(allTopics, allAnswers, allowedShorts) {
2159
+ var _a;
2160
+ const allowed = new Set(allowedShorts.map((s) => s.toLowerCase()));
2161
+ const topicById = new Map(allTopics.map((t) => [t.id, t]));
2162
+ const shortById = new Map(allTopics.map((t) => [t.id, t.short_title]));
2163
+ const out = {};
2164
+ const topicByShortLower = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
2165
+ for (const s of allowedShorts) {
2166
+ const t = topicByShortLower.get(s.toLowerCase());
2167
+ if (t) out[t.short_title] = 0;
2168
+ }
2169
+ for (const a of allAnswers) {
2170
+ const st = shortById.get(a.topic_id);
2171
+ if (!st) continue;
2172
+ if (allowed.has(String(st).toLowerCase())) {
2173
+ out[st] = (_a = a.value) != null ? _a : 0;
2174
+ }
2175
+ }
2176
+ const topicByShort = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
2177
+ const topicsFiltered = allowedShorts.map((s) => topicByShort.get(s.toLowerCase())).filter(Boolean);
2178
+ return { topicsFiltered, answersByShort: out };
2179
+ }
2180
+
2181
+ // src/CompassCardHorizontal.jsx
2182
+ var RADAR_SIZE = 250;
2183
+ var SLOT_WIDTH = 260;
2184
+ function CompassCardHorizontal({
2185
+ politician,
2186
+ userAnswers = null,
2187
+ tierVisuals = null,
2188
+ view = "compass",
2189
+ surface = "representatives",
2190
+ variant = "compass",
2191
+ onBuildCompass = null,
2192
+ onClick
2193
+ }) {
2194
+ var _a;
2195
+ const [hovered, setHovered] = (0, import_react13.useState)(false);
2196
+ const [focused, setFocused] = (0, import_react13.useState)(false);
2197
+ const [imgError, setImgError] = (0, import_react13.useState)(false);
2198
+ const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
2199
+ (0, import_react13.useEffect)(() => {
2200
+ setImgError(false);
2201
+ }, [politician == null ? void 0 : politician.photo_origin_url]);
2202
+ const cardStyle = {
2203
+ position: "relative",
2204
+ display: "flex",
2205
+ flexDirection: "row",
2206
+ alignItems: "center",
2207
+ backgroundColor: (_a = tierVisuals == null ? void 0 : tierVisuals.bg) != null ? _a : colors.bgWhite,
2208
+ border: `1px solid ${colors.borderLight}`,
2209
+ borderRadius: borderRadius.xl,
2210
+ overflow: "hidden",
2211
+ // clips slot corners via card border-radius — no padding needed
2212
+ boxShadow: focused ? focus.ring : hovered ? shadows.cardHover : shadows.md,
2213
+ transform: hovered ? "translateY(-2px)" : "none",
2214
+ transition: `box-shadow ${duration.normal} ease, transform ${duration.normal} ease`,
2215
+ cursor: onClick ? "pointer" : "default",
2216
+ fontFamily: fonts.primary,
2217
+ outline: "none"
2218
+ };
2219
+ const slotStyle = { width: SLOT_WIDTH, height: SLOT_WIDTH, flexShrink: 0, overflow: "hidden", position: "relative" };
2220
+ function renderCompass() {
2221
+ var _a2, _b, _c;
2222
+ if (!userAnswers || userAnswers.length === 0) {
2223
+ return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2224
+ }
2225
+ let topics = [];
2226
+ let data = {};
2227
+ let compareData = {};
2228
+ try {
2229
+ if (Array.isArray(userAnswers) && userAnswers.length > 0) {
2230
+ const hasEmbeddedTopics = (_b = (_a2 = userAnswers[0]) == null ? void 0 : _a2.topic) == null ? void 0 : _b.short_title;
2231
+ if (hasEmbeddedTopics) {
2232
+ const allowedShorts = userAnswers.map((a) => a.topic.short_title);
2233
+ const allTopics = userAnswers.map((a) => a.topic);
2234
+ const { topicsFiltered, answersByShort } = buildAnswerMapByShortTitle(
2235
+ allTopics,
2236
+ userAnswers,
2237
+ allowedShorts
2238
+ );
2239
+ topics = topicsFiltered;
2240
+ data = answersByShort;
2241
+ } else {
2242
+ if (!Array.isArray(userAnswers[0])) {
2243
+ 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 }));
2244
+ data = {};
2245
+ for (const a of userAnswers) {
2246
+ if (a.short_title) data[a.short_title] = (_c = a.value) != null ? _c : 0;
2247
+ }
2248
+ }
2249
+ }
2250
+ }
2251
+ if ((politician == null ? void 0 : politician.stances) && typeof politician.stances === "object") {
2252
+ compareData = Array.isArray(politician.stances) ? politician.stances.reduce((acc, s) => {
2253
+ var _a3;
2254
+ if (s.short_title) acc[s.short_title] = (_a3 = s.value) != null ? _a3 : 0;
2255
+ return acc;
2256
+ }, {}) : politician.stances;
2257
+ }
2258
+ if (topics.length === 0) {
2259
+ return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2260
+ }
2261
+ } catch (err) {
2262
+ return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
2263
+ }
2264
+ return /* @__PURE__ */ import_react13.default.createElement(
2265
+ RadarChartCore,
2266
+ {
2267
+ topics,
2268
+ data,
2269
+ compareData,
2270
+ invertedSpokes: {},
2271
+ onToggleInversion: () => {
2272
+ },
2273
+ onReplaceTopic: () => {
2274
+ },
2275
+ size: RADAR_SIZE,
2276
+ padding: 20,
2277
+ labelOffset: 5,
2278
+ labelFontSize: 12
2279
+ }
2280
+ );
2281
+ }
2282
+ function renderPortrait() {
2283
+ var _a2, _b, _c;
2284
+ 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;
2285
+ if (imageSrc && !imgError) {
2286
+ return /* @__PURE__ */ import_react13.default.createElement(
2287
+ "img",
2288
+ {
2289
+ src: imageSrc,
2290
+ alt: `${politician.full_name} portrait`,
2291
+ style: {
2292
+ width: "100%",
2293
+ height: "100%",
2294
+ objectFit: "cover",
2295
+ objectPosition: (_b = politician.imageFocalPoint) != null ? _b : "center 20%",
2296
+ display: "block"
2297
+ },
2298
+ onError: () => setImgError(true)
2299
+ }
2300
+ );
2301
+ }
2302
+ const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
2303
+ const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
2304
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2305
+ width: "100%",
2306
+ height: "100%",
2307
+ backgroundColor: colors.evMutedBlue,
2308
+ color: colors.textWhite,
2309
+ display: "flex",
2310
+ alignItems: "center",
2311
+ justifyContent: "center",
2312
+ fontFamily: fonts.primary,
2313
+ fontWeight: fontWeights.bold,
2314
+ fontSize: fontSizes["4xl"]
2315
+ } }, initials);
2316
+ }
2317
+ function renderEmptyVariant() {
2318
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2319
+ width: "100%",
2320
+ height: "100%",
2321
+ display: "flex",
2322
+ flexDirection: "column",
2323
+ alignItems: "center",
2324
+ justifyContent: "center",
2325
+ gap: "8px",
2326
+ padding: "12px 14px",
2327
+ boxSizing: "border-box",
2328
+ backgroundColor: colorScales.teal["050"]
2329
+ } }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
2330
+ margin: 0,
2331
+ fontSize: fontSizes.xs,
2332
+ color: colors.textMuted,
2333
+ textAlign: "center",
2334
+ lineHeight: 1.4,
2335
+ fontFamily: fonts.primary
2336
+ } }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
2337
+ "button",
2338
+ {
2339
+ type: "button",
2340
+ onClick: onBuildCompass || void 0,
2341
+ onMouseEnter: () => setEmptyCtaHovered(true),
2342
+ onMouseLeave: () => setEmptyCtaHovered(false),
2343
+ style: {
2344
+ minWidth: "160px",
2345
+ height: "40px",
2346
+ padding: "0 16px",
2347
+ backgroundColor: emptyCtaHovered ? semanticTokens.light.buttonPrimary.background.hovered : semanticTokens.light.buttonPrimary.background.default,
2348
+ color: colors.textWhite,
2349
+ fontSize: fontSizes.xs,
2350
+ fontWeight: fontWeights.semibold,
2351
+ fontFamily: fonts.primary,
2352
+ borderRadius: borderRadius.full,
2353
+ border: "none",
2354
+ cursor: onBuildCompass ? "pointer" : "default",
2355
+ whiteSpace: "nowrap",
2356
+ transition: `background ${duration.normal} ease`,
2357
+ flexShrink: 0
2358
+ }
2359
+ },
2360
+ "Calibrate your compass"
2361
+ ));
2362
+ }
2363
+ function renderUnavailablePlate() {
2364
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2365
+ width: "100%",
2366
+ height: "100%",
2367
+ backgroundColor: colorScales.teal["050"],
2368
+ display: "flex",
2369
+ alignItems: "center",
2370
+ justifyContent: "center",
2371
+ padding: spacing[4],
2372
+ boxSizing: "border-box"
2373
+ } }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
2374
+ fontSize: fontSizes.sm,
2375
+ fontWeight: fontWeights.semibold,
2376
+ lineHeight: 1.4,
2377
+ color: colors.textMuted,
2378
+ textAlign: "center",
2379
+ maxWidth: "180px",
2380
+ margin: 0,
2381
+ fontFamily: fonts.primary
2382
+ } }, "Compass currently unavailable for this role."));
2383
+ }
2384
+ function renderSlotContent() {
2385
+ if (view === "portrait") return renderPortrait();
2386
+ if (variant === "empty") return renderEmptyVariant();
2387
+ if (variant === "administrative" || variant === "judicial") return renderUnavailablePlate();
2388
+ return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2389
+ width: "100%",
2390
+ height: "100%",
2391
+ display: "flex",
2392
+ alignItems: "center",
2393
+ justifyContent: "center",
2394
+ padding: spacing[3],
2395
+ boxSizing: "border-box"
2396
+ } }, renderCompass());
2397
+ }
2398
+ return /* @__PURE__ */ import_react13.default.createElement(
2399
+ "div",
2400
+ {
2401
+ role: "article",
2402
+ "aria-label": `${politician.full_name}, ${politician.office_title || ""}`,
2403
+ tabIndex: 0,
2404
+ style: cardStyle,
2405
+ onClick,
2406
+ onKeyDown: (e) => {
2407
+ if (onClick && (e.key === "Enter" || e.key === " ")) {
2408
+ e.preventDefault();
2409
+ onClick();
2410
+ }
2411
+ },
2412
+ onMouseEnter: () => setHovered(true),
2413
+ onMouseLeave: () => setHovered(false),
2414
+ onFocus: () => setFocused(true),
2415
+ onBlur: () => setFocused(false)
2416
+ },
2417
+ /* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
2418
+ position: "absolute",
2419
+ bottom: "15px",
2420
+ left: 0,
2421
+ width: "100%",
2422
+ backgroundColor: "rgba(0,0,0,0.35)",
2423
+ color: "#fff",
2424
+ fontSize: "12px",
2425
+ fontWeight: 700,
2426
+ letterSpacing: "0.4px",
2427
+ textAlign: "center",
2428
+ textTransform: "uppercase",
2429
+ padding: "6px 0",
2430
+ pointerEvents: "none"
2431
+ } }, "Running Unopposed")),
2432
+ /* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
2433
+ CompassCardHorizontalMeta,
2434
+ {
2435
+ politician,
2436
+ surface,
2437
+ userAnswers
2438
+ }
2439
+ ))
2440
+ );
2441
+ }
2442
+
2443
+ // src/CategorySection.jsx
2444
+ var import_react14 = __toESM(require("react"));
1845
2445
  function CategorySection({
1846
2446
  title,
1847
2447
  infoTooltip,
@@ -1851,7 +2451,7 @@ function CategorySection({
1851
2451
  tier
1852
2452
  }) {
1853
2453
  var _a, _b;
1854
- const [showTooltip, setShowTooltip] = (0, import_react8.useState)(false);
2454
+ const [showTooltip, setShowTooltip] = (0, import_react14.useState)(false);
1855
2455
  const tierStyle = tier ? tierColors[tier] : null;
1856
2456
  const styles2 = {
1857
2457
  section: {
@@ -1919,7 +2519,7 @@ function CategorySection({
1919
2519
  gap: spacing[4]
1920
2520
  }
1921
2521
  };
1922
- 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(
2522
+ 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(
1923
2523
  "button",
1924
2524
  {
1925
2525
  type: "button",
@@ -1931,8 +2531,8 @@ function CategorySection({
1931
2531
  "aria-label": `Info about ${title}`
1932
2532
  },
1933
2533
  "i",
1934
- showTooltip && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
1935
- ), websiteUrl && /* @__PURE__ */ import_react8.default.createElement(
2534
+ showTooltip && /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
2535
+ ), websiteUrl && /* @__PURE__ */ import_react14.default.createElement(
1936
2536
  "a",
1937
2537
  {
1938
2538
  href: websiteUrl,
@@ -1941,7 +2541,7 @@ function CategorySection({
1941
2541
  style: styles2.externalLink,
1942
2542
  "aria-label": `Visit official website for ${title}`
1943
2543
  },
1944
- /* @__PURE__ */ import_react8.default.createElement(
2544
+ /* @__PURE__ */ import_react14.default.createElement(
1945
2545
  "svg",
1946
2546
  {
1947
2547
  viewBox: "0 0 24 24",
@@ -1949,7 +2549,7 @@ function CategorySection({
1949
2549
  xmlns: "http://www.w3.org/2000/svg",
1950
2550
  style: { width: "14px", height: "14px" }
1951
2551
  },
1952
- /* @__PURE__ */ import_react8.default.createElement(
2552
+ /* @__PURE__ */ import_react14.default.createElement(
1953
2553
  "path",
1954
2554
  {
1955
2555
  d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
@@ -1960,11 +2560,11 @@ function CategorySection({
1960
2560
  }
1961
2561
  )
1962
2562
  )
1963
- )), /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
2563
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
1964
2564
  }
1965
2565
 
1966
2566
  // src/SubGroupSection.jsx
1967
- var import_react9 = __toESM(require("react"));
2567
+ var import_react15 = __toESM(require("react"));
1968
2568
  function SubGroupSection({ title, websiteUrl, children }) {
1969
2569
  const styles2 = {
1970
2570
  section: {
@@ -1997,7 +2597,7 @@ function SubGroupSection({ title, websiteUrl, children }) {
1997
2597
  gap: spacing[2]
1998
2598
  }
1999
2599
  };
2000
- 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(
2600
+ 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(
2001
2601
  "a",
2002
2602
  {
2003
2603
  href: websiteUrl,
@@ -2005,12 +2605,12 @@ function SubGroupSection({ title, websiteUrl, children }) {
2005
2605
  rel: "noopener noreferrer",
2006
2606
  style: styles2.link
2007
2607
  },
2008
- /* @__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" }))
2009
- )), /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
2608
+ /* @__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" }))
2609
+ )), /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
2010
2610
  }
2011
2611
 
2012
2612
  // src/GovernmentBodySection.jsx
2013
- var import_react10 = __toESM(require("react"));
2613
+ var import_react16 = __toESM(require("react"));
2014
2614
  function GovernmentBodySection({
2015
2615
  title,
2016
2616
  websiteUrl,
@@ -2019,7 +2619,7 @@ function GovernmentBodySection({
2019
2619
  children
2020
2620
  }) {
2021
2621
  var _a;
2022
- const [expanded, setExpanded] = (0, import_react10.useState)(defaultExpanded);
2622
+ const [expanded, setExpanded] = (0, import_react16.useState)(defaultExpanded);
2023
2623
  const tierStyle = tier ? tierColors[tier] : null;
2024
2624
  const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
2025
2625
  const styles2 = {
@@ -2059,7 +2659,7 @@ function GovernmentBodySection({
2059
2659
  display: expanded ? "block" : "none"
2060
2660
  }
2061
2661
  };
2062
- return /* @__PURE__ */ import_react10.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react10.default.createElement(
2662
+ return /* @__PURE__ */ import_react16.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react16.default.createElement(
2063
2663
  "div",
2064
2664
  {
2065
2665
  style: styles2.header,
@@ -2075,8 +2675,8 @@ function GovernmentBodySection({
2075
2675
  "aria-expanded": expanded,
2076
2676
  "aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
2077
2677
  },
2078
- /* @__PURE__ */ import_react10.default.createElement("span", { style: styles2.title }, title),
2079
- websiteUrl && /* @__PURE__ */ import_react10.default.createElement(
2678
+ /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.title }, title),
2679
+ websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
2080
2680
  "a",
2081
2681
  {
2082
2682
  href: websiteUrl,
@@ -2086,14 +2686,14 @@ function GovernmentBodySection({
2086
2686
  onClick: (e) => e.stopPropagation(),
2087
2687
  "aria-label": `Visit ${title} website`
2088
2688
  },
2089
- /* @__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" }))
2689
+ /* @__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" }))
2090
2690
  ),
2091
- /* @__PURE__ */ import_react10.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
2092
- ), /* @__PURE__ */ import_react10.default.createElement("div", { style: styles2.content }, children));
2691
+ /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
2692
+ ), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.content }, children));
2093
2693
  }
2094
2694
 
2095
2695
  // src/SocialLinks.jsx
2096
- var import_react11 = __toESM(require("react"));
2696
+ var import_react17 = __toESM(require("react"));
2097
2697
  var SOCIAL_PLATFORMS = [
2098
2698
  { test: /facebook\.com/i, platform: "facebook" },
2099
2699
  { test: /twitter\.com|x\.com/i, platform: "twitter" },
@@ -2164,7 +2764,7 @@ function SocialLinks({
2164
2764
  }
2165
2765
  };
2166
2766
  const platformIconMap = {
2167
- 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(
2767
+ 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(
2168
2768
  "path",
2169
2769
  {
2170
2770
  d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
@@ -2174,7 +2774,7 @@ function SocialLinks({
2174
2774
  strokeLinejoin: "round"
2175
2775
  }
2176
2776
  )),
2177
- 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(
2777
+ 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(
2178
2778
  "path",
2179
2779
  {
2180
2780
  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",
@@ -2184,8 +2784,8 @@ function SocialLinks({
2184
2784
  strokeLinejoin: "round"
2185
2785
  }
2186
2786
  )),
2187
- 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" })),
2188
- 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(
2787
+ 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" })),
2788
+ 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(
2189
2789
  "path",
2190
2790
  {
2191
2791
  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",
@@ -2194,8 +2794,8 @@ function SocialLinks({
2194
2794
  strokeLinecap: "round",
2195
2795
  strokeLinejoin: "round"
2196
2796
  }
2197
- ), /* @__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" })),
2198
- 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" }))
2797
+ ), /* @__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" })),
2798
+ 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" }))
2199
2799
  };
2200
2800
  const links = [
2201
2801
  {
@@ -2221,7 +2821,7 @@ function SocialLinks({
2221
2821
  {
2222
2822
  href: website,
2223
2823
  label: "Website",
2224
- 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(
2824
+ 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(
2225
2825
  "path",
2226
2826
  {
2227
2827
  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",
@@ -2251,7 +2851,7 @@ function SocialLinks({
2251
2851
  if (links.length === 0) {
2252
2852
  return null;
2253
2853
  }
2254
- return /* @__PURE__ */ import_react11.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react11.default.createElement(
2854
+ return /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react17.default.createElement(
2255
2855
  "a",
2256
2856
  {
2257
2857
  key: link.label,
@@ -2274,7 +2874,7 @@ function SocialLinks({
2274
2874
  }
2275
2875
 
2276
2876
  // src/IssueTags.jsx
2277
- var import_react12 = __toESM(require("react"));
2877
+ var import_react18 = __toESM(require("react"));
2278
2878
  function IssueTags({
2279
2879
  tags = [],
2280
2880
  selectedTags = [],
@@ -2317,9 +2917,9 @@ function IssueTags({
2317
2917
  onTagClick(tag.value);
2318
2918
  }
2319
2919
  };
2320
- return /* @__PURE__ */ import_react12.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
2920
+ return /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
2321
2921
  const isSelected = selectedTags.includes(tag.value);
2322
- return /* @__PURE__ */ import_react12.default.createElement(
2922
+ return /* @__PURE__ */ import_react18.default.createElement(
2323
2923
  "span",
2324
2924
  {
2325
2925
  key: tag.value,
@@ -2348,7 +2948,7 @@ function IssueTags({
2348
2948
  }
2349
2949
 
2350
2950
  // src/CommitteeTable.jsx
2351
- var import_react13 = __toESM(require("react"));
2951
+ var import_react19 = __toESM(require("react"));
2352
2952
  var ROLE_ORDER = {
2353
2953
  "chair": 0,
2354
2954
  "co-chair": 1,
@@ -2375,7 +2975,7 @@ function CommitteeTable({
2375
2975
  maxVisible = 6,
2376
2976
  style = {}
2377
2977
  }) {
2378
- const [showAll, setShowAll] = (0, import_react13.useState)(false);
2978
+ const [showAll, setShowAll] = (0, import_react19.useState)(false);
2379
2979
  if (committees.length === 0) {
2380
2980
  return null;
2381
2981
  }
@@ -2437,7 +3037,7 @@ function CommitteeTable({
2437
3037
  cursor: "pointer"
2438
3038
  }
2439
3039
  };
2440
- 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(
3040
+ 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(
2441
3041
  "a",
2442
3042
  {
2443
3043
  href: committee.url,
@@ -2452,7 +3052,7 @@ function CommitteeTable({
2452
3052
  }
2453
3053
  },
2454
3054
  committee.name
2455
- ) : committee.name), /* @__PURE__ */ import_react13.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react13.default.createElement(
3055
+ ) : committee.name), /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react19.default.createElement(
2456
3056
  "button",
2457
3057
  {
2458
3058
  type: "button",
@@ -2460,7 +3060,7 @@ function CommitteeTable({
2460
3060
  onClick: () => setShowAll(!showAll)
2461
3061
  },
2462
3062
  showAll ? "Show less" : `Show all ${sorted.length} committees`,
2463
- /* @__PURE__ */ import_react13.default.createElement(
3063
+ /* @__PURE__ */ import_react19.default.createElement(
2464
3064
  "svg",
2465
3065
  {
2466
3066
  width: "14",
@@ -2473,16 +3073,16 @@ function CommitteeTable({
2473
3073
  strokeLinejoin: "round",
2474
3074
  style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
2475
3075
  },
2476
- /* @__PURE__ */ import_react13.default.createElement("polyline", { points: "6 9 12 15 18 9" })
3076
+ /* @__PURE__ */ import_react19.default.createElement("polyline", { points: "6 9 12 15 18 9" })
2477
3077
  )
2478
3078
  ));
2479
3079
  }
2480
3080
 
2481
3081
  // src/PoliticianProfile.jsx
2482
- var import_react16 = __toESM(require("react"));
3082
+ var import_react22 = __toESM(require("react"));
2483
3083
 
2484
3084
  // src/LegislativeInlineSummary.jsx
2485
- var import_react14 = __toESM(require("react"));
3085
+ var import_react20 = __toESM(require("react"));
2486
3086
  function normalizePosition(pos) {
2487
3087
  if (!pos) return "";
2488
3088
  return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -2590,7 +3190,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
2590
3190
  fontSize: fontSizes.sm,
2591
3191
  fontWeight: fontWeights.medium
2592
3192
  };
2593
- 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(
3193
+ 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(
2594
3194
  "button",
2595
3195
  {
2596
3196
  onClick: () => {
@@ -2615,12 +3215,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
2615
3215
  }
2616
3216
  },
2617
3217
  "View Full Legislative Record",
2618
- /* @__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" }))
3218
+ /* @__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" }))
2619
3219
  )));
2620
3220
  }
2621
3221
 
2622
3222
  // src/JudicialScorecard.jsx
2623
- var import_react15 = __toESM(require("react"));
3223
+ var import_react21 = __toESM(require("react"));
2624
3224
 
2625
3225
  // src/judicialUtils.js
2626
3226
  function formatDate(dateStr) {
@@ -2738,7 +3338,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
2738
3338
  onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
2739
3339
  }
2740
3340
  };
2741
- 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"));
3341
+ 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"));
2742
3342
  }
2743
3343
 
2744
3344
  // src/PoliticianProfile.jsx
@@ -2889,13 +3489,13 @@ function formatAddress(addr) {
2889
3489
  if (cityStateZip) lines.push(cityStateZip);
2890
3490
  return lines;
2891
3491
  }
2892
- 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" }));
2893
- 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" }));
2894
- 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" }));
2895
- 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" }));
2896
- 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" }));
2897
- 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" }));
2898
- 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" }));
3492
+ 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" }));
3493
+ 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" }));
3494
+ 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" }));
3495
+ 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" }));
3496
+ 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" }));
3497
+ 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" }));
3498
+ 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" }));
2899
3499
  function PoliticianProfile({
2900
3500
  politician = {},
2901
3501
  onBack,
@@ -2922,8 +3522,8 @@ function PoliticianProfile({
2922
3522
  return pol.photo_origin_url;
2923
3523
  })();
2924
3524
  const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
2925
- const [imgError, setImgError] = (0, import_react16.useState)(false);
2926
- (0, import_react16.useEffect)(() => {
3525
+ const [imgError, setImgError] = (0, import_react22.useState)(false);
3526
+ (0, import_react22.useEffect)(() => {
2927
3527
  setImgError(false);
2928
3528
  }, [profileImageUrl]);
2929
3529
  const getSocialHandle = (type) => {
@@ -3223,7 +3823,7 @@ function PoliticianProfile({
3223
3823
  borderRadius: borderRadius.full
3224
3824
  }
3225
3825
  };
3226
- return /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react16.default.createElement(
3826
+ return /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react22.default.createElement(
3227
3827
  "button",
3228
3828
  {
3229
3829
  type: "button",
@@ -3236,9 +3836,9 @@ function PoliticianProfile({
3236
3836
  e.currentTarget.style.textDecoration = "none";
3237
3837
  }
3238
3838
  },
3239
- /* @__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" })),
3839
+ /* @__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" })),
3240
3840
  label
3241
- ), /* @__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(
3841
+ ), /* @__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(
3242
3842
  "img",
3243
3843
  {
3244
3844
  src: profileImageUrl,
@@ -3246,7 +3846,7 @@ function PoliticianProfile({
3246
3846
  style: styles2.photo,
3247
3847
  onError: () => setImgError(true)
3248
3848
  }
3249
- ) : /* @__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(
3849
+ ) : /* @__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(
3250
3850
  "a",
3251
3851
  {
3252
3852
  href: pol.web_form_url,
@@ -3260,9 +3860,9 @@ function PoliticianProfile({
3260
3860
  e.currentTarget.style.background = colors.evTeal;
3261
3861
  }
3262
3862
  },
3263
- /* @__PURE__ */ import_react16.default.createElement(ExternalLinkIcon, { size: 14 }),
3863
+ /* @__PURE__ */ import_react22.default.createElement(ExternalLinkIcon, { size: 14 }),
3264
3864
  "Submit a Message"
3265
- ))), 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(
3865
+ ))), 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(
3266
3866
  "a",
3267
3867
  {
3268
3868
  href: `tel:${phone}`,
@@ -3275,7 +3875,7 @@ function PoliticianProfile({
3275
3875
  }
3276
3876
  },
3277
3877
  phone
3278
- )))))), 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(
3878
+ )))))), 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(
3279
3879
  "a",
3280
3880
  {
3281
3881
  href: `mailto:${email}`,
@@ -3288,7 +3888,7 @@ function PoliticianProfile({
3288
3888
  }
3289
3889
  },
3290
3890
  email
3291
- )))))), 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(
3891
+ )))))), 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(
3292
3892
  "a",
3293
3893
  {
3294
3894
  href: url,
@@ -3303,7 +3903,7 @@ function PoliticianProfile({
3303
3903
  }
3304
3904
  },
3305
3905
  extractDomain(url)
3306
- ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react16.default.createElement(
3906
+ ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react22.default.createElement(
3307
3907
  SocialLinks,
3308
3908
  {
3309
3909
  twitter,
@@ -3314,14 +3914,14 @@ function PoliticianProfile({
3314
3914
  size: "sm",
3315
3915
  style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
3316
3916
  }
3317
- )))), 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(
3917
+ )))), 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(
3318
3918
  JudicialScorecard,
3319
3919
  {
3320
3920
  judicialRecord,
3321
3921
  politicianId,
3322
3922
  onNavigateToRecord
3323
3923
  }
3324
- ) : /* @__PURE__ */ import_react16.default.createElement(
3924
+ ) : /* @__PURE__ */ import_react22.default.createElement(
3325
3925
  LegislativeInlineSummary,
3326
3926
  {
3327
3927
  summary: legislativeSummary,
@@ -3332,7 +3932,7 @@ function PoliticianProfile({
3332
3932
  }
3333
3933
 
3334
3934
  // src/LegislativeRecord.jsx
3335
- var import_react17 = __toESM(require("react"));
3935
+ var import_react23 = __toESM(require("react"));
3336
3936
  var DEFAULT_LIMIT = 25;
3337
3937
  function normalizeText(str) {
3338
3938
  if (!str) return "";
@@ -3412,7 +4012,7 @@ function getPositionBadge(position) {
3412
4012
  return { bg: colors.borderLight, text: colors.textSecondary };
3413
4013
  }
3414
4014
  function Badge({ label, bg, text }) {
3415
- return /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4015
+ return /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3416
4016
  display: "inline-block",
3417
4017
  background: bg,
3418
4018
  color: text,
@@ -3425,18 +4025,18 @@ function Badge({ label, bg, text }) {
3425
4025
  } }, label);
3426
4026
  }
3427
4027
  function SectionHeader({ title, yearFilter, years, onYearChange }) {
3428
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4028
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3429
4029
  display: "flex",
3430
4030
  alignItems: "center",
3431
4031
  justifyContent: "space-between",
3432
4032
  marginBottom: spacing[4]
3433
- } }, /* @__PURE__ */ import_react17.default.createElement("h2", { style: {
4033
+ } }, /* @__PURE__ */ import_react23.default.createElement("h2", { style: {
3434
4034
  fontFamily: fonts.primary,
3435
4035
  fontSize: fontSizes.xl,
3436
4036
  fontWeight: fontWeights.bold,
3437
4037
  color: colors.evTeal,
3438
4038
  margin: 0
3439
- } }, title), years && years.length > 0 && /* @__PURE__ */ import_react17.default.createElement(
4039
+ } }, title), years && years.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
3440
4040
  "select",
3441
4041
  {
3442
4042
  value: yearFilter,
@@ -3452,13 +4052,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
3452
4052
  cursor: "pointer"
3453
4053
  }
3454
4054
  },
3455
- /* @__PURE__ */ import_react17.default.createElement("option", { value: "All" }, "All years"),
3456
- years.map((y) => /* @__PURE__ */ import_react17.default.createElement("option", { key: y, value: y }, y))
4055
+ /* @__PURE__ */ import_react23.default.createElement("option", { value: "All" }, "All years"),
4056
+ years.map((y) => /* @__PURE__ */ import_react23.default.createElement("option", { key: y, value: y }, y))
3457
4057
  ));
3458
4058
  }
3459
4059
  function ShowAllLink({ totalCount, visibleCount, onClick }) {
3460
4060
  if (totalCount <= visibleCount) return null;
3461
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react17.default.createElement(
4061
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react23.default.createElement(
3462
4062
  "button",
3463
4063
  {
3464
4064
  type: "button",
@@ -3486,7 +4086,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
3486
4086
  ));
3487
4087
  }
3488
4088
  function EmptyState({ message }) {
3489
- return /* @__PURE__ */ import_react17.default.createElement("p", { style: {
4089
+ return /* @__PURE__ */ import_react23.default.createElement("p", { style: {
3490
4090
  fontFamily: fonts.primary,
3491
4091
  fontSize: fontSizes.sm,
3492
4092
  color: colors.textMuted,
@@ -3496,24 +4096,24 @@ function EmptyState({ message }) {
3496
4096
  } }, message);
3497
4097
  }
3498
4098
  function Spinner() {
3499
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4099
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3500
4100
  display: "flex",
3501
4101
  justifyContent: "center",
3502
4102
  alignItems: "center",
3503
4103
  padding: spacing[10]
3504
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4104
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3505
4105
  width: "40px",
3506
4106
  height: "40px",
3507
4107
  borderRadius: borderRadius.full,
3508
4108
  border: `3px solid ${colors.borderLight}`,
3509
4109
  borderTopColor: colors.evTeal,
3510
4110
  animation: "ev-spin 0.8s linear infinite"
3511
- } }), /* @__PURE__ */ import_react17.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
4111
+ } }), /* @__PURE__ */ import_react23.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
3512
4112
  }
3513
4113
  function CommitteesSection({ committees, leadership }) {
3514
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4114
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3515
4115
  const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
3516
- 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: {
4116
+ 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: {
3517
4117
  display: "inline-flex",
3518
4118
  alignItems: "center",
3519
4119
  gap: spacing[1],
@@ -3524,23 +4124,23 @@ function CommitteesSection({ committees, leadership }) {
3524
4124
  fontFamily: fonts.primary,
3525
4125
  fontSize: fontSizes.sm,
3526
4126
  fontWeight: fontWeights.semibold
3527
- } }, 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) => {
4127
+ } }, 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) => {
3528
4128
  const badge = getRoleBadge(c.role);
3529
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4129
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3530
4130
  display: "flex",
3531
4131
  alignItems: "center",
3532
4132
  justifyContent: "space-between",
3533
4133
  padding: `${spacing[3]} 0`,
3534
4134
  borderBottom: `1px solid ${colors.borderLight}`,
3535
4135
  gap: spacing[3]
3536
- } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4136
+ } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3537
4137
  fontFamily: fonts.primary,
3538
4138
  fontSize: fontSizes.sm,
3539
4139
  color: colors.textSecondary,
3540
4140
  flex: 1,
3541
4141
  minWidth: 0
3542
- } }, 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 }));
3543
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4142
+ } }, 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 }));
4143
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3544
4144
  ShowAllLink,
3545
4145
  {
3546
4146
  totalCount: committees.length,
@@ -3551,15 +4151,15 @@ function CommitteesSection({ committees, leadership }) {
3551
4151
  }
3552
4152
  function LegislationSection({ bills, isMobile }) {
3553
4153
  const years = getYears(bills, "introduced_at");
3554
- const [yearFilter, setYearFilter] = (0, import_react17.useState)("All");
3555
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4154
+ const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
4155
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3556
4156
  const handleYearChange = (y) => {
3557
4157
  setYearFilter(y);
3558
4158
  setShowAll(false);
3559
4159
  };
3560
4160
  const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
3561
4161
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
3562
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(
4162
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
3563
4163
  SectionHeader,
3564
4164
  {
3565
4165
  title: "Sponsored Legislation",
@@ -3567,42 +4167,42 @@ function LegislationSection({ bills, isMobile }) {
3567
4167
  years,
3568
4168
  onYearChange: handleYearChange
3569
4169
  }
3570
- ), 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) => {
4170
+ ), 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) => {
3571
4171
  const statusBadge = getStatusBadge(bill.status_label);
3572
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4172
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3573
4173
  display: "flex",
3574
4174
  flexDirection: isMobile ? "column" : "row",
3575
4175
  alignItems: isMobile ? "flex-start" : "center",
3576
4176
  gap: isMobile ? spacing[1] : spacing[3],
3577
4177
  padding: `${spacing[3]} 0`,
3578
4178
  borderBottom: `1px solid ${colors.borderLight}`
3579
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4179
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3580
4180
  fontFamily: fonts.primary,
3581
4181
  fontSize: fontSizes.xs,
3582
4182
  fontWeight: fontWeights.bold,
3583
4183
  color: colors.textSecondary,
3584
4184
  marginRight: spacing[2]
3585
- } }, bill.number), /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4185
+ } }, bill.number), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3586
4186
  fontFamily: fonts.primary,
3587
4187
  fontSize: fontSizes.sm,
3588
4188
  color: colors.textSecondary
3589
- } }, bill.title)), /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4189
+ } }, bill.title)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3590
4190
  display: "flex",
3591
4191
  alignItems: "center",
3592
4192
  gap: spacing[2],
3593
4193
  flexShrink: 0,
3594
4194
  flexWrap: "wrap"
3595
- } }, /* @__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: {
4195
+ } }, /* @__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: {
3596
4196
  fontFamily: fonts.primary,
3597
4197
  fontSize: fontSizes.xs,
3598
4198
  color: colors.textMuted
3599
- } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4199
+ } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3600
4200
  fontFamily: fonts.primary,
3601
4201
  fontSize: fontSizes.xs,
3602
4202
  color: colors.textMuted,
3603
4203
  fontStyle: "italic"
3604
4204
  } }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
3605
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4205
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3606
4206
  ShowAllLink,
3607
4207
  {
3608
4208
  totalCount: filtered.length,
@@ -3613,15 +4213,15 @@ function LegislationSection({ bills, isMobile }) {
3613
4213
  }
3614
4214
  function VotingSection({ votes, isMobile }) {
3615
4215
  const years = getYears(votes, "vote_date");
3616
- const [yearFilter, setYearFilter] = (0, import_react17.useState)("All");
3617
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4216
+ const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
4217
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3618
4218
  const handleYearChange = (y) => {
3619
4219
  setYearFilter(y);
3620
4220
  setShowAll(false);
3621
4221
  };
3622
4222
  const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
3623
4223
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
3624
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(
4224
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
3625
4225
  SectionHeader,
3626
4226
  {
3627
4227
  title: "Voting Record",
@@ -3629,38 +4229,38 @@ function VotingSection({ votes, isMobile }) {
3629
4229
  years,
3630
4230
  onYearChange: handleYearChange
3631
4231
  }
3632
- ), 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) => {
4232
+ ), 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) => {
3633
4233
  const positionBadge = getPositionBadge(vote.position);
3634
4234
  const normPosition = normalizeText(vote.position);
3635
4235
  const topic = vote.bill_title || vote.vote_question;
3636
4236
  const sourceUrl = vote.bill_url;
3637
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4237
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3638
4238
  display: "flex",
3639
4239
  flexDirection: isMobile ? "column" : "row",
3640
4240
  alignItems: isMobile ? "flex-start" : "center",
3641
4241
  gap: isMobile ? spacing[1] : spacing[3],
3642
4242
  padding: `${spacing[3]} 0`,
3643
4243
  borderBottom: `1px solid ${colors.borderLight}`
3644
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4244
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3645
4245
  fontFamily: fonts.primary,
3646
4246
  fontSize: fontSizes.sm,
3647
4247
  color: colors.textSecondary
3648
- } }, topic)), /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4248
+ } }, topic)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3649
4249
  display: "flex",
3650
4250
  alignItems: "center",
3651
4251
  gap: spacing[2],
3652
4252
  flexShrink: 0,
3653
4253
  flexWrap: "wrap"
3654
- } }, vote.vote_date && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4254
+ } }, vote.vote_date && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3655
4255
  fontFamily: fonts.primary,
3656
4256
  fontSize: fontSizes.xs,
3657
4257
  color: colors.textMuted
3658
- } }, 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: {
4258
+ } }, 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: {
3659
4259
  fontFamily: fonts.primary,
3660
4260
  fontSize: fontSizes.xs,
3661
4261
  color: vote.result === "Passed" ? colors.success : colors.textMuted,
3662
4262
  fontWeight: fontWeights.medium
3663
- } }, vote.result), sourceUrl && /* @__PURE__ */ import_react17.default.createElement(
4263
+ } }, vote.result), sourceUrl && /* @__PURE__ */ import_react23.default.createElement(
3664
4264
  "a",
3665
4265
  {
3666
4266
  href: sourceUrl,
@@ -3681,7 +4281,7 @@ function VotingSection({ votes, isMobile }) {
3681
4281
  },
3682
4282
  "Source"
3683
4283
  )));
3684
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4284
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3685
4285
  ShowAllLink,
3686
4286
  {
3687
4287
  totalCount: filtered.length,
@@ -3700,20 +4300,20 @@ function LegislativeRecord({
3700
4300
  }) {
3701
4301
  const isMobile = useMediaQuery("(max-width: 768px)");
3702
4302
  if (loading) {
3703
- return /* @__PURE__ */ import_react17.default.createElement(Spinner, null);
4303
+ return /* @__PURE__ */ import_react23.default.createElement(Spinner, null);
3704
4304
  }
3705
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react17.default.createElement("h1", { style: {
4305
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react23.default.createElement("h1", { style: {
3706
4306
  fontFamily: fonts.primary,
3707
4307
  fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
3708
4308
  fontWeight: fontWeights.bold,
3709
4309
  color: colors.evTeal,
3710
4310
  marginBottom: spacing[8],
3711
4311
  marginTop: 0
3712
- } }, "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 }));
4312
+ } }, "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 }));
3713
4313
  }
3714
4314
 
3715
4315
  // src/JudicialRecordDetail.jsx
3716
- var import_react18 = __toESM(require("react"));
4316
+ var import_react24 = __toESM(require("react"));
3717
4317
  var containerStyle = {
3718
4318
  fontFamily: "'Manrope', sans-serif",
3719
4319
  maxWidth: "800px"
@@ -3798,7 +4398,7 @@ var emptyStateStyle = {
3798
4398
  function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3799
4399
  var _a;
3800
4400
  if (!judicialRecord) {
3801
- 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."));
4401
+ 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."));
3802
4402
  }
3803
4403
  const {
3804
4404
  judge_detail: detail,
@@ -3807,13 +4407,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3807
4407
  disciplinary_records: disciplinary = []
3808
4408
  } = judicialRecord;
3809
4409
  const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
3810
- 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: {
4410
+ 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: {
3811
4411
  borderLeft: "3px solid #fc8181",
3812
4412
  backgroundColor: "#fff5f5",
3813
4413
  borderRadius: "0 6px 6px 0",
3814
4414
  padding: "12px 16px",
3815
4415
  marginBottom: "10px"
3816
- } }, /* @__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(
4416
+ } }, /* @__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(
3817
4417
  "a",
3818
4418
  {
3819
4419
  href: d.source_url,
@@ -3826,7 +4426,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3826
4426
  }
3827
4427
 
3828
4428
  // src/AuthForm.jsx
3829
- var import_react19 = __toESM(require("react"));
4429
+ var import_react25 = __toESM(require("react"));
3830
4430
  function AuthForm({
3831
4431
  logoSrc = "/EVLogo.svg",
3832
4432
  appName = "Empowered Vote",
@@ -3837,11 +4437,11 @@ function AuthForm({
3837
4437
  error = null,
3838
4438
  submitting = false
3839
4439
  }) {
3840
- const [username, setUsername] = (0, import_react19.useState)("");
3841
- const [password, setPassword] = (0, import_react19.useState)("");
3842
- const [confirmPassword, setConfirmPassword] = (0, import_react19.useState)("");
3843
- const [showPasswords, setShowPasswords] = (0, import_react19.useState)(false);
3844
- const [passwordMismatch, setPasswordMismatch] = (0, import_react19.useState)(false);
4440
+ const [username, setUsername] = (0, import_react25.useState)("");
4441
+ const [password, setPassword] = (0, import_react25.useState)("");
4442
+ const [confirmPassword, setConfirmPassword] = (0, import_react25.useState)("");
4443
+ const [showPasswords, setShowPasswords] = (0, import_react25.useState)(false);
4444
+ const [passwordMismatch, setPasswordMismatch] = (0, import_react25.useState)(false);
3845
4445
  const isLogin = mode === "login";
3846
4446
  const handleSubmit = (e) => {
3847
4447
  e.preventDefault();
@@ -3853,7 +4453,7 @@ function AuthForm({
3853
4453
  setPasswordMismatch(false);
3854
4454
  onSubmit == null ? void 0 : onSubmit(username.trim(), password);
3855
4455
  };
3856
- const EyeOpen = () => /* @__PURE__ */ import_react19.default.createElement(
4456
+ const EyeOpen = () => /* @__PURE__ */ import_react25.default.createElement(
3857
4457
  "svg",
3858
4458
  {
3859
4459
  xmlns: "http://www.w3.org/2000/svg",
@@ -3863,7 +4463,7 @@ function AuthForm({
3863
4463
  stroke: "currentColor",
3864
4464
  style: { width: "20px", height: "20px" }
3865
4465
  },
3866
- /* @__PURE__ */ import_react19.default.createElement(
4466
+ /* @__PURE__ */ import_react25.default.createElement(
3867
4467
  "path",
3868
4468
  {
3869
4469
  strokeLinecap: "round",
@@ -3871,7 +4471,7 @@ function AuthForm({
3871
4471
  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"
3872
4472
  }
3873
4473
  ),
3874
- /* @__PURE__ */ import_react19.default.createElement(
4474
+ /* @__PURE__ */ import_react25.default.createElement(
3875
4475
  "path",
3876
4476
  {
3877
4477
  strokeLinecap: "round",
@@ -3880,7 +4480,7 @@ function AuthForm({
3880
4480
  }
3881
4481
  )
3882
4482
  );
3883
- const EyeClosed = () => /* @__PURE__ */ import_react19.default.createElement(
4483
+ const EyeClosed = () => /* @__PURE__ */ import_react25.default.createElement(
3884
4484
  "svg",
3885
4485
  {
3886
4486
  xmlns: "http://www.w3.org/2000/svg",
@@ -3890,7 +4490,7 @@ function AuthForm({
3890
4490
  stroke: "currentColor",
3891
4491
  style: { width: "20px", height: "20px" }
3892
4492
  },
3893
- /* @__PURE__ */ import_react19.default.createElement(
4493
+ /* @__PURE__ */ import_react25.default.createElement(
3894
4494
  "path",
3895
4495
  {
3896
4496
  strokeLinecap: "round",
@@ -3899,17 +4499,17 @@ function AuthForm({
3899
4499
  }
3900
4500
  )
3901
4501
  );
3902
- const PasswordToggle = () => /* @__PURE__ */ import_react19.default.createElement(
4502
+ const PasswordToggle = () => /* @__PURE__ */ import_react25.default.createElement(
3903
4503
  "button",
3904
4504
  {
3905
4505
  type: "button",
3906
4506
  onClick: () => setShowPasswords((prev) => !prev),
3907
4507
  style: styles.passwordToggle
3908
4508
  },
3909
- showPasswords ? /* @__PURE__ */ import_react19.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react19.default.createElement(EyeClosed, null)
4509
+ showPasswords ? /* @__PURE__ */ import_react25.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react25.default.createElement(EyeClosed, null)
3910
4510
  );
3911
4511
  const displayError = passwordMismatch ? "Passwords do not match." : error;
3912
- 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(
4512
+ 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(
3913
4513
  "input",
3914
4514
  {
3915
4515
  type: "text",
@@ -3926,7 +4526,7 @@ function AuthForm({
3926
4526
  },
3927
4527
  required: true
3928
4528
  }
3929
- )), /* @__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(
4529
+ )), /* @__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(
3930
4530
  "input",
3931
4531
  {
3932
4532
  type: showPasswords ? "text" : "password",
@@ -3942,7 +4542,7 @@ function AuthForm({
3942
4542
  },
3943
4543
  required: true
3944
4544
  }
3945
- ), /* @__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(
4545
+ ), /* @__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(
3946
4546
  "input",
3947
4547
  {
3948
4548
  type: showPasswords ? "text" : "password",
@@ -3958,7 +4558,7 @@ function AuthForm({
3958
4558
  },
3959
4559
  required: true
3960
4560
  }
3961
- ), /* @__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(
4561
+ ), /* @__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(
3962
4562
  "button",
3963
4563
  {
3964
4564
  type: "submit",
@@ -3976,7 +4576,7 @@ function AuthForm({
3976
4576
  }
3977
4577
  },
3978
4578
  submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
3979
- ), 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(
4579
+ ), 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(
3980
4580
  "button",
3981
4581
  {
3982
4582
  type: "button",
@@ -4149,9 +4749,9 @@ var styles = {
4149
4749
  };
4150
4750
 
4151
4751
  // src/TopicTierBadge.jsx
4152
- var import_react20 = __toESM(require("react"));
4752
+ var import_react26 = __toESM(require("react"));
4153
4753
  function LandmarkIcon({ size = 14 }) {
4154
- return /* @__PURE__ */ import_react20.default.createElement(
4754
+ return /* @__PURE__ */ import_react26.default.createElement(
4155
4755
  "svg",
4156
4756
  {
4157
4757
  width: size,
@@ -4165,16 +4765,16 @@ function LandmarkIcon({ size = 14 }) {
4165
4765
  xmlns: "http://www.w3.org/2000/svg",
4166
4766
  "aria-hidden": "true"
4167
4767
  },
4168
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 18v-7" }),
4169
- /* @__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" }),
4170
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M14 18v-7" }),
4171
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M18 18v-7" }),
4172
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M3 22h18" }),
4173
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 18v-7" })
4768
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18v-7" }),
4769
+ /* @__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" }),
4770
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M14 18v-7" }),
4771
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 18v-7" }),
4772
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M3 22h18" }),
4773
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 18v-7" })
4174
4774
  );
4175
4775
  }
4176
4776
  function Building2Icon({ size = 14 }) {
4177
- return /* @__PURE__ */ import_react20.default.createElement(
4777
+ return /* @__PURE__ */ import_react26.default.createElement(
4178
4778
  "svg",
4179
4779
  {
4180
4780
  width: size,
@@ -4188,17 +4788,17 @@ function Building2Icon({ size = 14 }) {
4188
4788
  xmlns: "http://www.w3.org/2000/svg",
4189
4789
  "aria-hidden": "true"
4190
4790
  },
4191
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
4192
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
4193
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
4194
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 6h4" }),
4195
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 10h4" }),
4196
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 14h4" }),
4197
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 18h4" })
4791
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
4792
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
4793
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
4794
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 6h4" }),
4795
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 10h4" }),
4796
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 14h4" }),
4797
+ /* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18h4" })
4198
4798
  );
4199
4799
  }
4200
4800
  function HomeIcon({ size = 14 }) {
4201
- return /* @__PURE__ */ import_react20.default.createElement(
4801
+ return /* @__PURE__ */ import_react26.default.createElement(
4202
4802
  "svg",
4203
4803
  {
4204
4804
  width: size,
@@ -4212,8 +4812,8 @@ function HomeIcon({ size = 14 }) {
4212
4812
  xmlns: "http://www.w3.org/2000/svg",
4213
4813
  "aria-hidden": "true"
4214
4814
  },
4215
- /* @__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" }),
4216
- /* @__PURE__ */ import_react20.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
4815
+ /* @__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" }),
4816
+ /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
4217
4817
  );
4218
4818
  }
4219
4819
  var TIER_INFO = {
@@ -4273,7 +4873,7 @@ function TopicTierBadge({
4273
4873
  userSelect: "none"
4274
4874
  };
4275
4875
  };
4276
- return /* @__PURE__ */ import_react20.default.createElement(
4876
+ return /* @__PURE__ */ import_react26.default.createElement(
4277
4877
  "span",
4278
4878
  {
4279
4879
  className: "ev-topic-tier-badge",
@@ -4283,13 +4883,13 @@ function TopicTierBadge({
4283
4883
  },
4284
4884
  effectiveTiers.map((tier) => {
4285
4885
  const { label, Icon } = TIER_INFO[tier];
4286
- 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));
4886
+ 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));
4287
4887
  })
4288
4888
  );
4289
4889
  }
4290
4890
 
4291
4891
  // src/CompassCoverageCallout.jsx
4292
- var import_react21 = __toESM(require("react"));
4892
+ var import_react27 = __toESM(require("react"));
4293
4893
  var TIER_LABELS = {
4294
4894
  federal: "federal",
4295
4895
  state: "state",
@@ -4302,7 +4902,7 @@ function CompassCoverageCallout({
4302
4902
  compassUrl,
4303
4903
  onDismiss
4304
4904
  }) {
4305
- const [dismissed, setDismissed] = (0, import_react21.useState)(false);
4905
+ const [dismissed, setDismissed] = (0, import_react27.useState)(false);
4306
4906
  if (dismissed) return null;
4307
4907
  const tierLabel = TIER_LABELS[tier] || tier;
4308
4908
  const tierStyle = tierColors[tier] || tierColors.federal;
@@ -4353,15 +4953,15 @@ function CompassCoverageCallout({
4353
4953
  setDismissed(true);
4354
4954
  if (onDismiss) onDismiss();
4355
4955
  };
4356
- return /* @__PURE__ */ import_react21.default.createElement(
4956
+ return /* @__PURE__ */ import_react27.default.createElement(
4357
4957
  "div",
4358
4958
  {
4359
4959
  className: "ev-compass-coverage-callout",
4360
4960
  role: "status",
4361
4961
  style: containerStyle2
4362
4962
  },
4363
- /* @__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")),
4364
- onDismiss !== void 0 && /* @__PURE__ */ import_react21.default.createElement(
4963
+ /* @__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")),
4964
+ onDismiss !== void 0 && /* @__PURE__ */ import_react27.default.createElement(
4365
4965
  "button",
4366
4966
  {
4367
4967
  onClick: handleDismiss,
@@ -4374,7 +4974,7 @@ function CompassCoverageCallout({
4374
4974
  }
4375
4975
 
4376
4976
  // src/ExpandCompassNudge.jsx
4377
- var import_react22 = __toESM(require("react"));
4977
+ var import_react28 = __toESM(require("react"));
4378
4978
  function ExpandCompassNudge({
4379
4979
  politicianName,
4380
4980
  missingCount,
@@ -4421,7 +5021,7 @@ function ExpandCompassNudge({
4421
5021
  };
4422
5022
  const topicsLabel = missingCount === 1 ? "topic" : "topics";
4423
5023
  const speakerName = politicianName || "This politician";
4424
- 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"));
5024
+ 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"));
4425
5025
  }
4426
5026
 
4427
5027
  // src/computeTierCoverage.js
@@ -4442,14 +5042,14 @@ function computeTierCoverage(topics) {
4442
5042
  }
4443
5043
 
4444
5044
  // src/StanceAccordion.jsx
4445
- var import_react24 = __toESM(require("react"));
5045
+ var import_react30 = __toESM(require("react"));
4446
5046
 
4447
5047
  // src/Favicon.jsx
4448
- var import_react23 = __toESM(require("react"));
5048
+ var import_react29 = __toESM(require("react"));
4449
5049
  function Favicon({ url, size = 16 }) {
4450
5050
  try {
4451
5051
  const domain = new URL(url).hostname;
4452
- return /* @__PURE__ */ import_react23.default.createElement(
5052
+ return /* @__PURE__ */ import_react29.default.createElement(
4453
5053
  "img",
4454
5054
  {
4455
5055
  src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
@@ -4460,7 +5060,7 @@ function Favicon({ url, size = 16 }) {
4460
5060
  }
4461
5061
  );
4462
5062
  } catch {
4463
- return /* @__PURE__ */ import_react23.default.createElement(
5063
+ return /* @__PURE__ */ import_react29.default.createElement(
4464
5064
  "svg",
4465
5065
  {
4466
5066
  width: size,
@@ -4471,8 +5071,8 @@ function Favicon({ url, size = 16 }) {
4471
5071
  strokeWidth: "1.5",
4472
5072
  style: { verticalAlign: "middle", flexShrink: 0 }
4473
5073
  },
4474
- /* @__PURE__ */ import_react23.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4475
- /* @__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" })
5074
+ /* @__PURE__ */ import_react29.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
5075
+ /* @__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" })
4476
5076
  );
4477
5077
  }
4478
5078
  }
@@ -4503,11 +5103,11 @@ function StanceAccordion({
4503
5103
  apiUrl = "https://api.empowered.vote"
4504
5104
  }) {
4505
5105
  var _a;
4506
- const [expandedTopicId, setExpandedTopicId] = (0, import_react24.useState)(null);
4507
- const [loadingId, setLoadingId] = (0, import_react24.useState)(null);
4508
- const [showAll, setShowAll] = (0, import_react24.useState)(false);
4509
- const contextCache = (0, import_react24.useRef)(/* @__PURE__ */ new Map());
4510
- const quotesCache = (0, import_react24.useRef)(null);
5106
+ const [expandedTopicId, setExpandedTopicId] = (0, import_react30.useState)(null);
5107
+ const [loadingId, setLoadingId] = (0, import_react30.useState)(null);
5108
+ const [showAll, setShowAll] = (0, import_react30.useState)(false);
5109
+ const contextCache = (0, import_react30.useRef)(/* @__PURE__ */ new Map());
5110
+ const quotesCache = (0, import_react30.useRef)(null);
4511
5111
  const polAnswerMap = {};
4512
5112
  if (polAnswers) {
4513
5113
  polAnswers.forEach((a) => {
@@ -4566,7 +5166,7 @@ function StanceAccordion({
4566
5166
  quotesCache.current = [];
4567
5167
  }
4568
5168
  }
4569
- const handleToggle = (0, import_react24.useCallback)(
5169
+ const handleToggle = (0, import_react30.useCallback)(
4570
5170
  async (topicId) => {
4571
5171
  if (expandedTopicId === topicId) {
4572
5172
  setExpandedTopicId(null);
@@ -4583,7 +5183,7 @@ function StanceAccordion({
4583
5183
  },
4584
5184
  [expandedTopicId, politicianId, apiUrl]
4585
5185
  );
4586
- (0, import_react24.useEffect)(() => {
5186
+ (0, import_react30.useEffect)(() => {
4587
5187
  if (initialExpandedTopicId && topics && topics.length > 0) {
4588
5188
  handleToggle(String(initialExpandedTopicId));
4589
5189
  }
@@ -4599,13 +5199,13 @@ function StanceAccordion({
4599
5199
  visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
4600
5200
  }
4601
5201
  }
4602
- return /* @__PURE__ */ import_react24.default.createElement(
5202
+ return /* @__PURE__ */ import_react30.default.createElement(
4603
5203
  "div",
4604
5204
  {
4605
5205
  className: "flex flex-col",
4606
5206
  style: { fontFamily: "'Manrope', sans-serif" }
4607
5207
  },
4608
- /* @__PURE__ */ import_react24.default.createElement(
5208
+ /* @__PURE__ */ import_react30.default.createElement(
4609
5209
  "h3",
4610
5210
  {
4611
5211
  className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
@@ -4627,15 +5227,15 @@ function StanceAccordion({
4627
5227
  if (topic.topic_key) return q.issue === topic.topic_key;
4628
5228
  return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
4629
5229
  }) : [];
4630
- return /* @__PURE__ */ import_react24.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react24.default.createElement(
5230
+ return /* @__PURE__ */ import_react30.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react30.default.createElement(
4631
5231
  "button",
4632
5232
  {
4633
5233
  type: "button",
4634
5234
  onClick: () => handleToggle(topicId),
4635
5235
  className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
4636
5236
  },
4637
- /* @__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)),
4638
- /* @__PURE__ */ import_react24.default.createElement(
5237
+ /* @__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)),
5238
+ /* @__PURE__ */ import_react30.default.createElement(
4639
5239
  "svg",
4640
5240
  {
4641
5241
  width: "16",
@@ -4652,9 +5252,9 @@ function StanceAccordion({
4652
5252
  transition: "transform 0.2s ease"
4653
5253
  }
4654
5254
  },
4655
- /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "9 18 15 12 9 6" })
5255
+ /* @__PURE__ */ import_react30.default.createElement("polyline", { points: "9 18 15 12 9 6" })
4656
5256
  )
4657
- ), /* @__PURE__ */ import_react24.default.createElement(
5257
+ ), /* @__PURE__ */ import_react30.default.createElement(
4658
5258
  "div",
4659
5259
  {
4660
5260
  style: {
@@ -4663,7 +5263,7 @@ function StanceAccordion({
4663
5263
  transition: "grid-template-rows 0.25s ease"
4664
5264
  }
4665
5265
  },
4666
- /* @__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(
5266
+ /* @__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(
4667
5267
  "div",
4668
5268
  {
4669
5269
  style: {
@@ -4675,14 +5275,14 @@ function StanceAccordion({
4675
5275
  animation: "ev-spin 0.8s linear infinite"
4676
5276
  }
4677
5277
  }
4678
- )), !isLoading && cached && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react24.default.createElement(
5278
+ )), !isLoading && cached && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react30.default.createElement(
4679
5279
  "p",
4680
5280
  {
4681
5281
  className: "text-sm text-neutral-700 mb-3",
4682
5282
  style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
4683
5283
  },
4684
5284
  cached.reasoning
4685
- ) : 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(
5285
+ ) : 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(
4686
5286
  "a",
4687
5287
  {
4688
5288
  href: src,
@@ -4690,9 +5290,9 @@ function StanceAccordion({
4690
5290
  rel: "noreferrer",
4691
5291
  className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
4692
5292
  },
4693
- /* @__PURE__ */ import_react24.default.createElement(Favicon, { url: src }),
4694
- /* @__PURE__ */ import_react24.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
4695
- ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react24.default.createElement(
5293
+ /* @__PURE__ */ import_react30.default.createElement(Favicon, { url: src }),
5294
+ /* @__PURE__ */ import_react30.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
5295
+ ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react30.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react30.default.createElement(
4696
5296
  "p",
4697
5297
  {
4698
5298
  style: {
@@ -4709,7 +5309,7 @@ function StanceAccordion({
4709
5309
  const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
4710
5310
  const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
4711
5311
  const sourceName = quote.source_name || quote.sourceName;
4712
- return /* @__PURE__ */ import_react24.default.createElement(
5312
+ return /* @__PURE__ */ import_react30.default.createElement(
4713
5313
  "div",
4714
5314
  {
4715
5315
  key: quote.id,
@@ -4721,7 +5321,7 @@ function StanceAccordion({
4721
5321
  marginBottom: "8px"
4722
5322
  }
4723
5323
  },
4724
- /* @__PURE__ */ import_react24.default.createElement(
5324
+ /* @__PURE__ */ import_react30.default.createElement(
4725
5325
  "p",
4726
5326
  {
4727
5327
  style: {
@@ -4734,7 +5334,7 @@ function StanceAccordion({
4734
5334
  },
4735
5335
  quote.text
4736
5336
  ),
4737
- verdict === "agreed" && /* @__PURE__ */ import_react24.default.createElement(
5337
+ verdict === "agreed" && /* @__PURE__ */ import_react30.default.createElement(
4738
5338
  "span",
4739
5339
  {
4740
5340
  style: {
@@ -4751,10 +5351,10 @@ function StanceAccordion({
4751
5351
  flexShrink: 0
4752
5352
  }
4753
5353
  },
4754
- /* @__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" })),
5354
+ /* @__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" })),
4755
5355
  "Agreed"
4756
5356
  ),
4757
- verdict === "disagreed" && /* @__PURE__ */ import_react24.default.createElement(
5357
+ verdict === "disagreed" && /* @__PURE__ */ import_react30.default.createElement(
4758
5358
  "span",
4759
5359
  {
4760
5360
  style: {
@@ -4771,10 +5371,10 @@ function StanceAccordion({
4771
5371
  flexShrink: 0
4772
5372
  }
4773
5373
  },
4774
- /* @__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" })),
5374
+ /* @__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" })),
4775
5375
  "Disagreed"
4776
5376
  ),
4777
- sourceName && /* @__PURE__ */ import_react24.default.createElement(
5377
+ sourceName && /* @__PURE__ */ import_react30.default.createElement(
4778
5378
  "a",
4779
5379
  {
4780
5380
  href: quote.source_url || quote.sourceUrl,
@@ -4791,10 +5391,10 @@ function StanceAccordion({
4791
5391
  sourceName
4792
5392
  )
4793
5393
  );
4794
- })), !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."))))
5394
+ })), !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."))))
4795
5395
  ));
4796
5396
  }),
4797
- hasToggle && /* @__PURE__ */ import_react24.default.createElement(
5397
+ hasToggle && /* @__PURE__ */ import_react30.default.createElement(
4798
5398
  "button",
4799
5399
  {
4800
5400
  type: "button",
@@ -4806,78 +5406,6 @@ function StanceAccordion({
4806
5406
  )
4807
5407
  );
4808
5408
  }
4809
-
4810
- // src/icons.js
4811
- var import_react25 = __toESM(require("react"));
4812
- function BallotIcon({ size = 16, color = "currentColor" }) {
4813
- return /* @__PURE__ */ import_react25.default.createElement(
4814
- "svg",
4815
- {
4816
- width: size,
4817
- height: size,
4818
- viewBox: "0 0 24 24",
4819
- fill: "none",
4820
- stroke: color,
4821
- strokeWidth: "2",
4822
- strokeLinecap: "round",
4823
- strokeLinejoin: "round",
4824
- xmlns: "http://www.w3.org/2000/svg"
4825
- },
4826
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "m9 12 2 2 4-4" }),
4827
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
4828
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "M22 19H2" })
4829
- );
4830
- }
4831
- function CompassIcon({ size = 16, color = "currentColor" }) {
4832
- return /* @__PURE__ */ import_react25.default.createElement(
4833
- "svg",
4834
- {
4835
- width: size,
4836
- height: size,
4837
- viewBox: "0 0 24 24",
4838
- fill: "none",
4839
- stroke: color,
4840
- strokeWidth: "2",
4841
- strokeLinecap: "round",
4842
- strokeLinejoin: "round",
4843
- xmlns: "http://www.w3.org/2000/svg"
4844
- },
4845
- /* @__PURE__ */ import_react25.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4846
- /* @__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" })
4847
- );
4848
- }
4849
- function BranchIcon({ size = 16, color = "currentColor", branch }) {
4850
- let paths;
4851
- switch (branch) {
4852
- case "executive":
4853
- 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" }));
4854
- break;
4855
- case "legislative":
4856
- 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" }));
4857
- break;
4858
- case "judicial":
4859
- 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" }));
4860
- break;
4861
- default:
4862
- 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" }));
4863
- break;
4864
- }
4865
- return /* @__PURE__ */ import_react25.default.createElement(
4866
- "svg",
4867
- {
4868
- width: size,
4869
- height: size,
4870
- viewBox: "0 0 24 24",
4871
- fill: "none",
4872
- stroke: color,
4873
- strokeWidth: "2",
4874
- strokeLinecap: "round",
4875
- strokeLinejoin: "round",
4876
- xmlns: "http://www.w3.org/2000/svg"
4877
- },
4878
- paths
4879
- );
4880
- }
4881
5409
  // Annotate the CommonJS export names for ESM import in node:
4882
5410
  0 && (module.exports = {
4883
5411
  AuthForm,
@@ -4885,12 +5413,14 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
4885
5413
  BranchIcon,
4886
5414
  CategorySection,
4887
5415
  CommitteeTable,
5416
+ CompassCardHorizontal,
4888
5417
  CompassCoverageCallout,
4889
5418
  CompassIcon,
4890
5419
  ExpandCompassNudge,
4891
5420
  FilterSidebar,
4892
5421
  GovernmentBodySection,
4893
5422
  Header,
5423
+ IconOverlay,
4894
5424
  IssueTags,
4895
5425
  JudicialRecordDetail,
4896
5426
  JudicialScorecard,