@optifye/dashboard-core 6.12.21 → 6.12.23

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.
@@ -177,6 +177,10 @@ interface WorkspaceMetrics {
177
177
  action_type?: 'assembly' | 'output' | null;
178
178
  action_family?: 'assembly' | 'output' | 'other' | null;
179
179
  action_display_name?: string | null;
180
+ factory_area_id?: string | null;
181
+ factory_area_key?: string | null;
182
+ factory_area_name?: string | null;
183
+ factory_area_enabled?: boolean | null;
180
184
  leaderboard_metric_kind?: 'efficiency' | 'recent_flow_shift_average';
181
185
  leaderboard_value?: number | null;
182
186
  avg_recent_flow?: number | null;
@@ -188,6 +192,10 @@ interface WorkspaceMetrics {
188
192
  recent_flow_effective_end_at?: string | null;
189
193
  recent_flow_computed_at?: string | null;
190
194
  recent_flow_forced_zero_after_shift?: boolean | null;
195
+ video_grid_green_streak_active?: boolean | null;
196
+ video_grid_green_streak_minutes?: number | null;
197
+ video_grid_green_streak_anchor_at?: string | null;
198
+ video_grid_green_streak_started_at?: string | null;
191
199
  scheduled_break_active?: boolean;
192
200
  incoming_wip_current?: number | null;
193
201
  incoming_wip_effective_at?: string | null;
@@ -177,6 +177,10 @@ interface WorkspaceMetrics {
177
177
  action_type?: 'assembly' | 'output' | null;
178
178
  action_family?: 'assembly' | 'output' | 'other' | null;
179
179
  action_display_name?: string | null;
180
+ factory_area_id?: string | null;
181
+ factory_area_key?: string | null;
182
+ factory_area_name?: string | null;
183
+ factory_area_enabled?: boolean | null;
180
184
  leaderboard_metric_kind?: 'efficiency' | 'recent_flow_shift_average';
181
185
  leaderboard_value?: number | null;
182
186
  avg_recent_flow?: number | null;
@@ -188,6 +192,10 @@ interface WorkspaceMetrics {
188
192
  recent_flow_effective_end_at?: string | null;
189
193
  recent_flow_computed_at?: string | null;
190
194
  recent_flow_forced_zero_after_shift?: boolean | null;
195
+ video_grid_green_streak_active?: boolean | null;
196
+ video_grid_green_streak_minutes?: number | null;
197
+ video_grid_green_streak_anchor_at?: string | null;
198
+ video_grid_green_streak_started_at?: string | null;
191
199
  scheduled_break_active?: boolean;
192
200
  incoming_wip_current?: number | null;
193
201
  incoming_wip_effective_at?: string | null;
@@ -1,2 +1,2 @@
1
- export { u as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, d as WorkspaceVideoStream } from './automation-Hl2PFMb3.mjs';
1
+ export { u as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, d as WorkspaceVideoStream } from './automation-C3vudVDH.mjs';
2
2
  import 'react';
@@ -1,2 +1,2 @@
1
- export { u as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, d as WorkspaceVideoStream } from './automation-Hl2PFMb3.js';
1
+ export { u as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, d as WorkspaceVideoStream } from './automation-C3vudVDH.js';
2
2
  import 'react';
@@ -1753,8 +1753,6 @@ var isRecentFlowVideoGridMetricMode = (value, assemblyEnabled = false) => {
1753
1753
  return normalized === "recent_flow" || normalized === "recent_flow_wip_gated";
1754
1754
  };
1755
1755
  var isWipGatedVideoGridMetricMode = (value, assemblyEnabled = false) => normalizeVideoGridMetricMode(value, assemblyEnabled) === "recent_flow_wip_gated";
1756
-
1757
- // src/components/dashboard/grid/videoGridMetricUtils.ts
1758
1756
  var isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
1759
1757
  var isVideoGridRecentFlowEnabled = (workspace) => isRecentFlowVideoGridMetricMode(
1760
1758
  workspace.video_grid_metric_mode,
@@ -1777,6 +1775,8 @@ var getRawVideoGridMetricValue = (workspace) => {
1777
1775
  return workspace.efficiency;
1778
1776
  };
1779
1777
  var hasIncomingWipMapping = (workspace) => Boolean(workspace.incoming_wip_buffer_name);
1778
+ var getVideoGridWorkspaceKey = (workspace) => workspace.workspace_uuid || `${workspace.line_id || "unknown"}:${workspace.workspace_name || "unknown"}`;
1779
+ var isVideoGridBlueCandidate = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND) => hasVideoGridRecentFlow(workspace) && isFiniteNumber(workspace.recent_flow_percent) && workspace.recent_flow_percent >= legend.green_min;
1780
1780
  var getVideoGridBaseColorState = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND) => {
1781
1781
  const metricValue = getRawVideoGridMetricValue(workspace);
1782
1782
  if (!isFiniteNumber(metricValue)) {
@@ -1847,7 +1847,10 @@ var getSyntheticLowWipDisplayValue = (workspace, minuteBucket) => {
1847
1847
  return 100 + offset;
1848
1848
  };
1849
1849
  var getVideoGridDisplayValue = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND, minuteBucket) => isLowWipGreenOverride(workspace, legend) ? getSyntheticLowWipDisplayValue(workspace, minuteBucket) : getVideoGridMetricValue(workspace, legend);
1850
- var getVideoGridColorState = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND) => {
1850
+ var getVideoGridColorState = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND, blueWinnerIds) => {
1851
+ if (blueWinnerIds?.has(getVideoGridWorkspaceKey(workspace)) && isVideoGridBlueCandidate(workspace, legend)) {
1852
+ return "blue";
1853
+ }
1851
1854
  const baseColor = getVideoGridBaseColorState(workspace, legend);
1852
1855
  if (!hasVideoGridRecentFlow(workspace)) {
1853
1856
  return baseColor;
@@ -1895,6 +1898,7 @@ var VideoCard = React__default.default.memo(({
1895
1898
  compact = false,
1896
1899
  displayMinuteBucket,
1897
1900
  displayName,
1901
+ isBlueBest = false,
1898
1902
  lastSeenLabel,
1899
1903
  hasRecentHealthSignal = false,
1900
1904
  onMouseEnter,
@@ -1916,7 +1920,11 @@ var VideoCard = React__default.default.memo(({
1916
1920
  const workspaceDisplayName = displayName || workspace.displayName || workspace.workspace_name;
1917
1921
  const videoGridMetricValue = getVideoGridMetricValue(workspace, effectiveLegend);
1918
1922
  const videoGridDisplayValue = getVideoGridDisplayValue(workspace, effectiveLegend, displayMinuteBucket);
1919
- const videoGridColorState = getVideoGridColorState(workspace, effectiveLegend);
1923
+ const videoGridColorState = getVideoGridColorState(
1924
+ workspace,
1925
+ effectiveLegend,
1926
+ isBlueBest ? /* @__PURE__ */ new Set([getVideoGridWorkspaceKey(workspace)]) : void 0
1927
+ );
1920
1928
  const isRecentFlowCard = isVideoGridRecentFlowEnabled(workspace);
1921
1929
  const isHighEfficiencyOverride = isHighEfficiencyRedFlowOverride(workspace, effectiveLegend);
1922
1930
  const hasDisplayMetric = typeof videoGridDisplayValue === "number" && Number.isFinite(videoGridDisplayValue);
@@ -1924,9 +1932,9 @@ var VideoCard = React__default.default.memo(({
1924
1932
  const shouldRenderMetricBadge = hasDisplayMetric;
1925
1933
  const badgeTitle = isHighEfficiencyOverride ? `Efficiency ${Math.round(videoGridDisplayValue ?? 0)}%` : hasVideoGridRecentFlow(workspace) ? `Flow ${Math.round(videoGridDisplayValue ?? 0)}%` : isRecentFlowCard ? "Flow unavailable" : `Efficiency ${Math.round(videoGridDisplayValue ?? 0)}%`;
1926
1934
  const badgeLabel = `${Math.round(videoGridDisplayValue ?? 0)}%`;
1927
- const efficiencyOverlayClass = videoGridColorState === "green" ? "bg-[#00D654]/25" : videoGridColorState === "yellow" ? "bg-[#FFD700]/30" : videoGridColorState === "red" ? "bg-[#FF2D0A]/30" : "bg-transparent";
1928
- const efficiencyBarClass = videoGridColorState === "green" ? "bg-[#00AB45]" : videoGridColorState === "yellow" ? "bg-[#FFB020]" : videoGridColorState === "red" ? "bg-[#E34329]" : "bg-gray-500/70";
1929
- const efficiencyStatus = videoGridColorState === "green" ? "High" : videoGridColorState === "yellow" ? "Medium" : videoGridColorState === "red" ? "Low" : "Neutral";
1935
+ const efficiencyOverlayClass = videoGridColorState === "green" ? "bg-[#00D654]/25" : videoGridColorState === "blue" ? "bg-[#0EA5E9]/30" : videoGridColorState === "yellow" ? "bg-[#FFD700]/30" : videoGridColorState === "red" ? "bg-[#FF2D0A]/30" : "bg-transparent";
1936
+ const efficiencyBarClass = videoGridColorState === "green" ? "bg-[#00AB45]" : videoGridColorState === "blue" ? "bg-[#0EA5E9]" : videoGridColorState === "yellow" ? "bg-[#FFB020]" : videoGridColorState === "red" ? "bg-[#E34329]" : "bg-gray-500/70";
1937
+ const efficiencyStatus = videoGridColorState === "green" ? "High" : videoGridColorState === "blue" ? "Best" : videoGridColorState === "yellow" ? "Medium" : videoGridColorState === "red" ? "Low" : "Neutral";
1930
1938
  const trendInfo = workspace.trend !== void 0 ? getTrendArrowAndColor(workspace.trend) : null;
1931
1939
  const handleClick = React.useCallback(() => {
1932
1940
  trackCoreEvent("Workspace Card Clicked", {
@@ -2047,6 +2055,9 @@ var VideoCard = React__default.default.memo(({
2047
2055
  if (prevProps.displayName !== nextProps.displayName) {
2048
2056
  return false;
2049
2057
  }
2058
+ if (prevProps.isBlueBest !== nextProps.isBlueBest) {
2059
+ return false;
2060
+ }
2050
2061
  if (prevProps.lastSeenLabel !== nextProps.lastSeenLabel) {
2051
2062
  return false;
2052
2063
  }
@@ -1746,8 +1746,6 @@ var isRecentFlowVideoGridMetricMode = (value, assemblyEnabled = false) => {
1746
1746
  return normalized === "recent_flow" || normalized === "recent_flow_wip_gated";
1747
1747
  };
1748
1748
  var isWipGatedVideoGridMetricMode = (value, assemblyEnabled = false) => normalizeVideoGridMetricMode(value, assemblyEnabled) === "recent_flow_wip_gated";
1749
-
1750
- // src/components/dashboard/grid/videoGridMetricUtils.ts
1751
1749
  var isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
1752
1750
  var isVideoGridRecentFlowEnabled = (workspace) => isRecentFlowVideoGridMetricMode(
1753
1751
  workspace.video_grid_metric_mode,
@@ -1770,6 +1768,8 @@ var getRawVideoGridMetricValue = (workspace) => {
1770
1768
  return workspace.efficiency;
1771
1769
  };
1772
1770
  var hasIncomingWipMapping = (workspace) => Boolean(workspace.incoming_wip_buffer_name);
1771
+ var getVideoGridWorkspaceKey = (workspace) => workspace.workspace_uuid || `${workspace.line_id || "unknown"}:${workspace.workspace_name || "unknown"}`;
1772
+ var isVideoGridBlueCandidate = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND) => hasVideoGridRecentFlow(workspace) && isFiniteNumber(workspace.recent_flow_percent) && workspace.recent_flow_percent >= legend.green_min;
1773
1773
  var getVideoGridBaseColorState = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND) => {
1774
1774
  const metricValue = getRawVideoGridMetricValue(workspace);
1775
1775
  if (!isFiniteNumber(metricValue)) {
@@ -1840,7 +1840,10 @@ var getSyntheticLowWipDisplayValue = (workspace, minuteBucket) => {
1840
1840
  return 100 + offset;
1841
1841
  };
1842
1842
  var getVideoGridDisplayValue = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND, minuteBucket) => isLowWipGreenOverride(workspace, legend) ? getSyntheticLowWipDisplayValue(workspace, minuteBucket) : getVideoGridMetricValue(workspace, legend);
1843
- var getVideoGridColorState = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND) => {
1843
+ var getVideoGridColorState = (workspace, legend = DEFAULT_EFFICIENCY_LEGEND, blueWinnerIds) => {
1844
+ if (blueWinnerIds?.has(getVideoGridWorkspaceKey(workspace)) && isVideoGridBlueCandidate(workspace, legend)) {
1845
+ return "blue";
1846
+ }
1844
1847
  const baseColor = getVideoGridBaseColorState(workspace, legend);
1845
1848
  if (!hasVideoGridRecentFlow(workspace)) {
1846
1849
  return baseColor;
@@ -1888,6 +1891,7 @@ var VideoCard = React.memo(({
1888
1891
  compact = false,
1889
1892
  displayMinuteBucket,
1890
1893
  displayName,
1894
+ isBlueBest = false,
1891
1895
  lastSeenLabel,
1892
1896
  hasRecentHealthSignal = false,
1893
1897
  onMouseEnter,
@@ -1909,7 +1913,11 @@ var VideoCard = React.memo(({
1909
1913
  const workspaceDisplayName = displayName || workspace.displayName || workspace.workspace_name;
1910
1914
  const videoGridMetricValue = getVideoGridMetricValue(workspace, effectiveLegend);
1911
1915
  const videoGridDisplayValue = getVideoGridDisplayValue(workspace, effectiveLegend, displayMinuteBucket);
1912
- const videoGridColorState = getVideoGridColorState(workspace, effectiveLegend);
1916
+ const videoGridColorState = getVideoGridColorState(
1917
+ workspace,
1918
+ effectiveLegend,
1919
+ isBlueBest ? /* @__PURE__ */ new Set([getVideoGridWorkspaceKey(workspace)]) : void 0
1920
+ );
1913
1921
  const isRecentFlowCard = isVideoGridRecentFlowEnabled(workspace);
1914
1922
  const isHighEfficiencyOverride = isHighEfficiencyRedFlowOverride(workspace, effectiveLegend);
1915
1923
  const hasDisplayMetric = typeof videoGridDisplayValue === "number" && Number.isFinite(videoGridDisplayValue);
@@ -1917,9 +1925,9 @@ var VideoCard = React.memo(({
1917
1925
  const shouldRenderMetricBadge = hasDisplayMetric;
1918
1926
  const badgeTitle = isHighEfficiencyOverride ? `Efficiency ${Math.round(videoGridDisplayValue ?? 0)}%` : hasVideoGridRecentFlow(workspace) ? `Flow ${Math.round(videoGridDisplayValue ?? 0)}%` : isRecentFlowCard ? "Flow unavailable" : `Efficiency ${Math.round(videoGridDisplayValue ?? 0)}%`;
1919
1927
  const badgeLabel = `${Math.round(videoGridDisplayValue ?? 0)}%`;
1920
- const efficiencyOverlayClass = videoGridColorState === "green" ? "bg-[#00D654]/25" : videoGridColorState === "yellow" ? "bg-[#FFD700]/30" : videoGridColorState === "red" ? "bg-[#FF2D0A]/30" : "bg-transparent";
1921
- const efficiencyBarClass = videoGridColorState === "green" ? "bg-[#00AB45]" : videoGridColorState === "yellow" ? "bg-[#FFB020]" : videoGridColorState === "red" ? "bg-[#E34329]" : "bg-gray-500/70";
1922
- const efficiencyStatus = videoGridColorState === "green" ? "High" : videoGridColorState === "yellow" ? "Medium" : videoGridColorState === "red" ? "Low" : "Neutral";
1928
+ const efficiencyOverlayClass = videoGridColorState === "green" ? "bg-[#00D654]/25" : videoGridColorState === "blue" ? "bg-[#0EA5E9]/30" : videoGridColorState === "yellow" ? "bg-[#FFD700]/30" : videoGridColorState === "red" ? "bg-[#FF2D0A]/30" : "bg-transparent";
1929
+ const efficiencyBarClass = videoGridColorState === "green" ? "bg-[#00AB45]" : videoGridColorState === "blue" ? "bg-[#0EA5E9]" : videoGridColorState === "yellow" ? "bg-[#FFB020]" : videoGridColorState === "red" ? "bg-[#E34329]" : "bg-gray-500/70";
1930
+ const efficiencyStatus = videoGridColorState === "green" ? "High" : videoGridColorState === "blue" ? "Best" : videoGridColorState === "yellow" ? "Medium" : videoGridColorState === "red" ? "Low" : "Neutral";
1923
1931
  const trendInfo = workspace.trend !== void 0 ? getTrendArrowAndColor(workspace.trend) : null;
1924
1932
  const handleClick = useCallback(() => {
1925
1933
  trackCoreEvent("Workspace Card Clicked", {
@@ -2040,6 +2048,9 @@ var VideoCard = React.memo(({
2040
2048
  if (prevProps.displayName !== nextProps.displayName) {
2041
2049
  return false;
2042
2050
  }
2051
+ if (prevProps.isBlueBest !== nextProps.isBlueBest) {
2052
+ return false;
2053
+ }
2043
2054
  if (prevProps.lastSeenLabel !== nextProps.lastSeenLabel) {
2044
2055
  return false;
2045
2056
  }
package/dist/index.css CHANGED
@@ -658,9 +658,15 @@ body {
658
658
  .z-50 {
659
659
  z-index: 50;
660
660
  }
661
+ .z-\[10000\] {
662
+ z-index: 10000;
663
+ }
661
664
  .z-\[100\] {
662
665
  z-index: 100;
663
666
  }
667
+ .z-\[110\] {
668
+ z-index: 110;
669
+ }
664
670
  .z-\[60\] {
665
671
  z-index: 60;
666
672
  }
@@ -1545,9 +1551,6 @@ body {
1545
1551
  .max-w-\[140px\] {
1546
1552
  max-width: 140px;
1547
1553
  }
1548
- .max-w-\[150px\] {
1549
- max-width: 150px;
1550
- }
1551
1554
  .max-w-\[170px\] {
1552
1555
  max-width: 170px;
1553
1556
  }
@@ -1671,6 +1674,9 @@ body {
1671
1674
  .origin-center {
1672
1675
  transform-origin: center;
1673
1676
  }
1677
+ .origin-left {
1678
+ transform-origin: left;
1679
+ }
1674
1680
  .origin-top-right {
1675
1681
  transform-origin: top right;
1676
1682
  }
@@ -1989,6 +1995,9 @@ body {
1989
1995
  .gap-y-3 {
1990
1996
  row-gap: 0.75rem;
1991
1997
  }
1998
+ .gap-y-4 {
1999
+ row-gap: 1rem;
2000
+ }
1992
2001
  .-space-x-2 > :not([hidden]) ~ :not([hidden]) {
1993
2002
  --tw-space-x-reverse: 0;
1994
2003
  margin-right: calc(-0.5rem * var(--tw-space-x-reverse));
@@ -2309,6 +2318,9 @@ body {
2309
2318
  .border-none {
2310
2319
  border-style: none;
2311
2320
  }
2321
+ .border-\[\#00AB45\]\/20 {
2322
+ border-color: rgb(0 171 69 / 0.2);
2323
+ }
2312
2324
  .border-\[\#E34329\] {
2313
2325
  --tw-border-opacity: 1;
2314
2326
  border-color: rgb(227 67 41 / var(--tw-border-opacity, 1));
@@ -2648,12 +2660,22 @@ body {
2648
2660
  --tw-bg-opacity: 1;
2649
2661
  background-color: rgb(0 171 69 / var(--tw-bg-opacity, 1));
2650
2662
  }
2663
+ .bg-\[\#00AB45\]\/10 {
2664
+ background-color: rgb(0 171 69 / 0.1);
2665
+ }
2651
2666
  .bg-\[\#00AB45\]\/90 {
2652
2667
  background-color: rgb(0 171 69 / 0.9);
2653
2668
  }
2654
2669
  .bg-\[\#00D654\]\/25 {
2655
2670
  background-color: rgb(0 214 84 / 0.25);
2656
2671
  }
2672
+ .bg-\[\#0EA5E9\] {
2673
+ --tw-bg-opacity: 1;
2674
+ background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));
2675
+ }
2676
+ .bg-\[\#0EA5E9\]\/30 {
2677
+ background-color: rgb(14 165 233 / 0.3);
2678
+ }
2657
2679
  .bg-\[\#E34329\] {
2658
2680
  --tw-bg-opacity: 1;
2659
2681
  background-color: rgb(227 67 41 / var(--tw-bg-opacity, 1));
@@ -2698,10 +2720,6 @@ body {
2698
2720
  --tw-bg-opacity: 1;
2699
2721
  background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
2700
2722
  }
2701
- .bg-amber-200 {
2702
- --tw-bg-opacity: 1;
2703
- background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));
2704
- }
2705
2723
  .bg-amber-400 {
2706
2724
  --tw-bg-opacity: 1;
2707
2725
  background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));
@@ -3074,6 +3092,9 @@ body {
3074
3092
  --tw-bg-opacity: 1;
3075
3093
  background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));
3076
3094
  }
3095
+ .bg-slate-900\/40 {
3096
+ background-color: rgb(15 23 42 / 0.4);
3097
+ }
3077
3098
  .bg-slate-900\/60 {
3078
3099
  background-color: rgb(15 23 42 / 0.6);
3079
3100
  }
@@ -4114,9 +4135,6 @@ body {
4114
4135
  .pl-1 {
4115
4136
  padding-left: 0.25rem;
4116
4137
  }
4117
- .pl-1\.5 {
4118
- padding-left: 0.375rem;
4119
- }
4120
4138
  .pl-10 {
4121
4139
  padding-left: 2.5rem;
4122
4140
  }
@@ -4247,6 +4265,9 @@ body {
4247
4265
  .text-\[0\.8rem\] {
4248
4266
  font-size: 0.8rem;
4249
4267
  }
4268
+ .text-\[100px\] {
4269
+ font-size: 100px;
4270
+ }
4250
4271
  .text-\[10px\] {
4251
4272
  font-size: 10px;
4252
4273
  }
@@ -4268,9 +4289,15 @@ body {
4268
4289
  .text-\[15px\] {
4269
4290
  font-size: 15px;
4270
4291
  }
4292
+ .text-\[60px\] {
4293
+ font-size: 60px;
4294
+ }
4271
4295
  .text-\[7px\] {
4272
4296
  font-size: 7px;
4273
4297
  }
4298
+ .text-\[80px\] {
4299
+ font-size: 80px;
4300
+ }
4274
4301
  .text-\[8px\] {
4275
4302
  font-size: 8px;
4276
4303
  }
@@ -4447,10 +4474,6 @@ body {
4447
4474
  --tw-text-opacity: 1;
4448
4475
  color: rgb(254 243 199 / var(--tw-text-opacity, 1));
4449
4476
  }
4450
- .text-amber-200 {
4451
- --tw-text-opacity: 1;
4452
- color: rgb(253 230 138 / var(--tw-text-opacity, 1));
4453
- }
4454
4477
  .text-amber-300 {
4455
4478
  --tw-text-opacity: 1;
4456
4479
  color: rgb(252 211 77 / var(--tw-text-opacity, 1));
@@ -4894,6 +4917,22 @@ body {
4894
4917
  var(--tw-ring-shadow, 0 0 #0000),
4895
4918
  var(--tw-shadow);
4896
4919
  }
4920
+ .shadow-\[0_0_10px_rgba\(0\,171\,69\,0\.72\)\] {
4921
+ --tw-shadow: 0 0 10px rgba(0,171,69,0.72);
4922
+ --tw-shadow-colored: 0 0 10px var(--tw-shadow-color);
4923
+ box-shadow:
4924
+ var(--tw-ring-offset-shadow, 0 0 #0000),
4925
+ var(--tw-ring-shadow, 0 0 #0000),
4926
+ var(--tw-shadow);
4927
+ }
4928
+ .shadow-\[0_0_16px_rgba\(0\,171\,69\,0\.44\)\] {
4929
+ --tw-shadow: 0 0 16px rgba(0,171,69,0.44);
4930
+ --tw-shadow-colored: 0 0 16px var(--tw-shadow-color);
4931
+ box-shadow:
4932
+ var(--tw-ring-offset-shadow, 0 0 #0000),
4933
+ var(--tw-ring-shadow, 0 0 #0000),
4934
+ var(--tw-shadow);
4935
+ }
4897
4936
  .shadow-\[0_0_4px_rgba\(251\,146\,60\,0\.5\)\] {
4898
4937
  --tw-shadow: 0 0 4px rgba(251,146,60,0.5);
4899
4938
  --tw-shadow-colored: 0 0 4px var(--tw-shadow-color);
@@ -5118,10 +5157,6 @@ body {
5118
5157
  .ring-\[\#FFB020\]\/20 {
5119
5158
  --tw-ring-color: rgb(255 176 32 / 0.2);
5120
5159
  }
5121
- .ring-amber-100 {
5122
- --tw-ring-opacity: 1;
5123
- --tw-ring-color: rgb(254 243 199 / var(--tw-ring-opacity, 1));
5124
- }
5125
5160
  .ring-amber-50\/50 {
5126
5161
  --tw-ring-color: rgb(255 251 235 / 0.5);
5127
5162
  }
@@ -5275,6 +5310,14 @@ body {
5275
5310
  --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
5276
5311
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
5277
5312
  }
5313
+ .drop-shadow-2xl {
5314
+ --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
5315
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
5316
+ }
5317
+ .drop-shadow-\[0_4px_18px_rgba\(0\,0\,0\,0\.45\)\] {
5318
+ --tw-drop-shadow: drop-shadow(0 4px 18px rgba(0,0,0,0.45));
5319
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
5320
+ }
5278
5321
  .drop-shadow-md {
5279
5322
  --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
5280
5323
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
@@ -5560,10 +5603,6 @@ input[type=range]:active::-moz-range-thumb {
5560
5603
  --tw-scale-y: 1.02;
5561
5604
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
5562
5605
  }
5563
- .hover\:border-amber-300:hover {
5564
- --tw-border-opacity: 1;
5565
- border-color: rgb(252 211 77 / var(--tw-border-opacity, 1));
5566
- }
5567
5606
  .hover\:border-blue-300:hover {
5568
5607
  --tw-border-opacity: 1;
5569
5608
  border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));
@@ -6478,6 +6517,9 @@ input[type=range]:active::-moz-range-thumb {
6478
6517
  .sm\:mt-2 {
6479
6518
  margin-top: 0.5rem;
6480
6519
  }
6520
+ .sm\:mt-4 {
6521
+ margin-top: 1rem;
6522
+ }
6481
6523
  .sm\:mt-8 {
6482
6524
  margin-top: 2rem;
6483
6525
  }
@@ -6580,9 +6622,15 @@ input[type=range]:active::-moz-range-thumb {
6580
6622
  .sm\:w-5 {
6581
6623
  width: 1.25rem;
6582
6624
  }
6625
+ .sm\:w-56 {
6626
+ width: 14rem;
6627
+ }
6583
6628
  .sm\:w-6 {
6584
6629
  width: 1.5rem;
6585
6630
  }
6631
+ .sm\:w-64 {
6632
+ width: 16rem;
6633
+ }
6586
6634
  .sm\:w-7 {
6587
6635
  width: 1.75rem;
6588
6636
  }
@@ -6679,6 +6727,10 @@ input[type=range]:active::-moz-range-thumb {
6679
6727
  .sm\:gap-6 {
6680
6728
  gap: 1.5rem;
6681
6729
  }
6730
+ .sm\:gap-x-8 {
6731
+ -moz-column-gap: 2rem;
6732
+ column-gap: 2rem;
6733
+ }
6682
6734
  .sm\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
6683
6735
  --tw-space-x-reverse: 0;
6684
6736
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
@@ -6901,6 +6953,15 @@ input[type=range]:active::-moz-range-thumb {
6901
6953
  .sm\:text-\[11px\] {
6902
6954
  font-size: 11px;
6903
6955
  }
6956
+ .sm\:text-\[120px\] {
6957
+ font-size: 120px;
6958
+ }
6959
+ .sm\:text-\[140px\] {
6960
+ font-size: 140px;
6961
+ }
6962
+ .sm\:text-\[90px\] {
6963
+ font-size: 90px;
6964
+ }
6904
6965
  .sm\:text-base {
6905
6966
  font-size: 1rem;
6906
6967
  line-height: 1.5rem;