@empoweredvote/ev-ui 0.4.5 → 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
  }
@@ -1622,8 +1624,7 @@ function PoliticianCard({
1622
1624
  },
1623
1625
  imageWrapper: {
1624
1626
  width: isHorizontal ? "90px" : "100%",
1625
- height: isHorizontal ? "100%" : "auto",
1626
- maxHeight: isHorizontal ? "200px" : void 0,
1627
+ height: isHorizontal ? void 0 : "auto",
1627
1628
  aspectRatio: isHorizontal ? void 0 : "4/5",
1628
1629
  flexShrink: 0,
1629
1630
  overflow: "hidden"
@@ -1841,8 +1842,606 @@ function PoliticianCard({
1841
1842
  );
1842
1843
  }
1843
1844
 
1844
- // src/CategorySection.jsx
1845
+ // src/CompassCardHorizontal.jsx
1846
+ var import_react13 = __toESM(require("react"));
1847
+
1848
+ // src/PlaceholderRadar.jsx
1845
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"));
1846
2445
  function CategorySection({
1847
2446
  title,
1848
2447
  infoTooltip,
@@ -1852,7 +2451,7 @@ function CategorySection({
1852
2451
  tier
1853
2452
  }) {
1854
2453
  var _a, _b;
1855
- const [showTooltip, setShowTooltip] = (0, import_react8.useState)(false);
2454
+ const [showTooltip, setShowTooltip] = (0, import_react14.useState)(false);
1856
2455
  const tierStyle = tier ? tierColors[tier] : null;
1857
2456
  const styles2 = {
1858
2457
  section: {
@@ -1920,7 +2519,7 @@ function CategorySection({
1920
2519
  gap: spacing[4]
1921
2520
  }
1922
2521
  };
1923
- return /* @__PURE__ */ import_react8.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react8.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react8.default.createElement(
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(
1924
2523
  "button",
1925
2524
  {
1926
2525
  type: "button",
@@ -1932,8 +2531,8 @@ function CategorySection({
1932
2531
  "aria-label": `Info about ${title}`
1933
2532
  },
1934
2533
  "i",
1935
- showTooltip && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
1936
- ), 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(
1937
2536
  "a",
1938
2537
  {
1939
2538
  href: websiteUrl,
@@ -1942,7 +2541,7 @@ function CategorySection({
1942
2541
  style: styles2.externalLink,
1943
2542
  "aria-label": `Visit official website for ${title}`
1944
2543
  },
1945
- /* @__PURE__ */ import_react8.default.createElement(
2544
+ /* @__PURE__ */ import_react14.default.createElement(
1946
2545
  "svg",
1947
2546
  {
1948
2547
  viewBox: "0 0 24 24",
@@ -1950,7 +2549,7 @@ function CategorySection({
1950
2549
  xmlns: "http://www.w3.org/2000/svg",
1951
2550
  style: { width: "14px", height: "14px" }
1952
2551
  },
1953
- /* @__PURE__ */ import_react8.default.createElement(
2552
+ /* @__PURE__ */ import_react14.default.createElement(
1954
2553
  "path",
1955
2554
  {
1956
2555
  d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
@@ -1961,11 +2560,11 @@ function CategorySection({
1961
2560
  }
1962
2561
  )
1963
2562
  )
1964
- )), /* @__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));
1965
2564
  }
1966
2565
 
1967
2566
  // src/SubGroupSection.jsx
1968
- var import_react9 = __toESM(require("react"));
2567
+ var import_react15 = __toESM(require("react"));
1969
2568
  function SubGroupSection({ title, websiteUrl, children }) {
1970
2569
  const styles2 = {
1971
2570
  section: {
@@ -1998,7 +2597,7 @@ function SubGroupSection({ title, websiteUrl, children }) {
1998
2597
  gap: spacing[2]
1999
2598
  }
2000
2599
  };
2001
- return /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react9.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react9.default.createElement(
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(
2002
2601
  "a",
2003
2602
  {
2004
2603
  href: websiteUrl,
@@ -2006,12 +2605,12 @@ function SubGroupSection({ title, websiteUrl, children }) {
2006
2605
  rel: "noopener noreferrer",
2007
2606
  style: styles2.link
2008
2607
  },
2009
- /* @__PURE__ */ import_react9.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
2010
- )), /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
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));
2011
2610
  }
2012
2611
 
2013
2612
  // src/GovernmentBodySection.jsx
2014
- var import_react10 = __toESM(require("react"));
2613
+ var import_react16 = __toESM(require("react"));
2015
2614
  function GovernmentBodySection({
2016
2615
  title,
2017
2616
  websiteUrl,
@@ -2020,7 +2619,7 @@ function GovernmentBodySection({
2020
2619
  children
2021
2620
  }) {
2022
2621
  var _a;
2023
- const [expanded, setExpanded] = (0, import_react10.useState)(defaultExpanded);
2622
+ const [expanded, setExpanded] = (0, import_react16.useState)(defaultExpanded);
2024
2623
  const tierStyle = tier ? tierColors[tier] : null;
2025
2624
  const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
2026
2625
  const styles2 = {
@@ -2060,7 +2659,7 @@ function GovernmentBodySection({
2060
2659
  display: expanded ? "block" : "none"
2061
2660
  }
2062
2661
  };
2063
- 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(
2064
2663
  "div",
2065
2664
  {
2066
2665
  style: styles2.header,
@@ -2076,8 +2675,8 @@ function GovernmentBodySection({
2076
2675
  "aria-expanded": expanded,
2077
2676
  "aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
2078
2677
  },
2079
- /* @__PURE__ */ import_react10.default.createElement("span", { style: styles2.title }, title),
2080
- websiteUrl && /* @__PURE__ */ import_react10.default.createElement(
2678
+ /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.title }, title),
2679
+ websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
2081
2680
  "a",
2082
2681
  {
2083
2682
  href: websiteUrl,
@@ -2087,14 +2686,14 @@ function GovernmentBodySection({
2087
2686
  onClick: (e) => e.stopPropagation(),
2088
2687
  "aria-label": `Visit ${title} website`
2089
2688
  },
2090
- /* @__PURE__ */ import_react10.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react10.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react10.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
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" }))
2091
2690
  ),
2092
- /* @__PURE__ */ import_react10.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
2093
- ), /* @__PURE__ */ import_react10.default.createElement("div", { style: styles2.content }, children));
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));
2094
2693
  }
2095
2694
 
2096
2695
  // src/SocialLinks.jsx
2097
- var import_react11 = __toESM(require("react"));
2696
+ var import_react17 = __toESM(require("react"));
2098
2697
  var SOCIAL_PLATFORMS = [
2099
2698
  { test: /facebook\.com/i, platform: "facebook" },
2100
2699
  { test: /twitter\.com|x\.com/i, platform: "twitter" },
@@ -2165,7 +2764,7 @@ function SocialLinks({
2165
2764
  }
2166
2765
  };
2167
2766
  const platformIconMap = {
2168
- twitter: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement(
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(
2169
2768
  "path",
2170
2769
  {
2171
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",
@@ -2175,7 +2774,7 @@ function SocialLinks({
2175
2774
  strokeLinejoin: "round"
2176
2775
  }
2177
2776
  )),
2178
- facebook: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement(
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(
2179
2778
  "path",
2180
2779
  {
2181
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",
@@ -2185,8 +2784,8 @@ function SocialLinks({
2185
2784
  strokeLinejoin: "round"
2186
2785
  }
2187
2786
  )),
2188
- instagram: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
2189
- linkedin: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement(
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(
2190
2789
  "path",
2191
2790
  {
2192
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",
@@ -2195,8 +2794,8 @@ function SocialLinks({
2195
2794
  strokeLinecap: "round",
2196
2795
  strokeLinejoin: "round"
2197
2796
  }
2198
- ), /* @__PURE__ */ import_react11.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
2199
- youtube: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
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" }))
2200
2799
  };
2201
2800
  const links = [
2202
2801
  {
@@ -2222,7 +2821,7 @@ function SocialLinks({
2222
2821
  {
2223
2822
  href: website,
2224
2823
  label: "Website",
2225
- icon: /* @__PURE__ */ import_react11.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react11.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react11.default.createElement(
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(
2226
2825
  "path",
2227
2826
  {
2228
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",
@@ -2252,7 +2851,7 @@ function SocialLinks({
2252
2851
  if (links.length === 0) {
2253
2852
  return null;
2254
2853
  }
2255
- 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(
2256
2855
  "a",
2257
2856
  {
2258
2857
  key: link.label,
@@ -2275,7 +2874,7 @@ function SocialLinks({
2275
2874
  }
2276
2875
 
2277
2876
  // src/IssueTags.jsx
2278
- var import_react12 = __toESM(require("react"));
2877
+ var import_react18 = __toESM(require("react"));
2279
2878
  function IssueTags({
2280
2879
  tags = [],
2281
2880
  selectedTags = [],
@@ -2318,9 +2917,9 @@ function IssueTags({
2318
2917
  onTagClick(tag.value);
2319
2918
  }
2320
2919
  };
2321
- 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) => {
2322
2921
  const isSelected = selectedTags.includes(tag.value);
2323
- return /* @__PURE__ */ import_react12.default.createElement(
2922
+ return /* @__PURE__ */ import_react18.default.createElement(
2324
2923
  "span",
2325
2924
  {
2326
2925
  key: tag.value,
@@ -2349,7 +2948,7 @@ function IssueTags({
2349
2948
  }
2350
2949
 
2351
2950
  // src/CommitteeTable.jsx
2352
- var import_react13 = __toESM(require("react"));
2951
+ var import_react19 = __toESM(require("react"));
2353
2952
  var ROLE_ORDER = {
2354
2953
  "chair": 0,
2355
2954
  "co-chair": 1,
@@ -2376,7 +2975,7 @@ function CommitteeTable({
2376
2975
  maxVisible = 6,
2377
2976
  style = {}
2378
2977
  }) {
2379
- const [showAll, setShowAll] = (0, import_react13.useState)(false);
2978
+ const [showAll, setShowAll] = (0, import_react19.useState)(false);
2380
2979
  if (committees.length === 0) {
2381
2980
  return null;
2382
2981
  }
@@ -2438,7 +3037,7 @@ function CommitteeTable({
2438
3037
  cursor: "pointer"
2439
3038
  }
2440
3039
  };
2441
- return /* @__PURE__ */ import_react13.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react13.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react13.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react13.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react13.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react13.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react13.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react13.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react13.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react13.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react13.default.createElement(
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(
2442
3041
  "a",
2443
3042
  {
2444
3043
  href: committee.url,
@@ -2453,7 +3052,7 @@ function CommitteeTable({
2453
3052
  }
2454
3053
  },
2455
3054
  committee.name
2456
- ) : committee.name), /* @__PURE__ */ import_react13.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react13.default.createElement(
3055
+ ) : committee.name), /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react19.default.createElement(
2457
3056
  "button",
2458
3057
  {
2459
3058
  type: "button",
@@ -2461,7 +3060,7 @@ function CommitteeTable({
2461
3060
  onClick: () => setShowAll(!showAll)
2462
3061
  },
2463
3062
  showAll ? "Show less" : `Show all ${sorted.length} committees`,
2464
- /* @__PURE__ */ import_react13.default.createElement(
3063
+ /* @__PURE__ */ import_react19.default.createElement(
2465
3064
  "svg",
2466
3065
  {
2467
3066
  width: "14",
@@ -2474,16 +3073,16 @@ function CommitteeTable({
2474
3073
  strokeLinejoin: "round",
2475
3074
  style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
2476
3075
  },
2477
- /* @__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" })
2478
3077
  )
2479
3078
  ));
2480
3079
  }
2481
3080
 
2482
3081
  // src/PoliticianProfile.jsx
2483
- var import_react16 = __toESM(require("react"));
3082
+ var import_react22 = __toESM(require("react"));
2484
3083
 
2485
3084
  // src/LegislativeInlineSummary.jsx
2486
- var import_react14 = __toESM(require("react"));
3085
+ var import_react20 = __toESM(require("react"));
2487
3086
  function normalizePosition(pos) {
2488
3087
  if (!pos) return "";
2489
3088
  return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -2591,7 +3190,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
2591
3190
  fontSize: fontSizes.sm,
2592
3191
  fontWeight: fontWeights.medium
2593
3192
  };
2594
- return /* @__PURE__ */ import_react14.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react14.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react14.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react14.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react14.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react14.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react14.default.createElement("div", null), /* @__PURE__ */ import_react14.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react14.default.createElement(
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(
2595
3194
  "button",
2596
3195
  {
2597
3196
  onClick: () => {
@@ -2616,12 +3215,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
2616
3215
  }
2617
3216
  },
2618
3217
  "View Full Legislative Record",
2619
- /* @__PURE__ */ import_react14.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react14.default.createElement("path", { d: "M9 18l6-6-6-6" }))
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" }))
2620
3219
  )));
2621
3220
  }
2622
3221
 
2623
3222
  // src/JudicialScorecard.jsx
2624
- var import_react15 = __toESM(require("react"));
3223
+ var import_react21 = __toESM(require("react"));
2625
3224
 
2626
3225
  // src/judicialUtils.js
2627
3226
  function formatDate(dateStr) {
@@ -2739,7 +3338,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
2739
3338
  onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
2740
3339
  }
2741
3340
  };
2742
- return /* @__PURE__ */ import_react15.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react15.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react15.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react15.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react15.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react15.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react15.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react15.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react15.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
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"));
2743
3342
  }
2744
3343
 
2745
3344
  // src/PoliticianProfile.jsx
@@ -2890,13 +3489,13 @@ function formatAddress(addr) {
2890
3489
  if (cityStateZip) lines.push(cityStateZip);
2891
3490
  return lines;
2892
3491
  }
2893
- var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
2894
- var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react16.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
2895
- var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
2896
- var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.8 19.79 19.79 0 01.07 2.18 2 2 0 012.02 0h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L6.09 7.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" }));
2897
- var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M4 4H20C21.1 4 22 4.9 22 6V18C22 19.1 21.1 20 20 20H4C2.9 20 2 19.1 2 18V6C2 4.9 2.9 4 4 4Z" }), /* @__PURE__ */ import_react16.default.createElement("path", { d: "M22 6L12 13L2 6" }));
2898
- var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react16.default.createElement("path", { d: "M2 12H22M12 2C14.5 4.5 16 8 16 12C16 16 14.5 19.5 12 22C9.5 19.5 8 16 8 12C8 8 9.5 4.5 12 2Z" }));
2899
- var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react16.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react16.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react16.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
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" }));
2900
3499
  function PoliticianProfile({
2901
3500
  politician = {},
2902
3501
  onBack,
@@ -2923,8 +3522,8 @@ function PoliticianProfile({
2923
3522
  return pol.photo_origin_url;
2924
3523
  })();
2925
3524
  const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
2926
- const [imgError, setImgError] = (0, import_react16.useState)(false);
2927
- (0, import_react16.useEffect)(() => {
3525
+ const [imgError, setImgError] = (0, import_react22.useState)(false);
3526
+ (0, import_react22.useEffect)(() => {
2928
3527
  setImgError(false);
2929
3528
  }, [profileImageUrl]);
2930
3529
  const getSocialHandle = (type) => {
@@ -3224,7 +3823,7 @@ function PoliticianProfile({
3224
3823
  borderRadius: borderRadius.full
3225
3824
  }
3226
3825
  };
3227
- 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(
3228
3827
  "button",
3229
3828
  {
3230
3829
  type: "button",
@@ -3237,9 +3836,9 @@ function PoliticianProfile({
3237
3836
  e.currentTarget.style.textDecoration = "none";
3238
3837
  }
3239
3838
  },
3240
- /* @__PURE__ */ import_react16.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react16.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
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" })),
3241
3840
  label
3242
- ), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react16.default.createElement(
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(
3243
3842
  "img",
3244
3843
  {
3245
3844
  src: profileImageUrl,
@@ -3247,7 +3846,7 @@ function PoliticianProfile({
3247
3846
  style: styles2.photo,
3248
3847
  onError: () => setImgError(true)
3249
3848
  }
3250
- ) : /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react16.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react16.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react16.default.createElement(ClockIcon, { size: 14 }), pol.total_years_in_office, " ", pol.total_years_in_office === 1 ? "year" : "years", " in office")), pol.web_form_url && /* @__PURE__ */ import_react16.default.createElement(
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(
3251
3850
  "a",
3252
3851
  {
3253
3852
  href: pol.web_form_url,
@@ -3261,9 +3860,9 @@ function PoliticianProfile({
3261
3860
  e.currentTarget.style.background = colors.evTeal;
3262
3861
  }
3263
3862
  },
3264
- /* @__PURE__ */ import_react16.default.createElement(ExternalLinkIcon, { size: 14 }),
3863
+ /* @__PURE__ */ import_react22.default.createElement(ExternalLinkIcon, { size: 14 }),
3265
3864
  "Submit a Message"
3266
- ))), hasContactInfo && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react16.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react16.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react16.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react16.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react16.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react16.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react16.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react16.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react16.default.createElement(
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(
3267
3866
  "a",
3268
3867
  {
3269
3868
  href: `tel:${phone}`,
@@ -3276,7 +3875,7 @@ function PoliticianProfile({
3276
3875
  }
3277
3876
  },
3278
3877
  phone
3279
- )))))), hasEmails && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react16.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react16.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), emails.filter((e) => e && e.trim()).map((email, j) => /* @__PURE__ */ import_react16.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react16.default.createElement(
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(
3280
3879
  "a",
3281
3880
  {
3282
3881
  href: `mailto:${email}`,
@@ -3289,7 +3888,7 @@ function PoliticianProfile({
3289
3888
  }
3290
3889
  },
3291
3890
  email
3292
- )))))), hasWebsitesCol && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react16.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react16.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react16.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react16.default.createElement(
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(
3293
3892
  "a",
3294
3893
  {
3295
3894
  href: url,
@@ -3304,7 +3903,7 @@ function PoliticianProfile({
3304
3903
  }
3305
3904
  },
3306
3905
  extractDomain(url)
3307
- ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react16.default.createElement(
3906
+ ))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react22.default.createElement(
3308
3907
  SocialLinks,
3309
3908
  {
3310
3909
  twitter,
@@ -3315,14 +3914,14 @@ function PoliticianProfile({
3315
3914
  size: "sm",
3316
3915
  style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
3317
3916
  }
3318
- )))), committees.length > 0 && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react16.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react16.default.createElement(
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(
3319
3918
  JudicialScorecard,
3320
3919
  {
3321
3920
  judicialRecord,
3322
3921
  politicianId,
3323
3922
  onNavigateToRecord
3324
3923
  }
3325
- ) : /* @__PURE__ */ import_react16.default.createElement(
3924
+ ) : /* @__PURE__ */ import_react22.default.createElement(
3326
3925
  LegislativeInlineSummary,
3327
3926
  {
3328
3927
  summary: legislativeSummary,
@@ -3333,7 +3932,7 @@ function PoliticianProfile({
3333
3932
  }
3334
3933
 
3335
3934
  // src/LegislativeRecord.jsx
3336
- var import_react17 = __toESM(require("react"));
3935
+ var import_react23 = __toESM(require("react"));
3337
3936
  var DEFAULT_LIMIT = 25;
3338
3937
  function normalizeText(str) {
3339
3938
  if (!str) return "";
@@ -3413,7 +4012,7 @@ function getPositionBadge(position) {
3413
4012
  return { bg: colors.borderLight, text: colors.textSecondary };
3414
4013
  }
3415
4014
  function Badge({ label, bg, text }) {
3416
- return /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4015
+ return /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3417
4016
  display: "inline-block",
3418
4017
  background: bg,
3419
4018
  color: text,
@@ -3426,18 +4025,18 @@ function Badge({ label, bg, text }) {
3426
4025
  } }, label);
3427
4026
  }
3428
4027
  function SectionHeader({ title, yearFilter, years, onYearChange }) {
3429
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4028
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3430
4029
  display: "flex",
3431
4030
  alignItems: "center",
3432
4031
  justifyContent: "space-between",
3433
4032
  marginBottom: spacing[4]
3434
- } }, /* @__PURE__ */ import_react17.default.createElement("h2", { style: {
4033
+ } }, /* @__PURE__ */ import_react23.default.createElement("h2", { style: {
3435
4034
  fontFamily: fonts.primary,
3436
4035
  fontSize: fontSizes.xl,
3437
4036
  fontWeight: fontWeights.bold,
3438
4037
  color: colors.evTeal,
3439
4038
  margin: 0
3440
- } }, title), years && years.length > 0 && /* @__PURE__ */ import_react17.default.createElement(
4039
+ } }, title), years && years.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
3441
4040
  "select",
3442
4041
  {
3443
4042
  value: yearFilter,
@@ -3453,13 +4052,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
3453
4052
  cursor: "pointer"
3454
4053
  }
3455
4054
  },
3456
- /* @__PURE__ */ import_react17.default.createElement("option", { value: "All" }, "All years"),
3457
- years.map((y) => /* @__PURE__ */ import_react17.default.createElement("option", { key: y, value: y }, y))
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))
3458
4057
  ));
3459
4058
  }
3460
4059
  function ShowAllLink({ totalCount, visibleCount, onClick }) {
3461
4060
  if (totalCount <= visibleCount) return null;
3462
- 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(
3463
4062
  "button",
3464
4063
  {
3465
4064
  type: "button",
@@ -3487,7 +4086,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
3487
4086
  ));
3488
4087
  }
3489
4088
  function EmptyState({ message }) {
3490
- return /* @__PURE__ */ import_react17.default.createElement("p", { style: {
4089
+ return /* @__PURE__ */ import_react23.default.createElement("p", { style: {
3491
4090
  fontFamily: fonts.primary,
3492
4091
  fontSize: fontSizes.sm,
3493
4092
  color: colors.textMuted,
@@ -3497,24 +4096,24 @@ function EmptyState({ message }) {
3497
4096
  } }, message);
3498
4097
  }
3499
4098
  function Spinner() {
3500
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4099
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3501
4100
  display: "flex",
3502
4101
  justifyContent: "center",
3503
4102
  alignItems: "center",
3504
4103
  padding: spacing[10]
3505
- } }, /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4104
+ } }, /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3506
4105
  width: "40px",
3507
4106
  height: "40px",
3508
4107
  borderRadius: borderRadius.full,
3509
4108
  border: `3px solid ${colors.borderLight}`,
3510
4109
  borderTopColor: colors.evTeal,
3511
4110
  animation: "ev-spin 0.8s linear infinite"
3512
- } }), /* @__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); } }`));
3513
4112
  }
3514
4113
  function CommitteesSection({ committees, leadership }) {
3515
- const [showAll, setShowAll] = (0, import_react17.useState)(false);
4114
+ const [showAll, setShowAll] = (0, import_react23.useState)(false);
3516
4115
  const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
3517
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react17.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
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: {
3518
4117
  display: "inline-flex",
3519
4118
  alignItems: "center",
3520
4119
  gap: spacing[1],
@@ -3525,23 +4124,23 @@ function CommitteesSection({ committees, leadership }) {
3525
4124
  fontFamily: fonts.primary,
3526
4125
  fontSize: fontSizes.sm,
3527
4126
  fontWeight: fontWeights.semibold
3528
- } }, role.title, role.chamber && /* @__PURE__ */ import_react17.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react17.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", null, visible.map((c, i) => {
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) => {
3529
4128
  const badge = getRoleBadge(c.role);
3530
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4129
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3531
4130
  display: "flex",
3532
4131
  alignItems: "center",
3533
4132
  justifyContent: "space-between",
3534
4133
  padding: `${spacing[3]} 0`,
3535
4134
  borderBottom: `1px solid ${colors.borderLight}`,
3536
4135
  gap: spacing[3]
3537
- } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4136
+ } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3538
4137
  fontFamily: fonts.primary,
3539
4138
  fontSize: fontSizes.sm,
3540
4139
  color: colors.textSecondary,
3541
4140
  flex: 1,
3542
4141
  minWidth: 0
3543
- } }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react17.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react17.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
3544
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
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(
3545
4144
  ShowAllLink,
3546
4145
  {
3547
4146
  totalCount: committees.length,
@@ -3552,15 +4151,15 @@ function CommitteesSection({ committees, leadership }) {
3552
4151
  }
3553
4152
  function LegislationSection({ bills, isMobile }) {
3554
4153
  const years = getYears(bills, "introduced_at");
3555
- const [yearFilter, setYearFilter] = (0, import_react17.useState)("All");
3556
- 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);
3557
4156
  const handleYearChange = (y) => {
3558
4157
  setYearFilter(y);
3559
4158
  setShowAll(false);
3560
4159
  };
3561
4160
  const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
3562
4161
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
3563
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(
4162
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
3564
4163
  SectionHeader,
3565
4164
  {
3566
4165
  title: "Sponsored Legislation",
@@ -3568,42 +4167,42 @@ function LegislationSection({ bills, isMobile }) {
3568
4167
  years,
3569
4168
  onYearChange: handleYearChange
3570
4169
  }
3571
- ), bills.length === 0 ? /* @__PURE__ */ import_react17.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", null, visible.map((bill, i) => {
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) => {
3572
4171
  const statusBadge = getStatusBadge(bill.status_label);
3573
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4172
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3574
4173
  display: "flex",
3575
4174
  flexDirection: isMobile ? "column" : "row",
3576
4175
  alignItems: isMobile ? "flex-start" : "center",
3577
4176
  gap: isMobile ? spacing[1] : spacing[3],
3578
4177
  padding: `${spacing[3]} 0`,
3579
4178
  borderBottom: `1px solid ${colors.borderLight}`
3580
- } }, /* @__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: {
3581
4180
  fontFamily: fonts.primary,
3582
4181
  fontSize: fontSizes.xs,
3583
4182
  fontWeight: fontWeights.bold,
3584
4183
  color: colors.textSecondary,
3585
4184
  marginRight: spacing[2]
3586
- } }, bill.number), /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4185
+ } }, bill.number), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3587
4186
  fontFamily: fonts.primary,
3588
4187
  fontSize: fontSizes.sm,
3589
4188
  color: colors.textSecondary
3590
- } }, bill.title)), /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4189
+ } }, bill.title)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3591
4190
  display: "flex",
3592
4191
  alignItems: "center",
3593
4192
  gap: spacing[2],
3594
4193
  flexShrink: 0,
3595
4194
  flexWrap: "wrap"
3596
- } }, /* @__PURE__ */ import_react17.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
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: {
3597
4196
  fontFamily: fonts.primary,
3598
4197
  fontSize: fontSizes.xs,
3599
4198
  color: colors.textMuted
3600
- } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4199
+ } }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3601
4200
  fontFamily: fonts.primary,
3602
4201
  fontSize: fontSizes.xs,
3603
4202
  color: colors.textMuted,
3604
4203
  fontStyle: "italic"
3605
4204
  } }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
3606
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4205
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3607
4206
  ShowAllLink,
3608
4207
  {
3609
4208
  totalCount: filtered.length,
@@ -3614,15 +4213,15 @@ function LegislationSection({ bills, isMobile }) {
3614
4213
  }
3615
4214
  function VotingSection({ votes, isMobile }) {
3616
4215
  const years = getYears(votes, "vote_date");
3617
- const [yearFilter, setYearFilter] = (0, import_react17.useState)("All");
3618
- 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);
3619
4218
  const handleYearChange = (y) => {
3620
4219
  setYearFilter(y);
3621
4220
  setShowAll(false);
3622
4221
  };
3623
4222
  const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
3624
4223
  const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
3625
- return /* @__PURE__ */ import_react17.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react17.default.createElement(
4224
+ return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
3626
4225
  SectionHeader,
3627
4226
  {
3628
4227
  title: "Voting Record",
@@ -3630,38 +4229,38 @@ function VotingSection({ votes, isMobile }) {
3630
4229
  years,
3631
4230
  onYearChange: handleYearChange
3632
4231
  }
3633
- ), votes.length === 0 ? /* @__PURE__ */ import_react17.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", null, visible.map((vote, i) => {
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) => {
3634
4233
  const positionBadge = getPositionBadge(vote.position);
3635
4234
  const normPosition = normalizeText(vote.position);
3636
4235
  const topic = vote.bill_title || vote.vote_question;
3637
4236
  const sourceUrl = vote.bill_url;
3638
- return /* @__PURE__ */ import_react17.default.createElement("div", { key: i, style: {
4237
+ return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
3639
4238
  display: "flex",
3640
4239
  flexDirection: isMobile ? "column" : "row",
3641
4240
  alignItems: isMobile ? "flex-start" : "center",
3642
4241
  gap: isMobile ? spacing[1] : spacing[3],
3643
4242
  padding: `${spacing[3]} 0`,
3644
4243
  borderBottom: `1px solid ${colors.borderLight}`
3645
- } }, /* @__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: {
3646
4245
  fontFamily: fonts.primary,
3647
4246
  fontSize: fontSizes.sm,
3648
4247
  color: colors.textSecondary
3649
- } }, topic)), /* @__PURE__ */ import_react17.default.createElement("div", { style: {
4248
+ } }, topic)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
3650
4249
  display: "flex",
3651
4250
  alignItems: "center",
3652
4251
  gap: spacing[2],
3653
4252
  flexShrink: 0,
3654
4253
  flexWrap: "wrap"
3655
- } }, vote.vote_date && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
4254
+ } }, vote.vote_date && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
3656
4255
  fontFamily: fonts.primary,
3657
4256
  fontSize: fontSizes.xs,
3658
4257
  color: colors.textMuted
3659
- } }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react17.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
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: {
3660
4259
  fontFamily: fonts.primary,
3661
4260
  fontSize: fontSizes.xs,
3662
4261
  color: vote.result === "Passed" ? colors.success : colors.textMuted,
3663
4262
  fontWeight: fontWeights.medium
3664
- } }, vote.result), sourceUrl && /* @__PURE__ */ import_react17.default.createElement(
4263
+ } }, vote.result), sourceUrl && /* @__PURE__ */ import_react23.default.createElement(
3665
4264
  "a",
3666
4265
  {
3667
4266
  href: sourceUrl,
@@ -3682,7 +4281,7 @@ function VotingSection({ votes, isMobile }) {
3682
4281
  },
3683
4282
  "Source"
3684
4283
  )));
3685
- })), !showAll && /* @__PURE__ */ import_react17.default.createElement(
4284
+ })), !showAll && /* @__PURE__ */ import_react23.default.createElement(
3686
4285
  ShowAllLink,
3687
4286
  {
3688
4287
  totalCount: filtered.length,
@@ -3701,20 +4300,20 @@ function LegislativeRecord({
3701
4300
  }) {
3702
4301
  const isMobile = useMediaQuery("(max-width: 768px)");
3703
4302
  if (loading) {
3704
- return /* @__PURE__ */ import_react17.default.createElement(Spinner, null);
4303
+ return /* @__PURE__ */ import_react23.default.createElement(Spinner, null);
3705
4304
  }
3706
- 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: {
3707
4306
  fontFamily: fonts.primary,
3708
4307
  fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
3709
4308
  fontWeight: fontWeights.bold,
3710
4309
  color: colors.evTeal,
3711
4310
  marginBottom: spacing[8],
3712
4311
  marginTop: 0
3713
- } }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react17.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react17.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react17.default.createElement(VotingSection, { votes, isMobile }));
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 }));
3714
4313
  }
3715
4314
 
3716
4315
  // src/JudicialRecordDetail.jsx
3717
- var import_react18 = __toESM(require("react"));
4316
+ var import_react24 = __toESM(require("react"));
3718
4317
  var containerStyle = {
3719
4318
  fontFamily: "'Manrope', sans-serif",
3720
4319
  maxWidth: "800px"
@@ -3799,7 +4398,7 @@ var emptyStateStyle = {
3799
4398
  function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3800
4399
  var _a;
3801
4400
  if (!judicialRecord) {
3802
- return /* @__PURE__ */ import_react18.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react18.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react18.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
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."));
3803
4402
  }
3804
4403
  const {
3805
4404
  judge_detail: detail,
@@ -3808,13 +4407,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3808
4407
  disciplinary_records: disciplinary = []
3809
4408
  } = judicialRecord;
3810
4409
  const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
3811
- return /* @__PURE__ */ import_react18.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react18.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react18.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react18.default.createElement("p", { style: roleStyle }, (detail == null ? void 0 : detail.court_role) || politician.office_title, (detail == null ? void 0 : detail.date_seated) && ` \xB7 Seated ${formatDate(detail.date_seated)}`), detail && /* @__PURE__ */ import_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.election_type === "retention" ? "Retention (Yes/No)" : "Contested Election")), ((_a = detail.areas_of_focus) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ import_react18.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react18.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react18.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react18.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react18.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react18.default.createElement("thead", null, /* @__PURE__ */ import_react18.default.createElement("tr", null, /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react18.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react18.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react18.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react18.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react18.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react18.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react18.default.createElement("thead", null, /* @__PURE__ */ import_react18.default.createElement("tr", null, /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react18.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react18.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react18.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react18.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react18.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react18.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react18.default.createElement("div", { key: i, style: {
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: {
3812
4411
  borderLeft: "3px solid #fc8181",
3813
4412
  backgroundColor: "#fff5f5",
3814
4413
  borderRadius: "0 6px 6px 0",
3815
4414
  padding: "12px 16px",
3816
4415
  marginBottom: "10px"
3817
- } }, /* @__PURE__ */ import_react18.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react18.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react18.default.createElement(
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(
3818
4417
  "a",
3819
4418
  {
3820
4419
  href: d.source_url,
@@ -3827,7 +4426,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
3827
4426
  }
3828
4427
 
3829
4428
  // src/AuthForm.jsx
3830
- var import_react19 = __toESM(require("react"));
4429
+ var import_react25 = __toESM(require("react"));
3831
4430
  function AuthForm({
3832
4431
  logoSrc = "/EVLogo.svg",
3833
4432
  appName = "Empowered Vote",
@@ -3838,11 +4437,11 @@ function AuthForm({
3838
4437
  error = null,
3839
4438
  submitting = false
3840
4439
  }) {
3841
- const [username, setUsername] = (0, import_react19.useState)("");
3842
- const [password, setPassword] = (0, import_react19.useState)("");
3843
- const [confirmPassword, setConfirmPassword] = (0, import_react19.useState)("");
3844
- const [showPasswords, setShowPasswords] = (0, import_react19.useState)(false);
3845
- const [passwordMismatch, setPasswordMismatch] = (0, import_react19.useState)(false);
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);
3846
4445
  const isLogin = mode === "login";
3847
4446
  const handleSubmit = (e) => {
3848
4447
  e.preventDefault();
@@ -3854,7 +4453,7 @@ function AuthForm({
3854
4453
  setPasswordMismatch(false);
3855
4454
  onSubmit == null ? void 0 : onSubmit(username.trim(), password);
3856
4455
  };
3857
- const EyeOpen = () => /* @__PURE__ */ import_react19.default.createElement(
4456
+ const EyeOpen = () => /* @__PURE__ */ import_react25.default.createElement(
3858
4457
  "svg",
3859
4458
  {
3860
4459
  xmlns: "http://www.w3.org/2000/svg",
@@ -3864,7 +4463,7 @@ function AuthForm({
3864
4463
  stroke: "currentColor",
3865
4464
  style: { width: "20px", height: "20px" }
3866
4465
  },
3867
- /* @__PURE__ */ import_react19.default.createElement(
4466
+ /* @__PURE__ */ import_react25.default.createElement(
3868
4467
  "path",
3869
4468
  {
3870
4469
  strokeLinecap: "round",
@@ -3872,7 +4471,7 @@ function AuthForm({
3872
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"
3873
4472
  }
3874
4473
  ),
3875
- /* @__PURE__ */ import_react19.default.createElement(
4474
+ /* @__PURE__ */ import_react25.default.createElement(
3876
4475
  "path",
3877
4476
  {
3878
4477
  strokeLinecap: "round",
@@ -3881,7 +4480,7 @@ function AuthForm({
3881
4480
  }
3882
4481
  )
3883
4482
  );
3884
- const EyeClosed = () => /* @__PURE__ */ import_react19.default.createElement(
4483
+ const EyeClosed = () => /* @__PURE__ */ import_react25.default.createElement(
3885
4484
  "svg",
3886
4485
  {
3887
4486
  xmlns: "http://www.w3.org/2000/svg",
@@ -3891,7 +4490,7 @@ function AuthForm({
3891
4490
  stroke: "currentColor",
3892
4491
  style: { width: "20px", height: "20px" }
3893
4492
  },
3894
- /* @__PURE__ */ import_react19.default.createElement(
4493
+ /* @__PURE__ */ import_react25.default.createElement(
3895
4494
  "path",
3896
4495
  {
3897
4496
  strokeLinecap: "round",
@@ -3900,17 +4499,17 @@ function AuthForm({
3900
4499
  }
3901
4500
  )
3902
4501
  );
3903
- const PasswordToggle = () => /* @__PURE__ */ import_react19.default.createElement(
4502
+ const PasswordToggle = () => /* @__PURE__ */ import_react25.default.createElement(
3904
4503
  "button",
3905
4504
  {
3906
4505
  type: "button",
3907
4506
  onClick: () => setShowPasswords((prev) => !prev),
3908
4507
  style: styles.passwordToggle
3909
4508
  },
3910
- 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)
3911
4510
  );
3912
4511
  const displayError = passwordMismatch ? "Passwords do not match." : error;
3913
- return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react19.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react19.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react19.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react19.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react19.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react19.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react19.default.createElement(
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(
3914
4513
  "input",
3915
4514
  {
3916
4515
  type: "text",
@@ -3927,7 +4526,7 @@ function AuthForm({
3927
4526
  },
3928
4527
  required: true
3929
4528
  }
3930
- )), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react19.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react19.default.createElement(
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(
3931
4530
  "input",
3932
4531
  {
3933
4532
  type: showPasswords ? "text" : "password",
@@ -3943,7 +4542,7 @@ function AuthForm({
3943
4542
  },
3944
4543
  required: true
3945
4544
  }
3946
- ), /* @__PURE__ */ import_react19.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react19.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react19.default.createElement(
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(
3947
4546
  "input",
3948
4547
  {
3949
4548
  type: showPasswords ? "text" : "password",
@@ -3959,7 +4558,7 @@ function AuthForm({
3959
4558
  },
3960
4559
  required: true
3961
4560
  }
3962
- ), /* @__PURE__ */ import_react19.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react19.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react19.default.createElement(
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(
3963
4562
  "button",
3964
4563
  {
3965
4564
  type: "submit",
@@ -3977,7 +4576,7 @@ function AuthForm({
3977
4576
  }
3978
4577
  },
3979
4578
  submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
3980
- ), onModeSwitch && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react19.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react19.default.createElement(
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(
3981
4580
  "button",
3982
4581
  {
3983
4582
  type: "button",
@@ -4150,9 +4749,9 @@ var styles = {
4150
4749
  };
4151
4750
 
4152
4751
  // src/TopicTierBadge.jsx
4153
- var import_react20 = __toESM(require("react"));
4752
+ var import_react26 = __toESM(require("react"));
4154
4753
  function LandmarkIcon({ size = 14 }) {
4155
- return /* @__PURE__ */ import_react20.default.createElement(
4754
+ return /* @__PURE__ */ import_react26.default.createElement(
4156
4755
  "svg",
4157
4756
  {
4158
4757
  width: size,
@@ -4166,16 +4765,16 @@ function LandmarkIcon({ size = 14 }) {
4166
4765
  xmlns: "http://www.w3.org/2000/svg",
4167
4766
  "aria-hidden": "true"
4168
4767
  },
4169
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 18v-7" }),
4170
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }),
4171
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M14 18v-7" }),
4172
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M18 18v-7" }),
4173
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M3 22h18" }),
4174
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 18v-7" })
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" })
4175
4774
  );
4176
4775
  }
4177
4776
  function Building2Icon({ size = 14 }) {
4178
- return /* @__PURE__ */ import_react20.default.createElement(
4777
+ return /* @__PURE__ */ import_react26.default.createElement(
4179
4778
  "svg",
4180
4779
  {
4181
4780
  width: size,
@@ -4189,17 +4788,17 @@ function Building2Icon({ size = 14 }) {
4189
4788
  xmlns: "http://www.w3.org/2000/svg",
4190
4789
  "aria-hidden": "true"
4191
4790
  },
4192
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
4193
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
4194
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
4195
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 6h4" }),
4196
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 10h4" }),
4197
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 14h4" }),
4198
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "M10 18h4" })
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" })
4199
4798
  );
4200
4799
  }
4201
4800
  function HomeIcon({ size = 14 }) {
4202
- return /* @__PURE__ */ import_react20.default.createElement(
4801
+ return /* @__PURE__ */ import_react26.default.createElement(
4203
4802
  "svg",
4204
4803
  {
4205
4804
  width: size,
@@ -4213,8 +4812,8 @@ function HomeIcon({ size = 14 }) {
4213
4812
  xmlns: "http://www.w3.org/2000/svg",
4214
4813
  "aria-hidden": "true"
4215
4814
  },
4216
- /* @__PURE__ */ import_react20.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
4217
- /* @__PURE__ */ import_react20.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
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" })
4218
4817
  );
4219
4818
  }
4220
4819
  var TIER_INFO = {
@@ -4274,7 +4873,7 @@ function TopicTierBadge({
4274
4873
  userSelect: "none"
4275
4874
  };
4276
4875
  };
4277
- return /* @__PURE__ */ import_react20.default.createElement(
4876
+ return /* @__PURE__ */ import_react26.default.createElement(
4278
4877
  "span",
4279
4878
  {
4280
4879
  className: "ev-topic-tier-badge",
@@ -4284,13 +4883,13 @@ function TopicTierBadge({
4284
4883
  },
4285
4884
  effectiveTiers.map((tier) => {
4286
4885
  const { label, Icon } = TIER_INFO[tier];
4287
- return /* @__PURE__ */ import_react20.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react20.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react20.default.createElement("span", null, label));
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));
4288
4887
  })
4289
4888
  );
4290
4889
  }
4291
4890
 
4292
4891
  // src/CompassCoverageCallout.jsx
4293
- var import_react21 = __toESM(require("react"));
4892
+ var import_react27 = __toESM(require("react"));
4294
4893
  var TIER_LABELS = {
4295
4894
  federal: "federal",
4296
4895
  state: "state",
@@ -4303,7 +4902,7 @@ function CompassCoverageCallout({
4303
4902
  compassUrl,
4304
4903
  onDismiss
4305
4904
  }) {
4306
- const [dismissed, setDismissed] = (0, import_react21.useState)(false);
4905
+ const [dismissed, setDismissed] = (0, import_react27.useState)(false);
4307
4906
  if (dismissed) return null;
4308
4907
  const tierLabel = TIER_LABELS[tier] || tier;
4309
4908
  const tierStyle = tierColors[tier] || tierColors.federal;
@@ -4354,15 +4953,15 @@ function CompassCoverageCallout({
4354
4953
  setDismissed(true);
4355
4954
  if (onDismiss) onDismiss();
4356
4955
  };
4357
- return /* @__PURE__ */ import_react21.default.createElement(
4956
+ return /* @__PURE__ */ import_react27.default.createElement(
4358
4957
  "div",
4359
4958
  {
4360
4959
  className: "ev-compass-coverage-callout",
4361
4960
  role: "status",
4362
4961
  style: containerStyle2
4363
4962
  },
4364
- /* @__PURE__ */ import_react21.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react21.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react21.default.createElement("div", null, count === 0 ? `None of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. ` : `Only ${count} of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. `, "Add more ", tierLabel, "-applicable topics to get better comparisons with ", tierLabel, " officials."), /* @__PURE__ */ import_react21.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
4365
- onDismiss !== void 0 && /* @__PURE__ */ import_react21.default.createElement(
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(
4366
4965
  "button",
4367
4966
  {
4368
4967
  onClick: handleDismiss,
@@ -4375,7 +4974,7 @@ function CompassCoverageCallout({
4375
4974
  }
4376
4975
 
4377
4976
  // src/ExpandCompassNudge.jsx
4378
- var import_react22 = __toESM(require("react"));
4977
+ var import_react28 = __toESM(require("react"));
4379
4978
  function ExpandCompassNudge({
4380
4979
  politicianName,
4381
4980
  missingCount,
@@ -4422,7 +5021,7 @@ function ExpandCompassNudge({
4422
5021
  };
4423
5022
  const topicsLabel = missingCount === 1 ? "topic" : "topics";
4424
5023
  const speakerName = politicianName || "This politician";
4425
- return /* @__PURE__ */ import_react22.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react22.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react22.default.createElement("p", { style: bodyStyle }, speakerName, " has stances on ", missingCount, " more ", topicsLabel, " you haven't answered yet. Expand your compass to see where you stand on all of them."), /* @__PURE__ */ import_react22.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
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"));
4426
5025
  }
4427
5026
 
4428
5027
  // src/computeTierCoverage.js
@@ -4443,14 +5042,14 @@ function computeTierCoverage(topics) {
4443
5042
  }
4444
5043
 
4445
5044
  // src/StanceAccordion.jsx
4446
- var import_react24 = __toESM(require("react"));
5045
+ var import_react30 = __toESM(require("react"));
4447
5046
 
4448
5047
  // src/Favicon.jsx
4449
- var import_react23 = __toESM(require("react"));
5048
+ var import_react29 = __toESM(require("react"));
4450
5049
  function Favicon({ url, size = 16 }) {
4451
5050
  try {
4452
5051
  const domain = new URL(url).hostname;
4453
- return /* @__PURE__ */ import_react23.default.createElement(
5052
+ return /* @__PURE__ */ import_react29.default.createElement(
4454
5053
  "img",
4455
5054
  {
4456
5055
  src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
@@ -4461,7 +5060,7 @@ function Favicon({ url, size = 16 }) {
4461
5060
  }
4462
5061
  );
4463
5062
  } catch {
4464
- return /* @__PURE__ */ import_react23.default.createElement(
5063
+ return /* @__PURE__ */ import_react29.default.createElement(
4465
5064
  "svg",
4466
5065
  {
4467
5066
  width: size,
@@ -4472,8 +5071,8 @@ function Favicon({ url, size = 16 }) {
4472
5071
  strokeWidth: "1.5",
4473
5072
  style: { verticalAlign: "middle", flexShrink: 0 }
4474
5073
  },
4475
- /* @__PURE__ */ import_react23.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4476
- /* @__PURE__ */ import_react23.default.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
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" })
4477
5076
  );
4478
5077
  }
4479
5078
  }
@@ -4504,11 +5103,11 @@ function StanceAccordion({
4504
5103
  apiUrl = "https://api.empowered.vote"
4505
5104
  }) {
4506
5105
  var _a;
4507
- const [expandedTopicId, setExpandedTopicId] = (0, import_react24.useState)(null);
4508
- const [loadingId, setLoadingId] = (0, import_react24.useState)(null);
4509
- const [showAll, setShowAll] = (0, import_react24.useState)(false);
4510
- const contextCache = (0, import_react24.useRef)(/* @__PURE__ */ new Map());
4511
- const quotesCache = (0, import_react24.useRef)(null);
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);
4512
5111
  const polAnswerMap = {};
4513
5112
  if (polAnswers) {
4514
5113
  polAnswers.forEach((a) => {
@@ -4567,7 +5166,7 @@ function StanceAccordion({
4567
5166
  quotesCache.current = [];
4568
5167
  }
4569
5168
  }
4570
- const handleToggle = (0, import_react24.useCallback)(
5169
+ const handleToggle = (0, import_react30.useCallback)(
4571
5170
  async (topicId) => {
4572
5171
  if (expandedTopicId === topicId) {
4573
5172
  setExpandedTopicId(null);
@@ -4584,7 +5183,7 @@ function StanceAccordion({
4584
5183
  },
4585
5184
  [expandedTopicId, politicianId, apiUrl]
4586
5185
  );
4587
- (0, import_react24.useEffect)(() => {
5186
+ (0, import_react30.useEffect)(() => {
4588
5187
  if (initialExpandedTopicId && topics && topics.length > 0) {
4589
5188
  handleToggle(String(initialExpandedTopicId));
4590
5189
  }
@@ -4600,13 +5199,13 @@ function StanceAccordion({
4600
5199
  visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
4601
5200
  }
4602
5201
  }
4603
- return /* @__PURE__ */ import_react24.default.createElement(
5202
+ return /* @__PURE__ */ import_react30.default.createElement(
4604
5203
  "div",
4605
5204
  {
4606
5205
  className: "flex flex-col",
4607
5206
  style: { fontFamily: "'Manrope', sans-serif" }
4608
5207
  },
4609
- /* @__PURE__ */ import_react24.default.createElement(
5208
+ /* @__PURE__ */ import_react30.default.createElement(
4610
5209
  "h3",
4611
5210
  {
4612
5211
  className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
@@ -4628,15 +5227,15 @@ function StanceAccordion({
4628
5227
  if (topic.topic_key) return q.issue === topic.topic_key;
4629
5228
  return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
4630
5229
  }) : [];
4631
- 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(
4632
5231
  "button",
4633
5232
  {
4634
5233
  type: "button",
4635
5234
  onClick: () => handleToggle(topicId),
4636
5235
  className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
4637
5236
  },
4638
- /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
4639
- /* @__PURE__ */ import_react24.default.createElement(
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(
4640
5239
  "svg",
4641
5240
  {
4642
5241
  width: "16",
@@ -4653,9 +5252,9 @@ function StanceAccordion({
4653
5252
  transition: "transform 0.2s ease"
4654
5253
  }
4655
5254
  },
4656
- /* @__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" })
4657
5256
  )
4658
- ), /* @__PURE__ */ import_react24.default.createElement(
5257
+ ), /* @__PURE__ */ import_react30.default.createElement(
4659
5258
  "div",
4660
5259
  {
4661
5260
  style: {
@@ -4664,7 +5263,7 @@ function StanceAccordion({
4664
5263
  transition: "grid-template-rows 0.25s ease"
4665
5264
  }
4666
5265
  },
4667
- /* @__PURE__ */ import_react24.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react24.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react24.default.createElement(
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(
4668
5267
  "div",
4669
5268
  {
4670
5269
  style: {
@@ -4676,14 +5275,14 @@ function StanceAccordion({
4676
5275
  animation: "ev-spin 0.8s linear infinite"
4677
5276
  }
4678
5277
  }
4679
- )), !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(
4680
5279
  "p",
4681
5280
  {
4682
5281
  className: "text-sm text-neutral-700 mb-3",
4683
5282
  style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
4684
5283
  },
4685
5284
  cached.reasoning
4686
- ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react24.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react24.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react24.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react24.default.createElement(
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(
4687
5286
  "a",
4688
5287
  {
4689
5288
  href: src,
@@ -4691,9 +5290,9 @@ function StanceAccordion({
4691
5290
  rel: "noreferrer",
4692
5291
  className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
4693
5292
  },
4694
- /* @__PURE__ */ import_react24.default.createElement(Favicon, { url: src }),
4695
- /* @__PURE__ */ import_react24.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
4696
- ))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react24.default.createElement(
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(
4697
5296
  "p",
4698
5297
  {
4699
5298
  style: {
@@ -4710,7 +5309,7 @@ function StanceAccordion({
4710
5309
  const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
4711
5310
  const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
4712
5311
  const sourceName = quote.source_name || quote.sourceName;
4713
- return /* @__PURE__ */ import_react24.default.createElement(
5312
+ return /* @__PURE__ */ import_react30.default.createElement(
4714
5313
  "div",
4715
5314
  {
4716
5315
  key: quote.id,
@@ -4722,7 +5321,7 @@ function StanceAccordion({
4722
5321
  marginBottom: "8px"
4723
5322
  }
4724
5323
  },
4725
- /* @__PURE__ */ import_react24.default.createElement(
5324
+ /* @__PURE__ */ import_react30.default.createElement(
4726
5325
  "p",
4727
5326
  {
4728
5327
  style: {
@@ -4735,7 +5334,7 @@ function StanceAccordion({
4735
5334
  },
4736
5335
  quote.text
4737
5336
  ),
4738
- verdict === "agreed" && /* @__PURE__ */ import_react24.default.createElement(
5337
+ verdict === "agreed" && /* @__PURE__ */ import_react30.default.createElement(
4739
5338
  "span",
4740
5339
  {
4741
5340
  style: {
@@ -4752,10 +5351,10 @@ function StanceAccordion({
4752
5351
  flexShrink: 0
4753
5352
  }
4754
5353
  },
4755
- /* @__PURE__ */ import_react24.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M5 13l4 4L19 7" })),
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" })),
4756
5355
  "Agreed"
4757
5356
  ),
4758
- verdict === "disagreed" && /* @__PURE__ */ import_react24.default.createElement(
5357
+ verdict === "disagreed" && /* @__PURE__ */ import_react30.default.createElement(
4759
5358
  "span",
4760
5359
  {
4761
5360
  style: {
@@ -4772,10 +5371,10 @@ function StanceAccordion({
4772
5371
  flexShrink: 0
4773
5372
  }
4774
5373
  },
4775
- /* @__PURE__ */ import_react24.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
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" })),
4776
5375
  "Disagreed"
4777
5376
  ),
4778
- sourceName && /* @__PURE__ */ import_react24.default.createElement(
5377
+ sourceName && /* @__PURE__ */ import_react30.default.createElement(
4779
5378
  "a",
4780
5379
  {
4781
5380
  href: quote.source_url || quote.sourceUrl,
@@ -4792,10 +5391,10 @@ function StanceAccordion({
4792
5391
  sourceName
4793
5392
  )
4794
5393
  );
4795
- })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react24.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
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."))))
4796
5395
  ));
4797
5396
  }),
4798
- hasToggle && /* @__PURE__ */ import_react24.default.createElement(
5397
+ hasToggle && /* @__PURE__ */ import_react30.default.createElement(
4799
5398
  "button",
4800
5399
  {
4801
5400
  type: "button",
@@ -4807,78 +5406,6 @@ function StanceAccordion({
4807
5406
  )
4808
5407
  );
4809
5408
  }
4810
-
4811
- // src/icons.js
4812
- var import_react25 = __toESM(require("react"));
4813
- function BallotIcon({ size = 16, color = "currentColor" }) {
4814
- return /* @__PURE__ */ import_react25.default.createElement(
4815
- "svg",
4816
- {
4817
- width: size,
4818
- height: size,
4819
- viewBox: "0 0 24 24",
4820
- fill: "none",
4821
- stroke: color,
4822
- strokeWidth: "2",
4823
- strokeLinecap: "round",
4824
- strokeLinejoin: "round",
4825
- xmlns: "http://www.w3.org/2000/svg"
4826
- },
4827
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "m9 12 2 2 4-4" }),
4828
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
4829
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "M22 19H2" })
4830
- );
4831
- }
4832
- function CompassIcon({ size = 16, color = "currentColor" }) {
4833
- return /* @__PURE__ */ import_react25.default.createElement(
4834
- "svg",
4835
- {
4836
- width: size,
4837
- height: size,
4838
- viewBox: "0 0 24 24",
4839
- fill: "none",
4840
- stroke: color,
4841
- strokeWidth: "2",
4842
- strokeLinecap: "round",
4843
- strokeLinejoin: "round",
4844
- xmlns: "http://www.w3.org/2000/svg"
4845
- },
4846
- /* @__PURE__ */ import_react25.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4847
- /* @__PURE__ */ import_react25.default.createElement("path", { d: "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" })
4848
- );
4849
- }
4850
- function BranchIcon({ size = 16, color = "currentColor", branch }) {
4851
- let paths;
4852
- switch (branch) {
4853
- case "executive":
4854
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react25.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react25.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
4855
- break;
4856
- case "legislative":
4857
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M15 12h-5" }));
4858
- break;
4859
- case "judicial":
4860
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M8 21h8" }));
4861
- break;
4862
- default:
4863
- paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M6 18v-7" }));
4864
- break;
4865
- }
4866
- return /* @__PURE__ */ import_react25.default.createElement(
4867
- "svg",
4868
- {
4869
- width: size,
4870
- height: size,
4871
- viewBox: "0 0 24 24",
4872
- fill: "none",
4873
- stroke: color,
4874
- strokeWidth: "2",
4875
- strokeLinecap: "round",
4876
- strokeLinejoin: "round",
4877
- xmlns: "http://www.w3.org/2000/svg"
4878
- },
4879
- paths
4880
- );
4881
- }
4882
5409
  // Annotate the CommonJS export names for ESM import in node:
4883
5410
  0 && (module.exports = {
4884
5411
  AuthForm,
@@ -4886,12 +5413,14 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
4886
5413
  BranchIcon,
4887
5414
  CategorySection,
4888
5415
  CommitteeTable,
5416
+ CompassCardHorizontal,
4889
5417
  CompassCoverageCallout,
4890
5418
  CompassIcon,
4891
5419
  ExpandCompassNudge,
4892
5420
  FilterSidebar,
4893
5421
  GovernmentBodySection,
4894
5422
  Header,
5423
+ IconOverlay,
4895
5424
  IssueTags,
4896
5425
  JudicialRecordDetail,
4897
5426
  JudicialScorecard,