Plugin Directory

Changeset 3473414


Ignore:
Timestamp:
03/03/2026 09:14:36 AM (4 weeks ago)
Author:
tracksure
Message:

Bug fix release: Fixes goal performance data not displaying on cards, broken goal templates, and type coercion issues. Adds deferred script loading for better page speed.

Location:
tracksure/trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • tracksure/trunk/admin/dist/336.js

    r3472561 r3473414  
    1 "use strict";(self.webpackChunktracksure_admin=self.webpackChunktracksure_admin||[]).push([[336],{24099:(n,r,e)=>{e.d(r,{A:()=>o});var s=e(71354),t=e.n(s),a=e(76314),A=e.n(a)()(t());A.push([n.id,'/* ==========================================================================\n   TrafficSourcesPage.css (Premium summary + table + sorting)\n   Matches TrafficSourcesPage.tsx markup exactly\n   ========================================================================== */\n\n.ts-sources-summary {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: var(--ts-spacing-lg);\n  margin-top: var(--ts-spacing-lg);\n  margin-bottom: var(--ts-spacing-lg);\n}\n\n.ts-summary-card {\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-xl);\n  box-shadow: var(--ts-shadow-sm);\n  padding: 16px 18px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  min-width: 0;\n}\n\n.ts-summary-icon {\n  width: 32px;\n  height: 32px;\n  border-radius: 16px;\n  display: grid;\n  place-items: center;\n  font-size: 20px;\n  background: var(--ts-surface-2);\n  border: 1px solid var(--ts-border);\n  flex: 0 0 auto;\n}\n\n.ts-summary-content {\n  min-width: 0;\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.ts-summary-value {\n  font-size: 18px;\n  font-weight: 900;\n  letter-spacing: -0.02em;\n  line-height: 1.1;\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n.ts-summary-sub {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--ts-text-muted);\n  letter-spacing: 0;\n}\n\n.ts-summary-label {\n  color: var(--ts-text-muted);\n  font-weight: 650;\n  font-size: 13px;\n}\n\n/* View Mode Tabs */\n.ts-view-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: var(--ts-spacing-lg);\n  border-bottom: 1px solid var(--ts-border);\n  padding-bottom: 8px;\n}\n\n.ts-view-tab {\n  padding: 10px 18px;\n  border: none;\n  background: transparent;\n  color: var(--ts-text-muted);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border-bottom: 2px solid transparent;\n  transition: all 0.2s;\n  position: relative;\n  bottom: -9px;\n}\n\n.ts-view-tab:hover {\n  color: var(--ts-text);\n  background: rgba(14, 165, 233, 0.05);\n  border-radius: var(--ts-radius-lg) var(--ts-radius-lg) 0 0;\n}\n\n.ts-view-tab--active {\n  color: var(--ts-primary);\n  border-bottom-color: var(--ts-primary);\n}\n\n/* Table container */\n.ts-sources-table-container {\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-xl);\n  box-shadow: var(--ts-shadow-sm);\n  overflow: hidden;\n}\n\n.ts-sources-table-container {\n  overflow: auto;\n  max-width: 100%;\n}\n\n/* Table */\n.ts-sources-table {\n  width: 100%;\n  min-width: 720px; /* ensures no overlap; mobile scroll instead */\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-sources-table thead th {\n  position: sticky;\n  top: 0;\n  background: var(--ts-surface-2);\n  border-bottom: 1px solid var(--ts-border);\n  padding: 12px 14px;\n  text-align: left;\n  font-weight: 850;\n  color: var(--ts-text);\n  white-space: nowrap;\n}\n\n.ts-sources-table tbody td {\n  padding: 12px 14px;\n  border-bottom: 1px solid var(--ts-border);\n  color: var(--ts-text);\n  vertical-align: middle;\n  text-align: center; /* Center all cells by default */\n}\n\n/* First column (Source/Channel) stays left-aligned */\n.ts-sources-table tbody td:first-child {\n  text-align: left;\n}\n\n\n\n.ts-sources-table tbody tr:hover td {\n  background: rgba(148, 163, 184, 0.10);\n}\n\n[data-theme="dark"] .ts-sources-table tbody tr:hover td {\n  background: rgba(148, 163, 184, 0.08);\n}\n\n.ts-source-icon {\n  width: 28px;\n  height: 28px;\n  border-radius: 10px;\n  display: inline-grid;\n  place-items: center;\n  margin-right: 10px;\n  background: var(--ts-surface-2);\n  border: 1px solid var(--ts-border);\n  font-size: 14px;\n}\n\n/* Sorting */\n.ts-sortable {\n  cursor: pointer;\n  user-select: none;\n}\n\n.ts-sortable:hover {\n  background: rgba(14, 165, 233, 0.08);\n}\n\n.ts-sorted {\n  color: var(--ts-primary);\n}\n\n.ts-sort-icon {\n  color: var(--ts-text-subtle);\n  font-weight: 900;\n}\n\n/* Conversion Icon */\n.ts-conversion-icon {\n  margin-right: 4px;\n  vertical-align: middle;\n}\n\n/* Display Mode Toggle */\n.ts-display-toggle {\n  display: flex;\n  gap: 8px;\n  margin: 16px 0;\n  padding: 4px;\n  background: var(--ts-surface-2);\n  border-radius: var(--ts-radius-md);\n  width: fit-content;\n}\n\n.ts-toggle-btn {\n  padding: 8px 16px;\n  border: 1px solid transparent;\n  border-radius: var(--ts-radius-sm);\n  background: transparent;\n  color: var(--ts-text-subtle);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ts-toggle-btn:hover {\n  color: var(--ts-text);\n  background: var(--ts-surface);\n}\n\n.ts-toggle-btn--active {\n  background: var(--ts-surface);\n  color: var(--ts-primary);\n  border-color: var(--ts-border);\n  box-shadow: var(--ts-shadow-sm);\n}\n\n/* Channel View Styles */\n.ts-channel-row {\n  font-weight: 500;\n}\n\n.ts-channel-icon {\n  font-size: 18px;\n  margin-right: 8px;\n}\n\n.ts-source-count {\n  color: var(--ts-text-subtle);\n  font-size: 12px;\n  font-weight: 400;\n  margin-left: 6px;\n}\n\n.ts-percentage-bar {\n  position: relative;\n  width: 100%;\n  height: 24px;\n  background: var(--ts-surface-2);\n  border-radius: 4px;\n  overflow: hidden;\n}\n\n.ts-percentage-fill {\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 100%;\n  transition: width 0.3s ease;\n  opacity: 0.7;\n}\n\n.ts-percentage-text {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  font-size: 12px;\n  font-weight: 700;\n  color: var(--ts-text);\n}\n\n/* Attribution Comparison Styles */\n.ts-revenue-sub {\n  font-size: 11px;\n  color: var(--ts-text-muted);\n  margin-top: 2px;\n  font-weight: normal;\n}\n\n.ts-table-header {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  justify-content: center;\n}\n\n.ts-table-header svg {\n  flex-shrink: 0;\n}\n\n/* Compact Attribution Selector */\n.ts-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: 24px;\n  margin-bottom: 24px;\n}\n\n.ts-attribution-compact {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 16px;\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  font-size: 14px;\n}\n\n.ts-attribution-compact label {\n  font-weight: 600;\n  color: var(--ts-text-muted);\n  margin: 0;\n}\n\n.ts-select-wrapper {\n  position: relative;\n}\n\n.ts-select {\n  padding: 6px 32px 6px 12px;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  background: var(--ts-surface-2);\n  color: var(--ts-text);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  appearance: none;\n  min-width: 150px;\n}\n\n.ts-select:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.ts-btn-icon {\n  padding: 6px;\n  background: transparent;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  color: var(--ts-text-muted);\n  transition: all 0.2s;\n}\n\n.ts-btn-icon:hover {\n  background: var(--ts-surface-2);\n  color: var(--ts-primary);\n}\n\n/* Modal Overlay */\n.ts-modal-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 9999;\n}\n\n.ts-modal {\n  background: var(--ts-surface);\n  border-radius: var(--ts-radius-xl);\n  box-shadow: var(--ts-shadow-lg);\n  max-width: 600px;\n  width: 90%;\n  max-height: 80vh;\n  overflow-y: auto;\n}\n\n.ts-modal-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 24px;\n  border-bottom: 1px solid var(--ts-border);\n}\n\n.ts-modal-header h3 {\n  margin: 0;\n  font-size: 18px;\n  font-weight: 700;\n}\n\n.ts-modal-header button {\n  background: transparent;\n  border: none;\n  cursor: pointer;\n  color: var(--ts-text-muted);\n  padding: 4px;\n  display: flex;\n}\n\n/* Insights Widget */\n.ts-insights-widget {\n  background: linear-gradient(135deg, rgba(79, 70, 229, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%);\n  border: 1px solid var(--ts-border);\n  border-left: 4px solid var(--ts-primary);\n  border-radius: var(--ts-radius-lg);\n  padding: 16px 20px;\n  margin: 20px 0;\n}\n\n.ts-insights-header {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 12px;\n  color: var(--ts-primary);\n}\n\n.ts-insights-header h3 {\n  margin: 0;\n  font-size: 15px;\n  font-weight: 700;\n}\n\n.ts-insights-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.ts-insights-list li {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  font-size: 14px;\n  line-height: 1.5;\n  color: var(--ts-text);\n}\n\n.ts-insights-list li svg {\n  flex-shrink: 0;\n  margin-top: 2px;\n  color: var(--ts-success);\n}\n\n/* Quick Filters */\n.ts-quick-filters {\n  display: flex;\n  gap: 8px;\n  margin: 16px 0;\n  flex-wrap: wrap;\n}\n\n.ts-filter-btn {\n  padding: 8px 16px;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  background: var(--ts-surface);\n  color: var(--ts-text);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.ts-filter-btn:hover {\n  background: var(--ts-surface-2);\n  border-color: var(--ts-primary);\n}\n\n.ts-filter-btn--active {\n  background: var(--ts-primary);\n  color: white;\n  border-color: var(--ts-primary);\n}\n\n',"",{version:3,sources:["webpack://./src/styles/pages/TrafficSourcesPage.css"],names:[],mappings:"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",sourcesContent:['/* ==========================================================================\r\n   TrafficSourcesPage.css (Premium summary + table + sorting)\r\n   Matches TrafficSourcesPage.tsx markup exactly\r\n   ========================================================================== */\r\n\r\n.ts-sources-summary {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\r\n  gap: var(--ts-spacing-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n  margin-bottom: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-summary-card {\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-xl);\r\n  box-shadow: var(--ts-shadow-sm);\r\n  padding: 16px 18px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-summary-icon {\r\n  width: 32px;\r\n  height: 32px;\r\n  border-radius: 16px;\r\n  display: grid;\r\n  place-items: center;\r\n  font-size: 20px;\r\n  background: var(--ts-surface-2);\r\n  border: 1px solid var(--ts-border);\r\n  flex: 0 0 auto;\r\n}\r\n\r\n.ts-summary-content {\r\n  min-width: 0;\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 4px;\r\n}\r\n\r\n.ts-summary-value {\r\n  font-size: 18px;\r\n  font-weight: 900;\r\n  letter-spacing: -0.02em;\r\n  line-height: 1.1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 2px;\r\n}\r\n\r\n.ts-summary-sub {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-muted);\r\n  letter-spacing: 0;\r\n}\r\n\r\n.ts-summary-label {\r\n  color: var(--ts-text-muted);\r\n  font-weight: 650;\r\n  font-size: 13px;\r\n}\r\n\r\n/* View Mode Tabs */\r\n.ts-view-tabs {\r\n  display: flex;\r\n  gap: 8px;\r\n  margin-bottom: var(--ts-spacing-lg);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  padding-bottom: 8px;\r\n}\r\n\r\n.ts-view-tab {\r\n  padding: 10px 18px;\r\n  border: none;\r\n  background: transparent;\r\n  color: var(--ts-text-muted);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  border-bottom: 2px solid transparent;\r\n  transition: all 0.2s;\r\n  position: relative;\r\n  bottom: -9px;\r\n}\r\n\r\n.ts-view-tab:hover {\r\n  color: var(--ts-text);\r\n  background: rgba(14, 165, 233, 0.05);\r\n  border-radius: var(--ts-radius-lg) var(--ts-radius-lg) 0 0;\r\n}\r\n\r\n.ts-view-tab--active {\r\n  color: var(--ts-primary);\r\n  border-bottom-color: var(--ts-primary);\r\n}\r\n\r\n/* Table container */\r\n.ts-sources-table-container {\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-xl);\r\n  box-shadow: var(--ts-shadow-sm);\r\n  overflow: hidden;\r\n}\r\n\r\n.ts-sources-table-container {\r\n  overflow: auto;\r\n  max-width: 100%;\r\n}\r\n\r\n/* Table */\r\n.ts-sources-table {\r\n  width: 100%;\r\n  min-width: 720px; /* ensures no overlap; mobile scroll instead */\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-sources-table thead th {\r\n  position: sticky;\r\n  top: 0;\r\n  background: var(--ts-surface-2);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  padding: 12px 14px;\r\n  text-align: left;\r\n  font-weight: 850;\r\n  color: var(--ts-text);\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-sources-table tbody td {\r\n  padding: 12px 14px;\r\n  border-bottom: 1px solid var(--ts-border);\r\n  color: var(--ts-text);\r\n  vertical-align: middle;\r\n  text-align: center; /* Center all cells by default */\r\n}\r\n\r\n/* First column (Source/Channel) stays left-aligned */\r\n.ts-sources-table tbody td:first-child {\r\n  text-align: left;\r\n}\r\n\r\n\r\n\r\n.ts-sources-table tbody tr:hover td {\r\n  background: rgba(148, 163, 184, 0.10);\r\n}\r\n\r\n[data-theme="dark"] .ts-sources-table tbody tr:hover td {\r\n  background: rgba(148, 163, 184, 0.08);\r\n}\r\n\r\n.ts-source-icon {\r\n  width: 28px;\r\n  height: 28px;\r\n  border-radius: 10px;\r\n  display: inline-grid;\r\n  place-items: center;\r\n  margin-right: 10px;\r\n  background: var(--ts-surface-2);\r\n  border: 1px solid var(--ts-border);\r\n  font-size: 14px;\r\n}\r\n\r\n/* Sorting */\r\n.ts-sortable {\r\n  cursor: pointer;\r\n  user-select: none;\r\n}\r\n\r\n.ts-sortable:hover {\r\n  background: rgba(14, 165, 233, 0.08);\r\n}\r\n\r\n.ts-sorted {\r\n  color: var(--ts-primary);\r\n}\r\n\r\n.ts-sort-icon {\r\n  color: var(--ts-text-subtle);\r\n  font-weight: 900;\r\n}\r\n\r\n/* Conversion Icon */\r\n.ts-conversion-icon {\r\n  margin-right: 4px;\r\n  vertical-align: middle;\r\n}\r\n\r\n/* Display Mode Toggle */\r\n.ts-display-toggle {\r\n  display: flex;\r\n  gap: 8px;\r\n  margin: 16px 0;\r\n  padding: 4px;\r\n  background: var(--ts-surface-2);\r\n  border-radius: var(--ts-radius-md);\r\n  width: fit-content;\r\n}\r\n\r\n.ts-toggle-btn {\r\n  padding: 8px 16px;\r\n  border: 1px solid transparent;\r\n  border-radius: var(--ts-radius-sm);\r\n  background: transparent;\r\n  color: var(--ts-text-subtle);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-toggle-btn:hover {\r\n  color: var(--ts-text);\r\n  background: var(--ts-surface);\r\n}\r\n\r\n.ts-toggle-btn--active {\r\n  background: var(--ts-surface);\r\n  color: var(--ts-primary);\r\n  border-color: var(--ts-border);\r\n  box-shadow: var(--ts-shadow-sm);\r\n}\r\n\r\n/* Channel View Styles */\r\n.ts-channel-row {\r\n  font-weight: 500;\r\n}\r\n\r\n.ts-channel-icon {\r\n  font-size: 18px;\r\n  margin-right: 8px;\r\n}\r\n\r\n.ts-source-count {\r\n  color: var(--ts-text-subtle);\r\n  font-size: 12px;\r\n  font-weight: 400;\r\n  margin-left: 6px;\r\n}\r\n\r\n.ts-percentage-bar {\r\n  position: relative;\r\n  width: 100%;\r\n  height: 24px;\r\n  background: var(--ts-surface-2);\r\n  border-radius: 4px;\r\n  overflow: hidden;\r\n}\r\n\r\n.ts-percentage-fill {\r\n  position: absolute;\r\n  left: 0;\r\n  top: 0;\r\n  height: 100%;\r\n  transition: width 0.3s ease;\r\n  opacity: 0.7;\r\n}\r\n\r\n.ts-percentage-text {\r\n  position: relative;\r\n  z-index: 1;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  height: 100%;\r\n  font-size: 12px;\r\n  font-weight: 700;\r\n  color: var(--ts-text);\r\n}\r\n\r\n/* Attribution Comparison Styles */\r\n.ts-revenue-sub {\r\n  font-size: 11px;\r\n  color: var(--ts-text-muted);\r\n  margin-top: 2px;\r\n  font-weight: normal;\r\n}\r\n\r\n.ts-table-header {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  justify-content: center;\r\n}\r\n\r\n.ts-table-header svg {\r\n  flex-shrink: 0;\r\n}\r\n\r\n/* Compact Attribution Selector */\r\n.ts-page-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: flex-start;\r\n  gap: 24px;\r\n  margin-bottom: 24px;\r\n}\r\n\r\n.ts-attribution-compact {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 8px 16px;\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  font-size: 14px;\r\n}\r\n\r\n.ts-attribution-compact label {\r\n  font-weight: 600;\r\n  color: var(--ts-text-muted);\r\n  margin: 0;\r\n}\r\n\r\n.ts-select-wrapper {\r\n  position: relative;\r\n}\r\n\r\n.ts-select {\r\n  padding: 6px 32px 6px 12px;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  background: var(--ts-surface-2);\r\n  color: var(--ts-text);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  appearance: none;\r\n  min-width: 150px;\r\n}\r\n\r\n.ts-select:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.ts-btn-icon {\r\n  padding: 6px;\r\n  background: transparent;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  cursor: pointer;\r\n  display: flex;\r\n  align-items: center;\r\n  color: var(--ts-text-muted);\r\n  transition: all 0.2s;\r\n}\r\n\r\n.ts-btn-icon:hover {\r\n  background: var(--ts-surface-2);\r\n  color: var(--ts-primary);\r\n}\r\n\r\n/* Modal Overlay */\r\n.ts-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 9999;\r\n}\r\n\r\n.ts-modal {\r\n  background: var(--ts-surface);\r\n  border-radius: var(--ts-radius-xl);\r\n  box-shadow: var(--ts-shadow-lg);\r\n  max-width: 600px;\r\n  width: 90%;\r\n  max-height: 80vh;\r\n  overflow-y: auto;\r\n}\r\n\r\n.ts-modal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: 20px 24px;\r\n  border-bottom: 1px solid var(--ts-border);\r\n}\r\n\r\n.ts-modal-header h3 {\r\n  margin: 0;\r\n  font-size: 18px;\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-modal-header button {\r\n  background: transparent;\r\n  border: none;\r\n  cursor: pointer;\r\n  color: var(--ts-text-muted);\r\n  padding: 4px;\r\n  display: flex;\r\n}\r\n\r\n/* Insights Widget */\r\n.ts-insights-widget {\r\n  background: linear-gradient(135deg, rgba(79, 70, 229, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%);\r\n  border: 1px solid var(--ts-border);\r\n  border-left: 4px solid var(--ts-primary);\r\n  border-radius: var(--ts-radius-lg);\r\n  padding: 16px 20px;\r\n  margin: 20px 0;\r\n}\r\n\r\n.ts-insights-header {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  margin-bottom: 12px;\r\n  color: var(--ts-primary);\r\n}\r\n\r\n.ts-insights-header h3 {\r\n  margin: 0;\r\n  font-size: 15px;\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-insights-list {\r\n  list-style: none;\r\n  margin: 0;\r\n  padding: 0;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 8px;\r\n}\r\n\r\n.ts-insights-list li {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  font-size: 14px;\r\n  line-height: 1.5;\r\n  color: var(--ts-text);\r\n}\r\n\r\n.ts-insights-list li svg {\r\n  flex-shrink: 0;\r\n  margin-top: 2px;\r\n  color: var(--ts-success);\r\n}\r\n\r\n/* Quick Filters */\r\n.ts-quick-filters {\r\n  display: flex;\r\n  gap: 8px;\r\n  margin: 16px 0;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-filter-btn {\r\n  padding: 8px 16px;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  background: var(--ts-surface);\r\n  color: var(--ts-text);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.2s;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n}\r\n\r\n.ts-filter-btn:hover {\r\n  background: var(--ts-surface-2);\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n.ts-filter-btn--active {\r\n  background: var(--ts-primary);\r\n  color: white;\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n'],sourceRoot:""}]);const o=A},78336:(n,r,e)=>{e.r(r),e.d(r,{default:()=>j});var s=e(74848),t=e(41594),a=e.n(t),A=e(37090),o=e(82381),i=e(12470),l=e(51481),c=e(67359),d=e(84013),C=e(28343),p=e(85072),g=e.n(p),m=e(97825),u=e.n(m),x=e(77659),B=e.n(x),h=e(55056),E=e.n(h),b=e(10540),v=e.n(b),f=e(41113),y=e.n(f),k=e(24099),w={};w.styleTagTransform=y(),w.setAttributes=E(),w.insert=B().bind(null,"head"),w.domAPI=u(),w.insertStyleElement=v();g()(k.A,w);k.A&&k.A.locals&&k.A.locals;const j=()=>{const{dateRange:n,segment:r}=(0,A.n)(),[e,p]=(0,t.useState)("sessions"),[g,m]=(0,t.useState)("desc"),[u,x]=(0,t.useState)("channels"),[B,h]=(0,t.useState)("last_touch"),[E,b]=(0,t.useState)("all"),{data:v,error:f,isLoading:y}=(0,o.S)("getTrafficSources",{date_start:(0,C.TJ)(n.start),date_end:(0,C.TJ)(n.end),segment:r},{refetchInterval:9e5,staleTime:6e5,retry:1}),k=n=>{e===n?m("desc"===g?"asc":"desc"):(p(n),m("desc"))},w=v?.sources?[...v.sources].sort((n,r)=>{let s,t;switch(e){case"sessions":default:s=n.sessions,t=r.sessions;break;case"conversions":s=n.conversions,t=r.conversions;break;case"revenue":s=n.revenue||0,t=r.revenue||0;break;case"conversion_rate":s=n.conversion_rate||0,t=r.conversion_rate||0;break;case"aov":s=n.aov||0,t=r.aov||0;break;case"first_touch_conversions":s=n.first_touch_conversions||0,t=r.first_touch_conversions||0;break;case"last_touch_conversions":s=n.last_touch_conversions||0,t=r.last_touch_conversions||0}return"desc"===g?t-s:s-t}):[],j=(0,t.useMemo)(()=>"all"===E?w:w.filter(n=>{const r=n.medium.toLowerCase();switch(E){case"paid":return"cpc"===r||"paid"===r;case"organic":return"organic"===r;case"social":return"social"===r;case"email":return"email"===r;default:return!0}}),[w,E]),_=j.reduce((n,r)=>n+r.sessions,0)||0,N=v?.total_conversions||0,z=j.reduce((n,r)=>n+(r.revenue||0),0)||0,S=_>0?(N/_*100).toFixed(1):"0.0",T="channels"===u&&j.length>0?Object.values((0,c.gk)(j)).sort((n,r)=>r.totalSessions-n.totalSessions):[],Y=n=>({google:"Search",facebook:"Users",instagram:"Instagram",twitter:"Twitter",linkedin:"Linkedin",youtube:"Youtube",pinterest:"Image",tiktok:"Music",reddit:"MessageSquare",direct:"Link",newsletter:"Mail",email:"Mail",referral:"ExternalLink",bing:"Search",yahoo:"Search"}[n.toLowerCase()]||"Globe"),I=(0,t.useMemo)(()=>{if(!j.length)return[];const n=[],r=_>0?N/_*100:0;if(T.length>0){const r=T[0],e=_>0?(r.totalSessions/_*100).toFixed(0):0;Number(e)>50&&n.push(`${r.channel} dominates with ${e}% of traffic - consider diversifying sources`)}const e=j.filter(n=>n.conversion_rate&&n.conversion_rate>1.5*r);e.length>0&&n.push(`${e[0].source}/${e[0].medium} has ${e[0].conversion_rate?.toFixed(1)}% conv. rate - replicate this success`);const s=j.some(n=>"organic"===n.medium.toLowerCase()),t=j.some(n=>"cpc"===n.medium.toLowerCase());!s&&j.length>1&&n.push("No organic traffic detected - improve SEO to reduce acquisition costs"),!t&&z>1e3&&n.push("Consider paid advertising to scale high-performing channels");const a=j.filter(n=>"(direct)"===n.source.toLowerCase()||"direct"===n.source.toLowerCase());return a.length>0&&a[0].sessions>.3*_&&n.push("Add UTM parameters to campaigns for better attribution tracking"),n.slice(0,3)},[j,T,_,N,z]);return(0,s.jsxs)("div",{className:"ts-page",children:[(0,s.jsxs)("div",{className:"ts-page-header",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"ts-page-title",children:(0,i.__)("Traffic Sources")}),(0,s.jsx)("p",{className:"ts-page-description",children:(0,i.__)("Analyze traffic performance with multi-touch attribution")})]}),!f&&!y&&(0,s.jsxs)("div",{className:"ts-attribution-selector",children:[(0,s.jsx)("label",{className:"ts-label",children:(0,i.__)("Attribution Model:")}),(0,s.jsx)("div",{className:"ts-select-wrapper",children:(0,s.jsxs)("select",{value:B,onChange:n=>h(n.target.value),className:"ts-select",children:[(0,s.jsx)("option",{value:"last_touch",children:(0,i.__)("Last-Touch")}),(0,s.jsx)("option",{value:"first_touch",children:(0,i.__)("First-Touch")}),(0,s.jsx)("option",{value:"linear",children:(0,i.__)("Linear")}),(0,s.jsx)("option",{value:"time_decay",children:(0,i.__)("Time-Decay")}),(0,s.jsx)("option",{value:"position_based",children:(0,i.__)("Position-Based")})]})}),(0,s.jsx)("span",{className:"ts-help-text",children:(0,i.__)("Choose how to attribute conversions to traffic sources")})]})]}),f?(0,s.jsxs)("div",{className:"ts-error-state",children:[(0,s.jsx)(l.I,{name:"AlertTriangle",size:48,color:"danger"}),(0,s.jsx)("h2",{children:(0,i.__)("Error Loading Data")}),(0,s.jsx)("p",{children:f?.message||(0,i.__)("Failed to load traffic sources data")})]}):y?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"ts-sources-summary",children:[1,2,3].map(n=>(0,s.jsx)(d.or,{},n))}),(0,s.jsx)("div",{className:"ts-sources-content",children:(0,s.jsx)(d.cU,{rows:8,columns:5})})]}):v&&v.sources&&0!==v.sources.length?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"ts-sources-summary",children:[(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"Users",size:24,color:"primary",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsxs)("div",{className:"ts-summary-value",children:[(v.unique_visitors||_).toLocaleString(),(0,s.jsxs)("span",{className:"ts-summary-sub",children:[_.toLocaleString()," sessions"]})]}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Unique Visitors")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"Link",size:24,color:"primary",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsx)("div",{className:"ts-summary-value",children:j.length}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Traffic Sources")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"CheckCircle",size:24,color:"success",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsx)("div",{className:"ts-summary-value",children:N.toLocaleString()}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Total Conversions")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"DollarSign",size:24,color:"success",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsx)("div",{className:"ts-summary-value",children:(0,C.vv)(z)}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Total Revenue")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"TrendingUp",size:24,color:"primary",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsxs)("div",{className:"ts-summary-value",children:[S,"%"]}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Conversion Rate")})]})]})]}),I.length>0&&(0,s.jsxs)("div",{className:"ts-insights-widget",children:[(0,s.jsxs)("div",{className:"ts-insights-header",children:[(0,s.jsx)(l.I,{name:"Lightbulb",size:18}),(0,s.jsx)("h3",{children:(0,i.__)("Insights & Recommendations")})]}),(0,s.jsx)("ul",{className:"ts-insights-list",children:I.map((n,r)=>(0,s.jsxs)("li",{children:[(0,s.jsx)(l.I,{name:"TrendingUp",size:14}),n]},r))})]}),(0,s.jsxs)("div",{className:"ts-quick-filters",children:[(0,s.jsx)("button",{className:"ts-filter-btn "+("all"===E?"ts-filter-btn--active":""),onClick:()=>b("all"),children:(0,i.__)("All Channels")}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("paid"===E?"ts-filter-btn--active":""),onClick:()=>b("paid"),children:["💰 ",(0,i.__)("Paid")]}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("organic"===E?"ts-filter-btn--active":""),onClick:()=>b("organic"),children:["🌱 ",(0,i.__)("Organic")]}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("social"===E?"ts-filter-btn--active":""),onClick:()=>b("social"),children:["👥 ",(0,i.__)("Social")]}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("email"===E?"ts-filter-btn--active":""),onClick:()=>b("email"),children:["📧 ",(0,i.__)("Email")]})]}),(0,s.jsxs)("div",{className:"ts-display-toggle",children:[(0,s.jsxs)("button",{className:"ts-toggle-btn "+("channels"===u?"ts-toggle-btn--active":""),onClick:()=>x("channels"),children:[(0,s.jsx)(l.I,{name:"Layers",size:16})," ",(0,i.__)("Group by Channels")]}),(0,s.jsxs)("button",{className:"ts-toggle-btn "+("sources"===u?"ts-toggle-btn--active":""),onClick:()=>x("sources"),children:[(0,s.jsx)(l.I,{name:"List",size:16})," ",(0,i.__)("View by Sources")]})]}),(0,s.jsx)("div",{className:"ts-sources-table-container",children:(0,s.jsxs)("table",{className:"ts-sources-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:["channels"===u?(0,s.jsx)("th",{children:(0,i.__)("Channel")}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("th",{children:(0,i.__)("Source")}),(0,s.jsx)("th",{children:(0,i.__)("Medium")})]}),(0,s.jsx)("th",{className:"ts-sortable "+("sessions"===e?"ts-sorted":""),onClick:()=>k("sessions"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Sessions"),"sessions"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("conversions"===e?"ts-sorted":""),onClick:()=>k("conversions"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Conversions"),"conversions"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("conversion_rate"===e?"ts-sorted":""),onClick:()=>k("conversion_rate"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Conv. Rate"),"conversion_rate"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("revenue"===e?"ts-sorted":""),onClick:()=>k("revenue"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Revenue"),"revenue"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("aov"===e?"ts-sorted":""),onClick:()=>k("aov"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("AOV"),"aov"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{children:(0,i.__)("% of Total")})]})}),(0,s.jsx)("tbody",{children:"channels"===u?T.map((n,r)=>{const e=_>0?(n.totalSessions/_*100).toFixed(1):"0.0",t=n.totalSessions>0?(n.totalConversions/n.totalSessions*100).toFixed(1):"0.0",A=n.totalConversions>0?n.totalRevenue/n.totalConversions:0;return(0,s.jsx)(a().Fragment,{children:(0,s.jsxs)("tr",{className:"ts-channel-row",children:[(0,s.jsxs)("td",{children:[(0,s.jsx)("span",{className:"ts-channel-icon",children:(0,s.jsx)(l.I,{name:(0,c.Vp)(n.channel),size:20})}),(0,s.jsx)("strong",{children:n.channel}),(0,s.jsxs)("span",{className:"ts-source-count",children:[" (",n.sources.length," ",1===n.sources.length?(0,i.__)("source"):(0,i.__)("sources"),")"]})]}),(0,s.jsx)("td",{children:n.totalSessions.toLocaleString()}),(0,s.jsxs)("td",{children:[n.totalConversions>0&&(0,s.jsx)(l.I,{name:"CheckCircle",size:14,color:"success",className:"ts-conversion-icon"}),n.totalConversions.toLocaleString()]}),(0,s.jsxs)("td",{children:[t,"%"]}),(0,s.jsx)("td",{className:"ts-revenue-cell",children:(0,C.vv)(n.totalRevenue)}),(0,s.jsx)("td",{children:(0,C.vv)(A)}),(0,s.jsx)("td",{children:(0,s.jsxs)("div",{className:"ts-percentage-bar",children:[(0,s.jsx)("div",{className:"ts-percentage-fill",style:{width:`${e}%`,backgroundColor:(0,c.rp)(n.channel)}}),(0,s.jsxs)("span",{className:"ts-percentage-text",children:[e,"%"]})]})})]})},r)}):j.map((n,r)=>{const e=_>0?(n.sessions/_*100).toFixed(1):"0.0";return(0,s.jsxs)("tr",{children:[(0,s.jsxs)("td",{children:[(0,s.jsx)("span",{className:"ts-source-icon",children:(0,s.jsx)(l.I,{name:Y(n.source),size:16})}),n.source]}),(0,s.jsx)("td",{children:n.medium}),(0,s.jsx)("td",{children:n.sessions.toLocaleString()}),(0,s.jsxs)("td",{children:[n.conversions>0&&(0,s.jsx)(l.I,{name:"CheckCircle",size:14,color:"success"}),n.conversions.toLocaleString()]}),(0,s.jsx)("td",{children:n.conversion_rate?n.conversion_rate.toFixed(1)+"%":"0.0%"}),(0,s.jsx)("td",{className:"ts-revenue-cell",children:(0,C.vv)(n.revenue||0)}),(0,s.jsx)("td",{children:(0,C.vv)(n.aov||0)}),(0,s.jsxs)("td",{children:[e,"%"]})]},r)})})]})})]}):(0,s.jsxs)("div",{className:"ts-empty-state",children:[(0,s.jsx)(l.I,{name:"BarChart2",size:48,color:"muted"}),(0,s.jsx)("h2",{children:(0,i.__)("No traffic data yet")}),(0,s.jsx)("p",{children:(0,i.__)("Start tracking to see where your visitors come from")})]})]})}}}]);
     1"use strict";(self.webpackChunktracksure_admin=self.webpackChunktracksure_admin||[]).push([[336],{24099:(n,r,e)=>{e.d(r,{A:()=>o});var s=e(71354),t=e.n(s),a=e(76314),A=e.n(a)()(t());A.push([n.id,'/* ==========================================================================\n   TrafficSourcesPage.css (Premium summary + table + sorting)\n   Matches TrafficSourcesPage.tsx markup exactly\n   ========================================================================== */\n\n.ts-sources-summary {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: var(--ts-spacing-lg);\n  margin-top: var(--ts-spacing-lg);\n  margin-bottom: var(--ts-spacing-lg);\n}\n\n.ts-summary-card {\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-xl);\n  box-shadow: var(--ts-shadow-sm);\n  padding: 16px 18px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  min-width: 0;\n}\n\n.ts-summary-icon {\n  width: 32px;\n  height: 32px;\n  border-radius: 16px;\n  display: grid;\n  place-items: center;\n  font-size: 20px;\n  background: var(--ts-surface-2);\n  border: 1px solid var(--ts-border);\n  flex: 0 0 auto;\n}\n\n.ts-summary-content {\n  min-width: 0;\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.ts-summary-value {\n  font-size: 18px;\n  font-weight: 900;\n  letter-spacing: -0.02em;\n  line-height: 1.1;\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n.ts-summary-sub {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--ts-text-muted);\n  letter-spacing: 0;\n}\n\n.ts-summary-label {\n  color: var(--ts-text-muted);\n  font-weight: 650;\n  font-size: 13px;\n}\n\n/* View Mode Tabs */\n.ts-view-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: var(--ts-spacing-lg);\n  border-bottom: 1px solid var(--ts-border);\n  padding-bottom: 8px;\n}\n\n.ts-view-tab {\n  padding: 10px 18px;\n  border: none;\n  background: transparent;\n  color: var(--ts-text-muted);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border-bottom: 2px solid transparent;\n  transition: all 0.2s;\n  position: relative;\n  bottom: -9px;\n}\n\n.ts-view-tab:hover {\n  color: var(--ts-text);\n  background: rgba(14, 165, 233, 0.05);\n  border-radius: var(--ts-radius-lg) var(--ts-radius-lg) 0 0;\n}\n\n.ts-view-tab--active {\n  color: var(--ts-primary);\n  border-bottom-color: var(--ts-primary);\n}\n\n/* Table container */\n.ts-sources-table-container {\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-xl);\n  box-shadow: var(--ts-shadow-sm);\n  overflow: hidden;\n}\n\n.ts-sources-table-container {\n  overflow: auto;\n  max-width: 100%;\n}\n\n/* Table */\n.ts-sources-table {\n  width: 100%;\n  min-width: 720px; /* ensures no overlap; mobile scroll instead */\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-sources-table thead th {\n  position: sticky;\n  top: 0;\n  background: var(--ts-surface-2);\n  border-bottom: 1px solid var(--ts-border);\n  padding: 12px 14px;\n  text-align: left;\n  font-weight: 850;\n  color: var(--ts-text);\n  white-space: nowrap;\n}\n\n.ts-sources-table tbody td {\n  padding: 12px 14px;\n  border-bottom: 1px solid var(--ts-border);\n  color: var(--ts-text);\n  vertical-align: middle;\n  text-align: center; /* Center all cells by default */\n}\n\n/* First column (Source/Channel) stays left-aligned */\n.ts-sources-table tbody td:first-child {\n  text-align: left;\n}\n\n\n\n.ts-sources-table tbody tr:hover td {\n  background: rgba(148, 163, 184, 0.10);\n}\n\n[data-theme="dark"] .ts-sources-table tbody tr:hover td {\n  background: rgba(148, 163, 184, 0.08);\n}\n\n.ts-source-icon {\n  width: 28px;\n  height: 28px;\n  border-radius: 10px;\n  display: inline-grid;\n  place-items: center;\n  margin-right: 10px;\n  background: var(--ts-surface-2);\n  border: 1px solid var(--ts-border);\n  font-size: 14px;\n}\n\n/* Sorting */\n.ts-sortable {\n  cursor: pointer;\n  user-select: none;\n}\n\n.ts-sortable:hover {\n  background: rgba(14, 165, 233, 0.08);\n}\n\n.ts-sorted {\n  color: var(--ts-primary);\n}\n\n.ts-sort-icon {\n  color: var(--ts-text-subtle);\n  font-weight: 900;\n}\n\n/* Conversion Icon */\n.ts-conversion-icon {\n  margin-right: 4px;\n  vertical-align: middle;\n}\n\n/* Display Mode Toggle */\n.ts-display-toggle {\n  display: flex;\n  gap: 8px;\n  margin: 16px 0;\n  padding: 4px;\n  background: var(--ts-surface-2);\n  border-radius: var(--ts-radius-md);\n  width: fit-content;\n}\n\n.ts-toggle-btn {\n  padding: 8px 16px;\n  border: 1px solid transparent;\n  border-radius: var(--ts-radius-sm);\n  background: transparent;\n  color: var(--ts-text-subtle);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ts-toggle-btn:hover {\n  color: var(--ts-text);\n  background: var(--ts-surface);\n}\n\n.ts-toggle-btn--active {\n  background: var(--ts-surface);\n  color: var(--ts-primary);\n  border-color: var(--ts-border);\n  box-shadow: var(--ts-shadow-sm);\n}\n\n/* Channel View Styles */\n.ts-channel-row {\n  font-weight: 500;\n}\n\n.ts-channel-icon {\n  font-size: 18px;\n  margin-right: 8px;\n}\n\n.ts-source-count {\n  color: var(--ts-text-subtle);\n  font-size: 12px;\n  font-weight: 400;\n  margin-left: 6px;\n}\n\n.ts-percentage-bar {\n  position: relative;\n  width: 100%;\n  height: 24px;\n  background: var(--ts-surface-2);\n  border-radius: 4px;\n  overflow: hidden;\n}\n\n.ts-percentage-fill {\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 100%;\n  transition: width 0.3s ease;\n  opacity: 0.7;\n}\n\n.ts-percentage-text {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  font-size: 12px;\n  font-weight: 700;\n  color: var(--ts-text);\n}\n\n/* Attribution Comparison Styles */\n.ts-revenue-sub {\n  font-size: 11px;\n  color: var(--ts-text-muted);\n  margin-top: 2px;\n  font-weight: normal;\n}\n\n.ts-table-header {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  justify-content: center;\n}\n\n.ts-table-header svg {\n  flex-shrink: 0;\n}\n\n/* Compact Attribution Selector */\n.ts-page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: 24px;\n  margin-bottom: 24px;\n}\n\n.ts-attribution-compact {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 16px;\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  font-size: 14px;\n}\n\n.ts-attribution-compact label {\n  font-weight: 600;\n  color: var(--ts-text-muted);\n  margin: 0;\n}\n\n.ts-select-wrapper {\n  position: relative;\n}\n\n.ts-select {\n  padding: 6px 32px 6px 12px;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  background: var(--ts-surface-2);\n  color: var(--ts-text);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  appearance: none;\n  min-width: 150px;\n}\n\n.ts-select:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.ts-btn-icon {\n  padding: 6px;\n  background: transparent;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  color: var(--ts-text-muted);\n  transition: all 0.2s;\n}\n\n.ts-btn-icon:hover {\n  background: var(--ts-surface-2);\n  color: var(--ts-primary);\n}\n\n/* Modal Overlay */\n.ts-modal-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 9999;\n}\n\n\n\n.ts-modal-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 24px;\n  border-bottom: 1px solid var(--ts-border);\n}\n\n.ts-modal-header h3 {\n  margin: 0;\n  font-size: 18px;\n  font-weight: 700;\n}\n\n.ts-modal-header button {\n  background: transparent;\n  border: none;\n  cursor: pointer;\n  color: var(--ts-text-muted);\n  padding: 4px;\n  display: flex;\n}\n\n/* Insights Widget */\n.ts-insights-widget {\n  background: linear-gradient(135deg, rgba(79, 70, 229, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%);\n  border: 1px solid var(--ts-border);\n  border-left: 4px solid var(--ts-primary);\n  border-radius: var(--ts-radius-lg);\n  padding: 16px 20px;\n  margin: 20px 0;\n}\n\n.ts-insights-header {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 12px;\n  color: var(--ts-primary);\n}\n\n.ts-insights-header h3 {\n  margin: 0;\n  font-size: 15px;\n  font-weight: 700;\n}\n\n.ts-insights-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.ts-insights-list li {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  font-size: 14px;\n  line-height: 1.5;\n  color: var(--ts-text);\n}\n\n.ts-insights-list li svg {\n  flex-shrink: 0;\n  margin-top: 2px;\n  color: var(--ts-success);\n}\n\n/* Quick Filters */\n.ts-quick-filters {\n  display: flex;\n  gap: 8px;\n  margin: 16px 0;\n  flex-wrap: wrap;\n}\n\n.ts-filter-btn {\n  padding: 8px 16px;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  background: var(--ts-surface);\n  color: var(--ts-text);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.ts-filter-btn:hover {\n  background: var(--ts-surface-2);\n  border-color: var(--ts-primary);\n}\n\n.ts-filter-btn--active {\n  background: var(--ts-primary);\n  color: white;\n  border-color: var(--ts-primary);\n}\n\n',"",{version:3,sources:["webpack://./src/styles/pages/TrafficSourcesPage.css"],names:[],mappings:"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",sourcesContent:['/* ==========================================================================\r\n   TrafficSourcesPage.css (Premium summary + table + sorting)\r\n   Matches TrafficSourcesPage.tsx markup exactly\r\n   ========================================================================== */\r\n\r\n.ts-sources-summary {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\r\n  gap: var(--ts-spacing-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n  margin-bottom: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-summary-card {\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-xl);\r\n  box-shadow: var(--ts-shadow-sm);\r\n  padding: 16px 18px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-summary-icon {\r\n  width: 32px;\r\n  height: 32px;\r\n  border-radius: 16px;\r\n  display: grid;\r\n  place-items: center;\r\n  font-size: 20px;\r\n  background: var(--ts-surface-2);\r\n  border: 1px solid var(--ts-border);\r\n  flex: 0 0 auto;\r\n}\r\n\r\n.ts-summary-content {\r\n  min-width: 0;\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 4px;\r\n}\r\n\r\n.ts-summary-value {\r\n  font-size: 18px;\r\n  font-weight: 900;\r\n  letter-spacing: -0.02em;\r\n  line-height: 1.1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 2px;\r\n}\r\n\r\n.ts-summary-sub {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-muted);\r\n  letter-spacing: 0;\r\n}\r\n\r\n.ts-summary-label {\r\n  color: var(--ts-text-muted);\r\n  font-weight: 650;\r\n  font-size: 13px;\r\n}\r\n\r\n/* View Mode Tabs */\r\n.ts-view-tabs {\r\n  display: flex;\r\n  gap: 8px;\r\n  margin-bottom: var(--ts-spacing-lg);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  padding-bottom: 8px;\r\n}\r\n\r\n.ts-view-tab {\r\n  padding: 10px 18px;\r\n  border: none;\r\n  background: transparent;\r\n  color: var(--ts-text-muted);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  border-bottom: 2px solid transparent;\r\n  transition: all 0.2s;\r\n  position: relative;\r\n  bottom: -9px;\r\n}\r\n\r\n.ts-view-tab:hover {\r\n  color: var(--ts-text);\r\n  background: rgba(14, 165, 233, 0.05);\r\n  border-radius: var(--ts-radius-lg) var(--ts-radius-lg) 0 0;\r\n}\r\n\r\n.ts-view-tab--active {\r\n  color: var(--ts-primary);\r\n  border-bottom-color: var(--ts-primary);\r\n}\r\n\r\n/* Table container */\r\n.ts-sources-table-container {\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-xl);\r\n  box-shadow: var(--ts-shadow-sm);\r\n  overflow: hidden;\r\n}\r\n\r\n.ts-sources-table-container {\r\n  overflow: auto;\r\n  max-width: 100%;\r\n}\r\n\r\n/* Table */\r\n.ts-sources-table {\r\n  width: 100%;\r\n  min-width: 720px; /* ensures no overlap; mobile scroll instead */\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-sources-table thead th {\r\n  position: sticky;\r\n  top: 0;\r\n  background: var(--ts-surface-2);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  padding: 12px 14px;\r\n  text-align: left;\r\n  font-weight: 850;\r\n  color: var(--ts-text);\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-sources-table tbody td {\r\n  padding: 12px 14px;\r\n  border-bottom: 1px solid var(--ts-border);\r\n  color: var(--ts-text);\r\n  vertical-align: middle;\r\n  text-align: center; /* Center all cells by default */\r\n}\r\n\r\n/* First column (Source/Channel) stays left-aligned */\r\n.ts-sources-table tbody td:first-child {\r\n  text-align: left;\r\n}\r\n\r\n\r\n\r\n.ts-sources-table tbody tr:hover td {\r\n  background: rgba(148, 163, 184, 0.10);\r\n}\r\n\r\n[data-theme="dark"] .ts-sources-table tbody tr:hover td {\r\n  background: rgba(148, 163, 184, 0.08);\r\n}\r\n\r\n.ts-source-icon {\r\n  width: 28px;\r\n  height: 28px;\r\n  border-radius: 10px;\r\n  display: inline-grid;\r\n  place-items: center;\r\n  margin-right: 10px;\r\n  background: var(--ts-surface-2);\r\n  border: 1px solid var(--ts-border);\r\n  font-size: 14px;\r\n}\r\n\r\n/* Sorting */\r\n.ts-sortable {\r\n  cursor: pointer;\r\n  user-select: none;\r\n}\r\n\r\n.ts-sortable:hover {\r\n  background: rgba(14, 165, 233, 0.08);\r\n}\r\n\r\n.ts-sorted {\r\n  color: var(--ts-primary);\r\n}\r\n\r\n.ts-sort-icon {\r\n  color: var(--ts-text-subtle);\r\n  font-weight: 900;\r\n}\r\n\r\n/* Conversion Icon */\r\n.ts-conversion-icon {\r\n  margin-right: 4px;\r\n  vertical-align: middle;\r\n}\r\n\r\n/* Display Mode Toggle */\r\n.ts-display-toggle {\r\n  display: flex;\r\n  gap: 8px;\r\n  margin: 16px 0;\r\n  padding: 4px;\r\n  background: var(--ts-surface-2);\r\n  border-radius: var(--ts-radius-md);\r\n  width: fit-content;\r\n}\r\n\r\n.ts-toggle-btn {\r\n  padding: 8px 16px;\r\n  border: 1px solid transparent;\r\n  border-radius: var(--ts-radius-sm);\r\n  background: transparent;\r\n  color: var(--ts-text-subtle);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-toggle-btn:hover {\r\n  color: var(--ts-text);\r\n  background: var(--ts-surface);\r\n}\r\n\r\n.ts-toggle-btn--active {\r\n  background: var(--ts-surface);\r\n  color: var(--ts-primary);\r\n  border-color: var(--ts-border);\r\n  box-shadow: var(--ts-shadow-sm);\r\n}\r\n\r\n/* Channel View Styles */\r\n.ts-channel-row {\r\n  font-weight: 500;\r\n}\r\n\r\n.ts-channel-icon {\r\n  font-size: 18px;\r\n  margin-right: 8px;\r\n}\r\n\r\n.ts-source-count {\r\n  color: var(--ts-text-subtle);\r\n  font-size: 12px;\r\n  font-weight: 400;\r\n  margin-left: 6px;\r\n}\r\n\r\n.ts-percentage-bar {\r\n  position: relative;\r\n  width: 100%;\r\n  height: 24px;\r\n  background: var(--ts-surface-2);\r\n  border-radius: 4px;\r\n  overflow: hidden;\r\n}\r\n\r\n.ts-percentage-fill {\r\n  position: absolute;\r\n  left: 0;\r\n  top: 0;\r\n  height: 100%;\r\n  transition: width 0.3s ease;\r\n  opacity: 0.7;\r\n}\r\n\r\n.ts-percentage-text {\r\n  position: relative;\r\n  z-index: 1;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  height: 100%;\r\n  font-size: 12px;\r\n  font-weight: 700;\r\n  color: var(--ts-text);\r\n}\r\n\r\n/* Attribution Comparison Styles */\r\n.ts-revenue-sub {\r\n  font-size: 11px;\r\n  color: var(--ts-text-muted);\r\n  margin-top: 2px;\r\n  font-weight: normal;\r\n}\r\n\r\n.ts-table-header {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  justify-content: center;\r\n}\r\n\r\n.ts-table-header svg {\r\n  flex-shrink: 0;\r\n}\r\n\r\n/* Compact Attribution Selector */\r\n.ts-page-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: flex-start;\r\n  gap: 24px;\r\n  margin-bottom: 24px;\r\n}\r\n\r\n.ts-attribution-compact {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 8px 16px;\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  font-size: 14px;\r\n}\r\n\r\n.ts-attribution-compact label {\r\n  font-weight: 600;\r\n  color: var(--ts-text-muted);\r\n  margin: 0;\r\n}\r\n\r\n.ts-select-wrapper {\r\n  position: relative;\r\n}\r\n\r\n.ts-select {\r\n  padding: 6px 32px 6px 12px;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  background: var(--ts-surface-2);\r\n  color: var(--ts-text);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  appearance: none;\r\n  min-width: 150px;\r\n}\r\n\r\n.ts-select:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.ts-btn-icon {\r\n  padding: 6px;\r\n  background: transparent;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  cursor: pointer;\r\n  display: flex;\r\n  align-items: center;\r\n  color: var(--ts-text-muted);\r\n  transition: all 0.2s;\r\n}\r\n\r\n.ts-btn-icon:hover {\r\n  background: var(--ts-surface-2);\r\n  color: var(--ts-primary);\r\n}\r\n\r\n/* Modal Overlay */\r\n.ts-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 9999;\r\n}\r\n\r\n\r\n\r\n.ts-modal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: 20px 24px;\r\n  border-bottom: 1px solid var(--ts-border);\r\n}\r\n\r\n.ts-modal-header h3 {\r\n  margin: 0;\r\n  font-size: 18px;\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-modal-header button {\r\n  background: transparent;\r\n  border: none;\r\n  cursor: pointer;\r\n  color: var(--ts-text-muted);\r\n  padding: 4px;\r\n  display: flex;\r\n}\r\n\r\n/* Insights Widget */\r\n.ts-insights-widget {\r\n  background: linear-gradient(135deg, rgba(79, 70, 229, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%);\r\n  border: 1px solid var(--ts-border);\r\n  border-left: 4px solid var(--ts-primary);\r\n  border-radius: var(--ts-radius-lg);\r\n  padding: 16px 20px;\r\n  margin: 20px 0;\r\n}\r\n\r\n.ts-insights-header {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  margin-bottom: 12px;\r\n  color: var(--ts-primary);\r\n}\r\n\r\n.ts-insights-header h3 {\r\n  margin: 0;\r\n  font-size: 15px;\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-insights-list {\r\n  list-style: none;\r\n  margin: 0;\r\n  padding: 0;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 8px;\r\n}\r\n\r\n.ts-insights-list li {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  font-size: 14px;\r\n  line-height: 1.5;\r\n  color: var(--ts-text);\r\n}\r\n\r\n.ts-insights-list li svg {\r\n  flex-shrink: 0;\r\n  margin-top: 2px;\r\n  color: var(--ts-success);\r\n}\r\n\r\n/* Quick Filters */\r\n.ts-quick-filters {\r\n  display: flex;\r\n  gap: 8px;\r\n  margin: 16px 0;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-filter-btn {\r\n  padding: 8px 16px;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  background: var(--ts-surface);\r\n  color: var(--ts-text);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.2s;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n}\r\n\r\n.ts-filter-btn:hover {\r\n  background: var(--ts-surface-2);\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n.ts-filter-btn--active {\r\n  background: var(--ts-primary);\r\n  color: white;\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n'],sourceRoot:""}]);const o=A},78336:(n,r,e)=>{e.r(r),e.d(r,{default:()=>w});var s=e(74848),t=e(41594),a=e.n(t),A=e(37090),o=e(82381),i=e(12470),l=e(51481),c=e(67359),d=e(84013),C=e(28343),p=e(85072),g=e.n(p),m=e(97825),u=e.n(m),x=e(77659),B=e.n(x),h=e(55056),E=e.n(h),b=e(10540),v=e.n(b),f=e(41113),y=e.n(f),k=e(24099),j={};j.styleTagTransform=y(),j.setAttributes=E(),j.insert=B().bind(null,"head"),j.domAPI=u(),j.insertStyleElement=v();g()(k.A,j);k.A&&k.A.locals&&k.A.locals;const w=()=>{const{dateRange:n,segment:r}=(0,A.n)(),[e,p]=(0,t.useState)("sessions"),[g,m]=(0,t.useState)("desc"),[u,x]=(0,t.useState)("channels"),[B,h]=(0,t.useState)("last_touch"),[E,b]=(0,t.useState)("all"),{data:v,error:f,isLoading:y}=(0,o.S)("getTrafficSources",{date_start:(0,C.TJ)(n.start),date_end:(0,C.TJ)(n.end),segment:r},{refetchInterval:9e5,staleTime:6e5,retry:1}),k=n=>{e===n?m("desc"===g?"asc":"desc"):(p(n),m("desc"))},j=v?.sources?[...v.sources].sort((n,r)=>{let s,t;switch(e){case"sessions":default:s=n.sessions,t=r.sessions;break;case"conversions":s=n.conversions,t=r.conversions;break;case"revenue":s=n.revenue||0,t=r.revenue||0;break;case"conversion_rate":s=n.conversion_rate||0,t=r.conversion_rate||0;break;case"aov":s=n.aov||0,t=r.aov||0;break;case"first_touch_conversions":s=n.first_touch_conversions||0,t=r.first_touch_conversions||0;break;case"last_touch_conversions":s=n.last_touch_conversions||0,t=r.last_touch_conversions||0}return"desc"===g?t-s:s-t}):[],w=(0,t.useMemo)(()=>"all"===E?j:j.filter(n=>{const r=n.medium.toLowerCase();switch(E){case"paid":return"cpc"===r||"paid"===r;case"organic":return"organic"===r;case"social":return"social"===r;case"email":return"email"===r;default:return!0}}),[j,E]),_=w.reduce((n,r)=>n+r.sessions,0)||0,N=v?.total_conversions||0,z=w.reduce((n,r)=>n+(r.revenue||0),0)||0,S=_>0?(N/_*100).toFixed(1):"0.0",T="channels"===u&&w.length>0?Object.values((0,c.gk)(w)).sort((n,r)=>r.totalSessions-n.totalSessions):[],Y=n=>({google:"Search",facebook:"Users",instagram:"Instagram",twitter:"Twitter",linkedin:"Linkedin",youtube:"Youtube",pinterest:"Image",tiktok:"Music",reddit:"MessageSquare",direct:"Link",newsletter:"Mail",email:"Mail",referral:"ExternalLink",bing:"Search",yahoo:"Search"}[n.toLowerCase()]||"Globe"),I=(0,t.useMemo)(()=>{if(!w.length)return[];const n=[],r=_>0?N/_*100:0;if(T.length>0){const r=T[0],e=_>0?(r.totalSessions/_*100).toFixed(0):0;Number(e)>50&&n.push(`${r.channel} dominates with ${e}% of traffic - consider diversifying sources`)}const e=w.filter(n=>n.conversion_rate&&n.conversion_rate>1.5*r);e.length>0&&n.push(`${e[0].source}/${e[0].medium} has ${e[0].conversion_rate?.toFixed(1)}% conv. rate - replicate this success`);const s=w.some(n=>"organic"===n.medium.toLowerCase()),t=w.some(n=>"cpc"===n.medium.toLowerCase());!s&&w.length>1&&n.push("No organic traffic detected - improve SEO to reduce acquisition costs"),!t&&z>1e3&&n.push("Consider paid advertising to scale high-performing channels");const a=w.filter(n=>"(direct)"===n.source.toLowerCase()||"direct"===n.source.toLowerCase());return a.length>0&&a[0].sessions>.3*_&&n.push("Add UTM parameters to campaigns for better attribution tracking"),n.slice(0,3)},[w,T,_,N,z]);return(0,s.jsxs)("div",{className:"ts-page",children:[(0,s.jsxs)("div",{className:"ts-page-header",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"ts-page-title",children:(0,i.__)("Traffic Sources")}),(0,s.jsx)("p",{className:"ts-page-description",children:(0,i.__)("Analyze traffic performance with multi-touch attribution")})]}),!f&&!y&&(0,s.jsxs)("div",{className:"ts-attribution-selector",children:[(0,s.jsx)("label",{className:"ts-label",children:(0,i.__)("Attribution Model:")}),(0,s.jsx)("div",{className:"ts-select-wrapper",children:(0,s.jsxs)("select",{value:B,onChange:n=>h(n.target.value),className:"ts-select",children:[(0,s.jsx)("option",{value:"last_touch",children:(0,i.__)("Last-Touch")}),(0,s.jsx)("option",{value:"first_touch",children:(0,i.__)("First-Touch")}),(0,s.jsx)("option",{value:"linear",children:(0,i.__)("Linear")}),(0,s.jsx)("option",{value:"time_decay",children:(0,i.__)("Time-Decay")}),(0,s.jsx)("option",{value:"position_based",children:(0,i.__)("Position-Based")})]})}),(0,s.jsx)("span",{className:"ts-help-text",children:(0,i.__)("Choose how to attribute conversions to traffic sources")})]})]}),f?(0,s.jsxs)("div",{className:"ts-error-state",children:[(0,s.jsx)(l.I,{name:"AlertTriangle",size:48,color:"danger"}),(0,s.jsx)("h2",{children:(0,i.__)("Error Loading Data")}),(0,s.jsx)("p",{children:f?.message||(0,i.__)("Failed to load traffic sources data")})]}):y?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"ts-sources-summary",children:[1,2,3].map(n=>(0,s.jsx)(d.or,{},n))}),(0,s.jsx)("div",{className:"ts-sources-content",children:(0,s.jsx)(d.cU,{rows:8,columns:5})})]}):v&&v.sources&&0!==v.sources.length?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"ts-sources-summary",children:[(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"Users",size:24,color:"primary",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsxs)("div",{className:"ts-summary-value",children:[(v.unique_visitors||_).toLocaleString(),(0,s.jsxs)("span",{className:"ts-summary-sub",children:[_.toLocaleString()," sessions"]})]}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Unique Visitors")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"Link",size:24,color:"primary",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsx)("div",{className:"ts-summary-value",children:w.length}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Traffic Sources")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"CheckCircle",size:24,color:"success",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsx)("div",{className:"ts-summary-value",children:N.toLocaleString()}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Total Conversions")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"DollarSign",size:24,color:"success",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsx)("div",{className:"ts-summary-value",children:(0,C.vv)(z)}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Total Revenue")})]})]}),(0,s.jsxs)("div",{className:"ts-summary-card",children:[(0,s.jsx)(l.I,{name:"TrendingUp",size:24,color:"primary",className:"ts-summary-icon"}),(0,s.jsxs)("div",{className:"ts-summary-content",children:[(0,s.jsxs)("div",{className:"ts-summary-value",children:[S,"%"]}),(0,s.jsx)("div",{className:"ts-summary-label",children:(0,i.__)("Conversion Rate")})]})]})]}),I.length>0&&(0,s.jsxs)("div",{className:"ts-insights-widget",children:[(0,s.jsxs)("div",{className:"ts-insights-header",children:[(0,s.jsx)(l.I,{name:"Lightbulb",size:18}),(0,s.jsx)("h3",{children:(0,i.__)("Insights & Recommendations")})]}),(0,s.jsx)("ul",{className:"ts-insights-list",children:I.map((n,r)=>(0,s.jsxs)("li",{children:[(0,s.jsx)(l.I,{name:"TrendingUp",size:14}),n]},r))})]}),(0,s.jsxs)("div",{className:"ts-quick-filters",children:[(0,s.jsx)("button",{className:"ts-filter-btn "+("all"===E?"ts-filter-btn--active":""),onClick:()=>b("all"),children:(0,i.__)("All Channels")}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("paid"===E?"ts-filter-btn--active":""),onClick:()=>b("paid"),children:["💰 ",(0,i.__)("Paid")]}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("organic"===E?"ts-filter-btn--active":""),onClick:()=>b("organic"),children:["🌱 ",(0,i.__)("Organic")]}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("social"===E?"ts-filter-btn--active":""),onClick:()=>b("social"),children:["👥 ",(0,i.__)("Social")]}),(0,s.jsxs)("button",{className:"ts-filter-btn "+("email"===E?"ts-filter-btn--active":""),onClick:()=>b("email"),children:["📧 ",(0,i.__)("Email")]})]}),(0,s.jsxs)("div",{className:"ts-display-toggle",children:[(0,s.jsxs)("button",{className:"ts-toggle-btn "+("channels"===u?"ts-toggle-btn--active":""),onClick:()=>x("channels"),children:[(0,s.jsx)(l.I,{name:"Layers",size:16})," ",(0,i.__)("Group by Channels")]}),(0,s.jsxs)("button",{className:"ts-toggle-btn "+("sources"===u?"ts-toggle-btn--active":""),onClick:()=>x("sources"),children:[(0,s.jsx)(l.I,{name:"List",size:16})," ",(0,i.__)("View by Sources")]})]}),(0,s.jsx)("div",{className:"ts-sources-table-container",children:(0,s.jsxs)("table",{className:"ts-sources-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:["channels"===u?(0,s.jsx)("th",{children:(0,i.__)("Channel")}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("th",{children:(0,i.__)("Source")}),(0,s.jsx)("th",{children:(0,i.__)("Medium")})]}),(0,s.jsx)("th",{className:"ts-sortable "+("sessions"===e?"ts-sorted":""),onClick:()=>k("sessions"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Sessions"),"sessions"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("conversions"===e?"ts-sorted":""),onClick:()=>k("conversions"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Conversions"),"conversions"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("conversion_rate"===e?"ts-sorted":""),onClick:()=>k("conversion_rate"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Conv. Rate"),"conversion_rate"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("revenue"===e?"ts-sorted":""),onClick:()=>k("revenue"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("Revenue"),"revenue"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{className:"ts-sortable "+("aov"===e?"ts-sorted":""),onClick:()=>k("aov"),children:(0,s.jsxs)("div",{className:"ts-table-header",children:[(0,i.__)("AOV"),"aov"===e&&(0,s.jsx)(l.I,{name:"desc"===g?"ChevronDown":"ChevronUp",size:16,className:"ts-sort-icon"})]})}),(0,s.jsx)("th",{children:(0,i.__)("% of Total")})]})}),(0,s.jsx)("tbody",{children:"channels"===u?T.map((n,r)=>{const e=_>0?(n.totalSessions/_*100).toFixed(1):"0.0",t=n.totalSessions>0?(n.totalConversions/n.totalSessions*100).toFixed(1):"0.0",A=n.totalConversions>0?n.totalRevenue/n.totalConversions:0;return(0,s.jsx)(a().Fragment,{children:(0,s.jsxs)("tr",{className:"ts-channel-row",children:[(0,s.jsxs)("td",{children:[(0,s.jsx)("span",{className:"ts-channel-icon",children:(0,s.jsx)(l.I,{name:(0,c.Vp)(n.channel),size:20})}),(0,s.jsx)("strong",{children:n.channel}),(0,s.jsxs)("span",{className:"ts-source-count",children:[" (",n.sources.length," ",1===n.sources.length?(0,i.__)("source"):(0,i.__)("sources"),")"]})]}),(0,s.jsx)("td",{children:n.totalSessions.toLocaleString()}),(0,s.jsxs)("td",{children:[n.totalConversions>0&&(0,s.jsx)(l.I,{name:"CheckCircle",size:14,color:"success",className:"ts-conversion-icon"}),n.totalConversions.toLocaleString()]}),(0,s.jsxs)("td",{children:[t,"%"]}),(0,s.jsx)("td",{className:"ts-revenue-cell",children:(0,C.vv)(n.totalRevenue)}),(0,s.jsx)("td",{children:(0,C.vv)(A)}),(0,s.jsx)("td",{children:(0,s.jsxs)("div",{className:"ts-percentage-bar",children:[(0,s.jsx)("div",{className:"ts-percentage-fill",style:{width:`${e}%`,backgroundColor:(0,c.rp)(n.channel)}}),(0,s.jsxs)("span",{className:"ts-percentage-text",children:[e,"%"]})]})})]})},r)}):w.map((n,r)=>{const e=_>0?(n.sessions/_*100).toFixed(1):"0.0";return(0,s.jsxs)("tr",{children:[(0,s.jsxs)("td",{children:[(0,s.jsx)("span",{className:"ts-source-icon",children:(0,s.jsx)(l.I,{name:Y(n.source),size:16})}),n.source]}),(0,s.jsx)("td",{children:n.medium}),(0,s.jsx)("td",{children:n.sessions.toLocaleString()}),(0,s.jsxs)("td",{children:[n.conversions>0&&(0,s.jsx)(l.I,{name:"CheckCircle",size:14,color:"success"}),n.conversions.toLocaleString()]}),(0,s.jsx)("td",{children:n.conversion_rate?n.conversion_rate.toFixed(1)+"%":"0.0%"}),(0,s.jsx)("td",{className:"ts-revenue-cell",children:(0,C.vv)(n.revenue||0)}),(0,s.jsx)("td",{children:(0,C.vv)(n.aov||0)}),(0,s.jsxs)("td",{children:[e,"%"]})]},r)})})]})})]}):(0,s.jsxs)("div",{className:"ts-empty-state",children:[(0,s.jsx)(l.I,{name:"BarChart2",size:48,color:"muted"}),(0,s.jsx)("h2",{children:(0,i.__)("No traffic data yet")}),(0,s.jsx)("p",{children:(0,i.__)("Start tracking to see where your visitors come from")})]})]})}}}]);
    22//# sourceMappingURL=336.js.map
  • tracksure/trunk/admin/dist/637.js

    r3472561 r3473414  
    1 "use strict";(self.webpackChunktracksure_admin=self.webpackChunktracksure_admin||[]).push([[637],{9570:r=>{r.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%2712%27 viewBox=%270 0 12 12%27%3E%3Cpath fill=%27%23666%27 d=%27M6 8L2 4h8z%27/%3E%3C/svg%3E"},12577:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Goals Overview Dashboard Styles\n * \n * Theme-aware styling for the goals dashboard with:\n * - KPI cards grid\n * - Chart visualization\n * - Top goals list\n * - Dark/light theme support\n * - Responsive design\n * \n * @package TrackSure\n * @since 2.1.0\n */\n\n/* ========================================\n   Overview Container\n   ======================================== */\n.ts-goals-overview {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-lg);\n}\n\n/* ========================================\n   KPIs Row\n   ======================================== */\n.ts-goals-overview__kpis {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n  gap: var(--ts-spacing-md);\n}\n\n/* ========================================\n   Chart Card\n   ======================================== */\n.ts-goals-overview__chart {\n  margin-top: var(--ts-spacing-md);\n}\n\n/* ========================================\n   Premium Chart Container\n   ======================================== */\n.ts-simple-chart {\n  position: relative;\n  padding: var(--ts-spacing-lg) var(--ts-spacing-md) var(--ts-spacing-md);\n}\n\n/* Chart Grid Lines - Background Reference */\n.ts-simple-chart::before {\n  content: \'\';\n  position: absolute;\n  top: var(--ts-spacing-lg);\n  left: var(--ts-spacing-md);\n  right: var(--ts-spacing-md);\n  height: 280px;\n  background-image: \n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px);\n  background-size: 100% 25%, 100% 25%, 100% 25%, 100% 25%;\n  background-position: 0 0, 0 25%, 0 50%, 0 75%;\n  background-repeat: no-repeat;\n  opacity: 0.3;\n  pointer-events: none;\n  z-index: 0;\n}\n\n.ts-simple-chart__bars {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  height: 280px;\n  gap: 12px;\n  padding: 0;\n  position: relative;\n  z-index: 1;\n}\n\n.ts-simple-chart__bar-wrapper {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--ts-spacing-sm);\n  height: 100%;\n  justify-content: flex-end;\n  animation: fadeInUp 0.4s ease-out backwards;\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n/* Stagger animation for each bar */\n.ts-simple-chart__bar-wrapper:nth-child(1) { animation-delay: 0.05s; }\n.ts-simple-chart__bar-wrapper:nth-child(2) { animation-delay: 0.1s; }\n.ts-simple-chart__bar-wrapper:nth-child(3) { animation-delay: 0.15s; }\n.ts-simple-chart__bar-wrapper:nth-child(4) { animation-delay: 0.2s; }\n.ts-simple-chart__bar-wrapper:nth-child(5) { animation-delay: 0.25s; }\n.ts-simple-chart__bar-wrapper:nth-child(6) { animation-delay: 0.3s; }\n.ts-simple-chart__bar-wrapper:nth-child(7) { animation-delay: 0.35s; }\n\n.ts-simple-chart__bar {\n  width: 100%;\n  min-height: 20px;\n  background: linear-gradient(\n    180deg, \n    rgba(37, 99, 235, 0.9) 0%,\n    rgba(37, 99, 235, 1) 50%,\n    rgba(29, 78, 216, 1) 100%\n  );\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  position: relative;\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n  padding-top: 8px;\n  cursor: pointer;\n  box-shadow: \n    0 -2px 8px rgba(37, 99, 235, 0.15),\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\n}\n\n.ts-simple-chart__bar::after {\n  content: \'\';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 3px;\n  background: rgba(255, 255, 255, 0.4);\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\n}\n\n.ts-simple-chart__bar:hover {\n  background: linear-gradient(\n    180deg,\n    rgba(16, 185, 129, 0.9) 0%,\n    rgba(16, 185, 129, 1) 50%,\n    rgba(5, 150, 105, 1) 100%\n  );\n  transform: translateY(-4px) scale(1.02);\n  box-shadow: \n    0 -4px 16px rgba(16, 185, 129, 0.3),\n    0 4px 12px rgba(0, 0, 0, 0.1),\n    inset 0 1px 0 rgba(255, 255, 255, 0.3);\n  z-index: 2;\n}\n\n[data-theme="dark"] .ts-simple-chart__bar {\n  background: linear-gradient(\n    180deg,\n    rgba(96, 165, 250, 0.8) 0%,\n    rgba(59, 130, 246, 0.9) 50%,\n    rgba(37, 99, 235, 1) 100%\n  );\n  box-shadow: \n    0 -2px 12px rgba(96, 165, 250, 0.25),\n    inset 0 1px 0 rgba(255, 255, 255, 0.15);\n}\n\n[data-theme="dark"] .ts-simple-chart__bar:hover {\n  background: linear-gradient(\n    180deg,\n    rgba(52, 211, 153, 0.8) 0%,\n    rgba(16, 185, 129, 0.9) 50%,\n    rgba(5, 150, 105, 1) 100%\n  );\n  box-shadow: \n    0 -4px 20px rgba(52, 211, 153, 0.4),\n    0 4px 16px rgba(0, 0, 0, 0.2),\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\n}\n\n.ts-simple-chart__bar-value {\n  font-size: 12px;\n  font-weight: 700;\n  color: white;\n  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n  opacity: 0.9;\n  transition: all 0.2s ease;\n  line-height: 1;\n}\n\n.ts-simple-chart__bar:hover .ts-simple-chart__bar-value {\n  opacity: 1;\n  transform: scale(1.1);\n}\n\n.ts-simple-chart__bar-label {\n  font-size: 11px;\n  font-weight: 500;\n  color: var(--ts-text-secondary);\n  text-align: center;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  max-width: 100%;\n  transition: color 0.2s ease;\n}\n\n.ts-simple-chart__bar-wrapper:hover .ts-simple-chart__bar-label {\n  color: var(--ts-text-primary);\n  font-weight: 600;\n}\n\n/* ========================================\n   Top Goals List\n   ======================================== */\n.ts-goals-overview__top-goals {\n  margin-top: var(--ts-spacing-md);\n}\n\n.ts-top-goals-list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-sm);\n}\n\n.ts-top-goal {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-md);\n  padding: var(--ts-spacing-md);\n  background: var(--ts-bg);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  transition: all 0.2s ease;\n}\n\n.ts-top-goal:hover {\n  background: var(--ts-surface-hover);\n  border-color: var(--ts-primary);\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n[data-theme="dark"] .ts-top-goal {\n  background: var(--ts-surface-dark);\n}\n\n[data-theme="dark"] .ts-top-goal:hover {\n  background: var(--ts-surface-hover-dark);\n}\n\n.ts-top-goal__rank {\n  flex-shrink: 0;\n  width: 32px;\n  height: 32px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--ts-primary);\n  color: var(--ts-surface);\n  border-radius: 50%;\n  font-size: 13px;\n  font-weight: 700;\n}\n\n.ts-top-goal__info {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-top-goal__name {\n  font-size: 15px;\n  font-weight: 600;\n  color: var(--ts-text);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.ts-top-goal__type {\n  font-size: 13px;\n  color: var(--ts-text-muted);\n  text-transform: capitalize;\n}\n\n.ts-top-goal__metrics {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-md);\n  flex-shrink: 0;\n}\n\n.ts-top-goal__conversions,\n.ts-top-goal__value {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs);\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--ts-text);\n}\n\n.ts-top-goal__conversions {\n  color: var(--ts-success);\n}\n\n.ts-top-goal__value {\n  color: var(--ts-primary);\n}\n\n/* ========================================\n   Empty State\n   ======================================== */\n.ts-empty-state {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\n  text-align: center;\n  gap: var(--ts-spacing-md);\n}\n\n.ts-empty-state h3 {\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0;\n}\n\n.ts-empty-state p {\n  font-size: 14px;\n  color: var(--ts-text-muted);\n  margin: 0;\n  max-width: 400px;\n}\n\n.ts-empty-state--error {\n  color: var(--ts-error);\n}\n\n.ts-empty-state--error h3 {\n  color: var(--ts-error);\n}\n\n/* ========================================\n   Responsive Design\n   ======================================== */\n@media (max-width: 768px) {\n  .ts-goals-overview__kpis {\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  }\n\n  .ts-simple-chart::before {\n    height: 200px;\n  }\n\n  .ts-simple-chart__bars {\n    height: 200px;\n  }\n\n  .ts-simple-chart__bar-label {\n    font-size: 10px;\n  }\n\n  .ts-top-goal {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--ts-spacing-sm);\n  }\n\n  .ts-top-goal__metrics {\n    width: 100%;\n    justify-content: space-between;\n  }\n}\n\n/* ========================================\n   Accessibility\n   ======================================== */\n@media (prefers-reduced-motion: reduce) {\n  .ts-simple-chart__bar,\n  .ts-top-goal {\n    transition: none;\n  }\n}\n\n@media (prefers-contrast: high) {\n  .ts-simple-chart__bar {\n    border: 2px solid currentColor;\n  }\n\n  .ts-top-goal {\n    border-width: 2px;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/views/GoalsOverview.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Goals Overview Dashboard Styles\r\n * \r\n * Theme-aware styling for the goals dashboard with:\r\n * - KPI cards grid\r\n * - Chart visualization\r\n * - Top goals list\r\n * - Dark/light theme support\r\n * - Responsive design\r\n * \r\n * @package TrackSure\r\n * @since 2.1.0\r\n */\r\n\r\n/* ========================================\r\n   Overview Container\r\n   ======================================== */\r\n.ts-goals-overview {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-lg);\r\n}\r\n\r\n/* ========================================\r\n   KPIs Row\r\n   ======================================== */\r\n.ts-goals-overview__kpis {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\r\n  gap: var(--ts-spacing-md);\r\n}\r\n\r\n/* ========================================\r\n   Chart Card\r\n   ======================================== */\r\n.ts-goals-overview__chart {\r\n  margin-top: var(--ts-spacing-md);\r\n}\r\n\r\n/* ========================================\r\n   Premium Chart Container\r\n   ======================================== */\r\n.ts-simple-chart {\r\n  position: relative;\r\n  padding: var(--ts-spacing-lg) var(--ts-spacing-md) var(--ts-spacing-md);\r\n}\r\n\r\n/* Chart Grid Lines - Background Reference */\r\n.ts-simple-chart::before {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: var(--ts-spacing-lg);\r\n  left: var(--ts-spacing-md);\r\n  right: var(--ts-spacing-md);\r\n  height: 280px;\r\n  background-image: \r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px);\r\n  background-size: 100% 25%, 100% 25%, 100% 25%, 100% 25%;\r\n  background-position: 0 0, 0 25%, 0 50%, 0 75%;\r\n  background-repeat: no-repeat;\r\n  opacity: 0.3;\r\n  pointer-events: none;\r\n  z-index: 0;\r\n}\r\n\r\n.ts-simple-chart__bars {\r\n  display: flex;\r\n  align-items: flex-end;\r\n  justify-content: space-between;\r\n  height: 280px;\r\n  gap: 12px;\r\n  padding: 0;\r\n  position: relative;\r\n  z-index: 1;\r\n}\r\n\r\n.ts-simple-chart__bar-wrapper {\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm);\r\n  height: 100%;\r\n  justify-content: flex-end;\r\n  animation: fadeInUp 0.4s ease-out backwards;\r\n}\r\n\r\n@keyframes fadeInUp {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* Stagger animation for each bar */\r\n.ts-simple-chart__bar-wrapper:nth-child(1) { animation-delay: 0.05s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(2) { animation-delay: 0.1s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(3) { animation-delay: 0.15s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(4) { animation-delay: 0.2s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(5) { animation-delay: 0.25s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(6) { animation-delay: 0.3s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(7) { animation-delay: 0.35s; }\r\n\r\n.ts-simple-chart__bar {\r\n  width: 100%;\r\n  min-height: 20px;\r\n  background: linear-gradient(\r\n    180deg, \r\n    rgba(37, 99, 235, 0.9) 0%,\r\n    rgba(37, 99, 235, 1) 50%,\r\n    rgba(29, 78, 216, 1) 100%\r\n  );\r\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\r\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n  position: relative;\r\n  display: flex;\r\n  align-items: flex-start;\r\n  justify-content: center;\r\n  padding-top: 8px;\r\n  cursor: pointer;\r\n  box-shadow: \r\n    0 -2px 8px rgba(37, 99, 235, 0.15),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.ts-simple-chart__bar::after {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  height: 3px;\r\n  background: rgba(255, 255, 255, 0.4);\r\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\r\n}\r\n\r\n.ts-simple-chart__bar:hover {\r\n  background: linear-gradient(\r\n    180deg,\r\n    rgba(16, 185, 129, 0.9) 0%,\r\n    rgba(16, 185, 129, 1) 50%,\r\n    rgba(5, 150, 105, 1) 100%\r\n  );\r\n  transform: translateY(-4px) scale(1.02);\r\n  box-shadow: \r\n    0 -4px 16px rgba(16, 185, 129, 0.3),\r\n    0 4px 12px rgba(0, 0, 0, 0.1),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.3);\r\n  z-index: 2;\r\n}\r\n\r\n[data-theme="dark"] .ts-simple-chart__bar {\r\n  background: linear-gradient(\r\n    180deg,\r\n    rgba(96, 165, 250, 0.8) 0%,\r\n    rgba(59, 130, 246, 0.9) 50%,\r\n    rgba(37, 99, 235, 1) 100%\r\n  );\r\n  box-shadow: \r\n    0 -2px 12px rgba(96, 165, 250, 0.25),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.15);\r\n}\r\n\r\n[data-theme="dark"] .ts-simple-chart__bar:hover {\r\n  background: linear-gradient(\r\n    180deg,\r\n    rgba(52, 211, 153, 0.8) 0%,\r\n    rgba(16, 185, 129, 0.9) 50%,\r\n    rgba(5, 150, 105, 1) 100%\r\n  );\r\n  box-shadow: \r\n    0 -4px 20px rgba(52, 211, 153, 0.4),\r\n    0 4px 16px rgba(0, 0, 0, 0.2),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.ts-simple-chart__bar-value {\r\n  font-size: 12px;\r\n  font-weight: 700;\r\n  color: white;\r\n  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\r\n  opacity: 0.9;\r\n  transition: all 0.2s ease;\r\n  line-height: 1;\r\n}\r\n\r\n.ts-simple-chart__bar:hover .ts-simple-chart__bar-value {\r\n  opacity: 1;\r\n  transform: scale(1.1);\r\n}\r\n\r\n.ts-simple-chart__bar-label {\r\n  font-size: 11px;\r\n  font-weight: 500;\r\n  color: var(--ts-text-secondary);\r\n  text-align: center;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  max-width: 100%;\r\n  transition: color 0.2s ease;\r\n}\r\n\r\n.ts-simple-chart__bar-wrapper:hover .ts-simple-chart__bar-label {\r\n  color: var(--ts-text-primary);\r\n  font-weight: 600;\r\n}\r\n\r\n/* ========================================\r\n   Top Goals List\r\n   ======================================== */\r\n.ts-goals-overview__top-goals {\r\n  margin-top: var(--ts-spacing-md);\r\n}\r\n\r\n.ts-top-goals-list {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-sm);\r\n}\r\n\r\n.ts-top-goal {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-md);\r\n  padding: var(--ts-spacing-md);\r\n  background: var(--ts-bg);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-top-goal:hover {\r\n  background: var(--ts-surface-hover);\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n[data-theme="dark"] .ts-top-goal {\r\n  background: var(--ts-surface-dark);\r\n}\r\n\r\n[data-theme="dark"] .ts-top-goal:hover {\r\n  background: var(--ts-surface-hover-dark);\r\n}\r\n\r\n.ts-top-goal__rank {\r\n  flex-shrink: 0;\r\n  width: 32px;\r\n  height: 32px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: var(--ts-primary);\r\n  color: var(--ts-surface);\r\n  border-radius: 50%;\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-top-goal__info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-top-goal__name {\r\n  font-size: 15px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.ts-top-goal__type {\r\n  font-size: 13px;\r\n  color: var(--ts-text-muted);\r\n  text-transform: capitalize;\r\n}\r\n\r\n.ts-top-goal__metrics {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-md);\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-top-goal__conversions,\r\n.ts-top-goal__value {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n}\r\n\r\n.ts-top-goal__conversions {\r\n  color: var(--ts-success);\r\n}\r\n\r\n.ts-top-goal__value {\r\n  color: var(--ts-primary);\r\n}\r\n\r\n/* ========================================\r\n   Empty State\r\n   ======================================== */\r\n.ts-empty-state {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\r\n  text-align: center;\r\n  gap: var(--ts-spacing-md);\r\n}\r\n\r\n.ts-empty-state h3 {\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0;\r\n}\r\n\r\n.ts-empty-state p {\r\n  font-size: 14px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0;\r\n  max-width: 400px;\r\n}\r\n\r\n.ts-empty-state--error {\r\n  color: var(--ts-error);\r\n}\r\n\r\n.ts-empty-state--error h3 {\r\n  color: var(--ts-error);\r\n}\r\n\r\n/* ========================================\r\n   Responsive Design\r\n   ======================================== */\r\n@media (max-width: 768px) {\r\n  .ts-goals-overview__kpis {\r\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\r\n  }\r\n\r\n  .ts-simple-chart::before {\r\n    height: 200px;\r\n  }\r\n\r\n  .ts-simple-chart__bars {\r\n    height: 200px;\r\n  }\r\n\r\n  .ts-simple-chart__bar-label {\r\n    font-size: 10px;\r\n  }\r\n\r\n  .ts-top-goal {\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: var(--ts-spacing-sm);\r\n  }\r\n\r\n  .ts-top-goal__metrics {\r\n    width: 100%;\r\n    justify-content: space-between;\r\n  }\r\n}\r\n\r\n/* ========================================\r\n   Accessibility\r\n   ======================================== */\r\n@media (prefers-reduced-motion: reduce) {\r\n  .ts-simple-chart__bar,\r\n  .ts-top-goal {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n@media (prefers-contrast: high) {\r\n  .ts-simple-chart__bar {\r\n    border: 2px solid currentColor;\r\n  }\r\n\r\n  .ts-top-goal {\r\n    border-width: 2px;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},21421:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'.goal-filters {\n  background: var(--ts-bg-secondary);\n  border: 1px solid var(--ts-border-color);\n  border-radius: 8px;\n  margin-bottom: 16px;\n}\n\n.filters-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 12px 16px;\n  gap: 16px;\n}\n\n.filters-search {\n  position: relative;\n  flex: 1;\n  max-width: 400px;\n}\n\n.filters-search .dashicons-search {\n  position: absolute;\n  left: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--ts-text-tertiary);\n  font-size: 18px;\n  width: 18px;\n  height: 18px;\n  pointer-events: none;\n}\n\n.search-input {\n  width: 100%;\n  padding: 8px 36px 8px 36px;\n  border: 1px solid var(--ts-border-color);\n  border-radius: 6px;\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  font-size: 14px;\n  transition: all 0.2s ease;\n}\n\n.search-input:focus {\n  outline: none;\n  border-color: var(--ts-primary-color);\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.clear-search {\n  position: absolute;\n  right: 8px;\n  top: 50%;\n  transform: translateY(-50%);\n  background: none;\n  border: none;\n  padding: 4px;\n  cursor: pointer;\n  color: var(--ts-text-tertiary);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n}\n\n.clear-search:hover {\n  background: var(--ts-bg-hover);\n  color: var(--ts-text-primary);\n}\n\n.clear-search .dashicons {\n  font-size: 16px;\n  width: 16px;\n  height: 16px;\n}\n\n.filters-actions {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.filters-toggle {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 12px;\n  border: 1px solid var(--ts-border-color);\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  border-radius: 4px;\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 500;\n  transition: all 0.2s ease;\n}\n\n.filters-toggle .dashicons {\n  font-size: 16px;\n  width: 16px;\n  height: 16px;\n}\n\n.filters-toggle:hover {\n  background: var(--ts-bg-hover);\n  border-color: var(--ts-primary-color);\n  transform: translateY(-1px);\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.filters-toggle.active {\n  background: var(--ts-primary-color);\n  color: white;\n  border-color: var(--ts-primary-color);\n}\n\n.filters-toggle.active:hover {\n  background: var(--ts-primary-hover, #1d4ed8);\n}\n\n.filter-badge {\n  position: absolute;\n  top: -4px;\n  right: -4px;\n  width: 8px;\n  height: 8px;\n  background: #dc3545;\n  border-radius: 50%;\n  border: 2px solid var(--ts-bg-secondary);\n}\n\n.filters-panel {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n  gap: 16px;\n  padding: 16px;\n  border-top: 1px solid var(--ts-border-color);\n  animation: slideDown 0.2s ease;\n}\n\n@keyframes slideDown {\n  from {\n    opacity: 0;\n    transform: translateY(-10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.filters-panel .filter-group {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  width:100%;\n  background: var(--ts-surface);\n}\n\n.filter-group label {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--ts-text-secondary);\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n\n.filter-group select {\n  padding: 8px 12px;\n  border: 1px solid var(--ts-border-color);\n  border-radius: 6px;\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  font-size: 14px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.filter-group select:focus {\n  outline: none;\n  border-color: var(--ts-primary-color);\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.filter-group select:hover {\n  border-color: var(--ts-primary-color);\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .filters-header {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .filters-search {\n    max-width: none;\n  }\n\n  .filters-actions {\n    justify-content: space-between;\n  }\n\n  .filters-panel {\n    grid-template-columns: 1fr;\n  }\n}\n\n@media (max-width: 480px) {\n  .filters-header {\n    padding: 12px;\n  }\n\n  .filters-panel {\n    padding: 12px;\n    gap: 12px;\n  }\n\n  .search-input {\n    font-size: 16px; /* Prevent zoom on iOS */\n  }\n}\n\n/* Dark Theme */\n[data-theme="dark"] .search-input,\n[data-theme="dark"] .filter-group select {\n  background: var(--ts-bg-secondary);\n}\n\n[data-theme="dark"] .search-input:focus,\n[data-theme="dark"] .filter-group select:focus {\n  background: var(--ts-bg-primary);\n}\n',"",{version:3,sources:["webpack://./src/components/goals/features/filters/GoalFilters.css"],names:[],mappings:"AAAA;EACE,kCAAkC;EAClC,wCAAwC;EACxC,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,kBAAkB;EAClB,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,OAAO;EACP,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,2BAA2B;EAC3B,8BAA8B;EAC9B,eAAe;EACf,WAAW;EACX,YAAY;EACZ,oBAAoB;AACtB;;AAEA;EACE,WAAW;EACX,0BAA0B;EAC1B,wCAAwC;EACxC,kBAAkB;EAClB,gCAAgC;EAChC,6BAA6B;EAC7B,eAAe;EACf,yBAAyB;AAC3B;;AAEA;EACE,aAAa;EACb,qCAAqC;EACrC,4CAA4C;AAC9C;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,2BAA2B;EAC3B,gBAAgB;EAChB,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,8BAA8B;EAC9B,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;AACd;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;AACV;;AAEA;EACE,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,wCAAwC;EACxC,gCAAgC;EAChC,6BAA6B;EAC7B,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;AACd;;AAEA;EACE,8BAA8B;EAC9B,qCAAqC;EACrC,2BAA2B;EAC3B,wCAAwC;AAC1C;;AAEA;EACE,mCAAmC;EACnC,YAAY;EACZ,qCAAqC;AACvC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,UAAU;EACV,WAAW;EACX,mBAAmB;EACnB,kBAAkB;EAClB,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,2DAA2D;EAC3D,SAAS;EACT,aAAa;EACb,4CAA4C;EAC5C,8BAA8B;AAChC;;AAEA;EACE;IACE,UAAU;IACV,4BAA4B;EAC9B;EACA;IACE,UAAU;IACV,wBAAwB;EAC1B;AACF;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;EACR,UAAU;EACV,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,+BAA+B;EAC/B,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,iBAAiB;EACjB,wCAAwC;EACxC,kBAAkB;EAClB,gCAAgC;EAChC,6BAA6B;EAC7B,eAAe;EACf,eAAe;EACf,yBAAyB;AAC3B;;AAEA;EACE,aAAa;EACb,qCAAqC;EACrC,4CAA4C;AAC9C;;AAEA;EACE,qCAAqC;AACvC;;AAEA,sBAAsB;AACtB;EACE;IACE,sBAAsB;IACtB,oBAAoB;EACtB;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,8BAA8B;EAChC;;EAEA;IACE,0BAA0B;EAC5B;AACF;;AAEA;EACE;IACE,aAAa;EACf;;EAEA;IACE,aAAa;IACb,SAAS;EACX;;EAEA;IACE,eAAe,EAAE,wBAAwB;EAC3C;AACF;;AAEA,eAAe;AACf;;EAEE,kCAAkC;AACpC;;AAEA;;EAEE,gCAAgC;AAClC",sourcesContent:['.goal-filters {\r\n  background: var(--ts-bg-secondary);\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 8px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.filters-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 12px 16px;\r\n  gap: 16px;\r\n}\r\n\r\n.filters-search {\r\n  position: relative;\r\n  flex: 1;\r\n  max-width: 400px;\r\n}\r\n\r\n.filters-search .dashicons-search {\r\n  position: absolute;\r\n  left: 12px;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  color: var(--ts-text-tertiary);\r\n  font-size: 18px;\r\n  width: 18px;\r\n  height: 18px;\r\n  pointer-events: none;\r\n}\r\n\r\n.search-input {\r\n  width: 100%;\r\n  padding: 8px 36px 8px 36px;\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 6px;\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  font-size: 14px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.search-input:focus {\r\n  outline: none;\r\n  border-color: var(--ts-primary-color);\r\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\r\n}\r\n\r\n.clear-search {\r\n  position: absolute;\r\n  right: 8px;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  background: none;\r\n  border: none;\r\n  padding: 4px;\r\n  cursor: pointer;\r\n  color: var(--ts-text-tertiary);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: 4px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.clear-search:hover {\r\n  background: var(--ts-bg-hover);\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.clear-search .dashicons {\r\n  font-size: 16px;\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n\r\n.filters-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n}\r\n\r\n.filters-toggle {\r\n  position: relative;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 6px 12px;\r\n  border: 1px solid var(--ts-border-color);\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.filters-toggle .dashicons {\r\n  font-size: 16px;\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n\r\n.filters-toggle:hover {\r\n  background: var(--ts-bg-hover);\r\n  border-color: var(--ts-primary-color);\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.filters-toggle.active {\r\n  background: var(--ts-primary-color);\r\n  color: white;\r\n  border-color: var(--ts-primary-color);\r\n}\r\n\r\n.filters-toggle.active:hover {\r\n  background: var(--ts-primary-hover, #1d4ed8);\r\n}\r\n\r\n.filter-badge {\r\n  position: absolute;\r\n  top: -4px;\r\n  right: -4px;\r\n  width: 8px;\r\n  height: 8px;\r\n  background: #dc3545;\r\n  border-radius: 50%;\r\n  border: 2px solid var(--ts-bg-secondary);\r\n}\r\n\r\n.filters-panel {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\r\n  gap: 16px;\r\n  padding: 16px;\r\n  border-top: 1px solid var(--ts-border-color);\r\n  animation: slideDown 0.2s ease;\r\n}\r\n\r\n@keyframes slideDown {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(-10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.filters-panel .filter-group {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 6px;\r\n  width:100%;\r\n  background: var(--ts-surface);\r\n}\r\n\r\n.filter-group label {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-secondary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n}\r\n\r\n.filter-group select {\r\n  padding: 8px 12px;\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 6px;\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  font-size: 14px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.filter-group select:focus {\r\n  outline: none;\r\n  border-color: var(--ts-primary-color);\r\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\r\n}\r\n\r\n.filter-group select:hover {\r\n  border-color: var(--ts-primary-color);\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 768px) {\r\n  .filters-header {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .filters-search {\r\n    max-width: none;\r\n  }\r\n\r\n  .filters-actions {\r\n    justify-content: space-between;\r\n  }\r\n\r\n  .filters-panel {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .filters-header {\r\n    padding: 12px;\r\n  }\r\n\r\n  .filters-panel {\r\n    padding: 12px;\r\n    gap: 12px;\r\n  }\r\n\r\n  .search-input {\r\n    font-size: 16px; /* Prevent zoom on iOS */\r\n  }\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme="dark"] .search-input,\r\n[data-theme="dark"] .filter-group select {\r\n  background: var(--ts-bg-secondary);\r\n}\r\n\r\n[data-theme="dark"] .search-input:focus,\r\n[data-theme="dark"] .filter-group select:focus {\r\n  background: var(--ts-bg-primary);\r\n}\r\n'],sourceRoot:""}]);const i=s},27691:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'.goal-import-modal {\n  background: var(--ts-bg-primary);\n  border-radius: 12px;\n  max-width: 600px;\n  width: 90%;\n  max-height: 80vh;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\n}\n\n.goal-import-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 20px 24px;\n  border-bottom: 1px solid var(--ts-border-color);\n}\n\n.goal-import-header h2 {\n  margin: 0;\n  font-size: 20px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-close {\n  background: none;\n  border: none;\n  padding: 4px;\n  cursor: pointer;\n  color: var(--ts-text-tertiary);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n}\n\n.goal-import-close:hover {\n  background: var(--ts-bg-hover);\n  color: var(--ts-text-primary);\n}\n\n.goal-import-close .dashicons {\n  font-size: 20px;\n  width: 20px;\n  height: 20px;\n}\n\n.goal-import-body {\n  padding: 24px;\n  overflow-y: auto;\n  flex: 1;\n}\n\n/* Dropzone */\n.goal-import-dropzone {\n  border: 2px dashed var(--ts-border-color);\n  border-radius: 8px;\n  padding: 48px 24px;\n  text-align: center;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  background: var(--ts-bg-secondary);\n}\n\n.goal-import-dropzone:hover,\n.goal-import-dropzone.dragging {\n  border-color: var(--ts-primary-color);\n  background: var(--ts-primary-soft);\n}\n\n.goal-import-dropzone .dashicons {\n  font-size: 48px;\n  width: 48px;\n  height: 48px;\n  color: var(--ts-text-tertiary);\n  margin-bottom: 16px;\n}\n\n.goal-import-dropzone h3 {\n  margin: 0 0 8px;\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-dropzone p {\n  margin: 0;\n  color: var(--ts-text-secondary);\n  font-size: 14px;\n}\n\n/* Preview */\n.goal-import-preview h3 {\n  margin: 0 0 12px;\n  font-size: 16px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-preview > p {\n  margin: 0 0 16px;\n  color: var(--ts-text-secondary);\n}\n\n.preview-list {\n  max-height: 400px;\n  overflow-y: auto;\n  border: 1px solid var(--ts-border-color);\n  border-radius: 8px;\n  background: var(--ts-bg-secondary);\n  margin-bottom: 20px;\n}\n\n.preview-item {\n  padding: 16px;\n  border-bottom: 1px solid var(--ts-border-color);\n}\n\n.preview-item:last-child {\n  border-bottom: none;\n}\n\n.preview-item-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n  gap: 12px;\n}\n\n.preview-item-header strong {\n  font-size: 15px;\n  color: var(--ts-text-primary);\n  flex: 1;\n}\n\n.preview-badge {\n  display: inline-block;\n  padding: 4px 10px;\n  background: var(--ts-primary-soft);\n  color: var(--ts-primary-color);\n  border-radius: 12px;\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: capitalize;\n}\n\n.preview-description {\n  margin: 0 0 8px;\n  color: var(--ts-text-secondary);\n  font-size: 13px;\n  line-height: 1.5;\n}\n\n.preview-meta {\n  display: flex;\n  gap: 12px;\n  font-size: 12px;\n  color: var(--ts-text-tertiary);\n}\n\n.preview-meta span {\n  text-transform: capitalize;\n}\n\n/* Actions */\n.goal-import-actions {\n  display: flex;\n  gap: 12px;\n  justify-content: flex-end;\n}\n\n.goal-import-actions .button {\n  min-width: 100px;\n}\n\n/* Result */\n.goal-import-result {\n  text-align: center;\n  padding: 24px;\n}\n\n.goal-import-result .dashicons {\n  font-size: 64px;\n  width: 64px;\n  height: 64px;\n  margin-bottom: 16px;\n}\n\n.goal-import-result.success .dashicons {\n  color: #10b981;\n}\n\n.goal-import-result.error .dashicons {\n  color: #dc3545;\n}\n\n.goal-import-result h3 {\n  margin: 0 0 12px;\n  font-size: 20px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-result p {\n  margin: 0 0 20px;\n  color: var(--ts-text-secondary);\n}\n\n.error-list {\n  text-align: left;\n  background: #fef2f2;\n  border: 1px solid #fecaca;\n  border-radius: 6px;\n  padding: 12px 16px;\n  margin-bottom: 20px;\n}\n\n[data-theme="dark"] .error-list {\n  background: rgba(220, 53, 69, 0.1);\n  border-color: rgba(220, 53, 69, 0.3);\n}\n\n.error-message {\n  margin: 6px 0;\n  color: #dc3545;\n  font-size: 13px;\n  line-height: 1.5;\n}\n\n/* Responsive */\n@media (max-width: 640px) {\n  .goal-import-modal {\n    max-width: 100%;\n    width: 100%;\n    height: 100%;\n    max-height: 100vh;\n    border-radius: 0;\n  }\n\n  .goal-import-dropzone {\n    padding: 32px 16px;\n  }\n\n  .goal-import-actions {\n    flex-direction: column-reverse;\n  }\n\n  .goal-import-actions .button {\n    width: 100%;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/features/import/GoalImport.css"],names:[],mappings:"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",sourcesContent:['.goal-import-modal {\r\n  background: var(--ts-bg-primary);\r\n  border-radius: 12px;\r\n  max-width: 600px;\r\n  width: 90%;\r\n  max-height: 80vh;\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.goal-import-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 20px 24px;\r\n  border-bottom: 1px solid var(--ts-border-color);\r\n}\r\n\r\n.goal-import-header h2 {\r\n  margin: 0;\r\n  font-size: 20px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-close {\r\n  background: none;\r\n  border: none;\r\n  padding: 4px;\r\n  cursor: pointer;\r\n  color: var(--ts-text-tertiary);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: 4px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.goal-import-close:hover {\r\n  background: var(--ts-bg-hover);\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-close .dashicons {\r\n  font-size: 20px;\r\n  width: 20px;\r\n  height: 20px;\r\n}\r\n\r\n.goal-import-body {\r\n  padding: 24px;\r\n  overflow-y: auto;\r\n  flex: 1;\r\n}\r\n\r\n/* Dropzone */\r\n.goal-import-dropzone {\r\n  border: 2px dashed var(--ts-border-color);\r\n  border-radius: 8px;\r\n  padding: 48px 24px;\r\n  text-align: center;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  background: var(--ts-bg-secondary);\r\n}\r\n\r\n.goal-import-dropzone:hover,\r\n.goal-import-dropzone.dragging {\r\n  border-color: var(--ts-primary-color);\r\n  background: var(--ts-primary-soft);\r\n}\r\n\r\n.goal-import-dropzone .dashicons {\r\n  font-size: 48px;\r\n  width: 48px;\r\n  height: 48px;\r\n  color: var(--ts-text-tertiary);\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.goal-import-dropzone h3 {\r\n  margin: 0 0 8px;\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-dropzone p {\r\n  margin: 0;\r\n  color: var(--ts-text-secondary);\r\n  font-size: 14px;\r\n}\r\n\r\n/* Preview */\r\n.goal-import-preview h3 {\r\n  margin: 0 0 12px;\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-preview > p {\r\n  margin: 0 0 16px;\r\n  color: var(--ts-text-secondary);\r\n}\r\n\r\n.preview-list {\r\n  max-height: 400px;\r\n  overflow-y: auto;\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 8px;\r\n  background: var(--ts-bg-secondary);\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.preview-item {\r\n  padding: 16px;\r\n  border-bottom: 1px solid var(--ts-border-color);\r\n}\r\n\r\n.preview-item:last-child {\r\n  border-bottom: none;\r\n}\r\n\r\n.preview-item-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 8px;\r\n  gap: 12px;\r\n}\r\n\r\n.preview-item-header strong {\r\n  font-size: 15px;\r\n  color: var(--ts-text-primary);\r\n  flex: 1;\r\n}\r\n\r\n.preview-badge {\r\n  display: inline-block;\r\n  padding: 4px 10px;\r\n  background: var(--ts-primary-soft);\r\n  color: var(--ts-primary-color);\r\n  border-radius: 12px;\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  text-transform: capitalize;\r\n}\r\n\r\n.preview-description {\r\n  margin: 0 0 8px;\r\n  color: var(--ts-text-secondary);\r\n  font-size: 13px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.preview-meta {\r\n  display: flex;\r\n  gap: 12px;\r\n  font-size: 12px;\r\n  color: var(--ts-text-tertiary);\r\n}\r\n\r\n.preview-meta span {\r\n  text-transform: capitalize;\r\n}\r\n\r\n/* Actions */\r\n.goal-import-actions {\r\n  display: flex;\r\n  gap: 12px;\r\n  justify-content: flex-end;\r\n}\r\n\r\n.goal-import-actions .button {\r\n  min-width: 100px;\r\n}\r\n\r\n/* Result */\r\n.goal-import-result {\r\n  text-align: center;\r\n  padding: 24px;\r\n}\r\n\r\n.goal-import-result .dashicons {\r\n  font-size: 64px;\r\n  width: 64px;\r\n  height: 64px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.goal-import-result.success .dashicons {\r\n  color: #10b981;\r\n}\r\n\r\n.goal-import-result.error .dashicons {\r\n  color: #dc3545;\r\n}\r\n\r\n.goal-import-result h3 {\r\n  margin: 0 0 12px;\r\n  font-size: 20px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-result p {\r\n  margin: 0 0 20px;\r\n  color: var(--ts-text-secondary);\r\n}\r\n\r\n.error-list {\r\n  text-align: left;\r\n  background: #fef2f2;\r\n  border: 1px solid #fecaca;\r\n  border-radius: 6px;\r\n  padding: 12px 16px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n[data-theme="dark"] .error-list {\r\n  background: rgba(220, 53, 69, 0.1);\r\n  border-color: rgba(220, 53, 69, 0.3);\r\n}\r\n\r\n.error-message {\r\n  margin: 6px 0;\r\n  color: #dc3545;\r\n  font-size: 13px;\r\n  line-height: 1.5;\r\n}\r\n\r\n/* Responsive */\r\n@media (max-width: 640px) {\r\n  .goal-import-modal {\r\n    max-width: 100%;\r\n    width: 100%;\r\n    height: 100%;\r\n    max-height: 100vh;\r\n    border-radius: 0;\r\n  }\r\n\r\n  .goal-import-dropzone {\r\n    padding: 32px 16px;\r\n  }\r\n\r\n  .goal-import-actions {\r\n    flex-direction: column-reverse;\r\n  }\r\n\r\n  .goal-import-actions .button {\r\n    width: 100%;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},31637:(r,n,e)=>{e.r(n),e.d(n,{default:()=>mr});var a=e(74848),t=e(41594),o=e(37090),s=e(82381),i=e(87387);const A=["pageview","click","form_submit","scroll_depth","time_on_page","engagement","video_play","download","outbound_link","custom_event"],l=["equals","not_equals","contains","not_contains","starts_with","ends_with","greater_than","less_than","greater_than_or_equal","less_than_or_equal","matches_regex"],d=["none","fixed","dynamic"],c=["once","session","unlimited"];var p=e(87318),g=e(84013),m=e(51481),C=e(45767);const u={engagement:{id:"engagement",label:"Engagement",description:"Track user interactions and content engagement",icon:"MousePointer",color:"var(--color-primary)"},leads:{id:"leads",label:"Lead Generation",description:"Capture contact requests, forms, and inquiries",icon:"Users",color:"var(--color-success)"},ecommerce:{id:"ecommerce",label:"Ecommerce",description:"Track purchases, cart actions, and revenue",icon:"ShoppingCart",color:"var(--color-warning)"},content:{id:"content",label:"Content",description:"Monitor content consumption and downloads",icon:"FileText",color:"var(--color-info)"}},E=[{id:"eng_time_on_page",name:"Deep Content Engagement",description:"Visitors who spent 3+ minutes on a page",event_name:"time_on_page",trigger_type:"time_on_page",category:"engagement",priority:1,recommended:!0,icon:"Timer",conditions:[{param:"time_on_page",operator:"greater_than_or_equal",value:180}],trigger_config:{time_seconds:180}},{id:"eng_scroll_depth",name:"Read to Bottom",description:"Visitors who scrolled to 80% of page",event_name:"scroll_depth",trigger_type:"scroll_depth",category:"engagement",priority:2,recommended:!0,icon:"ArrowDown",conditions:[{param:"scroll_depth",operator:"greater_than_or_equal",value:80}],trigger_config:{scroll_depth:80}},{id:"eng_video_complete",name:"Video Completed",description:"Track video completion",event_name:"video_complete",trigger_type:"video_play",category:"engagement",priority:3,recommended:!0,icon:"Film",conditions:[]},{id:"eng_outbound_click",name:"Outbound Link Click",description:"Track external link clicks (affiliate, partner sites)",event_name:"outbound_click",trigger_type:"outbound_link",category:"engagement",priority:4,recommended:!1,icon:"ExternalLink",conditions:[]},{id:"eng_social_share",name:"Social Share Click",description:"Track content shares on social media",event_name:"click",trigger_type:"click",category:"engagement",priority:5,recommended:!1,icon:"Share2",conditions:[{param:"element_class",operator:"contains",value:"share"}],trigger_config:{css_selector:".share-button, .social-share"}},{id:"eng_search",name:"Site Search Used",description:"Track what visitors are searching for",event_name:"search",trigger_type:"custom_event",category:"engagement",priority:6,recommended:!1,icon:"Search",conditions:[]},{id:"eng_pricing_view",name:"Pricing Page Viewed",description:"High-intent visitors checking pricing",event_name:"page_view",trigger_type:"pageview",category:"engagement",priority:7,recommended:!0,icon:"DollarSign",conditions:[{param:"page_url",operator:"contains",value:"/pricing"}]},{id:"lead_contact_form",name:"Contact Form Submitted",description:"Track contact form submissions",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:1,recommended:!0,icon:"Mail",conditions:[{param:"form_name",operator:"contains",value:"contact"}],trigger_config:{form_id:"contact-form"},value_type:"fixed",typical_value:50},{id:"lead_phone_click",name:"Phone Number Clicked",description:"Track when visitors click your phone number",event_name:"click",trigger_type:"click",category:"leads",priority:2,recommended:!0,icon:"Phone",conditions:[{param:"element_type",operator:"equals",value:"tel"}],trigger_config:{css_selector:'a[href^="tel:"]'},value_type:"fixed",typical_value:60},{id:"lead_quote_request",name:"Quote Requested",description:"Track quote or estimate requests",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:3,recommended:!0,icon:"FileText",conditions:[{param:"form_name",operator:"contains",value:"quote"}],value_type:"fixed",typical_value:75},{id:"lead_email_click",name:"Email Link Clicked",description:"Track when visitors click your email address",event_name:"click",trigger_type:"click",category:"leads",priority:4,recommended:!1,icon:"AtSign",conditions:[{param:"element_type",operator:"equals",value:"mailto"}],trigger_config:{css_selector:'a[href^="mailto:"]'},value_type:"fixed",typical_value:40},{id:"lead_appointment",name:"Appointment Booked",description:"Track appointment/meeting bookings",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:5,recommended:!0,icon:"Calendar",conditions:[{param:"form_name",operator:"contains",value:"appointment"}],value_type:"fixed",typical_value:100},{id:"lead_chat_started",name:"Live Chat Started",description:"Track when visitors initiate live chat",event_name:"chat_started",trigger_type:"custom_event",category:"leads",priority:6,recommended:!1,icon:"MessageCircle",conditions:[],value_type:"fixed",typical_value:45},{id:"lead_callback_request",name:"Callback Requested",description:"Track callback form submissions",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:7,recommended:!1,icon:"PhoneCall",conditions:[{param:"form_name",operator:"contains",value:"callback"}],value_type:"fixed",typical_value:55},{id:"ecom_purchase",name:"Purchase Completed",description:"Track completed transactions and revenue",event_name:"purchase",trigger_type:"custom_event",category:"ecommerce",priority:1,recommended:!0,icon:"DollarSign",conditions:[],value_type:"dynamic"},{id:"ecom_add_to_cart",name:"Add to Cart",description:"Track product additions to cart",event_name:"add_to_cart",trigger_type:"custom_event",category:"ecommerce",priority:2,recommended:!0,icon:"ShoppingCart",conditions:[]},{id:"ecom_checkout_start",name:"Checkout Started",description:"Track when customers begin checkout",event_name:"begin_checkout",trigger_type:"custom_event",category:"ecommerce",priority:3,recommended:!0,icon:"CreditCard",conditions:[]},{id:"ecom_product_view",name:"Product Viewed",description:"Track product page views",event_name:"view_item",trigger_type:"custom_event",category:"ecommerce",priority:4,recommended:!1,icon:"Package",conditions:[]},{id:"ecom_view_cart",name:"Cart Viewed",description:"Track cart page views",event_name:"view_cart",trigger_type:"custom_event",category:"ecommerce",priority:5,recommended:!1,icon:"Eye",conditions:[]},{id:"ecom_payment_info",name:"Payment Info Added",description:"Track when payment details are entered",event_name:"add_payment_info",trigger_type:"custom_event",category:"ecommerce",priority:6,recommended:!1,icon:"Lock",conditions:[]},{id:"ecom_remove_from_cart",name:"Remove from Cart",description:"Track cart abandonment signals",event_name:"remove_from_cart",trigger_type:"custom_event",category:"ecommerce",priority:7,recommended:!1,icon:"XCircle",conditions:[]},{id:"content_newsletter",name:"Newsletter Signup",description:"Track newsletter subscriptions",event_name:"form_submit",trigger_type:"form_submit",category:"content",priority:1,recommended:!0,icon:"Newspaper",conditions:[{param:"form_name",operator:"contains",value:"newsletter"}],trigger_config:{form_id:"newsletter-form"},value_type:"fixed",typical_value:10},{id:"content_download",name:"Resource Downloaded",description:"Track PDF, ebook, or template downloads",event_name:"file_download",trigger_type:"download",category:"content",priority:2,recommended:!0,icon:"Download",conditions:[],value_type:"fixed",typical_value:15},{id:"content_ebook",name:"Ebook Downloaded",description:"Track ebook or guide downloads",event_name:"file_download",trigger_type:"download",category:"content",priority:3,recommended:!0,icon:"BookOpen",conditions:[{param:"file_name",operator:"contains",value:".pdf"}],value_type:"fixed",typical_value:20},{id:"content_case_study",name:"Case Study Viewed",description:"Track case study page views",event_name:"page_view",trigger_type:"pageview",category:"content",priority:4,recommended:!1,icon:"BarChart2",conditions:[{param:"page_url",operator:"contains",value:"/case-stud"}]},{id:"content_webinar",name:"Webinar Registration",description:"Track webinar signups",event_name:"form_submit",trigger_type:"form_submit",category:"content",priority:5,recommended:!1,icon:"Video",conditions:[{param:"form_name",operator:"contains",value:"webinar"}],value_type:"fixed",typical_value:30},{id:"content_whitepaper",name:"Whitepaper Downloaded",description:"Track whitepaper downloads",event_name:"file_download",trigger_type:"download",category:"content",priority:6,recommended:!1,icon:"FileDown",conditions:[{param:"file_name",operator:"contains",value:"whitepaper"}],value_type:"fixed",typical_value:25},{id:"content_portfolio",name:"Portfolio Viewed",description:"Track portfolio or work samples page views",event_name:"page_view",trigger_type:"pageview",category:"content",priority:7,recommended:!1,icon:"Folder",conditions:[{param:"page_url",operator:"contains",value:"/portfolio"}]}],x=r=>E.filter(n=>n.category===r);var v=e(66557);const h={pageview:[{value:"page_url",label:"Page URL",example:"/pricing",description:"Full page URL (e.g., https://site.com/pricing or /pricing)"},{value:"page_path",label:"Page Path",example:"/products",description:"URL path only (without domain)"},{value:"page_title",label:"Page Title",example:"Pricing",description:"Browser page title"}],form_submit:[{value:"form_id",label:"Form ID",example:"gform_3",description:"HTML form ID attribute (e.g., gform_3, wpforms-form-1245)"},{value:"form_name",label:"Form Name",example:"contact",description:"Form name or type (e.g., contact, inquiry, newsletter)"},{value:"form_builder",label:"Form Builder",example:"gravity_forms",description:"Form builder plugin (gravity_forms, wpforms, contact_form_7, etc.)"},{value:"form_type",label:"Form Type",example:"contact",description:"Form category (contact, newsletter, inquiry, etc.)"}],click:[{value:"element_text",label:"Button/Link Text",example:"Buy Now",description:"Text inside the clicked element"},{value:"element_id",label:"Element ID",example:"cta-button",description:"HTML ID attribute of the element"},{value:"element_class",label:"Element Class",example:"btn-primary",description:"CSS class of the element"},{value:"element_type",label:"Element Type",example:"tel",description:"Link type (tel, mailto, etc.)"},{value:"link_url",label:"Link URL",example:"https://example.com",description:"Destination URL for links"}],scroll_depth:[{value:"scroll_depth",label:"Scroll Depth %",example:"75",description:"Scroll percentage (0-100)"},{value:"page_url",label:"Page URL",example:"/blog",description:"Track scroll on specific pages"}],time_on_page:[{value:"time_seconds",label:"Time (seconds)",example:"180",description:"Time spent on page in seconds"},{value:"page_url",label:"Page URL",example:"/blog",description:"Track time on specific pages"}],engagement:[{value:"scroll_depth",label:"Scroll Depth %",example:"50",description:"Minimum scroll percentage"},{value:"time_seconds",label:"Time (seconds)",example:"120",description:"Minimum time on page"},{value:"page_url",label:"Page URL",example:"/blog",description:"Track engagement on specific pages"}],video_play:[{value:"video_title",label:"Video Title",example:"product demo",description:"Video title or name"},{value:"video_url",label:"Video URL",example:"youtube.com/watch?v=",description:"Video source URL"},{value:"video_type",label:"Video Type",example:"youtube",description:"Video platform (html5, youtube, vimeo)"}],download:[{value:"file_name",label:"File Name",example:"pricing-guide",description:"Name of downloaded file"},{value:"file_type",label:"File Type",example:"pdf",description:"File extension (pdf, doc, jpg, etc.)"},{value:"link_url",label:"Download URL",example:"/downloads/",description:"Download link URL"}],outbound_link:[{value:"link_domain",label:"Link Domain",example:"partner.com",description:"External website domain"},{value:"link_url",label:"Link URL",example:"https://partner.com",description:"Full external URL"},{value:"link_text",label:"Link Text",example:"Visit Partner",description:"Text of the clicked link"}],custom_event:[{value:"event_name",label:"Event Name",example:"calculator_completed",description:"Custom event identifier"},{value:"page_url",label:"Page URL",example:"/pricing",description:"Full page URL where event fires"},{value:"page_path",label:"Page Path",example:"/products",description:"URL path only (without domain)"},{value:"page_title",label:"Page Title",example:"Pricing",description:"Browser page title when event fires"},{value:"referrer",label:"Referrer URL",example:"https://google.com",description:"Referring page URL"}]},b=[{value:"equals",label:"Equals",description:"Exact match (case-sensitive)"},{value:"not_equals",label:"Not equals",description:"Does not exactly match"},{value:"contains",label:"Contains",description:"Partial match (most flexible)"},{value:"not_contains",label:"Does not contain",description:"Excludes partial match"},{value:"starts_with",label:"Starts with",description:"Begins with the value"},{value:"ends_with",label:"Ends with",description:"Finishes with the value"},{value:"matches_regex",label:"Matches regex",description:"Advanced pattern matching"},{value:"greater_than",label:"Greater than",description:"For numbers only"},{value:"greater_than_or_equal",label:"Greater than or equal",description:"For numbers only"},{value:"less_than",label:"Less than",description:"For numbers only"},{value:"less_than_or_equal",label:"Less than or equal",description:"For numbers only"}],B=({conditions:r,onChange:n,triggerType:e,matchLogic:t="all",onMatchLogicChange:o})=>{const s=h[e]||[],i=(e,a,t)=>{const o=[...r];o[e]={...o[e],[a]:t},n(o)},A=r=>""!==r&&"__custom__"!==r&&!s.some(n=>n.value===r),l=r=>A(r)?"__custom__":r;return(0,a.jsxs)("div",{className:"ts-condition-builder",children:[(0,a.jsxs)("div",{className:"ts-condition-builder-header",children:[(0,a.jsx)("h4",{style:{margin:0},children:"Conditions"}),0===r.length&&(0,a.jsxs)("p",{style:{margin:"8px 0",color:"#666",fontSize:"13px"},children:["💡 No conditions = Goal will fire for ",(0,a.jsx)("strong",{children:"ALL"})," ",e," events"]})]}),(0,a.jsx)("div",{className:"ts-conditions-list",children:r.map((t,o)=>{const d=(c=t.param,s.find(r=>r.value===c));var c;return(0,a.jsxs)("div",{className:"ts-condition-row",style:{display:"grid",gridTemplateColumns:"1fr 1fr 1.5fr auto",gap:"12px",alignItems:"start",padding:"16px",background:"#f9fafb",borderRadius:"8px",marginBottom:"12px",border:"1px solid #e5e7eb"},children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"6px",fontSize:"13px",fontWeight:500},children:"Parameter"}),(0,a.jsxs)("select",{value:l(t.param),onChange:r=>{const n=r.target.value;i(o,"param","__custom__"===n?"":n)},style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px"},children:[(0,a.jsx)("option",{value:"",children:"Select parameter..."}),s.map(r=>(0,a.jsx)("option",{value:r.value,children:r.label},r.value)),"custom_event"===e&&(0,a.jsx)("option",{value:"__custom__",children:"✏️ Custom Data Key..."})]}),"custom_event"===e&&("__custom__"===l(t.param)||A(t.param))&&(0,a.jsx)("input",{type:"text",value:A(t.param)?t.param:"",onChange:r=>i(o,"param",r.target.value),placeholder:"e.g. product_id, amount, category",style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px",marginTop:"6px",background:"#fefce8"}}),d&&(0,a.jsx)("p",{style:{margin:"4px 0 0",fontSize:"12px",color:"#6b7280"},children:d.description}),"custom_event"===e&&A(t.param)&&(0,a.jsxs)("p",{style:{margin:"4px 0 0",fontSize:"12px",color:"#92400e"},children:["Matches key “",(0,a.jsx)("strong",{children:t.param}),"” from fireCustomEvent() data"]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"6px",fontSize:"13px",fontWeight:500},children:"Operator"}),(0,a.jsx)("select",{value:t.operator,onChange:r=>i(o,"operator",r.target.value),style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px"},children:b.map(r=>(0,a.jsx)("option",{value:r.value,title:r.description,children:r.label},r.value))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"6px",fontSize:"13px",fontWeight:500},children:"Value"}),(0,a.jsx)("input",{type:"text",value:t.value,onChange:r=>i(o,"value",r.target.value),placeholder:d?.example||"Enter value...",style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px"}}),d&&(0,a.jsxs)("p",{style:{margin:"4px 0 0",fontSize:"12px",color:"#6b7280"},children:["Example: ",(0,a.jsx)("code",{style:{background:"#e5e7eb",padding:"2px 6px",borderRadius:"4px"},children:d.example})]})]}),(0,a.jsx)("div",{style:{paddingTop:"28px"},children:(0,a.jsx)("button",{onClick:()=>(e=>{n(r.filter((r,n)=>n!==e))})(o),style:{padding:"8px 12px",background:"#ef4444",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontSize:"14px",fontWeight:500},title:"Remove condition",children:"🗑️"})})]},o)})}),(0,a.jsx)("button",{onClick:()=>{n([...r,{param:"",operator:"contains",value:""}])},style:{padding:"10px 16px",background:"#3b82f6",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontSize:"14px",fontWeight:500,marginBottom:"16px"},children:"➕ Add Condition"}),r.length>1&&o&&(0,a.jsxs)("div",{style:{padding:"16px",background:"#eff6ff",borderRadius:"8px",border:"1px solid #bfdbfe"},children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"8px",fontSize:"13px",fontWeight:500},children:"Match Logic"}),(0,a.jsxs)("div",{style:{display:"flex",gap:"12px"},children:[(0,a.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"6px",cursor:"pointer"},children:[(0,a.jsx)("input",{type:"radio",name:"match_logic",value:"all",checked:"all"===t,onChange:r=>o(r.target.value)}),(0,a.jsxs)("span",{style:{fontSize:"14px"},children:[(0,a.jsx)("strong",{children:"ALL"})," conditions must match (AND)"]})]}),(0,a.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"6px",cursor:"pointer"},children:[(0,a.jsx)("input",{type:"radio",name:"match_logic",value:"any",checked:"any"===t,onChange:r=>o(r.target.value)}),(0,a.jsxs)("span",{style:{fontSize:"14px"},children:[(0,a.jsx)("strong",{children:"ANY"})," condition can match (OR)"]})]})]}),(0,a.jsx)("p",{style:{margin:"8px 0 0",fontSize:"12px",color:"#1e40af"},children:"all"===t?"✓ Goal fires only when ALL conditions are satisfied":"✓ Goal fires when ANY ONE condition is satisfied"})]}),s.length>0&&(0,a.jsxs)("details",{style:{marginTop:"16px",fontSize:"13px",color:"#6b7280"},children:[(0,a.jsxs)("summary",{style:{cursor:"pointer",fontWeight:500},children:["💡 Available Parameters for ",e]}),(0,a.jsx)("ul",{style:{marginTop:"8px",paddingLeft:"20px"},children:s.map(r=>(0,a.jsxs)("li",{style:{marginBottom:"4px"},children:[(0,a.jsxs)("strong",{children:[r.label,":"]})," ",r.description,(0,a.jsx)("br",{}),(0,a.jsxs)("code",{style:{background:"#e5e7eb",padding:"2px 6px",borderRadius:"4px",fontSize:"12px"},children:["Example: ",r.example]})]},r.value))}),"custom_event"===e&&(0,a.jsxs)("div",{style:{marginTop:"12px",padding:"12px",background:"#fefce8",borderRadius:"6px",border:"1px solid #fde68a"},children:[(0,a.jsx)("strong",{style:{color:"#92400e"},children:"💡 Custom Data Keys"}),(0,a.jsx)("p",{style:{margin:"6px 0 0",fontSize:"12px",color:"#78350f"},children:"Select “Custom Data Key” to match any key from your event data. For example:"}),(0,a.jsx)("pre",{style:{margin:"6px 0 0",padding:"8px",background:"#fffbeb",borderRadius:"4px",fontSize:"11px",color:"#78350f",whiteSpace:"pre-wrap"},children:"window.trackSureGoals.fireCustomEvent('purchase', {\n  product_id: 'sku-123',\n  amount: '49.99',\n  category: 'software'\n});"}),(0,a.jsxs)("p",{style:{margin:"6px 0 0",fontSize:"12px",color:"#78350f"},children:["Then use ",(0,a.jsx)("strong",{children:"product_id"}),", ",(0,a.jsx)("strong",{children:"amount"}),", or ",(0,a.jsx)("strong",{children:"category"})," as custom data keys in your conditions."]})]})]})]})};var f=e(71255),k=e(85072),_=e.n(k),y=e(97825),w=e.n(y),j=e(77659),z=e.n(j),N=e(55056),I=e.n(N),S=e(10540),T=e.n(S),D=e(41113),q=e.n(D),Y=e(80126),F={};F.styleTagTransform=q(),F.setAttributes=I(),F.insert=z().bind(null,"head"),F.domAPI=w(),F.insertStyleElement=T();_()(Y.A,F);Y.A&&Y.A.locals&&Y.A.locals;const R=[{value:"pageview",label:(0,f.__)("Page View","tracksure"),eventName:"page_view",icon:"📄"},{value:"click",label:(0,f.__)("Element Click","tracksure"),eventName:"click",icon:"👆"},{value:"form_submit",label:(0,f.__)("Form Submission","tracksure"),eventName:"form_submit",icon:"📝"},{value:"scroll_depth",label:(0,f.__)("Scroll Depth","tracksure"),eventName:"scroll",icon:"📜"},{value:"time_on_page",label:(0,f.__)("Time on Page","tracksure"),eventName:"time_on_page",icon:"⏱️"},{value:"engagement",label:(0,f.__)("Engagement Rate","tracksure"),eventName:"engagement",icon:"❤️"},{value:"video_play",label:(0,f.__)("Video Play","tracksure"),eventName:"video_play",icon:"🎬"},{value:"download",label:(0,f.__)("File Download","tracksure"),eventName:"file_download",icon:"💾"},{value:"outbound_link",label:(0,f.__)("Outbound Link","tracksure"),eventName:"outbound_click",icon:"🔗"},{value:"custom_event",label:(0,f.__)("Custom Event","tracksure"),eventName:"custom_event",icon:"⚡"}],G=({isOpen:r,onClose:n,onSave:e,mode:o,template:s,existingGoal:i})=>{const A=()=>"edit"===o&&i?{...i}:"create-from-template"===o&&s?{name:s.name,description:s.description,event_name:s.event_name,trigger_type:s.trigger_type,category:s.category,conditions:[...s.conditions||[]],match_logic:s.match_logic||"all",value_type:s.value_type||"none",value:s.typical_value||0,attribution_window:30,frequency:"unlimited",is_active:!0}:{name:"",description:"",event_name:"page_view",trigger_type:"pageview",category:"engagement",conditions:[],match_logic:"all",value_type:"none",value:0,attribution_window:30,frequency:"unlimited",is_active:!0},[l,d]=(0,t.useState)(A()),[c,p]=(0,t.useState)({}),[g,m]=(0,t.useState)(!1);(0,t.useEffect)(()=>{r&&(d(A()),p({}),m(!1))},[r,o,s,i]);const C=(r,n)=>{const e={...l,[r]:n};if("trigger_type"===r){const r=R.find(r=>r.value===n);r&&(e.event_name=r.eventName)}d(e),c[r]&&p(n=>({...n,[r]:void 0}))};return(0,a.jsx)(v.a,{isOpen:r,onClose:n,size:"lg",title:(()=>{switch(o){case"edit":return(0,f.__)("Edit Goal");case"create-from-template":return(0,f.__)("Customize Goal Template");default:return(0,f.__)("Create Custom Goal")}})(),footer:(0,a.jsxs)("div",{className:"ts-goal-modal__footer",children:[(0,a.jsx)("button",{onClick:n,className:"ts-btn ts-btn--secondary",disabled:g,"aria-label":(0,f.__)("Cancel"),children:(0,f.__)("Cancel")}),(0,a.jsx)("button",{onClick:async()=>{if((()=>{const r={};return l.name.trim()?l.name.trim().length<3?r.name=(0,f.__)("Goal name must be at least 3 characters"):l.name.trim().length>100&&(r.name=(0,f.__)("Goal name must not exceed 100 characters")):r.name=(0,f.__)("Goal name is required"),l.description&&l.description.length>500&&(r.description=(0,f.__)("Description must not exceed 500 characters")),"fixed"===l.value_type&&(!l.value||l.value<=0)&&(r.fixed_value=(0,f.__)("Fixed value must be greater than 0")),p(r),0===Object.keys(r).length})()){m(!0);try{const r={...l,name:l.name.trim(),description:l.description?.trim()||""};await e(r),n()}catch(r){p({name:(0,f.__)("An error occurred while saving. Please try again.")})}finally{m(!1)}}},className:"ts-btn ts-btn--primary",disabled:g,"aria-label":"edit"===o?(0,f.__)("Update goal"):(0,f.__)("Create goal"),children:g?(0,f.__)("Saving..."):"edit"===o?(0,f.__)("Update Goal"):(0,f.__)("Create Goal")})]}),children:(0,a.jsxs)("div",{className:"ts-goal-modal__content",children:["create-from-template"===o&&(0,a.jsxs)("div",{className:"ts-goal-modal__banner ts-goal-modal__banner--info",role:"alert",children:[(0,a.jsx)("span",{className:"ts-goal-modal__banner-icon",children:"💡"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Customize this template")}),(0,a.jsx)("p",{children:(0,f.__)("Modify the conditions to match your website's URLs, form IDs, or other specific values before creating.")})]})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"basic-info-heading",children:[(0,a.jsxs)("h3",{id:"basic-info-heading",className:"ts-goal-modal__section-title",children:[(0,a.jsx)("span",{className:"ts-goal-modal__section-icon",children:"📝"}),(0,f.__)("Basic Information")]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"goal-name",className:"ts-goal-modal__label ts-goal-modal__label--required",children:(0,f.__)("Goal Name")}),(0,a.jsx)("input",{id:"goal-name",type:"text",className:"ts-goal-modal__input "+(c.name?"ts-goal-modal__input--error":""),value:l.name,onChange:r=>C("name",r.target.value),placeholder:(0,f.__)("e.g., Pricing Page Viewed"),required:!0,"aria-required":"true","aria-invalid":!!c.name,"aria-describedby":c.name?"goal-name-error":void 0,maxLength:100}),c.name&&(0,a.jsx)("p",{id:"goal-name-error",className:"ts-goal-modal__error",role:"alert",children:c.name})]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsxs)("label",{htmlFor:"goal-description",className:"ts-goal-modal__label",children:[(0,f.__)("Description"),(0,a.jsxs)("span",{className:"ts-goal-modal__label-optional",children:[" (",(0,f.__)("optional"),")"]})]}),(0,a.jsx)("textarea",{id:"goal-description",className:"ts-goal-modal__textarea "+(c.description?"ts-goal-modal__input--error":""),value:l.description,onChange:r=>C("description",r.target.value),placeholder:(0,f.__)("Describe what this goal tracks..."),rows:3,"aria-invalid":!!c.description,"aria-describedby":c.description?"goal-description-error":void 0,maxLength:500}),c.description&&(0,a.jsx)("p",{id:"goal-description-error",className:"ts-goal-modal__error",role:"alert",children:c.description}),(0,a.jsxs)("p",{className:"ts-goal-modal__help",children:[(l.description||"").length,"/500 ",(0,f.__)("characters")]})]})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"trigger-heading",children:[(0,a.jsxs)("h3",{id:"trigger-heading",className:"ts-goal-modal__section-title",children:[(0,a.jsx)("span",{className:"ts-goal-modal__section-icon",children:"⚡"}),(0,f.__)("Trigger Type")]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"trigger-type",className:"ts-goal-modal__label ts-goal-modal__label--required",children:(0,f.__)("When should this goal fire?")}),(0,a.jsx)("select",{id:"trigger-type",className:"ts-goal-modal__select",value:l.trigger_type,onChange:r=>C("trigger_type",r.target.value),"aria-required":"true",children:R.map(r=>(0,a.jsxs)("option",{value:r.value,children:[r.icon," ",r.label]},r.value))}),(0,a.jsx)("p",{className:"ts-goal-modal__help",children:(r=>{const n={pageview:(0,f.__)("Fires when a specific page is viewed"),click:(0,f.__)("Fires when a specific element is clicked"),form_submit:(0,f.__)("Fires when a form is submitted"),scroll_depth:(0,f.__)("Fires when user scrolls to a specific depth"),time_on_page:(0,f.__)("Fires when user spends specific time on page"),engagement:(0,f.__)("Fires when user meets scroll + time engagement thresholds"),video_play:(0,f.__)("Fires when a video is played or completed"),download:(0,f.__)("Fires when a file is downloaded"),outbound_link:(0,f.__)("Fires when an external link is clicked"),custom_event:(0,f.__)("Fires when a custom event occurs (e.g., WooCommerce purchase)")};return r in n?n[r]:""})(l.trigger_type)})]}),"custom_event"===l.trigger_type&&(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"custom-event-name",className:"ts-goal-modal__label ts-goal-modal__label--required",children:(0,f.__)("Event Name")}),(0,a.jsx)("input",{id:"custom-event-name",type:"text",className:"ts-goal-modal__input",value:l.event_name||"",onChange:r=>C("event_name",r.target.value),placeholder:(0,f.__)("e.g., purchase, add_to_cart, calculator_completed")}),(0,a.jsx)("p",{className:"ts-goal-modal__help",children:(0,f.__)("The exact event name your custom code or WooCommerce dispatches")})]})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"conditions-heading",children:[(0,a.jsx)(B,{conditions:l.conditions,onChange:r=>C("conditions",r),triggerType:l.trigger_type,matchLogic:l.match_logic,onMatchLogicChange:r=>C("match_logic",r)}),c.conditions&&(0,a.jsx)("p",{className:"ts-goal-modal__error",role:"alert",children:c.conditions})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"value-heading",children:[(0,a.jsxs)("h3",{id:"value-heading",className:"ts-goal-modal__section-title",children:[(0,a.jsx)("span",{className:"ts-goal-modal__section-icon",children:"💰"}),(0,f.__)("Conversion Value")]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"value-type",className:"ts-goal-modal__label",children:(0,f.__)("Value Type")}),(0,a.jsxs)("select",{id:"value-type",className:"ts-goal-modal__select",value:l.value_type,onChange:r=>C("value_type",r.target.value),children:[(0,a.jsx)("option",{value:"none",children:(0,f.__)("No Value (Engagement Metric)")}),(0,a.jsx)("option",{value:"fixed",children:(0,f.__)("Fixed Value (Same for all conversions)")}),(0,a.jsx)("option",{value:"dynamic",children:(0,f.__)("Dynamic Value (Use transaction amount)")})]})]}),"fixed"===l.value_type&&(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsxs)("label",{htmlFor:"fixed-value",className:"ts-goal-modal__label ts-goal-modal__label--required",children:[(0,f.__)("Fixed Value")," ($)"]}),(0,a.jsx)("input",{id:"fixed-value",type:"number",className:"ts-goal-modal__input "+(c.fixed_value?"ts-goal-modal__input--error":""),value:l.value||0,onChange:r=>C("value",parseFloat(r.target.value)||0),placeholder:"0",min:"0",step:"0.01",required:!0,"aria-required":"true","aria-invalid":!!c.fixed_value,"aria-describedby":c.fixed_value?"fixed-value-error":"fixed-value-help"}),c.fixed_value?(0,a.jsx)("p",{id:"fixed-value-error",className:"ts-goal-modal__error",role:"alert",children:c.fixed_value}):(0,a.jsx)("p",{id:"fixed-value-help",className:"ts-goal-modal__help",children:(0,f.__)("This value will be assigned to every conversion (e.g., lead value, estimated revenue)")})]}),"dynamic"===l.value_type&&(0,a.jsxs)("div",{className:"ts-goal-modal__banner ts-goal-modal__banner--info",children:[(0,a.jsx)("span",{className:"ts-goal-modal__banner-icon",children:"💡"}),(0,a.jsx)("div",{children:(0,f.__)("Value will be automatically pulled from transaction data (e.g., WooCommerce order total)")})]})]}),"edit"===o&&(0,a.jsx)("section",{className:"ts-goal-modal__section",children:(0,a.jsxs)("label",{className:"ts-goal-modal__toggle",children:[(0,a.jsx)("input",{type:"checkbox",className:"ts-goal-modal__toggle-input",checked:l.is_active,onChange:r=>C("is_active",r.target.checked),"aria-label":(0,f.__)("Activate this goal")}),(0,a.jsxs)("div",{className:"ts-goal-modal__toggle-content",children:[(0,a.jsx)("div",{className:"ts-goal-modal__toggle-title",children:(0,f.__)("Activate this goal")}),(0,a.jsx)("div",{className:"ts-goal-modal__toggle-description",children:(0,f.__)("Start tracking conversions for this goal")})]})]})}),Object.keys(c).length>0&&(0,a.jsxs)("div",{className:"ts-goal-modal__banner ts-goal-modal__banner--error",role:"alert",children:[(0,a.jsx)("span",{className:"ts-goal-modal__banner-icon",children:"⚠️"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Please fix the following errors:")}),(0,a.jsx)("ul",{className:"ts-goal-modal__error-list",children:Object.entries(c).map(([r,n])=>n&&(0,a.jsx)("li",{children:n},r))})]})]})]})})};var W=e(26604),L=e(99003),P=e(28343),U=e(51768),O={};O.styleTagTransform=q(),O.setAttributes=I(),O.insert=z().bind(null,"head"),O.domAPI=w(),O.insertStyleElement=T();_()(U.A,O);U.A&&U.A.locals&&U.A.locals;const M=({goal:r,onClose:n})=>{const{config:e,dateRange:s}=(0,o.n)(),A=(0,L.iW)(),[l,d]=(0,t.useState)("overview"),[c,p]=(0,t.useState)(1),[g,u]=(0,t.useState)("date"),[E,x]=(0,t.useState)("desc"),[h,b]=(0,t.useState)("all"),[B,k]=(0,t.useState)([]),[_,y]=(0,t.useState)(0),[w,j]=(0,t.useState)(!1),[z,N]=(0,t.useState)(null),[I,S]=(0,t.useState)(null),[T,D]=(0,t.useState)([]),[q,Y]=(0,t.useState)([]),[F,R]=(0,t.useState)(!0),[G,U]=(0,t.useState)(!1);(0,t.useEffect)(()=>{(async()=>{R(!0);try{const n=new i.n(e),a=await n.getGoalSources(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA"),attribution_model:"last_touch"});D(a.sources||[]);const t=await n.getGoalPerformance(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA")});t&&S({total_conversions:t.conversions||0,total_value:t.revenue||0,conversion_rate:t.conversion_rate||0,avg_value:t.avg_value||0,unique_visitors:t.unique_visitors||0,top_pages:(t.top_pages||[]).map(r=>({page_url:r.page,conversions:r.count}))})}catch(r){}finally{R(!1)}})()},[r.goal_id,s,e]),(0,t.useEffect)(()=>{if("timeline"!==l)return;(async()=>{j(!0),N(null);try{const n=new i.n(e),a=await n.getGoalTimeline(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA"),page:c,per_page:20});k(a.conversions||[]),y(a.total||0)}catch(r){const n=r instanceof Error?r.message:(0,f.__)("Failed to load conversions","tracksure");N(n)}finally{j(!1)}})()},[r.goal_id,s,c,e,l]),(0,t.useEffect)(()=>{if("devices"!==l)return;(async()=>{U(!0);try{const n=new i.n(e),a=await n.getGoalDevices(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA")});Y((a.devices||[]).map(r=>({device:r.device||"desktop",browser:r.browser||"unknown",conversions:r.conversions||0,percentage:r.percentage||0})))}catch(r){}finally{U(!1)}})()},[r.goal_id,s,e,l]);const O=(0,t.useMemo)(()=>{const r=new Set(B.map(r=>r.source||"direct"));return["all",...Array.from(r)]},[B]),M=(0,t.useMemo)(()=>{let r=[...B];return"all"!==h&&(r=r.filter(r=>(r.source||"direct")===h)),r.sort((r,n)=>{let e=0;return"date"===g?e=new Date(r.converted_at.replace(" ","T")+"Z").getTime()-new Date(n.converted_at.replace(" ","T")+"Z").getTime():"value"===g?e=(r.value||0)-(n.value||0):"page"===g&&(e=(r.page_url||"").localeCompare(n.page_url||"")),"asc"===E?e:-e}),r},[B,h,g,E]),Z=r=>{g===r?x("asc"===E?"desc":"asc"):(u(r),x("desc"))},V=r=>r.product_name?r.product_name:r.product_id?`Product #${r.product_id}`:r.form_id?`Form: ${r.form_id}`:r.element_selector?r.element_selector:null,$=Math.ceil(_/20),X=()=>{const n=[(0,f.__)("Date","tracksure"),(0,f.__)("Page URL","tracksure"),"none"!==r.value_type?(0,f.__)("Value","tracksure"):null,(0,f.__)("Context","tracksure"),(0,f.__)("Source","tracksure"),(0,f.__)("Medium","tracksure"),(0,f.__)("Campaign","tracksure"),(0,f.__)("Device","tracksure"),(0,f.__)("Browser","tracksure")].filter(Boolean),e=M.map(e=>[e.converted_at,e.page_url,"none"!==r.value_type?e.value:null,V(e)||"-",e.source||"direct",e.medium||"-",e.campaign||"-",e.device||"-",e.browser||"-"].filter((r,e)=>null!==n[e])),a=[n.join(","),...e.map(r=>r.map(r=>`"${r}"`).join(","))].join("\n"),t=new Blob([a],{type:"text/csv"}),o=window.URL.createObjectURL(t),s=document.createElement("a");s.href=o,s.download=`${r.name.replace(/[^a-z0-9]/gi,"_")}_conversions.csv`,s.click(),window.URL.revokeObjectURL(o)},Q=()=>F?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading overview...","tracksure")})]}):I?(0,a.jsxs)("div",{className:"ts-goal-overview-tab",children:[(0,a.jsxs)("div",{className:"ts-overview-metrics",children:[(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Total Conversions","tracksure")}),(0,a.jsx)("div",{className:"ts-metric-value",children:I.total_conversions.toLocaleString()})]})})}),"none"!==r.value_type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Total Value","tracksure")}),(0,a.jsx)("div",{className:"ts-metric-value",children:(0,P.vv)(I.total_value)})]})})}),(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Average Value","tracksure")}),(0,a.jsx)("div",{className:"ts-metric-value",children:(0,P.vv)(I.avg_value)})]})})})]}),(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Conversion Rate","tracksure")}),(0,a.jsxs)("div",{className:"ts-metric-value",children:[I.conversion_rate.toFixed(2),"%"]})]})})})]}),I.top_pages&&I.top_pages.length>0&&(0,a.jsxs)(C.Zp,{children:[(0,a.jsx)(C.aR,{children:(0,f.__)("Top Converting Pages","tracksure")}),(0,a.jsx)(C.bw,{children:(0,a.jsx)("div",{className:"ts-top-pages",children:I.top_pages.map((r,n)=>(0,a.jsxs)("div",{className:"ts-top-page",children:[(0,a.jsxs)("div",{className:"ts-top-page-rank",children:["#",n+1]}),(0,a.jsx)("div",{className:"ts-top-page-url",children:(0,a.jsx)("a",{href:r.page_url,target:"_blank",rel:"noopener noreferrer",children:r.page_url})}),(0,a.jsx)("div",{className:"ts-top-page-conversions",children:(0,a.jsxs)(W.E,{variant:"success",children:[r.conversions," ",(0,f.__)("conversions","tracksure")]})})]},n))})})]})]}):(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"BarChart3",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No data available for this period.","tracksure")})]}),H=()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"ts-modal-filters",children:[(0,a.jsxs)("div",{className:"ts-filter-group",children:[(0,a.jsx)("label",{children:(0,f.__)("Filter by Source:","tracksure")}),(0,a.jsx)("select",{value:h,onChange:r=>b(r.target.value),className:"ts-filter-select",children:O.map(r=>(0,a.jsx)("option",{value:r,children:"all"===r?(0,f.__)("All Sources","tracksure"):r},r))})]}),(0,a.jsxs)("button",{className:"ts-export-btn",onClick:X,children:[(0,a.jsx)(m.I,{name:"Download",size:14}),(0,f.__)("Export CSV","tracksure")]})]}),(0,a.jsx)("div",{className:"ts-modal-content",children:w?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading conversions...","tracksure")})]}):z?(0,a.jsxs)("div",{className:"ts-error",children:[(0,a.jsx)(m.I,{name:"AlertCircle",size:24}),(0,a.jsx)("span",{children:z})]}):0===M.length?(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"FileText",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No conversions found for this date range.","tracksure")})]}):(0,a.jsx)("div",{className:"ts-table-scroll",children:(0,a.jsxs)("table",{className:"ts-conversions-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsxs)("th",{onClick:()=>Z("date"),className:"date"===g?"ts-sorted":"",children:[(0,f.__)("Date","tracksure")," ","date"===g&&("asc"===E?"↑":"↓")]}),(0,a.jsxs)("th",{onClick:()=>Z("page"),className:"page"===g?"ts-sorted":"",children:[(0,f.__)("Page URL","tracksure")," ","page"===g&&("asc"===E?"↑":"↓")]}),(0,a.jsx)("th",{children:(0,f.__)("Context","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Source","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Device","tracksure")}),"none"!==r.value_type&&(0,a.jsxs)("th",{onClick:()=>Z("value"),className:"value"===g?"ts-sorted":"",children:[(0,f.__)("Value","tracksure")," ","value"===g&&("asc"===E?"↑":"↓")]})]})}),(0,a.jsx)("tbody",{children:M.map(n=>{return(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"ts-date-cell",children:(e=n.converted_at,(0,L.oD)(e,A))}),(0,a.jsx)("td",{className:"ts-url-cell",children:n.page_url?(0,a.jsxs)("a",{href:n.page_url,target:"_blank",rel:"noopener noreferrer",className:"ts-url-link",children:[n.page_url,(0,a.jsx)(m.I,{name:"ExternalLink",size:12})]}):(0,a.jsx)("span",{className:"ts-url-empty",children:"-"})}),(0,a.jsx)("td",{className:"ts-context-cell",children:V(n)?(0,a.jsxs)("span",{className:"ts-context-badge",children:[(0,a.jsx)(m.I,{name:"Tag",size:12}),V(n)]}):(0,a.jsx)("span",{className:"ts-context-empty",children:"-"})}),(0,a.jsx)("td",{className:"ts-source-cell",children:(0,a.jsxs)("div",{className:"ts-source-info",children:[(0,a.jsx)("strong",{children:n.source||"direct"}),n.medium&&(0,a.jsxs)("span",{className:"ts-medium",children:[" / ",n.medium]}),n.campaign&&(0,a.jsx)("div",{className:"ts-campaign",children:n.campaign})]})}),(0,a.jsx)("td",{className:"ts-device-cell",children:(0,a.jsxs)("span",{className:"ts-device-badge",children:[(0,a.jsx)(m.I,{name:"mobile"===n.device?"Smartphone":"tablet"===n.device?"Tablet":"Monitor",size:12}),n.device||"desktop"]})}),"none"!==r.value_type&&(0,a.jsx)("td",{className:"ts-value-cell",children:(0,P.vv)(n.value||0)})]},n.conversion_id);var e})})]})})}),!w&&$>1&&(0,a.jsxs)("div",{className:"ts-modal-pagination",children:[(0,a.jsxs)("button",{onClick:()=>p(r=>Math.max(1,r-1)),disabled:1===c,className:"ts-page-btn",children:[(0,a.jsx)(m.I,{name:"ChevronLeft",size:16}),(0,f.__)("Previous","tracksure")]}),(0,a.jsxs)("span",{className:"ts-page-info",children:[(0,f.__)("Page","tracksure")," ",c," ",(0,f.__)("of","tracksure")," ",$," (",_," ",(0,f.__)("total conversions","tracksure"),")"]}),(0,a.jsxs)("button",{onClick:()=>p(r=>Math.min($,r+1)),disabled:c===$,className:"ts-page-btn",children:[(0,f.__)("Next","tracksure"),(0,a.jsx)(m.I,{name:"ChevronRight",size:16})]})]})]}),J=()=>F?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading sources...","tracksure")})]}):0===T.length?(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"Globe",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No source data available for this period.","tracksure")})]}):(0,a.jsx)("div",{className:"ts-sources-tab",children:(0,a.jsxs)("table",{className:"ts-sources-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{children:(0,f.__)("Source","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Medium","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Conversions","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Percentage","tracksure")}),"none"!==r.value_type&&(0,a.jsx)("th",{children:(0,f.__)("Revenue","tracksure")})]})}),(0,a.jsx)("tbody",{children:T.map((n,e)=>(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"ts-source-name",children:n.source}),(0,a.jsx)("td",{className:"ts-source-medium",children:n.medium||"-"}),(0,a.jsx)("td",{className:"ts-source-conversions",children:n.conversions}),(0,a.jsxs)("td",{className:"ts-source-percentage",children:[(0,a.jsx)("div",{className:"ts-progress-bar",children:(0,a.jsx)("div",{className:"ts-progress-fill",style:{width:`${n.percentage}%`}})}),(0,a.jsxs)("span",{children:[n.percentage.toFixed(1),"%"]})]}),"none"!==r.value_type&&(0,a.jsx)("td",{className:"ts-source-revenue",children:(0,P.vv)(n.revenue)})]},e))})]})}),K=()=>G?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading devices...","tracksure")})]}):0===q.length?(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"Monitor",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No device data available for this period.","tracksure")})]}):(0,a.jsx)("div",{className:"ts-devices-tab",children:(0,a.jsxs)("table",{className:"ts-devices-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{children:(0,f.__)("Device","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Browser","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Conversions","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Percentage","tracksure")})]})}),(0,a.jsx)("tbody",{children:q.map((r,n)=>(0,a.jsxs)("tr",{children:[(0,a.jsxs)("td",{className:"ts-device-name",children:[(0,a.jsx)(m.I,{name:"mobile"===r.device?"Smartphone":"tablet"===r.device?"Tablet":"Monitor",size:16}),r.device]}),(0,a.jsx)("td",{className:"ts-device-browser",children:r.browser}),(0,a.jsx)("td",{className:"ts-device-conversions",children:r.conversions}),(0,a.jsxs)("td",{className:"ts-device-percentage",children:[(0,a.jsx)("div",{className:"ts-progress-bar",children:(0,a.jsx)("div",{className:"ts-progress-fill",style:{width:`${r.percentage}%`}})}),(0,a.jsxs)("span",{children:[r.percentage.toFixed(1),"%"]})]})]},n))})]})});return(0,a.jsx)(v.a,{isOpen:!0,onClose:n,size:"xl",title:(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{children:r.name}),(0,a.jsx)("p",{className:"ts-modal-subtitle",children:r.description})]}),children:(0,a.jsxs)("div",{className:"ts-goal-details-modal",children:[(0,a.jsxs)("div",{className:"ts-modal-tabs",children:[(0,a.jsxs)("button",{className:"ts-modal-tab "+("overview"===l?"ts-modal-tab--active":""),onClick:()=>d("overview"),children:[(0,a.jsx)(m.I,{name:"BarChart3",size:18}),(0,f.__)("Overview","tracksure")]}),(0,a.jsxs)("button",{className:"ts-modal-tab "+("timeline"===l?"ts-modal-tab--active":""),onClick:()=>d("timeline"),children:[(0,a.jsx)(m.I,{name:"Clock",size:18}),(0,f.__)("Timeline","tracksure")]}),(0,a.jsxs)("button",{className:"ts-modal-tab "+("sources"===l?"ts-modal-tab--active":""),onClick:()=>d("sources"),children:[(0,a.jsx)(m.I,{name:"Globe",size:18}),(0,f.__)("Sources","tracksure")]}),(0,a.jsxs)("button",{className:"ts-modal-tab "+("devices"===l?"ts-modal-tab--active":""),onClick:()=>d("devices"),children:[(0,a.jsx)(m.I,{name:"Monitor",size:18}),(0,f.__)("Devices","tracksure")]})]}),(0,a.jsx)("div",{className:"ts-modal-tab-content",children:(()=>{switch(l){case"overview":return Q();case"timeline":return H();case"sources":return J();case"devices":return K();default:return null}})()})]})})};var Z=e(66522),V=e(87791),$=e(56883),X={};X.styleTagTransform=q(),X.setAttributes=I(),X.insert=z().bind(null,"head"),X.domAPI=w(),X.insertStyleElement=T();_()($.A,X);$.A&&$.A.locals&&$.A.locals;const Q=[{id:"basic",title:(0,f.__)("Basic Information","tracksure"),description:(0,f.__)("Name and describe your goal","tracksure"),icon:"FileText"},{id:"trigger",title:(0,f.__)("Trigger Configuration","tracksure"),description:(0,f.__)("Choose what triggers this goal","tracksure"),icon:"Zap"},{id:"conditions",title:(0,f.__)("Conditions","tracksure"),description:(0,f.__)("Define when the goal converts","tracksure"),icon:"Filter"},{id:"advanced",title:(0,f.__)("Advanced Settings","tracksure"),description:(0,f.__)("Value, frequency, and attribution","tracksure"),icon:"Settings"},{id:"preview",title:(0,f.__)("Review & Save","tracksure"),description:(0,f.__)("Preview and confirm your goal","tracksure"),icon:"Eye"}],H=[{value:"pageview",label:(0,f.__)("Page View","tracksure"),description:(0,f.__)("Track visits to specific pages or sections","tracksure"),icon:"FileText",eventName:"page_view"},{value:"click",label:(0,f.__)("Element Click","tracksure"),description:(0,f.__)("Track clicks on buttons, links, or elements","tracksure"),icon:"MousePointer",eventName:"click"},{value:"form_submit",label:(0,f.__)("Form Submission","tracksure"),description:(0,f.__)("Track form completions and leads","tracksure"),icon:"Send",eventName:"form_submit"},{value:"scroll_depth",label:(0,f.__)("Scroll Depth","tracksure"),description:(0,f.__)("Track how far users scroll on a page","tracksure"),icon:"ArrowDown",eventName:"scroll"},{value:"time_on_page",label:(0,f.__)("Time on Page","tracksure"),description:(0,f.__)("Track engagement duration","tracksure"),icon:"Clock",eventName:"time_on_page"},{value:"engagement",label:(0,f.__)("Engagement Rate","tracksure"),description:(0,f.__)("Track combined scroll + time engagement","tracksure"),icon:"Heart",eventName:"engagement"},{value:"video_play",label:(0,f.__)("Video Play","tracksure"),description:(0,f.__)("Track video interactions","tracksure"),icon:"Play",eventName:"video_play"},{value:"download",label:(0,f.__)("File Download","tracksure"),description:(0,f.__)("Track file and document downloads","tracksure"),icon:"Download",eventName:"file_download"},{value:"outbound_link",label:(0,f.__)("Outbound Link","tracksure"),description:(0,f.__)("Track clicks to external websites","tracksure"),icon:"ExternalLink",eventName:"outbound_click"},{value:"custom_event",label:(0,f.__)("Custom Event","tracksure"),description:(0,f.__)("Track custom JavaScript events","tracksure"),icon:"Code",eventName:"custom_event"}],J=[{value:"engagement",label:(0,f.__)("Engagement","tracksure"),icon:"Heart"},{value:"leads",label:(0,f.__)("Leads & Conversions","tracksure"),icon:"Users"},{value:"ecommerce",label:(0,f.__)("E-commerce","tracksure"),icon:"ShoppingCart"},{value:"content",label:(0,f.__)("Content & Media","tracksure"),icon:"FileText"}],K=({isOpen:r,onClose:n,onSave:e,onSaveAsTemplate:o})=>{const[s,i]=(0,t.useState)("basic"),[A,l]=(0,t.useState)({name:"",description:"",category:"engagement",trigger_type:"pageview",event_name:"page_view",conditions:[],match_logic:"all",value_type:"none",value:0,attribution_window:30,frequency:"unlimited",is_active:!0}),[d,c]=(0,t.useState)({}),[p,g]=(0,t.useState)(!1),C=Q.findIndex(r=>r.id===s),u=0===C,E=C===Q.length-1,x=r=>{const n={};if("basic"===r){const r=A.name?.trim()||"";r?r.length<3?n.name=(0,f.__)("Goal name must be at least 3 characters","tracksure"):r.length>100&&(n.name=(0,f.__)("Goal name cannot exceed 100 characters","tracksure")):n.name=(0,f.__)("Goal name is required","tracksure"),A.description&&A.description.length>500&&(n.description=(0,f.__)("Description cannot exceed 500 characters","tracksure")),A.category||(n.category=(0,f.__)("Please select a category","tracksure"))}if("trigger"===r){A.trigger_type||(n.trigger_type=(0,f.__)("Please select a trigger type","tracksure"));const r=A.event_name?.trim()||"";r?r.length>100?n.event_name=(0,f.__)("Event name cannot exceed 100 characters","tracksure"):/^[a-z0-9_]+$/.test(r)||(n.event_name=(0,f.__)("Event name must contain only lowercase letters, numbers, and underscores","tracksure")):n.event_name=(0,f.__)("Event name is required","tracksure")}return"advanced"===r&&"fixed"===A.value_type&&(!A.value||A.value<=0)&&(n.value=(0,f.__)("Fixed value must be greater than 0","tracksure")),c(n),0===Object.keys(n).length},h=()=>{for(const r of Q)if(!x(r.id))return i(r.id),!1;return!0};(0,t.useEffect)(()=>{if(!r)return;const n=localStorage.getItem("tracksure_goal_draft");if(n)try{const r=JSON.parse(n);l(r),g(!0)}catch(r){}},[r]),(0,t.useEffect)(()=>{if("custom_event"===A.trigger_type)return;const r=H.find(r=>r.value===A.trigger_type);r&&l(n=>({...n,event_name:r.eventName}))},[A.trigger_type]);return(0,a.jsx)(v.a,{isOpen:r,onClose:n,size:"xl",title:(0,f.__)("Create Custom Goal","tracksure"),children:(0,a.jsxs)("div",{className:"ts-custom-goal-builder",children:[(0,a.jsx)("div",{className:"ts-goal-builder-steps",children:Q.map((r,n)=>(0,a.jsxs)("div",{className:`ts-step ${s===r.id?"ts-step--active":""} ${n<C?"ts-step--completed":""}`,children:[(0,a.jsx)("div",{className:"ts-step-number",children:n<C?(0,a.jsx)(m.I,{name:"Check",size:16}):(0,a.jsx)("span",{children:n+1})}),(0,a.jsxs)("div",{className:"ts-step-info",children:[(0,a.jsx)("div",{className:"ts-step-title",children:r.title}),(0,a.jsx)("div",{className:"ts-step-description",children:r.description})]})]},r.id))}),(0,a.jsxs)("div",{className:"ts-builder-content",children:[p&&(0,a.jsxs)("div",{className:"ts-draft-notice",children:[(0,a.jsx)(m.I,{name:"Info",size:16}),(0,f.__)("Draft loaded from previous session","tracksure")]}),(()=>{switch(s){case"basic":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"FileText",size:20}),(0,f.__)("Basic Information","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsxs)("label",{htmlFor:"goal-name",children:[(0,f.__)("Goal Name","tracksure")," ",(0,a.jsx)("span",{className:"ts-required",children:"*"})]}),(0,a.jsx)("input",{id:"goal-name",type:"text",value:A.name||"",onChange:r=>l({...A,name:r.target.value}),placeholder:(0,f.__)("e.g., Newsletter Signup, Product Purchase","tracksure"),className:d.name?"ts-input-error":"",autoFocus:!0}),d.name&&(0,a.jsx)("span",{className:"ts-error-message",children:d.name}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Choose a clear, descriptive name that identifies this goal","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsxs)("label",{htmlFor:"goal-description",children:[(0,f.__)("Description","tracksure")," ",(0,a.jsxs)("span",{className:"ts-optional",children:["(",(0,f.__)("optional","tracksure"),")"]})]}),(0,a.jsx)("textarea",{id:"goal-description",value:A.description||"",onChange:r=>l({...A,description:r.target.value}),placeholder:(0,f.__)("Describe the purpose of this goal and what success looks like","tracksure"),rows:3}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Help team members understand what this goal measures","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsxs)("label",{children:[(0,f.__)("Category","tracksure")," ",(0,a.jsx)("span",{className:"ts-required",children:"*"})]}),(0,a.jsx)("div",{className:"ts-category-grid",children:J.map(r=>(0,a.jsxs)("button",{type:"button",className:"ts-category-card "+(A.category===r.value?"ts-category-card--selected":""),onClick:()=>l({...A,category:r.value}),children:[(0,a.jsx)(m.I,{name:r.icon,size:24}),(0,a.jsx)("span",{children:r.label})]},r.value))}),d.category&&(0,a.jsx)("span",{className:"ts-error-message",children:d.category})]})]})]})});case"trigger":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Zap",size:20}),(0,f.__)("Choose Trigger Type","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsx)("p",{className:"ts-section-intro",children:(0,f.__)("Select what user action will trigger this goal conversion","tracksure")}),(0,a.jsx)("div",{className:"ts-trigger-grid",children:H.map(r=>(0,a.jsxs)("button",{type:"button",className:"ts-trigger-card "+(A.trigger_type===r.value?"ts-trigger-card--selected":""),onClick:()=>l({...A,trigger_type:r.value}),children:[(0,a.jsx)("div",{className:"ts-trigger-icon",children:(0,a.jsx)(m.I,{name:r.icon,size:32})}),(0,a.jsxs)("div",{className:"ts-trigger-info",children:[(0,a.jsx)("div",{className:"ts-trigger-label",children:r.label}),(0,a.jsx)("div",{className:"ts-trigger-description",children:r.description})]}),A.trigger_type===r.value&&(0,a.jsx)("div",{className:"ts-trigger-check",children:(0,a.jsx)(m.I,{name:"CheckCircle",size:20})})]},r.value))}),d.trigger_type&&(0,a.jsx)("span",{className:"ts-error-message",children:d.trigger_type}),"custom_event"===A.trigger_type&&(0,a.jsxs)("div",{className:"ts-form-field",style:{marginTop:"16px"},children:[(0,a.jsxs)("label",{htmlFor:"custom-event-name",children:[(0,f.__)("Event Name","tracksure")," ",(0,a.jsx)("span",{className:"ts-required",children:"*"})]}),(0,a.jsx)("input",{id:"custom-event-name",type:"text",value:A.event_name||"",onChange:r=>l({...A,event_name:r.target.value}),placeholder:(0,f.__)("e.g., purchase, add_to_cart, calculator_completed","tracksure"),maxLength:100}),d.event_name&&(0,a.jsx)("p",{className:"ts-field-error",children:d.event_name}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("The exact event name your custom code dispatches","tracksure")})]})]})]})});case"conditions":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Filter",size:20}),(0,f.__)("Define Conditions","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsx)("p",{className:"ts-section-intro",children:(0,f.__)("Add conditions to specify exactly when this goal should convert","tracksure")}),(0,a.jsx)(B,{conditions:A.conditions||[],onChange:r=>l({...A,conditions:r}),triggerType:A.trigger_type||"pageview",matchLogic:A.match_logic,onMatchLogicChange:r=>l({...A,match_logic:r})}),d.conditions&&(0,a.jsx)("span",{className:"ts-error-message",children:d.conditions}),A.conditions&&A.conditions.length>0&&(0,a.jsxs)("div",{className:"ts-conditions-preview",children:[(0,a.jsxs)("h4",{children:[(0,a.jsx)(m.I,{name:"Eye",size:16}),(0,f.__)("Condition Logic Preview","tracksure")]}),(0,a.jsxs)("div",{className:"ts-logic-preview",children:["all"===A.match_logic?(0,a.jsxs)("p",{children:[(0,f.__)("Goal converts when","tracksure")," ",(0,a.jsx)("strong",{children:(0,f.__)("ALL","tracksure")})," ",(0,f.__)("of the following are true:","tracksure")]}):(0,a.jsxs)("p",{children:[(0,f.__)("Goal converts when","tracksure")," ",(0,a.jsx)("strong",{children:(0,f.__)("ANY","tracksure")})," ",(0,f.__)("of the following are true:","tracksure")]}),(0,a.jsx)("ul",{className:"ts-condition-list",children:A.conditions.map((r,n)=>(0,a.jsxs)("li",{children:[(0,a.jsx)("code",{children:r.param})," ",(0,a.jsx)("em",{children:r.operator})," ",(0,a.jsxs)("code",{children:['"',r.value,'"']})]},n))})]})]})]})]})});case"advanced":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Settings",size:20}),(0,f.__)("Advanced Settings","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsx)("label",{children:(0,f.__)("Conversion Value","tracksure")}),(0,a.jsxs)("div",{className:"ts-radio-group",children:[(0,a.jsxs)("label",{className:"ts-radio-option",children:[(0,a.jsx)("input",{type:"radio",name:"value_type",value:"none",checked:"none"===A.value_type,onChange:r=>l({...A,value_type:"none"})}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:(0,f.__)("No Value","tracksure")}),(0,a.jsx)("small",{children:(0,f.__)("Track conversions only (most common)","tracksure")})]})]}),(0,a.jsxs)("label",{className:"ts-radio-option",children:[(0,a.jsx)("input",{type:"radio",name:"value_type",value:"fixed",checked:"fixed"===A.value_type,onChange:r=>l({...A,value_type:"fixed"})}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Fixed Value","tracksure")}),(0,a.jsx)("small",{children:(0,f.__)("Assign a specific value to each conversion","tracksure")})]})]}),(0,a.jsxs)("label",{className:"ts-radio-option",children:[(0,a.jsx)("input",{type:"radio",name:"value_type",value:"dynamic",checked:"dynamic"===A.value_type,onChange:r=>l({...A,value_type:"dynamic"})}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Dynamic Value","tracksure")}),(0,a.jsx)("small",{children:(0,f.__)("Use actual transaction amounts (e.g., order totals)","tracksure")})]})]})]}),"fixed"===A.value_type&&(0,a.jsxs)("div",{className:"ts-value-input",children:[(0,a.jsx)("input",{type:"number",value:A.value||0,onChange:r=>l({...A,value:parseFloat(r.target.value)||0}),min:"0",step:"0.01",placeholder:"0.00",className:d.value?"ts-input-error":""}),d.value&&(0,a.jsx)("span",{className:"ts-error-message",children:d.value}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Enter the monetary value for each conversion (e.g., average lead value)","tracksure")})]})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsx)("label",{htmlFor:"attribution-window",children:(0,f.__)("Attribution Window","tracksure")}),(0,a.jsxs)("select",{id:"attribution-window",value:A.attribution_window||30,onChange:r=>l({...A,attribution_window:parseInt(r.target.value)}),children:[(0,a.jsx)("option",{value:"1",children:(0,f.__)("1 day","tracksure")}),(0,a.jsx)("option",{value:"7",children:(0,f.__)("7 days","tracksure")}),(0,a.jsx)("option",{value:"14",children:(0,f.__)("14 days","tracksure")}),(0,a.jsx)("option",{value:"30",children:(0,f.__)("30 days (recommended)","tracksure")}),(0,a.jsx)("option",{value:"60",children:(0,f.__)("60 days","tracksure")}),(0,a.jsx)("option",{value:"90",children:(0,f.__)("90 days","tracksure")})]}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("How long to connect conversions to original traffic sources","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsx)("label",{htmlFor:"frequency",children:(0,f.__)("Conversion Frequency","tracksure")}),(0,a.jsxs)("select",{id:"frequency",value:A.frequency||"unlimited",onChange:r=>l({...A,frequency:r.target.value}),children:[(0,a.jsx)("option",{value:"unlimited",children:(0,f.__)("Unlimited (track every occurrence)","tracksure")}),(0,a.jsx)("option",{value:"session",children:(0,f.__)("Once per session","tracksure")}),(0,a.jsx)("option",{value:"once",children:(0,f.__)("Once per visitor (lifetime)","tracksure")})]}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Control how often the same user can trigger this goal","tracksure")})]})]})]})});case"preview":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Eye",size:20}),(0,f.__)("Review Your Goal","tracksure")]}),(0,a.jsx)(Z.bw,{children:(0,a.jsxs)("div",{className:"ts-goal-preview",children:[(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Basic Information","tracksure")}),(0,a.jsxs)("dl",{children:[(0,a.jsx)("dt",{children:(0,f.__)("Name","tracksure")}),(0,a.jsx)("dd",{children:A.name}),A.description&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("dt",{children:(0,f.__)("Description","tracksure")}),(0,a.jsx)("dd",{children:A.description})]}),(0,a.jsx)("dt",{children:(0,f.__)("Category","tracksure")}),(0,a.jsx)("dd",{children:J.find(r=>r.value===A.category)?.label})]})]}),(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Trigger Configuration","tracksure")}),(0,a.jsxs)("dl",{children:[(0,a.jsx)("dt",{children:(0,f.__)("Trigger Type","tracksure")}),(0,a.jsx)("dd",{children:H.find(r=>r.value===A.trigger_type)?.label}),(0,a.jsx)("dt",{children:(0,f.__)("Event Name","tracksure")}),(0,a.jsx)("dd",{children:(0,a.jsx)("code",{children:A.event_name})})]})]}),(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Conditions","tracksure")}),(0,a.jsx)("p",{children:"all"===A.match_logic?(0,f.__)("Must match ALL conditions:","tracksure"):(0,f.__)("Must match ANY condition:","tracksure")}),A.conditions&&A.conditions.length>0?(0,a.jsx)("ul",{className:"ts-condition-list",children:A.conditions.map((r,n)=>(0,a.jsxs)("li",{children:[(0,a.jsx)("code",{children:r.param})," ",(0,a.jsx)("em",{children:r.operator})," ",(0,a.jsxs)("code",{children:['"',r.value,'"']})]},n))}):(0,a.jsx)("p",{className:"ts-no-conditions",children:(0,f.__)("No conditions defined","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Advanced Settings","tracksure")}),(0,a.jsxs)("dl",{children:[(0,a.jsx)("dt",{children:(0,f.__)("Value Type","tracksure")}),(0,a.jsxs)("dd",{children:["none"===A.value_type&&(0,f.__)("No value tracked","tracksure"),"fixed"===A.value_type&&`${(0,f.__)("Fixed:","tracksure")} $${A.value}`,"dynamic"===A.value_type&&(0,f.__)("Dynamic (from transaction)","tracksure")]}),(0,a.jsx)("dt",{children:(0,f.__)("Attribution Window","tracksure")}),(0,a.jsxs)("dd",{children:[A.attribution_window," ",(0,f.__)("days","tracksure")]}),(0,a.jsx)("dt",{children:(0,f.__)("Frequency","tracksure")}),(0,a.jsxs)("dd",{children:["unlimited"===A.frequency&&(0,f.__)("Unlimited","tracksure"),"session"===A.frequency&&(0,f.__)("Once per session","tracksure"),"once"===A.frequency&&(0,f.__)("Once per visitor","tracksure")]})]})]})]})})]})});default:return null}})()]}),(0,a.jsxs)("div",{className:"ts-builder-actions",children:[(0,a.jsx)("div",{className:"ts-actions-left",children:!u&&(0,a.jsxs)(V.$,{variant:"outline",onClick:()=>{const r=C-1;if(r>=0){const n=Q[r];n&&(i(n.id),c({}))}},children:[(0,a.jsx)(m.I,{name:"ChevronLeft",size:16}),(0,f.__)("Back","tracksure")]})}),(0,a.jsxs)("div",{className:"ts-actions-right",children:[(0,a.jsxs)(V.$,{variant:"ghost",onClick:()=>{g(!0),localStorage.setItem("tracksure_goal_draft",JSON.stringify(A))},children:[(0,a.jsx)(m.I,{name:"Save",size:16}),(0,f.__)("Save Draft","tracksure")]}),E?(0,a.jsxs)(a.Fragment,{children:[o&&(0,a.jsxs)(V.$,{variant:"outline",onClick:()=>{o&&h()&&o(A)},children:[(0,a.jsx)(m.I,{name:"Bookmark",size:16}),(0,f.__)("Save as Template","tracksure")]}),(0,a.jsxs)(V.$,{variant:"primary",onClick:()=>{h()&&(e(A),localStorage.removeItem("tracksure_goal_draft"),g(!1))},children:[(0,a.jsx)(m.I,{name:"Check",size:16}),(0,f.__)("Create Goal","tracksure")]})]}):(0,a.jsxs)(V.$,{variant:"primary",onClick:()=>{if(x(s)){const r=C+1;if(r<Q.length){const n=Q[r];n&&i(n.id)}}},children:[(0,f.__)("Next","tracksure"),(0,a.jsx)(m.I,{name:"ChevronRight",size:16})]})]})]})]})})};var rr=e(96478),nr={};nr.styleTagTransform=q(),nr.setAttributes=I(),nr.insert=z().bind(null,"head"),nr.domAPI=w(),nr.insertStyleElement=T();_()(rr.A,nr);rr.A&&rr.A.locals&&rr.A.locals;const er=({selectedGoals:r,allGoals:n,onActionComplete:e,onSelectionChange:o})=>{const[s,i]=(0,t.useState)(!1),[A,l]=(0,t.useState)(null);(0,t.useEffect)(()=>{const r=r=>{"Escape"===r.key&&A&&l(null)};if(A)return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[A]);const d=async n=>{if(0!==r.length)if("delete"!==n)if("disable"!==n){i(!0);try{"export"===n?await p():await c(n)}catch(r){alert((0,f.__)("Failed to perform bulk action. Please try again.","tracksure"))}finally{i(!1)}}else l("disable");else l("delete");else alert((0,f.__)("Please select at least one goal.","tracksure"))},c=async n=>{const a="enable"===n?1:0,t=r.map(r=>window.wp.apiFetch({path:`/ts/v1/goals/${r}`,method:"POST",data:{is_active:a}}));await Promise.all(t),o([]),e(),alert(1===r.length?(0,f.__)("Goal updated successfully.","tracksure"):(0,f.__)(`${r.length} goals updated successfully.`,"tracksure"))},p=async()=>{const e=n.filter(n=>r.includes(n.goal_id)),a={version:"2.1.0",exported_at:(new Date).toISOString(),goals:e.map(r=>({name:r.name,description:r.description,category:r.category,trigger_type:r.trigger_type,event_name:r.event_name,conditions:r.conditions,match_logic:r.match_logic,value_type:r.value_type,value:r.value,attribution_window:r.attribution_window,frequency:r.frequency,is_active:r.is_active}))},t=new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),s=URL.createObjectURL(t),i=document.createElement("a");i.href=s,i.download=`tracksure-goals-${Date.now()}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(s),alert(1===r.length?(0,f.__)("Goal exported successfully.","tracksure"):(0,f.__)(`${r.length} goals exported successfully.`,"tracksure")),o([])},g=r.length===n.length&&n.length>0,m=r.length>0&&r.length<n.length;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"goal-bulk-actions",role:"toolbar","aria-label":(0,f.__)("Bulk actions for goals","tracksure"),children:[(0,a.jsx)("div",{className:"bulk-actions-left",children:(0,a.jsxs)("label",{className:"bulk-select-all",children:[(0,a.jsx)("input",{type:"checkbox",checked:g,ref:r=>{r&&(r.indeterminate=m)},onChange:()=>{r.length===n.length?o([]):o(n.map(r=>r.goal_id))},disabled:0===n.length,"aria-label":g?(0,f.__)("Deselect all goals","tracksure"):(0,f.__)("Select all goals","tracksure")}),(0,a.jsx)("span",{children:r.length>0?(0,f.__)(`${r.length} selected`,"tracksure"):(0,f.__)("Select all","tracksure")})]})}),r.length>0&&(0,a.jsxs)("div",{className:"bulk-actions-right",role:"group","aria-label":(0,f.__)("Available bulk actions","tracksure"),children:[(0,a.jsxs)("button",{className:"bulk-action-btn",onClick:()=>d("enable"),disabled:s,"aria-label":(0,f.__)("Enable selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-yes-alt","aria-hidden":"true"}),(0,f.__)("Enable","tracksure")]}),(0,a.jsxs)("button",{className:"bulk-action-btn",onClick:()=>d("disable"),disabled:s,"aria-label":(0,f.__)("Disable selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-dismiss","aria-hidden":"true"}),(0,f.__)("Disable","tracksure")]}),(0,a.jsxs)("button",{className:"bulk-action-btn",onClick:()=>d("export"),disabled:s,"aria-label":(0,f.__)("Export selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-download","aria-hidden":"true"}),(0,f.__)("Export","tracksure")]}),(0,a.jsxs)("button",{className:"bulk-action-btn bulk-delete",onClick:()=>d("delete"),disabled:s,"aria-label":(0,f.__)("Delete selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-trash","aria-hidden":"true"}),(0,f.__)("Delete","tracksure")]})]})]}),A&&(0,a.jsx)("div",{className:"bulk-confirm-dialog-overlay",onClick:()=>l(null),role:"dialog","aria-modal":"true","aria-labelledby":"bulk-confirm-title",children:(0,a.jsxs)("div",{className:"bulk-confirm-dialog",onClick:r=>r.stopPropagation(),children:[(0,a.jsx)("h3",{id:"bulk-confirm-title",children:"delete"===A?(0,f.__)("Confirm Deletion","tracksure"):(0,f.__)("Confirm Disable","tracksure")}),(0,a.jsx)("p",{children:"delete"===A?1===r.length?(0,f.__)("Are you sure you want to delete this goal? This action cannot be undone.","tracksure"):`${(0,f.__)("Are you sure you want to delete","tracksure")} ${r.length} ${(0,f.__)("goals? This action cannot be undone.","tracksure")}`:1===r.length?(0,f.__)("Are you sure you want to disable this goal?","tracksure"):`${(0,f.__)("Are you sure you want to disable","tracksure")} ${r.length} ${(0,f.__)("goals?","tracksure")}`}),(0,a.jsxs)("div",{className:"bulk-confirm-actions",children:[(0,a.jsx)("button",{className:"button",onClick:()=>l(null),children:(0,f.__)("Cancel","tracksure")}),(0,a.jsx)("button",{className:"button button-primary",onClick:"delete"===A?async()=>{l(null),i(!0);try{const n=r.map(r=>window.wp.apiFetch({path:`/ts/v1/goals/${r}`,method:"DELETE"}));await Promise.all(n),o([]),e(),alert(1===r.length?(0,f.__)("Goal deleted successfully.","tracksure"):(0,f.__)(`${r.length} goals deleted successfully.`,"tracksure"))}catch(r){alert((0,f.__)("Failed to delete goals. Please try again.","tracksure"))}finally{i(!1)}}:()=>{l(null),c("disable")},autoFocus:!0,children:(0,f.__)("Confirm","tracksure")})]})]})})]})};var ar=e(21421),tr={};tr.styleTagTransform=q(),tr.setAttributes=I(),tr.insert=z().bind(null,"head"),tr.domAPI=w(),tr.insertStyleElement=T();_()(ar.A,tr);ar.A&&ar.A.locals&&ar.A.locals;const or=({filters:r,onFiltersChange:n,onReset:e})=>{const[o,s]=(0,t.useState)(!1),[i,A]=(0,t.useState)(r.search);(0,t.useEffect)(()=>{const e=setTimeout(()=>{i!==r.search&&n({...r,search:i})},300);return()=>clearTimeout(e)},[i]);const l=(e,a)=>{n({...r,[e]:a})},d=""!==r.search||"all"!==r.category||"all"!==r.triggerType||"all"!==r.status||"name"!==r.sortBy||"asc"!==r.sortOrder;return(0,a.jsxs)("div",{className:"goal-filters",role:"search","aria-label":(0,f.__)("Filter and search goals","tracksure"),children:[(0,a.jsxs)("div",{className:"filters-header",children:[(0,a.jsxs)("div",{className:"filters-search",children:[(0,a.jsx)("span",{className:"dashicons dashicons-search","aria-hidden":"true"}),(0,a.jsx)("input",{type:"text",placeholder:(0,f.__)("Search goals...","tracksure"),value:i,onChange:r=>A(r.target.value),className:"search-input","aria-label":(0,f.__)("Search goals","tracksure")}),i&&(0,a.jsx)("button",{className:"clear-search",onClick:()=>A(""),title:(0,f.__)("Clear search","tracksure"),"aria-label":(0,f.__)("Clear search","tracksure"),children:(0,a.jsx)("span",{className:"dashicons dashicons-no-alt","aria-hidden":"true"})})]}),(0,a.jsxs)("div",{className:"filters-actions",children:[(0,a.jsxs)("button",{className:"filters-toggle "+(d?"active":""),onClick:()=>s(!o),"aria-expanded":o,"aria-controls":"filter-panel",children:[(0,a.jsx)("span",{className:"dashicons dashicons-filter","aria-hidden":"true"}),(0,f.__)("Filters","tracksure"),d&&(0,a.jsx)("span",{className:"filter-badge","aria-label":(0,f.__)("Active filters","tracksure")})]}),d&&(0,a.jsx)("button",{className:"button",onClick:e,"aria-label":(0,f.__)("Reset all filters","tracksure"),children:(0,f.__)("Reset","tracksure")})]})]}),o&&(0,a.jsxs)("div",{className:"filters-panel",id:"filter-panel",children:[(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-category",children:(0,f.__)("Category","tracksure")}),(0,a.jsxs)("select",{id:"filter-category",value:r.category,onChange:r=>l("category",r.target.value),children:[(0,a.jsx)("option",{value:"all",children:(0,f.__)("All Categories","tracksure")}),(0,a.jsx)("option",{value:"engagement",children:(0,f.__)("Engagement","tracksure")}),(0,a.jsx)("option",{value:"leads",children:(0,f.__)("Leads","tracksure")}),(0,a.jsx)("option",{value:"ecommerce",children:(0,f.__)("E-commerce","tracksure")}),(0,a.jsx)("option",{value:"content",children:(0,f.__)("Content","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-trigger",children:(0,f.__)("Trigger Type","tracksure")}),(0,a.jsxs)("select",{id:"filter-trigger",value:r.triggerType,onChange:r=>l("triggerType",r.target.value),children:[(0,a.jsx)("option",{value:"all",children:(0,f.__)("All Triggers","tracksure")}),(0,a.jsx)("option",{value:"page_visit",children:(0,f.__)("Page Visit","tracksure")}),(0,a.jsx)("option",{value:"element_click",children:(0,f.__)("Element Click","tracksure")}),(0,a.jsx)("option",{value:"form_submission",children:(0,f.__)("Form Submission","tracksure")}),(0,a.jsx)("option",{value:"scroll_depth",children:(0,f.__)("Scroll Depth","tracksure")}),(0,a.jsx)("option",{value:"time_on_page",children:(0,f.__)("Time on Page","tracksure")}),(0,a.jsx)("option",{value:"custom_event",children:(0,f.__)("Custom Event","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-status",children:(0,f.__)("Status","tracksure")}),(0,a.jsxs)("select",{id:"filter-status",value:r.status,onChange:r=>l("status",r.target.value),children:[(0,a.jsx)("option",{value:"all",children:(0,f.__)("All Status","tracksure")}),(0,a.jsx)("option",{value:"active",children:(0,f.__)("Active","tracksure")}),(0,a.jsx)("option",{value:"inactive",children:(0,f.__)("Inactive","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-sortby",children:(0,f.__)("Sort By","tracksure")}),(0,a.jsxs)("select",{id:"filter-sortby",value:r.sortBy,onChange:r=>l("sortBy",r.target.value),children:[(0,a.jsx)("option",{value:"name",children:(0,f.__)("Name","tracksure")}),(0,a.jsx)("option",{value:"created_at",children:(0,f.__)("Date Created","tracksure")}),(0,a.jsx)("option",{value:"conversions",children:(0,f.__)("Conversions","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-order",children:(0,f.__)("Order","tracksure")}),(0,a.jsxs)("select",{id:"filter-order",value:r.sortOrder,onChange:r=>l("sortOrder",r.target.value),children:[(0,a.jsx)("option",{value:"asc",children:(0,f.__)("Ascending","tracksure")}),(0,a.jsx)("option",{value:"desc",children:(0,f.__)("Descending","tracksure")})]})]})]})]})};var sr=e(27691),ir={};ir.styleTagTransform=q(),ir.setAttributes=I(),ir.insert=z().bind(null,"head"),ir.domAPI=w(),ir.insertStyleElement=T();_()(sr.A,ir);sr.A&&sr.A.locals&&sr.A.locals;const Ar=({onImport:r,onClose:n})=>{const[e,o]=(0,t.useState)(!1),[s,i]=(0,t.useState)(!1),[A,l]=(0,t.useState)(null),[d,c]=(0,t.useState)([]),[p,g]=(0,t.useState)(!1),m=(0,t.useRef)(null),C=async r=>{try{const n=await r.text(),e=JSON.parse(n),a=(r=>{const n=[];if(!r||"object"!=typeof r)return n.push((0,f.__)("Invalid JSON format","tracksure")),{valid:!1,errors:n};const e=r;return e.goals&&Array.isArray(e.goals)?0===e.goals.length?(n.push((0,f.__)("Import file contains no goals","tracksure")),{valid:!1,errors:n}):(e.goals.forEach((r,e)=>{r.name||n.push((0,f.__)(`Goal ${e+1}: Missing name`,"tracksure")),r.category||n.push((0,f.__)(`Goal ${e+1}: Missing category`,"tracksure")),r.trigger_type||n.push((0,f.__)(`Goal ${e+1}: Missing trigger type`,"tracksure"))}),{valid:0===n.length,errors:n}):(n.push((0,f.__)("No goals array found in import file","tracksure")),{valid:!1,errors:n})})(e);if(!a.valid)return void l({success:!1,imported:0,skipped:0,errors:a.errors});const t=e.goals.map(r=>({name:String(r.name||""),description:String(r.description||""),event_name:String(r.event_name||r.trigger_type||""),trigger_type:r.trigger_type||"custom_event",category:r.category||void 0,conditions:Array.isArray(r.conditions)?r.conditions:[],match_logic:r.match_logic||"all",value_type:r.value_type||"none",value:"number"==typeof r.conversion_value?r.conversion_value:void 0,frequency:["once","session","unlimited"].includes(String(r.frequency))?String(r.frequency):"once",is_active:void 0===r.is_active||Boolean(r.is_active)}));c(t),g(!0)}catch(r){l({success:!1,imported:0,skipped:0,errors:[(0,f.__)("Failed to parse JSON file. Please check the file format.","tracksure")]})}},u=r=>{r.name.endsWith(".json")?C(r):l({success:!1,imported:0,skipped:0,errors:[(0,f.__)("Please select a JSON file","tracksure")]})};return(0,a.jsxs)("div",{className:"goal-import-modal",role:"dialog","aria-modal":"true","aria-labelledby":"import-title",children:[(0,a.jsxs)("div",{className:"goal-import-header",children:[(0,a.jsx)("h2",{id:"import-title",children:(0,f.__)("Import Goals","tracksure")}),(0,a.jsx)("button",{className:"goal-import-close",onClick:n,"aria-label":(0,f.__)("Close import dialog","tracksure"),children:(0,a.jsx)("span",{className:"dashicons dashicons-no-alt","aria-hidden":"true"})})]}),(0,a.jsxs)("div",{className:"goal-import-body",children:[!p&&!A&&(0,a.jsxs)("div",{className:"goal-import-dropzone "+(e?"dragging":""),onDrop:r=>{r.preventDefault(),o(!1);const n=Array.from(r.dataTransfer.files);n.length>0&&u(n[0])},onDragOver:r=>{r.preventDefault(),o(!0)},onDragLeave:()=>{o(!1)},onClick:()=>m.current?.click(),children:[(0,a.jsx)("span",{className:"dashicons dashicons-upload","aria-hidden":"true"}),(0,a.jsx)("h3",{children:(0,f.__)("Drop JSON file here","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("or click to browse files","tracksure")}),(0,a.jsx)("input",{ref:m,type:"file",accept:".json",onChange:r=>{const n=r.target.files;n&&n.length>0&&u(n[0])},style:{display:"none"},"aria-label":(0,f.__)("Select JSON file","tracksure")})]}),p&&(0,a.jsxs)("div",{className:"goal-import-preview",children:[(0,a.jsx)("h3",{children:(0,f.__)("Preview Import","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)(`${d.length} goal(s) will be imported:`,"tracksure")}),(0,a.jsx)("div",{className:"preview-list",children:d.map((r,n)=>(0,a.jsxs)("div",{className:"preview-item",children:[(0,a.jsxs)("div",{className:"preview-item-header",children:[(0,a.jsx)("strong",{children:r.name}),(0,a.jsx)("span",{className:"preview-badge",children:r.category})]}),(0,a.jsx)("p",{className:"preview-description",children:r.description}),(0,a.jsxs)("div",{className:"preview-meta",children:[(0,a.jsx)("span",{children:r.trigger_type.replace(/_/g," ")}),r.conditions.length>0&&(0,a.jsxs)("span",{children:[r.conditions.length," conditions"]})]})]},n))}),(0,a.jsxs)("div",{className:"goal-import-actions",children:[(0,a.jsx)("button",{className:"button",onClick:()=>{g(!1),c([])},disabled:s,children:(0,f.__)("Cancel","tracksure")}),(0,a.jsx)("button",{className:"button button-primary",onClick:async()=>{i(!0);try{await r(d),l({success:!0,imported:d.length,skipped:0,errors:[]}),g(!1),setTimeout(()=>{n()},2e3)}catch(r){l({success:!1,imported:0,skipped:d.length,errors:[(0,f.__)("Failed to import goals. Please try again.","tracksure")]})}finally{i(!1)}},disabled:s,children:s?(0,f.__)("Importing...","tracksure"):(0,f.__)(`Import ${d.length} Goal(s)`,"tracksure")})]})]}),A&&(0,a.jsxs)("div",{className:"goal-import-result "+(A.success?"success":"error"),children:[(0,a.jsx)("span",{className:"dashicons "+(A.success?"dashicons-yes-alt":"dashicons-warning"),"aria-hidden":"true"}),(0,a.jsx)("h3",{children:A.success?(0,f.__)("Import Successful!","tracksure"):(0,f.__)("Import Failed","tracksure")}),A.success?(0,a.jsx)("p",{children:(0,f.__)(`Successfully imported ${A.imported} goal(s)`,"tracksure")}):(0,a.jsx)("div",{className:"error-list",children:A.errors.map((r,n)=>(0,a.jsx)("p",{className:"error-message",children:r},n))}),(0,a.jsx)("button",{className:"button button-primary",onClick:n,children:(0,f.__)("Close","tracksure")})]})]})]})};var lr=e(12577),dr={};dr.styleTagTransform=q(),dr.setAttributes=I(),dr.insert=z().bind(null,"head"),dr.domAPI=w(),dr.insertStyleElement=T();_()(lr.A,dr);lr.A&&lr.A.locals&&lr.A.locals;const cr=()=>{const{dateRange:r}=(0,o.n)(),{data:n,isLoading:e,error:i,refetch:A}=(0,s.S)("getGoalsOverview",{start_date:(0,P.TJ)(r.start),end_date:(0,P.TJ)(r.end)}),l=(0,t.useMemo)(()=>{if(!n?.conversions_trend)return null;const r=n.total_conversions,e=n.conversions_trend.previous_period||0;if(0===e)return{direction:"neutral",percentage:0};const a=(r-e)/e*100;return{direction:a>0?"up":a<0?"down":"neutral",percentage:Math.abs(Math.round(a))}},[n]),d=(0,t.useMemo)(()=>{if(!n?.value_trend)return null;const r=n.total_value,e=n.value_trend.previous_period||0;if(0===e)return{direction:"neutral",percentage:0};const a=(r-e)/e*100;return{direction:a>0?"up":a<0?"down":"neutral",percentage:Math.abs(Math.round(a))}},[n]),c=(0,t.useMemo)(()=>{if(!n?.rate_trend)return null;const r=n.conversion_rate,e=n.rate_trend.previous_period||0;if(0===e)return{direction:"neutral",percentage:0};const a=(r-e)/e*100;return{direction:a>0?"up":a<0?"down":"neutral",percentage:Math.abs(Math.round(a))}},[n]);return e?(0,a.jsx)("div",{className:"ts-goals-overview",children:(0,a.jsxs)("div",{className:"ts-goals-overview__kpis",children:[(0,a.jsx)(g.or,{}),(0,a.jsx)(g.or,{}),(0,a.jsx)(g.or,{}),(0,a.jsx)(g.or,{})]})}):i?(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-empty-state ts-empty-state--error",children:[(0,a.jsx)(m.I,{name:"AlertCircle",size:48,color:"var(--ts-error)"}),(0,a.jsx)("h3",{children:(0,f.__)("Failed to load goals overview","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("There was an error loading the dashboard data.","tracksure")}),(0,a.jsx)("button",{onClick:A,className:"ts-btn ts-btn--primary",children:(0,f.__)("Retry","tracksure")})]})})}):n?(0,a.jsxs)("div",{className:"ts-goals-overview",children:[(0,a.jsxs)("div",{className:"ts-goals-overview__kpis",children:[(0,a.jsx)(p.l,{metric:{label:(0,f.__)("All Conversions","tracksure"),value:n.total_conversions,format:"number",change:l?.percentage||0}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Conversion Value","tracksure"),value:n.total_value,format:"currency",change:d?.percentage||0}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Avg Conversion Rate","tracksure"),value:n.conversion_rate,format:"percent",change:c?.percentage||0}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Active Goals","tracksure"),value:n.active_goals,format:"number"}})]}),n.daily_conversions&&n.daily_conversions.length>0&&(0,a.jsxs)(C.Zp,{className:"ts-goals-overview__chart",children:[(0,a.jsxs)(C.aR,{children:[(0,a.jsx)("h3",{children:(0,f.__)("Conversions Trend","tracksure")}),(0,a.jsx)("span",{className:"ts-card-header__subtitle",children:(0,f.__)("Last 30 days","tracksure")})]}),(0,a.jsx)(C.bw,{children:(0,a.jsx)("div",{className:"ts-simple-chart",children:(0,a.jsx)("div",{className:"ts-simple-chart__bars",children:(()=>{const r=Math.max(...n.daily_conversions.map(r=>r.conversions));return n.daily_conversions.map((n,e)=>{const t=r>0?n.conversions/r*100:0;return(0,a.jsxs)("div",{className:"ts-simple-chart__bar-wrapper",children:[(0,a.jsx)("div",{className:"ts-simple-chart__bar",style:{height:`${t}%`},title:`${n.date}: ${n.conversions} conversions`,children:(0,a.jsx)("span",{className:"ts-simple-chart__bar-value",children:n.conversions})}),(0,a.jsx)("span",{className:"ts-simple-chart__bar-label",children:new Date(n.date+"T00:00:00").toLocaleDateString(void 0,{month:"short",day:"numeric"})})]},e)})})()})})})]}),n.top_goals&&n.top_goals.length>0&&(0,a.jsxs)(C.Zp,{className:"ts-goals-overview__top-goals",children:[(0,a.jsxs)(C.aR,{children:[(0,a.jsx)("h3",{children:(0,f.__)("Top Performing Goals","tracksure")}),(0,a.jsx)("span",{className:"ts-card-header__subtitle",children:(0,f.__)("By conversion count","tracksure")})]}),(0,a.jsx)(C.bw,{children:(0,a.jsx)("div",{className:"ts-top-goals-list",children:n.top_goals.slice(0,5).map((r,n)=>(0,a.jsxs)("div",{className:"ts-top-goal",children:[(0,a.jsxs)("div",{className:"ts-top-goal__rank",children:["#",n+1]}),(0,a.jsxs)("div",{className:"ts-top-goal__info",children:[(0,a.jsx)("div",{className:"ts-top-goal__name",children:r.name}),(0,a.jsx)("div",{className:"ts-top-goal__type",children:r.trigger_type})]}),(0,a.jsxs)("div",{className:"ts-top-goal__metrics",children:[(0,a.jsxs)("div",{className:"ts-top-goal__conversions",children:[(0,a.jsx)(m.I,{name:"CheckCircle",size:16}),r.conversions.toLocaleString()]}),r.value>0&&(0,a.jsx)("div",{className:"ts-top-goal__value",children:(0,P.vv)(r.value)})]})]},r.goal_id))})})]}),0===n.total_conversions&&(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-empty-state",children:[(0,a.jsx)(m.I,{name:"Inbox",size:64,color:"var(--ts-text-muted)"}),(0,a.jsx)("h3",{children:(0,f.__)("No conversions yet","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Start tracking conversions by creating your first goal.","tracksure")})]})})})]}):null};var pr=e(76840),gr={};gr.styleTagTransform=q(),gr.setAttributes=I(),gr.insert=z().bind(null,"head"),gr.domAPI=w(),gr.insertStyleElement=T();_()(pr.A,gr);pr.A&&pr.A.locals&&pr.A.locals;const mr=()=>{const{config:r,dateRange:n}=(0,o.n)(),[e,v]=(0,t.useState)("overview"),[h,b]=(0,t.useState)("list"),[B,k]=(0,t.useState)("all"),[_,y]=(0,t.useState)(""),[w,j]=(0,t.useState)(!1),[z,N]=(0,t.useState)(null),[I,S]=(0,t.useState)(null),[T,D]=(0,t.useState)([]),[q,Y]=(0,t.useState)(!1),[F,R]=(0,t.useState)({search:"",category:"all",triggerType:"all",status:"all",sortBy:"name",sortOrder:"asc"}),[W,L]=(0,t.useState)(null),[U,O]=(0,t.useState)(null),[Z,V]=(0,t.useState)(null),{data:$,isLoading:X,error:Q,refetch:H}=(0,s.S)("getGoals",{},{refetchInterval:void 0,retry:2,onError:r=>{}}),J=(0,t.useMemo)(()=>$?.goals||[],[$]),rr=J.map(r=>r.goal_id).join(","),nr=(0,t.useMemo)(()=>({goal_ids:rr,date_start:(0,P.TJ)(n.start),date_end:(0,P.TJ)(n.end)}),[rr,n]),{data:ar}=(0,s.S)("getGoalsPerformance",nr,{enabled:J.length>0&&rr.length>0,refetchInterval:void 0,retry:2,onError:r=>{}}),tr=(0,t.useMemo)(()=>ar?.performance||{},[ar]),sr=Q?Q.message:null,ir=async n=>{try{const a=function(r){const n=[];return r.name&&""!==r.name.trim()||n.push("Goal name is required"),r.event_name&&""!==r.event_name.trim()||n.push("Event name is required"),r.trigger_type?A.includes(r.trigger_type)||n.push(`Invalid trigger type: ${r.trigger_type}. Allowed: ${A.join(", ")}`):n.push("Trigger type is required"),r.conditions&&Array.isArray(r.conditions)&&r.conditions.forEach((r,e)=>{const a=e+1;if(r.param&&""!==r.param.trim()||n.push(`Condition #${a}: Parameter (param) is required`),r.operator?l.includes(r.operator)||n.push(`Condition #${a}: Invalid operator '${r.operator}'. Allowed: ${l.join(", ")}`):n.push(`Condition #${a}: Operator is required`),void 0!==r.value&&""!==r.value||n.push(`Condition #${a}: Value is required`),"matches_regex"===r.operator)try{new RegExp(String(r.value))}catch(e){n.push(`Condition #${a}: Invalid regex pattern: ${r.value}`)}}),r.match_logic&&!["all","any"].includes(r.match_logic)&&n.push(`Match logic must be 'all' or 'any', got: ${r.match_logic}`),r.value_type&&!d.includes(r.value_type)&&n.push(`Invalid value_type. Must be: ${d.join(", ")}`),"fixed"===r.value_type&&(void 0===r.value||null===r.value?n.push('Fixed value is required when value_type is "fixed"'):isNaN(Number(r.value))&&n.push("Fixed value must be a number")),r.frequency&&!c.includes(r.frequency)&&n.push(`Invalid frequency. Must be: ${c.join(", ")}`),{valid:0===n.length,errors:n}}(n);if(!a.valid){const r=0===(e=a.errors).length?"":1===e.length?e[0]:`Please fix the following errors:\n• ${e.join("\n• ")}`;throw new Error("Goal validation failed:\n\n"+r)}const t=new i.n(r);if("edit"===W&&Z){const r=Z.goal_id;await t.put(`/goals/${r}`,n)}else await t.post("/goals",n);H(),L(null),O(null),V(null),b("list")}catch(r){throw r}var e},lr=()=>{let r=[];return r="all"===B?E:x(B),_?(r=>{const n=r.toLowerCase();return E.filter(r=>r.name.toLowerCase().includes(n)||r.description.toLowerCase().includes(n))})(_):r},dr=(0,t.useMemo)(()=>{let r=[...J];if(F.search){const n=F.search.toLowerCase();r=r.filter(r=>r.name&&r.name.toLowerCase().includes(n)||r.description&&r.description.toLowerCase().includes(n))}return"all"!==F.category&&(r=r.filter(r=>r.category===F.category)),"all"!==F.triggerType&&(r=r.filter(r=>r.trigger_type===F.triggerType)),"all"!==F.status&&(r=r.filter(r=>r.is_active===("active"===F.status))),r.sort((r,n)=>{let e=0;switch(F.sortBy){case"name":e=(r.name||"").localeCompare(n.name||"");break;case"created_at":e=new Date(r.created_at.replace(" ","T")+"Z").getTime()-new Date(n.created_at.replace(" ","T")+"Z").getTime();break;case"conversions":e=(tr[r.goal_id]?.conversions||0)-(tr[n.goal_id]?.conversions||0);break}return"asc"===F.sortOrder?e:-e}),r},[J,F,tr]),pr=()=>{R({search:"",category:"all",triggerType:"all",status:"all",sortBy:"name",sortOrder:"asc"})};return(0,a.jsxs)("div",{className:"ts-goals-page",children:[(0,a.jsxs)("div",{className:"ts-goals-header",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"ts-page-title",children:(0,f.__)("Goals","tracksure")}),(0,a.jsx)("p",{className:"ts-page-subtitle",children:(0,f.__)("Track conversions and measure what matters most","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-goals-header-actions",children:["goals"===e&&"list"===h&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.$n,{variant:"ghost",onClick:()=>Y(!0),icon:(0,a.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M10 14V6M10 6L7 9M10 6L13 9M4 16h12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),children:(0,f.__)("Import Goals","tracksure")}),(0,a.jsx)(C.$n,{variant:"outline",onClick:()=>{v("templates"),b("templates")},icon:(0,a.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M4 6h12M4 10h12M4 14h12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),children:(0,f.__)("Browse Templates","tracksure")}),(0,a.jsx)(C.$n,{variant:"primary",onClick:()=>b("custom-builder"),icon:(0,a.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M10 5v10M5 10h10",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),children:(0,f.__)("Create Custom Goal","tracksure")})]}),"list"!==h&&(0,a.jsx)(C.$n,{variant:"ghost",onClick:()=>{b("list"),v("goals")},children:(0,f.__)("← Back to Goals","tracksure")})]})]}),(0,a.jsxs)("div",{className:"ts-goals-tabs",children:[(0,a.jsxs)("button",{className:"ts-goals-tab "+("overview"===e?"ts-goals-tab--active":""),onClick:()=>{v("overview"),b("list")},children:[(0,a.jsx)(m.I,{name:"BarChart3",size:18}),(0,f.__)("Overview","tracksure")]}),(0,a.jsxs)("button",{className:"ts-goals-tab "+("goals"===e?"ts-goals-tab--active":""),onClick:()=>{v("goals"),b("list")},children:[(0,a.jsx)(m.I,{name:"Target",size:18}),(0,f.__)("All Goals","tracksure"),J.length>0&&(0,a.jsx)(C.Ex,{variant:"default",size:"sm",children:J.length})]}),(0,a.jsxs)("button",{className:"ts-goals-tab "+("templates"===e?"ts-goals-tab--active":""),onClick:()=>{v("templates"),b("templates")},children:[(0,a.jsx)(m.I,{name:"LayoutTemplate",size:18}),(0,f.__)("Templates","tracksure")]})]}),sr&&(0,a.jsxs)("div",{className:"ts-error-banner",children:[(0,a.jsx)(m.I,{name:"AlertTriangle",size:20,color:"warning"}),(0,a.jsx)("p",{children:sr})]}),"overview"===e&&(0,a.jsx)(cr,{}),"goals"===e&&(0,a.jsxs)(a.Fragment,{children:["list"===h&&(()=>{if(X)return(0,a.jsxs)("div",{className:"ts-goals-loading",children:[(0,a.jsx)("div",{className:"ts-goals-summary",children:[1,2,3].map(r=>(0,a.jsx)(g.or,{},r))}),(0,a.jsx)("div",{className:"ts-goals-table",children:(0,a.jsx)(g.cU,{rows:6,columns:5})})]});if(0===J.length)return(0,a.jsxs)("div",{className:"ts-empty-state",children:[(0,a.jsx)("div",{className:"ts-empty-icon",children:(0,a.jsx)(m.I,{name:"Target",size:64,color:"muted"})}),(0,a.jsx)("h2",{children:(0,f.__)("No goals yet","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Start tracking conversions by creating your first goal from a template or building a custom one.","tracksure")}),(0,a.jsxs)("div",{style:{display:"flex",gap:"12px",justifyContent:"center",marginTop:"16px"},children:[(0,a.jsx)(C.$n,{variant:"primary",onClick:()=>b("templates"),children:(0,f.__)("Browse Templates","tracksure")}),(0,a.jsx)(C.$n,{variant:"outline",onClick:()=>b("custom-builder"),children:(0,f.__)("Create Custom Goal","tracksure")})]})]});if(0===dr.length&&J.length>0)return(0,a.jsxs)("div",{style:{textAlign:"center",padding:"40px 20px"},children:[(0,a.jsx)("h2",{children:(0,f.__)("No Goals Found","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Try adjusting your filters or search query.","tracksure")}),(0,a.jsx)(C.$n,{onClick:pr,children:(0,f.__)("Clear Filters","tracksure")})]});const n=dr.filter(r=>r.is_active),e=n.reduce((r,n)=>{const e=tr[n.goal_id];return r+(e?.conversions||0)},0),t=n.reduce((r,n)=>{const e=tr[n.goal_id];return r+(e?.revenue||0)},0),o=n.filter(r=>"none"!==r.value_type).length,s=n.length>0?n.reduce((r,n)=>{const e=tr[n.goal_id];return r+(e?.conversion_rate||0)},0)/n.length:0;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"ts-goals-summary ts-goals-summary-row",children:[(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Total Achievements","tracksure"),value:e,format:"number"}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Active Goals","tracksure"),value:n.length,format:"number"}}),(0,a.jsx)(p.l,{metric:{label:t>0?(0,f.__)("Total Value","tracksure"):(0,f.__)("Goals with Value","tracksure"),value:t>0?t:o,format:t>0?"currency":"number",currency:(0,P._1)()}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Avg Conversion Rate","tracksure"),value:s,format:"percent"}})]}),(0,a.jsx)(or,{filters:F,onFiltersChange:R,onReset:pr}),(0,a.jsx)(er,{selectedGoals:T,allGoals:dr,onActionComplete:H,onSelectionChange:D}),0===dr.length?(0,a.jsxs)("div",{className:"ts-empty-state",children:[(0,a.jsx)("div",{className:"ts-empty-icon",children:(0,a.jsx)(m.I,{name:"Search",size:64,color:"muted"})}),(0,a.jsx)("h2",{children:(0,f.__)("No Goals Found","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Try adjusting your filters or search query.","tracksure")}),(0,a.jsx)(C.$n,{variant:"outline",onClick:pr,children:(0,f.__)("Clear Filters","tracksure")})]}):(0,a.jsx)("div",{className:"ts-goals-grid",children:dr.map(n=>{const e=tr[n.goal_id],t=T.includes(n.goal_id);return(0,a.jsxs)("div",{className:"ts-goal-card "+(t?"ts-goal-card-selected":""),children:[(0,a.jsx)("div",{className:"ts-goal-checkbox",children:(0,a.jsx)("input",{type:"checkbox",checked:t,onChange:r=>{r.target.checked?D([...T,n.goal_id]):D(T.filter(r=>r!==n.goal_id))}})}),(0,a.jsxs)("div",{className:"ts-goal-header",children:[(0,a.jsxs)("div",{className:"ts-goal-title-section",children:[(0,a.jsxs)("div",{className:"ts-goal-title-row",children:[(0,a.jsx)("h3",{className:"ts-goal-name",children:n.name}),(0,a.jsx)("span",{className:"ts-goal-status "+(n.is_active?"ts-active":"ts-inactive"),children:n.is_active?(0,f.__)("Active","tracksure"):(0,f.__)("Inactive","tracksure")})]}),(0,a.jsx)("p",{className:"ts-goal-description",children:n.description})]}),(0,a.jsxs)("div",{className:"ts-goal-actions",children:[(0,a.jsx)("button",{className:"ts-btn-icon",onClick:()=>{L("edit"),V(n)},title:(0,f.__)("Edit goal","tracksure"),children:(0,a.jsx)(m.I,{name:"Edit2",size:16})}),(0,a.jsx)("button",{className:"ts-btn-icon",onClick:()=>(async n=>{try{const e=new i.n(r);await e.put(`/goals/${n.goal_id}`,{is_active:n.is_active?0:1}),H()}catch(r){throw r}})(n),title:n.is_active?(0,f.__)("Deactivate","tracksure"):(0,f.__)("Activate","tracksure"),children:(0,a.jsx)(m.I,{name:n.is_active?"Pause":"Play",size:16})}),(0,a.jsx)("button",{className:"ts-btn-icon ts-btn-danger",onClick:()=>{N(n),j(!0)},title:(0,f.__)("Delete goal","tracksure"),children:(0,a.jsx)(m.I,{name:"Trash2",size:16,color:"danger"})})]})]}),(0,a.jsx)("div",{className:"ts-goal-details",children:(0,a.jsxs)("div",{className:"ts-goal-meta",children:[(0,a.jsxs)("span",{className:"ts-goal-event",children:[(0,a.jsx)(m.I,{name:"BarChart2",size:16})," ",n.event_name]}),n.conditions.length>0&&(0,a.jsxs)("span",{className:"ts-goal-conditions",children:[(0,a.jsx)(m.I,{name:"Target",size:16})," ",n.conditions.length," ",1===n.conditions.length?(0,f.__)("condition","tracksure"):(0,f.__)("conditions","tracksure")]})]})}),e&&(0,a.jsxs)("div",{className:"ts-goal-performance",children:[(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Conversions","tracksure")}),(0,a.jsx)("span",{className:"ts-goal-stat-value",children:e.conversions.toLocaleString()})]}),"none"!==n.value_type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Revenue","tracksure")}),(0,a.jsx)("span",{className:"ts-goal-stat-value",children:(0,P.vv)(e.revenue)})]}),(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Avg. Value","tracksure")}),(0,a.jsx)("span",{className:"ts-goal-stat-value",children:(0,P.vv)(e.avg_value)})]})]}),(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Conv. Rate","tracksure")}),(0,a.jsxs)("span",{className:"ts-goal-stat-value",children:[e.conversion_rate.toFixed(2),"%"]})]})]}),e&&e.conversions>0&&(0,a.jsxs)("button",{className:"ts-goal-view-details",onClick:()=>{S(n)},children:[(0,a.jsx)(m.I,{name:"Eye",size:14}),(0,f.__)("View Details","tracksure")]})]},n.goal_id)})})]})})(),"custom-builder"===h&&null]}),"templates"===e&&(()=>{const r=lr();return(0,a.jsxs)("div",{className:"ts-templates-view",children:[(0,a.jsx)(C.Zp,{className:"ts-templates-filters",children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-filters-row",children:[(0,a.jsx)(C.l6,{label:(0,f.__)("Goal Category","tracksure"),value:B,onChange:r=>k(r.target.value),options:[{value:"all",label:(0,f.__)("All Categories","tracksure")},...Object.values(u).map(r=>({value:r.id,label:r.label}))],fullWidth:!0}),(0,a.jsx)(C.pd,{placeholder:(0,f.__)("Search templates...","tracksure"),value:_,onChange:r=>y(r.target.value),icon:(0,a.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M9 17A8 8 0 109 1a8 8 0 000 16zM19 19l-4.35-4.35",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),fullWidth:!0})]})})}),(0,a.jsx)("div",{className:"ts-templates-grid",children:r.map(r=>(0,a.jsx)(C.Zp,{variant:"elevated",hoverable:!0,className:"ts-template-card",children:(0,a.jsxs)(C.bw,{children:[(0,a.jsx)("div",{className:"ts-template-icon",children:(0,a.jsx)(m.I,{name:r.icon,size:32,color:"primary"})}),(0,a.jsx)("h3",{className:"ts-template-name",children:r.name}),(0,a.jsx)("p",{className:"ts-template-description",children:r.description}),(0,a.jsxs)("div",{className:"ts-template-meta",children:[(0,a.jsx)(C.Ex,{variant:"default",size:"sm",children:r.event_name}),(0,a.jsx)(C.Ex,{variant:"leads"===r.category?"success":"ecommerce"===r.category?"info":"default",size:"sm",children:r.category})]}),(0,a.jsx)(C.$n,{variant:"primary",fullWidth:!0,onClick:()=>{L("create-from-template"),O(r)},className:"ts-template-add-btn",children:(0,f.__)("Customize & Add","tracksure")})]})},r.id))}),0===r.length&&(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsx)(C.pp,{icon:"Search",title:(0,f.__)("No templates found","tracksure"),message:(0,f.__)("Try adjusting your filters or search query.","tracksure")})})})]})})(),I&&(0,a.jsx)(M,{goal:I,onClose:()=>{S(null)}}),W&&(0,a.jsx)(G,{isOpen:!0,onClose:()=>{L(null),O(null),V(null)},onSave:ir,mode:W,template:U||void 0,existingGoal:Z||void 0}),"custom-builder"===h&&(0,a.jsx)(K,{isOpen:!0,onClose:()=>b("list"),onSave:r=>{ir(r),b("list")},onSaveAsTemplate:r=>{}}),(0,a.jsxs)(C.aF,{isOpen:w,onClose:()=>{j(!1),N(null)},title:(0,f.__)("Delete Goal","tracksure"),size:"sm",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.$n,{variant:"ghost",onClick:()=>{j(!1),N(null)},children:(0,f.__)("Cancel","tracksure")}),(0,a.jsx)(C.$n,{variant:"danger",onClick:()=>z&&(async n=>{try{const e=new i.n(r);await e.delete(`/goals/${n.goal_id}`),H(),j(!1),N(null)}catch(r){}})(z),children:(0,f.__)("Delete","tracksure")})]}),children:[(0,a.jsxs)("p",{children:[(0,f.__)("Are you sure you want to delete","tracksure")," ",(0,a.jsx)("strong",{children:z?.name}),"?"]}),(0,a.jsx)("p",{style:{marginTop:"12px",color:"var(--ts-text-secondary)"},children:(0,f.__)("This action cannot be undone.","tracksure")})]}),q&&(0,a.jsx)("div",{className:"ts-modal-overlay",onClick:()=>Y(!1),children:(0,a.jsx)("div",{onClick:r=>r.stopPropagation(),children:(0,a.jsx)(Ar,{onImport:async n=>{const e=new i.n(r);for(const r of n)await e.post("/goals",r);H()},onClose:()=>Y(!1)})})})]})}},51768:(r,n,e)=>{e.d(n,{A:()=>p});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o),i=e(4417),A=e.n(i),l=new URL(e(9570),e.b),d=s()(t()),c=A()(l);d.push([r.id,`/**\n * Goal Details Modal Styles\n * Enhanced with tab navigation and analytics views\n * \n * @since 2.1.0\n * @package TrackSure\n */\n\n/* Main Container */\n.ts-goal-details-modal {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  min-height: 600px;\n}\n\n/* Modal Subtitle */\n.ts-modal-subtitle {\n  margin: 4px 0 0;\n  font-size: 13px;\n  font-weight: 400;\n  color: var(--text-tertiary);\n  opacity: 0.8;\n}\n\n/* Tab Navigation */\n.ts-modal-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 1px solid var(--border-color);\n  margin-bottom: 20px;\n  padding: 0 4px;\n}\n\n.ts-modal-tab {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 12px 20px;\n  background: transparent;\n  border: none;\n  border-bottom: 2px solid transparent;\n  color: var(--text-secondary);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  position: relative;\n  bottom: -1px;\n}\n\n.ts-modal-tab:hover {\n  color: var(--text-primary);\n  background: var(--background-secondary);\n}\n\n.ts-modal-tab--active {\n  color: var(--primary);\n  border-bottom-color: var(--primary);\n  font-weight: 600;\n}\n\n.ts-modal-tab--active:hover {\n  background: transparent;\n}\n\n/* Tab Content */\n.ts-modal-tab-content {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n/* Overview Tab */\n.ts-goal-overview-tab {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n}\n\n.ts-overview-metrics {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 16px;\n}\n\n.ts-metric {\n  text-align: center;\n  padding: 8px 0;\n}\n\n.ts-metric-label {\n  font-size: 12px;\n  font-weight: 500;\n  color: var(--text-tertiary);\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 8px;\n}\n\n.ts-metric .ts-metric-value {\n  font-size: 28px;\n  font-weight: 700;\n  color: var(--text-primary);\n  line-height: 1.2;\n}\n\n.ts-top-pages {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.ts-top-page {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  padding: 12px;\n  background: var(--background-secondary);\n  border-radius: 8px;\n  transition: all 0.2s ease;\n}\n\n.ts-top-page:hover {\n  background: var(--background-tertiary);\n  transform: translateX(4px);\n}\n\n.ts-top-page-rank {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  background: var(--primary);\n  color: white;\n  border-radius: 50%;\n  font-size: 14px;\n  font-weight: 700;\n  flex-shrink: 0;\n}\n\n.ts-top-page-url {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-top-page-url a {\n  color: var(--text-primary);\n  text-decoration: none;\n  font-size: 14px;\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.ts-top-page-url a:hover {\n  color: var(--primary);\n  text-decoration: underline;\n}\n\n.ts-top-page-conversions {\n  flex-shrink: 0;\n}\n\n/* Timeline Tab */\n.ts-modal-filters {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n  margin-bottom: 16px;\n  padding: 12px 16px;\n  background: var(--background-secondary);\n  border-radius: 8px;\n}\n\n.ts-filter-group {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.ts-filter-group label {\n  font-size: 13px;\n  font-weight: 500;\n  color: var(--text-secondary);\n  white-space: nowrap;\n}\n\n.ts-filter-select {\n  padding: 6px 32px 6px 12px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  background: var(--background-primary);\n  color: var(--text-primary);\n  font-size: 13px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  appearance: none;\n  background-image: url(${c});\n  background-repeat: no-repeat;\n  background-position: right 8px center;\n}\n\n.ts-filter-select:hover {\n  border-color: var(--primary);\n}\n\n.ts-filter-select:focus {\n  outline: none;\n  border-color: var(--primary);\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\n}\n\n.ts-export-btn {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 6px 14px;\n  background: var(--primary);\n  color: white;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  white-space: nowrap;\n}\n\n.ts-export-btn:hover {\n  background: var(--primary-dark);\n  transform: translateY(-1px);\n  box-shadow: 0 2px 8px var(--primary-alpha-20);\n}\n\n.ts-modal-content {\n  flex: 1;\n  overflow: auto;\n  margin-bottom: 16px;\n}\n\n.ts-table-scroll {\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1px solid var(--border-color);\n}\n\n.ts-conversions-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-conversions-table thead {\n  background: var(--background-secondary);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n.ts-conversions-table thead th {\n  padding: 12px;\n  text-align: left;\n  font-weight: 600;\n  color: var(--text-secondary);\n  text-transform: uppercase;\n  font-size: 11px;\n  letter-spacing: 0.05em;\n  white-space: nowrap;\n  cursor: pointer;\n  user-select: none;\n  transition: background 0.2s ease;\n}\n\n.ts-conversions-table thead th:hover {\n  background: var(--background-tertiary);\n}\n\n.ts-conversions-table thead th.ts-sorted {\n  color: var(--primary);\n}\n\n.ts-conversions-table tbody tr {\n  border-bottom: 1px solid var(--border-color);\n  transition: background 0.15s ease;\n}\n\n.ts-conversions-table tbody tr:hover {\n  background: var(--background-secondary);\n}\n\n.ts-conversions-table tbody td {\n  padding: 12px;\n  color: var(--text-primary);\n}\n\n.ts-date-cell {\n  white-space: nowrap;\n  color: var(--text-secondary);\n  font-size: 12px;\n}\n\n.ts-url-cell {\n  max-width: 300px;\n}\n\n.ts-url-link {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  color: var(--primary);\n  text-decoration: none;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.ts-url-link:hover {\n  text-decoration: underline;\n}\n\n.ts-url-empty,\n.ts-context-empty {\n  color: var(--text-tertiary);\n  font-style: italic;\n}\n\n.ts-context-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 8px;\n  background: var(--background-secondary);\n  border-radius: 4px;\n  font-size: 12px;\n  color: var(--text-secondary);\n}\n\n.ts-source-info strong {\n  color: var(--text-primary);\n  font-weight: 600;\n}\n\n.ts-medium {\n  color: var(--text-secondary);\n  font-size: 12px;\n}\n\n.ts-campaign {\n  font-size: 11px;\n  color: var(--text-tertiary);\n  margin-top: 2px;\n}\n\n.ts-device-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 10px;\n  background: var(--background-secondary);\n  border-radius: 12px;\n  font-size: 12px;\n  color: var(--text-secondary);\n  text-transform: capitalize;\n}\n\n.ts-value-cell {\n  font-weight: 600;\n  color: var(--success);\n  white-space: nowrap;\n}\n\n/* Pagination */\n.ts-modal-pagination {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n  padding: 12px 16px;\n  background: var(--background-secondary);\n  border-radius: 8px;\n  margin-top: auto;\n}\n\n.ts-page-btn {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 14px;\n  background: var(--background-primary);\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  color: var(--text-primary);\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ts-page-btn:hover:not(:disabled) {\n  background: var(--background-tertiary);\n  border-color: var(--primary);\n  color: var(--primary);\n}\n\n.ts-page-btn:disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n\n.ts-page-info {\n  font-size: 13px;\n  color: var(--text-secondary);\n}\n\n/* Sources Tab */\n.ts-sources-tab {\n  overflow: auto;\n}\n\n.ts-sources-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-sources-table thead {\n  background: var(--background-secondary);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n.ts-sources-table thead th {\n  padding: 12px;\n  text-align: left;\n  font-weight: 600;\n  color: var(--text-secondary);\n  text-transform: uppercase;\n  font-size: 11px;\n  letter-spacing: 0.05em;\n}\n\n.ts-sources-table tbody tr {\n  border-bottom: 1px solid var(--border-color);\n  transition: background 0.15s ease;\n}\n\n.ts-sources-table tbody tr:hover {\n  background: var(--background-secondary);\n}\n\n.ts-sources-table tbody td {\n  padding: 12px;\n}\n\n.ts-source-name {\n  font-weight: 600;\n  color: var(--text-primary);\n}\n\n.ts-source-medium {\n  color: var(--text-secondary);\n  font-size: 12px;\n}\n\n.ts-source-conversions {\n  font-weight: 600;\n  color: var(--primary);\n}\n\n.ts-source-percentage {\n  min-width: 200px;\n}\n\n.ts-progress-bar {\n  display: inline-block;\n  width: 100px;\n  height: 6px;\n  background: var(--background-secondary);\n  border-radius: 3px;\n  overflow: hidden;\n  margin-right: 12px;\n  vertical-align: middle;\n}\n\n.ts-progress-fill {\n  height: 100%;\n  background: linear-gradient(90deg, var(--primary), var(--primary-dark));\n  border-radius: 3px;\n  transition: width 0.3s ease;\n}\n\n.ts-source-revenue {\n  font-weight: 600;\n  color: var(--success);\n  white-space: nowrap;\n}\n\n/* Devices Tab */\n.ts-devices-tab {\n  overflow: auto;\n}\n\n.ts-devices-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-devices-table thead {\n  background: var(--background-secondary);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n.ts-devices-table thead th {\n  padding: 12px;\n  text-align: left;\n  font-weight: 600;\n  color: var(--text-secondary);\n  text-transform: uppercase;\n  font-size: 11px;\n  letter-spacing: 0.05em;\n}\n\n.ts-devices-table tbody tr {\n  border-bottom: 1px solid var(--border-color);\n  transition: background 0.15s ease;\n}\n\n.ts-devices-table tbody tr:hover {\n  background: var(--background-secondary);\n}\n\n.ts-devices-table tbody td {\n  padding: 12px;\n}\n\n.ts-device-name {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: var(--text-primary);\n  text-transform: capitalize;\n}\n\n.ts-device-browser {\n  color: var(--text-secondary);\n}\n\n.ts-device-conversions {\n  font-weight: 600;\n  color: var(--primary);\n}\n\n.ts-device-percentage {\n  min-width: 200px;\n}\n\n/* Loading & Empty States */\n.ts-loading,\n.ts-error,\n.ts-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 16px;\n  padding: 60px 20px;\n  text-align: center;\n  color: var(--text-secondary);\n}\n\n.ts-loading svg,\n.ts-error svg,\n.ts-empty svg {\n  color: var(--text-tertiary);\n  opacity: 0.4;\n  animation: pulse 2s ease-in-out infinite;\n}\n\n.ts-loading svg {\n  animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes pulse {\n  0%, 100% {\n    opacity: 0.3;\n  }\n  50% {\n    opacity: 0.6;\n  }\n}\n\n.ts-error {\n  color: var(--danger);\n}\n\n/* Dark Theme */\n[data-theme="dark"] {\n  .ts-modal-tabs {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-modal-tab {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-modal-tab:hover {\n    color: var(--text-dark-primary);\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-modal-tab--active {\n    color: var(--primary-light);\n    border-bottom-color: var(--primary-light);\n  }\n\n  .ts-metric-label {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-metric-value {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-top-page {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-top-page:hover {\n    background: var(--background-dark-tertiary);\n  }\n\n  .ts-top-page-url a {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-top-page-url a:hover {\n    color: var(--primary-light);\n  }\n\n  .ts-modal-filters {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-filter-group label {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-filter-select {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n    color: var(--text-dark-primary);\n  }\n\n  .ts-filter-select:hover {\n    border-color: var(--primary-light);\n  }\n\n  .ts-export-btn {\n    background: var(--primary-dark);\n  }\n\n  .ts-export-btn:hover {\n    background: var(--primary);\n  }\n\n  .ts-table-scroll {\n    border-color: var(--border-dark);\n  }\n\n  .ts-conversions-table thead {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-conversions-table thead th {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-conversions-table thead th.ts-sorted {\n    color: var(--primary-light);\n  }\n\n  .ts-conversions-table tbody tr {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-conversions-table tbody tr:hover {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-conversions-table tbody td {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-url-link {\n    color: var(--primary-light);\n  }\n\n  .ts-context-badge {\n    background: var(--background-dark-secondary);\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-device-badge {\n    background: var(--background-dark-secondary);\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-modal-pagination {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-page-btn {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n    color: var(--text-dark-primary);\n  }\n\n  .ts-page-btn:hover:not(:disabled) {\n    background: var(--background-dark-tertiary);\n    border-color: var(--primary-light);\n    color: var(--primary-light);\n  }\n\n  .ts-page-info {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-sources-table thead,\n  .ts-devices-table thead {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-sources-table thead th,\n  .ts-devices-table thead th {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-sources-table tbody tr,\n  .ts-devices-table tbody tr {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-sources-table tbody tr:hover,\n  .ts-devices-table tbody tr:hover {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-source-name,\n  .ts-device-name {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-source-medium,\n  .ts-device-browser {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-source-conversions,\n  .ts-device-conversions {\n    color: var(--primary-light);\n  }\n\n  .ts-progress-bar {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-progress-fill {\n    background: linear-gradient(90deg, var(--primary-light), var(--primary));\n  }\n\n  .ts-loading,\n  .ts-error,\n  .ts-empty {\n    color: var(--text-dark-secondary);\n  }\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .ts-modal-tabs {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n\n  .ts-modal-tab {\n    padding: 10px 16px;\n    font-size: 13px;\n  }\n\n  .ts-overview-metrics {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .ts-modal-filters {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .ts-filter-group {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .ts-export-btn {\n    width: 100%;\n    justify-content: center;\n  }\n\n  .ts-table-scroll {\n    font-size: 12px;\n  }\n\n  .ts-conversions-table thead th,\n  .ts-sources-table thead th,\n  .ts-devices-table thead th {\n    padding: 8px;\n    font-size: 10px;\n  }\n\n  .ts-conversions-table tbody td,\n  .ts-sources-table tbody td,\n  .ts-devices-table tbody td {\n    padding: 8px;\n  }\n\n  .ts-modal-pagination {\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .ts-page-info {\n    font-size: 12px;\n    text-align: center;\n  }\n\n  .ts-top-page {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 8px;\n  }\n\n  .ts-top-page-url {\n    width: 100%;\n  }\n\n  .ts-source-percentage,\n  .ts-device-percentage {\n    min-width: 150px;\n  }\n\n  .ts-progress-bar {\n    width: 60px;\n  }\n}\n\n/* Accessibility */\n@media (prefers-reduced-motion: reduce) {\n  *,\n  *::before,\n  *::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n  }\n}\n\n@media (prefers-contrast: high) {\n  .ts-modal-tab--active {\n    border-bottom-width: 3px;\n  }\n\n  .ts-progress-fill {\n    background: var(--primary);\n  }\n\n  .ts-url-link {\n    text-decoration: underline;\n  }\n}\n`,"",{version:3,sources:["webpack://./src/components/goals/components/GoalDetailsModal.css"],names:[],mappings:"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",sourcesContent:["/**\r\n * Goal Details Modal Styles\r\n * Enhanced with tab navigation and analytics views\r\n * \r\n * @since 2.1.0\r\n * @package TrackSure\r\n */\r\n\r\n/* Main Container */\r\n.ts-goal-details-modal {\r\n  display: flex;\r\n  flex-direction: column;\r\n  height: 100%;\r\n  min-height: 600px;\r\n}\r\n\r\n/* Modal Subtitle */\r\n.ts-modal-subtitle {\r\n  margin: 4px 0 0;\r\n  font-size: 13px;\r\n  font-weight: 400;\r\n  color: var(--text-tertiary);\r\n  opacity: 0.8;\r\n}\r\n\r\n/* Tab Navigation */\r\n.ts-modal-tabs {\r\n  display: flex;\r\n  gap: 0;\r\n  border-bottom: 1px solid var(--border-color);\r\n  margin-bottom: 20px;\r\n  padding: 0 4px;\r\n}\r\n\r\n.ts-modal-tab {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 12px 20px;\r\n  background: transparent;\r\n  border: none;\r\n  border-bottom: 2px solid transparent;\r\n  color: var(--text-secondary);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  position: relative;\r\n  bottom: -1px;\r\n}\r\n\r\n.ts-modal-tab:hover {\r\n  color: var(--text-primary);\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-modal-tab--active {\r\n  color: var(--primary);\r\n  border-bottom-color: var(--primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-modal-tab--active:hover {\r\n  background: transparent;\r\n}\r\n\r\n/* Tab Content */\r\n.ts-modal-tab-content {\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n}\r\n\r\n/* Overview Tab */\r\n.ts-goal-overview-tab {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 20px;\r\n}\r\n\r\n.ts-overview-metrics {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n  gap: 16px;\r\n}\r\n\r\n.ts-metric {\r\n  text-align: center;\r\n  padding: 8px 0;\r\n}\r\n\r\n.ts-metric-label {\r\n  font-size: 12px;\r\n  font-weight: 500;\r\n  color: var(--text-tertiary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.05em;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.ts-metric .ts-metric-value {\r\n  font-size: 28px;\r\n  font-weight: 700;\r\n  color: var(--text-primary);\r\n  line-height: 1.2;\r\n}\r\n\r\n.ts-top-pages {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 12px;\r\n}\r\n\r\n.ts-top-page {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 16px;\r\n  padding: 12px;\r\n  background: var(--background-secondary);\r\n  border-radius: 8px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-top-page:hover {\r\n  background: var(--background-tertiary);\r\n  transform: translateX(4px);\r\n}\r\n\r\n.ts-top-page-rank {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 32px;\r\n  height: 32px;\r\n  background: var(--primary);\r\n  color: white;\r\n  border-radius: 50%;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-top-page-url {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-top-page-url a {\r\n  color: var(--text-primary);\r\n  text-decoration: none;\r\n  font-size: 14px;\r\n  display: block;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-top-page-url a:hover {\r\n  color: var(--primary);\r\n  text-decoration: underline;\r\n}\r\n\r\n.ts-top-page-conversions {\r\n  flex-shrink: 0;\r\n}\r\n\r\n/* Timeline Tab */\r\n.ts-modal-filters {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 16px;\r\n  margin-bottom: 16px;\r\n  padding: 12px 16px;\r\n  background: var(--background-secondary);\r\n  border-radius: 8px;\r\n}\r\n\r\n.ts-filter-group {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n}\r\n\r\n.ts-filter-group label {\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  color: var(--text-secondary);\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-filter-select {\r\n  padding: 6px 32px 6px 12px;\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  background: var(--background-primary);\r\n  color: var(--text-primary);\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  appearance: none;\r\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L2 4h8z'/%3E%3C/svg%3E\");\r\n  background-repeat: no-repeat;\r\n  background-position: right 8px center;\r\n}\r\n\r\n.ts-filter-select:hover {\r\n  border-color: var(--primary);\r\n}\r\n\r\n.ts-filter-select:focus {\r\n  outline: none;\r\n  border-color: var(--primary);\r\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-export-btn {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 6px 14px;\r\n  background: var(--primary);\r\n  color: white;\r\n  border: none;\r\n  border-radius: 6px;\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-export-btn:hover {\r\n  background: var(--primary-dark);\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 2px 8px var(--primary-alpha-20);\r\n}\r\n\r\n.ts-modal-content {\r\n  flex: 1;\r\n  overflow: auto;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.ts-table-scroll {\r\n  overflow-x: auto;\r\n  border-radius: 8px;\r\n  border: 1px solid var(--border-color);\r\n}\r\n\r\n.ts-conversions-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-conversions-table thead {\r\n  background: var(--background-secondary);\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 10;\r\n}\r\n\r\n.ts-conversions-table thead th {\r\n  padding: 12px;\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  font-size: 11px;\r\n  letter-spacing: 0.05em;\r\n  white-space: nowrap;\r\n  cursor: pointer;\r\n  user-select: none;\r\n  transition: background 0.2s ease;\r\n}\r\n\r\n.ts-conversions-table thead th:hover {\r\n  background: var(--background-tertiary);\r\n}\r\n\r\n.ts-conversions-table thead th.ts-sorted {\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-conversions-table tbody tr {\r\n  border-bottom: 1px solid var(--border-color);\r\n  transition: background 0.15s ease;\r\n}\r\n\r\n.ts-conversions-table tbody tr:hover {\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-conversions-table tbody td {\r\n  padding: 12px;\r\n  color: var(--text-primary);\r\n}\r\n\r\n.ts-date-cell {\r\n  white-space: nowrap;\r\n  color: var(--text-secondary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-url-cell {\r\n  max-width: 300px;\r\n}\r\n\r\n.ts-url-link {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  color: var(--primary);\r\n  text-decoration: none;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-url-link:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n.ts-url-empty,\r\n.ts-context-empty {\r\n  color: var(--text-tertiary);\r\n  font-style: italic;\r\n}\r\n\r\n.ts-context-badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 4px 8px;\r\n  background: var(--background-secondary);\r\n  border-radius: 4px;\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-source-info strong {\r\n  color: var(--text-primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-medium {\r\n  color: var(--text-secondary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-campaign {\r\n  font-size: 11px;\r\n  color: var(--text-tertiary);\r\n  margin-top: 2px;\r\n}\r\n\r\n.ts-device-badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 4px 10px;\r\n  background: var(--background-secondary);\r\n  border-radius: 12px;\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n  text-transform: capitalize;\r\n}\r\n\r\n.ts-value-cell {\r\n  font-weight: 600;\r\n  color: var(--success);\r\n  white-space: nowrap;\r\n}\r\n\r\n/* Pagination */\r\n.ts-modal-pagination {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 16px;\r\n  padding: 12px 16px;\r\n  background: var(--background-secondary);\r\n  border-radius: 8px;\r\n  margin-top: auto;\r\n}\r\n\r\n.ts-page-btn {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 8px 14px;\r\n  background: var(--background-primary);\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  color: var(--text-primary);\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-page-btn:hover:not(:disabled) {\r\n  background: var(--background-tertiary);\r\n  border-color: var(--primary);\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-page-btn:disabled {\r\n  opacity: 0.4;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.ts-page-info {\r\n  font-size: 13px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n/* Sources Tab */\r\n.ts-sources-tab {\r\n  overflow: auto;\r\n}\r\n\r\n.ts-sources-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-sources-table thead {\r\n  background: var(--background-secondary);\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 10;\r\n}\r\n\r\n.ts-sources-table thead th {\r\n  padding: 12px;\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  font-size: 11px;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n.ts-sources-table tbody tr {\r\n  border-bottom: 1px solid var(--border-color);\r\n  transition: background 0.15s ease;\r\n}\r\n\r\n.ts-sources-table tbody tr:hover {\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-sources-table tbody td {\r\n  padding: 12px;\r\n}\r\n\r\n.ts-source-name {\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n}\r\n\r\n.ts-source-medium {\r\n  color: var(--text-secondary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-source-conversions {\r\n  font-weight: 600;\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-source-percentage {\r\n  min-width: 200px;\r\n}\r\n\r\n.ts-progress-bar {\r\n  display: inline-block;\r\n  width: 100px;\r\n  height: 6px;\r\n  background: var(--background-secondary);\r\n  border-radius: 3px;\r\n  overflow: hidden;\r\n  margin-right: 12px;\r\n  vertical-align: middle;\r\n}\r\n\r\n.ts-progress-fill {\r\n  height: 100%;\r\n  background: linear-gradient(90deg, var(--primary), var(--primary-dark));\r\n  border-radius: 3px;\r\n  transition: width 0.3s ease;\r\n}\r\n\r\n.ts-source-revenue {\r\n  font-weight: 600;\r\n  color: var(--success);\r\n  white-space: nowrap;\r\n}\r\n\r\n/* Devices Tab */\r\n.ts-devices-tab {\r\n  overflow: auto;\r\n}\r\n\r\n.ts-devices-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-devices-table thead {\r\n  background: var(--background-secondary);\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 10;\r\n}\r\n\r\n.ts-devices-table thead th {\r\n  padding: 12px;\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  font-size: 11px;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n.ts-devices-table tbody tr {\r\n  border-bottom: 1px solid var(--border-color);\r\n  transition: background 0.15s ease;\r\n}\r\n\r\n.ts-devices-table tbody tr:hover {\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-devices-table tbody td {\r\n  padding: 12px;\r\n}\r\n\r\n.ts-device-name {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  text-transform: capitalize;\r\n}\r\n\r\n.ts-device-browser {\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-device-conversions {\r\n  font-weight: 600;\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-device-percentage {\r\n  min-width: 200px;\r\n}\r\n\r\n/* Loading & Empty States */\r\n.ts-loading,\r\n.ts-error,\r\n.ts-empty {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 16px;\r\n  padding: 60px 20px;\r\n  text-align: center;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-loading svg,\r\n.ts-error svg,\r\n.ts-empty svg {\r\n  color: var(--text-tertiary);\r\n  opacity: 0.4;\r\n  animation: pulse 2s ease-in-out infinite;\r\n}\r\n\r\n.ts-loading svg {\r\n  animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n\r\n@keyframes pulse {\r\n  0%, 100% {\r\n    opacity: 0.3;\r\n  }\r\n  50% {\r\n    opacity: 0.6;\r\n  }\r\n}\r\n\r\n.ts-error {\r\n  color: var(--danger);\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme=\"dark\"] {\r\n  .ts-modal-tabs {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-modal-tab {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-modal-tab:hover {\r\n    color: var(--text-dark-primary);\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-modal-tab--active {\r\n    color: var(--primary-light);\r\n    border-bottom-color: var(--primary-light);\r\n  }\r\n\r\n  .ts-metric-label {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-metric-value {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-top-page {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-top-page:hover {\r\n    background: var(--background-dark-tertiary);\r\n  }\r\n\r\n  .ts-top-page-url a {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-top-page-url a:hover {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-modal-filters {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-filter-group label {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-filter-select {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-filter-select:hover {\r\n    border-color: var(--primary-light);\r\n  }\r\n\r\n  .ts-export-btn {\r\n    background: var(--primary-dark);\r\n  }\r\n\r\n  .ts-export-btn:hover {\r\n    background: var(--primary);\r\n  }\r\n\r\n  .ts-table-scroll {\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-conversions-table thead {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-conversions-table thead th {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-conversions-table thead th.ts-sorted {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-conversions-table tbody tr {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-conversions-table tbody tr:hover {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-conversions-table tbody td {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-url-link {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-context-badge {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-device-badge {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-modal-pagination {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-page-btn {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-page-btn:hover:not(:disabled) {\r\n    background: var(--background-dark-tertiary);\r\n    border-color: var(--primary-light);\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-page-info {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-sources-table thead,\r\n  .ts-devices-table thead {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-sources-table thead th,\r\n  .ts-devices-table thead th {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-sources-table tbody tr,\r\n  .ts-devices-table tbody tr {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-sources-table tbody tr:hover,\r\n  .ts-devices-table tbody tr:hover {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-source-name,\r\n  .ts-device-name {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-source-medium,\r\n  .ts-device-browser {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-source-conversions,\r\n  .ts-device-conversions {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-progress-bar {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-progress-fill {\r\n    background: linear-gradient(90deg, var(--primary-light), var(--primary));\r\n  }\r\n\r\n  .ts-loading,\r\n  .ts-error,\r\n  .ts-empty {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 768px) {\r\n  .ts-modal-tabs {\r\n    overflow-x: auto;\r\n    -webkit-overflow-scrolling: touch;\r\n  }\r\n\r\n  .ts-modal-tab {\r\n    padding: 10px 16px;\r\n    font-size: 13px;\r\n  }\r\n\r\n  .ts-overview-metrics {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n\r\n  .ts-modal-filters {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .ts-filter-group {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .ts-export-btn {\r\n    width: 100%;\r\n    justify-content: center;\r\n  }\r\n\r\n  .ts-table-scroll {\r\n    font-size: 12px;\r\n  }\r\n\r\n  .ts-conversions-table thead th,\r\n  .ts-sources-table thead th,\r\n  .ts-devices-table thead th {\r\n    padding: 8px;\r\n    font-size: 10px;\r\n  }\r\n\r\n  .ts-conversions-table tbody td,\r\n  .ts-sources-table tbody td,\r\n  .ts-devices-table tbody td {\r\n    padding: 8px;\r\n  }\r\n\r\n  .ts-modal-pagination {\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .ts-page-info {\r\n    font-size: 12px;\r\n    text-align: center;\r\n  }\r\n\r\n  .ts-top-page {\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 8px;\r\n  }\r\n\r\n  .ts-top-page-url {\r\n    width: 100%;\r\n  }\r\n\r\n  .ts-source-percentage,\r\n  .ts-device-percentage {\r\n    min-width: 150px;\r\n  }\r\n\r\n  .ts-progress-bar {\r\n    width: 60px;\r\n  }\r\n}\r\n\r\n/* Accessibility */\r\n@media (prefers-reduced-motion: reduce) {\r\n  *,\r\n  *::before,\r\n  *::after {\r\n    animation-duration: 0.01ms !important;\r\n    animation-iteration-count: 1 !important;\r\n    transition-duration: 0.01ms !important;\r\n  }\r\n}\r\n\r\n@media (prefers-contrast: high) {\r\n  .ts-modal-tab--active {\r\n    border-bottom-width: 3px;\r\n  }\r\n\r\n  .ts-progress-fill {\r\n    background: var(--primary);\r\n  }\r\n\r\n  .ts-url-link {\r\n    text-decoration: underline;\r\n  }\r\n}\r\n"],sourceRoot:""}]);const p=d},56883:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Custom Goal Builder Styles\n * \n * Step-by-step wizard interface with clear visual hierarchy,\n * contextual help, and premium UI/UX\n * \n * @since 2.1.0\n * @package TrackSure\n */\n\n/* Main Container */\n.ts-custom-goal-builder {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n  min-height: 600px;\n}\n\n/* Step Indicator */\n.ts-goal-builder-steps {\n  display: flex;\n  gap: 12px;\n  padding: 20px;\n  background: var(--background-secondary);\n  border-radius: 12px;\n  overflow-x: auto;\n}\n\n.ts-step {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex: 1;\n  min-width: 160px;\n  padding: 12px 16px;\n  background: var(--background-primary);\n  border: 2px solid var(--border-color);\n  border-radius: 8px;\n  transition: all 0.3s ease;\n  cursor: default;\n}\n\n.ts-step--active {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\n}\n\n.ts-step--completed {\n  border-color: var(--success);\n  background: var(--success-alpha-5);\n}\n\n.ts-step-number {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  background: var(--background-secondary);\n  border-radius: 50%;\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--text-secondary);\n  flex-shrink: 0;\n  transition: all 0.3s ease;\n}\n\n.ts-step--active .ts-step-number {\n  background: var(--primary);\n  color: white;\n}\n\n.ts-step--completed .ts-step-number {\n  background: var(--success);\n  color: white;\n}\n\n.ts-step-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-step-title {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 2px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.ts-step-description {\n  font-size: 11px;\n  color: var(--text-tertiary);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.ts-step--active .ts-step-title {\n  color: var(--primary);\n}\n\n/* Builder Content */\n.ts-builder-content {\n  flex: 1;\n  overflow-y: auto;\n  max-height: 500px;\n}\n\n.ts-step-content {\n  animation: fadeIn 0.3s ease;\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.ts-draft-notice {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 12px 16px;\n  background: var(--info-alpha-10);\n  border-left: 4px solid var(--info);\n  border-radius: 6px;\n  color: var(--info);\n  font-size: 13px;\n  margin-bottom: 16px;\n}\n\n/* Section Intro */\n.ts-section-intro {\n  font-size: 14px;\n  color: var(--text-secondary);\n  margin-bottom: 20px;\n  line-height: 1.6;\n}\n\n/* Form Fields */\n.ts-form-field {\n  margin-bottom: 24px;\n}\n\n.ts-form-field label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 8px;\n}\n\n.ts-required {\n  color: var(--danger);\n  margin-left: 2px;\n}\n\n.ts-optional {\n  font-weight: 400;\n  color: var(--text-tertiary);\n  font-size: 12px;\n}\n\n.ts-form-field input[type="text"],\n.ts-form-field input[type="number"],\n.ts-form-field textarea,\n.ts-form-field select {\n  width: 100%;\n  padding: 10px 14px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  background: var(--background-primary);\n  color: var(--text-primary);\n  font-size: 14px;\n  transition: all 0.2s ease;\n}\n\n.ts-form-field input:focus,\n.ts-form-field textarea:focus,\n.ts-form-field select:focus {\n  outline: none;\n  border-color: var(--primary);\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\n}\n\n.ts-input-error {\n  border-color: var(--danger) !important;\n}\n\n.ts-error-message {\n  display: block;\n  margin-top: 6px;\n  font-size: 12px;\n  color: var(--danger);\n}\n\n.ts-field-help {\n  margin-top: 6px;\n  font-size: 12px;\n  color: var(--text-tertiary);\n  line-height: 1.5;\n}\n\n/* Category Grid */\n.ts-category-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n  gap: 12px;\n}\n\n.ts-category-card {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  padding: 20px 16px;\n  background: var(--background-secondary);\n  border: 2px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  text-align: center;\n}\n\n.ts-category-card:hover {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n  transform: translateY(-2px);\n  box-shadow: 0 4px 12px var(--shadow-color);\n}\n\n.ts-category-card--selected {\n  border-color: var(--primary);\n  background: var(--primary-alpha-10);\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\n}\n\n.ts-category-card span {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n}\n\n/* Trigger Grid */\n.ts-trigger-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n  gap: 12px;\n}\n\n.ts-trigger-card {\n  position: relative;\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n  padding: 16px;\n  background: var(--background-secondary);\n  border: 2px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  text-align: left;\n}\n\n.ts-trigger-card:hover {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n  box-shadow: 0 4px 12px var(--shadow-color);\n}\n\n.ts-trigger-card--selected {\n  border-color: var(--primary);\n  background: var(--primary-alpha-10);\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\n}\n\n.ts-trigger-icon {\n  flex-shrink: 0;\n  width: 48px;\n  height: 48px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--background-primary);\n  border-radius: 8px;\n  color: var(--primary);\n}\n\n.ts-trigger-card--selected .ts-trigger-icon {\n  background: var(--primary);\n  color: white;\n}\n\n.ts-trigger-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-trigger-label {\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 4px;\n}\n\n.ts-trigger-description {\n  font-size: 12px;\n  color: var(--text-secondary);\n  line-height: 1.4;\n}\n\n.ts-trigger-check {\n  position: absolute;\n  top: 12px;\n  right: 12px;\n  color: var(--primary);\n}\n\n/* Radio Options */\n.ts-radio-group {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.ts-radio-option {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  padding: 12px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ts-radio-option:hover {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n}\n\n.ts-radio-option input[type="radio"] {\n  margin-top: 2px;\n  flex-shrink: 0;\n}\n\n.ts-radio-option span {\n  flex: 1;\n}\n\n.ts-radio-option strong {\n  display: block;\n  font-size: 14px;\n  color: var(--text-primary);\n  margin-bottom: 4px;\n}\n\n.ts-radio-option small {\n  display: block;\n  font-size: 12px;\n  color: var(--text-secondary);\n}\n\n.ts-value-input {\n  margin-top: 12px;\n  padding-left: 24px;\n}\n\n.ts-value-input input[type="number"] {\n  max-width: 200px;\n}\n\n/* Conditions Preview */\n.ts-conditions-preview {\n  margin-top: 24px;\n  padding: 16px;\n  background: var(--background-secondary);\n  border-left: 4px solid var(--primary);\n  border-radius: 6px;\n}\n\n.ts-conditions-preview h4 {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 12px;\n}\n\n.ts-logic-preview {\n  font-size: 13px;\n  color: var(--text-secondary);\n}\n\n.ts-logic-preview p {\n  margin-bottom: 12px;\n}\n\n.ts-logic-preview strong {\n  color: var(--primary);\n  font-weight: 700;\n}\n\n.ts-condition-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.ts-condition-list li {\n  padding: 8px 12px;\n  background: var(--background-primary);\n  border-radius: 4px;\n  margin-bottom: 6px;\n  font-size: 12px;\n  font-family: \'Courier New\', monospace;\n}\n\n.ts-condition-list code {\n  color: var(--primary);\n  font-weight: 600;\n}\n\n.ts-condition-list em {\n  color: var(--text-tertiary);\n  font-style: normal;\n  margin: 0 6px;\n}\n\n/* Goal Preview */\n.ts-goal-preview {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n}\n\n.ts-preview-section {\n  padding-bottom: 20px;\n  border-bottom: 1px solid var(--border-color);\n}\n\n.ts-preview-section:last-child {\n  border-bottom: none;\n  padding-bottom: 0;\n}\n\n.ts-preview-section h4 {\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 12px;\n}\n\n.ts-preview-section p {\n  font-size: 13px;\n  color: var(--text-secondary);\n  margin-bottom: 12px;\n}\n\n.ts-preview-section dl {\n  display: grid;\n  grid-template-columns: 140px 1fr;\n  gap: 12px 16px;\n  margin: 0;\n}\n\n.ts-preview-section dt {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--text-tertiary);\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n.ts-preview-section dd {\n  font-size: 14px;\n  color: var(--text-primary);\n  margin: 0;\n}\n\n.ts-preview-section code {\n  padding: 2px 6px;\n  background: var(--background-secondary);\n  border-radius: 3px;\n  font-size: 12px;\n  color: var(--primary);\n  font-family: \'Courier New\', monospace;\n}\n\n.ts-no-conditions {\n  font-style: italic;\n  color: var(--text-tertiary);\n}\n\n/* Builder Actions */\n.ts-builder-actions {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n  padding: 16px 20px;\n  background: var(--background-secondary);\n  border-top: 1px solid var(--border-color);\n  border-radius: 0 0 12px 12px;\n  margin: 0 -24px -24px;\n}\n\n.ts-actions-left,\n.ts-actions-right {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n/* Dark Theme */\n[data-theme="dark"] {\n  .ts-goal-builder-steps {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-step {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n  }\n\n  .ts-step--active {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-10);\n  }\n\n  .ts-step--completed {\n    border-color: var(--success-light);\n    background: var(--success-dark-alpha-10);\n  }\n\n  .ts-step-number {\n    background: var(--background-dark-secondary);\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-step--active .ts-step-number {\n    background: var(--primary-light);\n  }\n\n  .ts-step--completed .ts-step-number {\n    background: var(--success-light);\n  }\n\n  .ts-step-title {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-step-description {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-step--active .ts-step-title {\n    color: var(--primary-light);\n  }\n\n  .ts-draft-notice {\n    background: var(--info-dark-alpha-10);\n    border-left-color: var(--info-light);\n    color: var(--info-light);\n  }\n\n  .ts-section-intro {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-form-field label {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-form-field input,\n  .ts-form-field textarea,\n  .ts-form-field select {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n    color: var(--text-dark-primary);\n  }\n\n  .ts-field-help {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-category-card,\n  .ts-trigger-card {\n    background: var(--background-dark-secondary);\n    border-color: var(--border-dark);\n  }\n\n  .ts-category-card:hover,\n  .ts-trigger-card:hover {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-5);\n  }\n\n  .ts-category-card--selected,\n  .ts-trigger-card--selected {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-10);\n  }\n\n  .ts-trigger-icon {\n    background: var(--background-dark-primary);\n    color: var(--primary-light);\n  }\n\n  .ts-trigger-card--selected .ts-trigger-icon {\n    background: var(--primary-light);\n  }\n\n  .ts-trigger-label {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-trigger-description {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-trigger-check {\n    color: var(--primary-light);\n  }\n\n  .ts-radio-option {\n    border-color: var(--border-dark);\n  }\n\n  .ts-radio-option:hover {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-5);\n  }\n\n  .ts-radio-option strong {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-radio-option small {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-conditions-preview {\n    background: var(--background-dark-secondary);\n    border-left-color: var(--primary-light);\n  }\n\n  .ts-conditions-preview h4 {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-logic-preview {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-logic-preview strong {\n    color: var(--primary-light);\n  }\n\n  .ts-condition-list li {\n    background: var(--background-dark-primary);\n  }\n\n  .ts-condition-list code {\n    color: var(--primary-light);\n  }\n\n  .ts-condition-list em {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-preview-section {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-preview-section h4 {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-preview-section p {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-preview-section dt {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-preview-section dd {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-preview-section code {\n    background: var(--background-dark-secondary);\n    color: var(--primary-light);\n  }\n\n  .ts-no-conditions {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-builder-actions {\n    background: var(--background-dark-secondary);\n    border-top-color: var(--border-dark);\n  }\n}\n\n/* Responsive Design */\n@media (max-width: 1024px) {\n  .ts-goal-builder-steps {\n    flex-wrap: nowrap;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n\n  .ts-step {\n    min-width: 140px;\n  }\n\n  .ts-trigger-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n@media (max-width: 768px) {\n  .ts-step-description {\n    display: none;\n  }\n\n  .ts-category-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .ts-preview-section dl {\n    grid-template-columns: 1fr;\n    gap: 8px;\n  }\n\n  .ts-preview-section dt {\n    font-weight: 700;\n  }\n\n  .ts-builder-actions {\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .ts-actions-left,\n  .ts-actions-right {\n    width: 100%;\n    justify-content: space-between;\n  }\n}\n\n/* Accessibility */\n@media (prefers-reduced-motion: reduce) {\n  .ts-step-content {\n    animation: none;\n  }\n\n  .ts-step,\n  .ts-category-card,\n  .ts-trigger-card,\n  .ts-radio-option {\n    transition: none;\n  }\n}\n\n@media (prefers-contrast: high) {\n  .ts-step--active {\n    border-width: 3px;\n  }\n\n  .ts-category-card--selected,\n  .ts-trigger-card--selected {\n    border-width: 3px;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/components/CustomGoalBuilder.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Custom Goal Builder Styles\r\n * \r\n * Step-by-step wizard interface with clear visual hierarchy,\r\n * contextual help, and premium UI/UX\r\n * \r\n * @since 2.1.0\r\n * @package TrackSure\r\n */\r\n\r\n/* Main Container */\r\n.ts-custom-goal-builder {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 24px;\r\n  min-height: 600px;\r\n}\r\n\r\n/* Step Indicator */\r\n.ts-goal-builder-steps {\r\n  display: flex;\r\n  gap: 12px;\r\n  padding: 20px;\r\n  background: var(--background-secondary);\r\n  border-radius: 12px;\r\n  overflow-x: auto;\r\n}\r\n\r\n.ts-step {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  flex: 1;\r\n  min-width: 160px;\r\n  padding: 12px 16px;\r\n  background: var(--background-primary);\r\n  border: 2px solid var(--border-color);\r\n  border-radius: 8px;\r\n  transition: all 0.3s ease;\r\n  cursor: default;\r\n}\r\n\r\n.ts-step--active {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-step--completed {\r\n  border-color: var(--success);\r\n  background: var(--success-alpha-5);\r\n}\r\n\r\n.ts-step-number {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 32px;\r\n  height: 32px;\r\n  background: var(--background-secondary);\r\n  border-radius: 50%;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  color: var(--text-secondary);\r\n  flex-shrink: 0;\r\n  transition: all 0.3s ease;\r\n}\r\n\r\n.ts-step--active .ts-step-number {\r\n  background: var(--primary);\r\n  color: white;\r\n}\r\n\r\n.ts-step--completed .ts-step-number {\r\n  background: var(--success);\r\n  color: white;\r\n}\r\n\r\n.ts-step-info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-step-title {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 2px;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.ts-step-description {\r\n  font-size: 11px;\r\n  color: var(--text-tertiary);\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.ts-step--active .ts-step-title {\r\n  color: var(--primary);\r\n}\r\n\r\n/* Builder Content */\r\n.ts-builder-content {\r\n  flex: 1;\r\n  overflow-y: auto;\r\n  max-height: 500px;\r\n}\r\n\r\n.ts-step-content {\r\n  animation: fadeIn 0.3s ease;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.ts-draft-notice {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 10px;\r\n  padding: 12px 16px;\r\n  background: var(--info-alpha-10);\r\n  border-left: 4px solid var(--info);\r\n  border-radius: 6px;\r\n  color: var(--info);\r\n  font-size: 13px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n/* Section Intro */\r\n.ts-section-intro {\r\n  font-size: 14px;\r\n  color: var(--text-secondary);\r\n  margin-bottom: 20px;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* Form Fields */\r\n.ts-form-field {\r\n  margin-bottom: 24px;\r\n}\r\n\r\n.ts-form-field label {\r\n  display: block;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.ts-required {\r\n  color: var(--danger);\r\n  margin-left: 2px;\r\n}\r\n\r\n.ts-optional {\r\n  font-weight: 400;\r\n  color: var(--text-tertiary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-form-field input[type="text"],\r\n.ts-form-field input[type="number"],\r\n.ts-form-field textarea,\r\n.ts-form-field select {\r\n  width: 100%;\r\n  padding: 10px 14px;\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  background: var(--background-primary);\r\n  color: var(--text-primary);\r\n  font-size: 14px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-form-field input:focus,\r\n.ts-form-field textarea:focus,\r\n.ts-form-field select:focus {\r\n  outline: none;\r\n  border-color: var(--primary);\r\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-input-error {\r\n  border-color: var(--danger) !important;\r\n}\r\n\r\n.ts-error-message {\r\n  display: block;\r\n  margin-top: 6px;\r\n  font-size: 12px;\r\n  color: var(--danger);\r\n}\r\n\r\n.ts-field-help {\r\n  margin-top: 6px;\r\n  font-size: 12px;\r\n  color: var(--text-tertiary);\r\n  line-height: 1.5;\r\n}\r\n\r\n/* Category Grid */\r\n.ts-category-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\r\n  gap: 12px;\r\n}\r\n\r\n.ts-category-card {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 20px 16px;\r\n  background: var(--background-secondary);\r\n  border: 2px solid var(--border-color);\r\n  border-radius: 8px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  text-align: center;\r\n}\r\n\r\n.ts-category-card:hover {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n  transform: translateY(-2px);\r\n  box-shadow: 0 4px 12px var(--shadow-color);\r\n}\r\n\r\n.ts-category-card--selected {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-10);\r\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-category-card span {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n}\r\n\r\n/* Trigger Grid */\r\n.ts-trigger-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n  gap: 12px;\r\n}\r\n\r\n.ts-trigger-card {\r\n  position: relative;\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 16px;\r\n  padding: 16px;\r\n  background: var(--background-secondary);\r\n  border: 2px solid var(--border-color);\r\n  border-radius: 8px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  text-align: left;\r\n}\r\n\r\n.ts-trigger-card:hover {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n  box-shadow: 0 4px 12px var(--shadow-color);\r\n}\r\n\r\n.ts-trigger-card--selected {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-10);\r\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-trigger-icon {\r\n  flex-shrink: 0;\r\n  width: 48px;\r\n  height: 48px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: var(--background-primary);\r\n  border-radius: 8px;\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-trigger-card--selected .ts-trigger-icon {\r\n  background: var(--primary);\r\n  color: white;\r\n}\r\n\r\n.ts-trigger-info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-trigger-label {\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 4px;\r\n}\r\n\r\n.ts-trigger-description {\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n  line-height: 1.4;\r\n}\r\n\r\n.ts-trigger-check {\r\n  position: absolute;\r\n  top: 12px;\r\n  right: 12px;\r\n  color: var(--primary);\r\n}\r\n\r\n/* Radio Options */\r\n.ts-radio-group {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 12px;\r\n}\r\n\r\n.ts-radio-option {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 12px;\r\n  padding: 12px;\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-radio-option:hover {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n}\r\n\r\n.ts-radio-option input[type="radio"] {\r\n  margin-top: 2px;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-radio-option span {\r\n  flex: 1;\r\n}\r\n\r\n.ts-radio-option strong {\r\n  display: block;\r\n  font-size: 14px;\r\n  color: var(--text-primary);\r\n  margin-bottom: 4px;\r\n}\r\n\r\n.ts-radio-option small {\r\n  display: block;\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-value-input {\r\n  margin-top: 12px;\r\n  padding-left: 24px;\r\n}\r\n\r\n.ts-value-input input[type="number"] {\r\n  max-width: 200px;\r\n}\r\n\r\n/* Conditions Preview */\r\n.ts-conditions-preview {\r\n  margin-top: 24px;\r\n  padding: 16px;\r\n  background: var(--background-secondary);\r\n  border-left: 4px solid var(--primary);\r\n  border-radius: 6px;\r\n}\r\n\r\n.ts-conditions-preview h4 {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-logic-preview {\r\n  font-size: 13px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-logic-preview p {\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-logic-preview strong {\r\n  color: var(--primary);\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-condition-list {\r\n  list-style: none;\r\n  padding: 0;\r\n  margin: 0;\r\n}\r\n\r\n.ts-condition-list li {\r\n  padding: 8px 12px;\r\n  background: var(--background-primary);\r\n  border-radius: 4px;\r\n  margin-bottom: 6px;\r\n  font-size: 12px;\r\n  font-family: \'Courier New\', monospace;\r\n}\r\n\r\n.ts-condition-list code {\r\n  color: var(--primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-condition-list em {\r\n  color: var(--text-tertiary);\r\n  font-style: normal;\r\n  margin: 0 6px;\r\n}\r\n\r\n/* Goal Preview */\r\n.ts-goal-preview {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 24px;\r\n}\r\n\r\n.ts-preview-section {\r\n  padding-bottom: 20px;\r\n  border-bottom: 1px solid var(--border-color);\r\n}\r\n\r\n.ts-preview-section:last-child {\r\n  border-bottom: none;\r\n  padding-bottom: 0;\r\n}\r\n\r\n.ts-preview-section h4 {\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-preview-section p {\r\n  font-size: 13px;\r\n  color: var(--text-secondary);\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-preview-section dl {\r\n  display: grid;\r\n  grid-template-columns: 140px 1fr;\r\n  gap: 12px 16px;\r\n  margin: 0;\r\n}\r\n\r\n.ts-preview-section dt {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--text-tertiary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n.ts-preview-section dd {\r\n  font-size: 14px;\r\n  color: var(--text-primary);\r\n  margin: 0;\r\n}\r\n\r\n.ts-preview-section code {\r\n  padding: 2px 6px;\r\n  background: var(--background-secondary);\r\n  border-radius: 3px;\r\n  font-size: 12px;\r\n  color: var(--primary);\r\n  font-family: \'Courier New\', monospace;\r\n}\r\n\r\n.ts-no-conditions {\r\n  font-style: italic;\r\n  color: var(--text-tertiary);\r\n}\r\n\r\n/* Builder Actions */\r\n.ts-builder-actions {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 16px;\r\n  padding: 16px 20px;\r\n  background: var(--background-secondary);\r\n  border-top: 1px solid var(--border-color);\r\n  border-radius: 0 0 12px 12px;\r\n  margin: 0 -24px -24px;\r\n}\r\n\r\n.ts-actions-left,\r\n.ts-actions-right {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme="dark"] {\r\n  .ts-goal-builder-steps {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-step {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-step--active {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-10);\r\n  }\r\n\r\n  .ts-step--completed {\r\n    border-color: var(--success-light);\r\n    background: var(--success-dark-alpha-10);\r\n  }\r\n\r\n  .ts-step-number {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-step--active .ts-step-number {\r\n    background: var(--primary-light);\r\n  }\r\n\r\n  .ts-step--completed .ts-step-number {\r\n    background: var(--success-light);\r\n  }\r\n\r\n  .ts-step-title {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-step-description {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-step--active .ts-step-title {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-draft-notice {\r\n    background: var(--info-dark-alpha-10);\r\n    border-left-color: var(--info-light);\r\n    color: var(--info-light);\r\n  }\r\n\r\n  .ts-section-intro {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-form-field label {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-form-field input,\r\n  .ts-form-field textarea,\r\n  .ts-form-field select {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-field-help {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-category-card,\r\n  .ts-trigger-card {\r\n    background: var(--background-dark-secondary);\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-category-card:hover,\r\n  .ts-trigger-card:hover {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-5);\r\n  }\r\n\r\n  .ts-category-card--selected,\r\n  .ts-trigger-card--selected {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-10);\r\n  }\r\n\r\n  .ts-trigger-icon {\r\n    background: var(--background-dark-primary);\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-trigger-card--selected .ts-trigger-icon {\r\n    background: var(--primary-light);\r\n  }\r\n\r\n  .ts-trigger-label {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-trigger-description {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-trigger-check {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-radio-option {\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-radio-option:hover {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-5);\r\n  }\r\n\r\n  .ts-radio-option strong {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-radio-option small {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-conditions-preview {\r\n    background: var(--background-dark-secondary);\r\n    border-left-color: var(--primary-light);\r\n  }\r\n\r\n  .ts-conditions-preview h4 {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-logic-preview {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-logic-preview strong {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-condition-list li {\r\n    background: var(--background-dark-primary);\r\n  }\r\n\r\n  .ts-condition-list code {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-condition-list em {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-preview-section {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-preview-section h4 {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-preview-section p {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-preview-section dt {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-preview-section dd {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-preview-section code {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-no-conditions {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-builder-actions {\r\n    background: var(--background-dark-secondary);\r\n    border-top-color: var(--border-dark);\r\n  }\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 1024px) {\r\n  .ts-goal-builder-steps {\r\n    flex-wrap: nowrap;\r\n    overflow-x: auto;\r\n    -webkit-overflow-scrolling: touch;\r\n  }\r\n\r\n  .ts-step {\r\n    min-width: 140px;\r\n  }\r\n\r\n  .ts-trigger-grid {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  .ts-step-description {\r\n    display: none;\r\n  }\r\n\r\n  .ts-category-grid {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n\r\n  .ts-preview-section dl {\r\n    grid-template-columns: 1fr;\r\n    gap: 8px;\r\n  }\r\n\r\n  .ts-preview-section dt {\r\n    font-weight: 700;\r\n  }\r\n\r\n  .ts-builder-actions {\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .ts-actions-left,\r\n  .ts-actions-right {\r\n    width: 100%;\r\n    justify-content: space-between;\r\n  }\r\n}\r\n\r\n/* Accessibility */\r\n@media (prefers-reduced-motion: reduce) {\r\n  .ts-step-content {\r\n    animation: none;\r\n  }\r\n\r\n  .ts-step,\r\n  .ts-category-card,\r\n  .ts-trigger-card,\r\n  .ts-radio-option {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n@media (prefers-contrast: high) {\r\n  .ts-step--active {\r\n    border-width: 3px;\r\n  }\r\n\r\n  .ts-category-card--selected,\r\n  .ts-trigger-card--selected {\r\n    border-width: 3px;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},76840:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Goals Page - Modern, User-Friendly Design\n * Features: CSS Variables, Dark Mode Support, Smooth Animations\n * Now using global CSS variables for consistent theming\n */\n\n/* ========================================\n   Page Container\n\n   ======================================== */\n.ts-goals-page {\n  padding: var(--ts-spacing-lg);\n  background: var(--ts-bg);\n  min-height: 100vh;\n}\n\n/* ========================================\n   Page Header\n   ======================================== */\n.ts-page-header {\n  margin-bottom: var(--ts-spacing-xl);\n}\n\n.ts-page-title {\n  font-size: 28px;\n  font-weight: 700;\n  color: var(--ts-text);\n  margin: 0 0 8px 0;\n  letter-spacing: -0.025em;\n}\n\n.ts-page-description {\n  font-size: 15px;\n  color: var(--ts-text-muted);\n  margin: 0;\n  line-height: 1.6;\n}\n\n/* ========================================\n   Tab Navigation\n   ======================================== */\n.ts-goals-tabs {\n  display: flex;\n  gap: var(--ts-spacing-xs);\n  margin-bottom: var(--ts-spacing-lg);\n  border-bottom: 1px solid var(--ts-border);\n  padding: 0;\n}\n\n.ts-goals-tab {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs);\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\n  background: transparent;\n  border: none;\n  border-bottom: 2px solid transparent;\n  color: var(--ts-text-muted);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  position: relative;\n  top: 1px;\n}\n\n.ts-goals-tab:hover {\n  color: var(--ts-text);\n  background: var(--ts-surface-hover);\n}\n\n.ts-goals-tab--active {\n  color: var(--ts-primary);\n  border-bottom-color: var(--ts-primary);\n  font-weight: 600;\n}\n\n.ts-goals-tab--active:hover {\n  background: transparent;\n}\n\n[data-theme="dark"] .ts-goals-tab:hover {\n  background: var(--ts-surface-hover-dark);\n}\n\n/* ========================================\n   Goals Grid\n   ======================================== */\n\n/* Summary Cards - Row Layout */\n.ts-goals-summary {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: var(--ts-spacing-md);\n  margin-bottom: var(--ts-spacing-xl);\n}\n\n.ts-goals-summary-row {\n  display: flex;\n  flex-direction: row;\n  gap: var(--ts-spacing-md);\n  margin-bottom: var(--ts-spacing-xl);\n  flex-wrap: wrap;\n}\n\n.ts-goals-summary-row > * {\n  flex: 1;\n  min-width: 200px;\n}\n\n.ts-goals-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));\n  gap: var(--ts-spacing-lg);\n  margin-top: var(--ts-spacing-lg);\n}\n\n/* ========================================\n   Goal Card\n   ======================================== */\n.ts-goal-card {\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  padding: var(--ts-spacing-lg);\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n  position: relative;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  gap: 0;\n}\n\n.ts-goal-card::before {\n  content: \'\';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 3px;\n  background: linear-gradient(90deg, var(--ts-primary), var(--ts-success));\n  opacity: 0;\n  transition: opacity 0.3s ease;\n}\n\n.ts-goal-card:hover {\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08);\n  transform: translateY(-3px);\n  border-color: var(--ts-primary);\n}\n\n.ts-goal-card:hover::before {\n  opacity: 1;\n}\n\n.ts-goal-card-selected {\n  border-color: var(--ts-primary);\n  background: var(--ts-surface-hover);\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n/* Goal Checkbox - Inline with header */\n.ts-goal-checkbox {\n  position: absolute;\n  top: var(--ts-spacing-lg);\n  left: var(--ts-spacing-lg);\n  z-index: 1;\n}\n\n.ts-goal-checkbox input[type="checkbox"] {\n  margin: 0;\n  cursor: pointer;\n  width: 18px;\n  height: 18px;\n  accent-color: var(--ts-primary);\n}\n\n/* Goal Header */\n.ts-goal-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  margin-bottom: var(--ts-spacing-md);\n  gap: var(--ts-spacing-md);\n  padding-left: 30px; /* Space for absolute checkbox */\n}\n\n.ts-goal-title-section {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-goal-title-row {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm);\n  flex-wrap: wrap;\n}\n\n.ts-goal-name {\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0;\n  line-height: 1.4;\n}\n\n.ts-goal-description {\n  font-size: 14px;\n  color: var(--ts-text-muted);\n  margin: 6px 0 0 0;\n  line-height: 1.5;\n  display: -webkit-box;\n  line-clamp: 2;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* Goal Actions */\n.ts-goal-actions {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs);\n  flex-shrink: 0;\n  flex-wrap: wrap;\n}\n\n.ts-goal-status {\n  font-size: 12px;\n  font-weight: 600;\n  padding: 6px 12px;\n  border-radius: var(--ts-radius-full);\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  transition: all 0.2s ease;\n}\n\n.ts-goal-status.ts-active {\n  background: var(--ts-success-soft);\n  color: var(--ts-success);\n  border: 1px solid var(--ts-success);\n}\n\n.ts-goal-status.ts-inactive {\n  background: var(--ts-danger-soft);\n  color: var(--ts-danger);\n  border: 1px solid var(--ts-danger);\n}\n\n.ts-btn-icon {\n  background: var(--ts-surface-hover);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  cursor: pointer;\n  font-size: 18px;\n  padding: 8px;\n  color: var(--ts-text-muted);\n  transition: all 0.2s ease;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n}\n\n.ts-btn-icon:hover {\n  background: var(--ts-primary-soft);\n  color: var(--ts-primary);\n  border-color: var(--ts-primary);\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.ts-btn-icon.ts-btn-danger:hover {\n  background: var(--ts-danger-soft);\n  color: var(--ts-danger);\n  border-color: var(--ts-danger);\n  box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);\n}\n\n/* Goal Details */\n.ts-goal-details {\n  margin-bottom: var(--ts-spacing-md);\n}\n\n.ts-goal-meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--ts-spacing-sm);\n}\n\n.ts-goal-event,\n.ts-goal-conditions {\n  font-size: 13px;\n  color: var(--ts-text);\n  background: var(--ts-bg-tertiary);\n  padding: 6px 12px;\n  border-radius: var(--ts-radius-md);\n  border: 1px solid var(--ts-border);\n  font-weight: 500;\n  transition: all 0.2s ease;\n}\n\n.ts-goal-event:hover,\n.ts-goal-conditions:hover {\n  background: var(--ts-primary-soft);\n  border-color: var(--ts-primary);\n  color: var(--ts-primary);\n  transform: translateY(-1px);\n  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\n}\n\n/* Goal Performance */\n.ts-goal-performance {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: var(--ts-spacing-md);\n  padding-top: var(--ts-spacing-md);\n  border-top: 1px solid var(--ts-border);\n  margin-top: auto;\n}\n\n.ts-goal-stat {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.ts-goal-stat-label {\n  font-size: 11px;\n  color: var(--ts-text-muted);\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  font-weight: 600;\n}\n\n.ts-goal-stat-value {\n  font-size: 24px;\n  font-weight: 700;\n  color: var(--ts-text);\n  line-height: 1;\n}\n\n/* View Details Button */\n.ts-goal-view-details {\n  width: 100%;\n  margin-top: var(--ts-spacing-md);\n  padding: var(--ts-spacing-sm) var(--ts-spacing-md);\n  background: var(--ts-primary-soft);\n  border: 1px solid var(--ts-primary);\n  color: var(--ts-primary);\n  border-radius: var(--ts-radius-md);\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--ts-spacing-xs);\n  position: relative;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.ts-goal-view-details svg {\n  flex-shrink: 0;\n}\n\n.ts-goal-view-details::before {\n  content: \'\';\n  position: absolute;\n  top: 0;\n  left: -100%;\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\n  transition: left 0.5s ease;\n}\n\n.ts-goal-view-details:hover::before {\n  left: 100%;\n}\n\n.ts-goal-view-details:hover {\n  background: var(--ts-primary);\n  color: var(--ts-bg-elevated);\n  transform: translateY(-1px);\n  box-shadow: var(--ts-shadow-md);\n}\n\n/* ========================================\n   Empty State\n   ======================================== */\n.ts-empty-state {\n  text-align: center;\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\n  background: var(--ts-surface);\n  border: 2px dashed var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  margin-top: var(--ts-spacing-lg);\n}\n\n.ts-empty-icon {\n  font-size: 64px;\n  margin-bottom: var(--ts-spacing-md);\n  opacity: 0.5;\n}\n\n.ts-empty-state h2 {\n  font-size: 22px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0 0 8px 0;\n}\n\n.ts-empty-state p {\n  font-size: 15px;\n  color: var(--ts-text-muted);\n  margin: 0 0 var(--ts-spacing-lg) 0;\n  line-height: 1.6;\n}\n\n/* ========================================\n   Error Banner\n   ======================================== */\n.ts-error-banner {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-md);\n  background: var(--ts-danger-soft);\n  border: 1px solid var(--ts-danger);\n  border-radius: var(--ts-radius-lg);\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\n  margin-bottom: var(--ts-spacing-lg);\n  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);\n}\n\n.ts-error-banner span {\n  font-size: 24px;\n  flex-shrink: 0;\n  color: var(--ts-danger);\n}\n\n.ts-error-banner p {\n  margin: 0;\n  color: var(--ts-danger);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1.5;\n}\n\n/* ========================================\n   Modal\n   ======================================== */\n.ts-modal-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.65);\n  backdrop-filter: blur(8px);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 10000;\n  animation: fadeIn 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n\n\n@keyframes slideUp {\n  from {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.ts-modal-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: var(--ts-spacing-lg);\n  border-bottom: 1px solid var(--ts-border);\n  background: var(--ts-surface-hover);\n}\n\n.ts-modal-header h2 {\n  margin: 0;\n  font-size: 20px;\n  font-weight: 600;\n  color: var(--ts-text);\n}\n\n.ts-modal-close {\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n  color: var(--ts-text-muted);\n  padding: 8px;\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: var(--ts-radius-md);\n  transition: all 0.2s ease;\n}\n\n.ts-modal-close:hover {\n  background: var(--ts-danger-soft);\n  color: var(--ts-danger);\n  transform: rotate(90deg);\n}\n\n.ts-modal-body {\n  padding: var(--ts-spacing-lg);\n  overflow-y: auto;\n  flex: 1;\n}\n\n.ts-modal-footer {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--ts-spacing-sm);\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\n  border-top: 1px solid var(--ts-border);\n  background: var(--ts-surface-hover);\n}\n\n/* ========================================\n   Form Fields\n   ======================================== */\n.ts-form-field {\n  margin-bottom: var(--ts-spacing-lg);\n}\n\n.ts-form-field label {\n  display: block;\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin-bottom: 8px;\n}\n\n.ts-field-help {\n  font-size: 13px;\n  color: var(--ts-text-muted);\n  margin: 4px 0 0 0;\n  line-height: 1.5;\n}\n\n.ts-form-field input[type="text"],\n.ts-form-field textarea,\n.ts-form-field select {\n  width: 100%;\n  padding: 10px 14px;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  font-size: 14px;\n  color: var(--ts-text);\n  background: var(--ts-surface);\n  transition: all 0.2s ease;\n}\n\n.ts-form-field input[type="text"]:focus,\n.ts-form-field textarea:focus,\n.ts-form-field select:focus {\n  outline: none;\n  border-color: var(--ts-primary);\n  box-shadow: 0 0 0 3px var(--ts-primary-soft);\n}\n\n.ts-form-field textarea {\n  resize: vertical;\n  min-height: 100px;\n  font-family: inherit;\n  line-height: 1.6;\n}\n\n/* ========================================\n   Condition Rows\n   ======================================== */\n.ts-condition-row {\n  display: flex;\n  gap: var(--ts-spacing-sm);\n  margin-bottom: var(--ts-spacing-sm);\n  align-items: flex-start;\n}\n\n.ts-condition-param,\n.ts-condition-operator,\n.ts-condition-value {\n  flex: 1;\n}\n\n.ts-condition-row .ts-btn-icon {\n  flex-shrink: 0;\n  margin-top: 2px;\n}\n\n/* ========================================\n   Checkbox\n   ======================================== */\n.ts-checkbox-label {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm);\n  cursor: pointer;\n  font-weight: normal !important;\n  padding: var(--ts-spacing-sm);\n  border-radius: var(--ts-radius-md);\n  transition: background 0.2s ease;\n}\n\n.ts-checkbox-label:hover {\n  background: var(--ts-surface-hover);\n}\n\n.ts-checkbox-label input[type="checkbox"] {\n  width: 20px;\n  height: 20px;\n  cursor: pointer;\n  accent-color: var(--ts-primary);\n}\n\n.ts-checkbox-label span {\n  font-size: 14px;\n  color: var(--ts-text);\n  line-height: 1.5;\n}\n\n/* ========================================\n   Buttons\n   ======================================== */\n.ts-btn {\n  padding: 10px 20px;\n  border: none;\n  border-radius: var(--ts-radius-md);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--ts-spacing-sm);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.ts-btn:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  transform: none !important;\n}\n\n.ts-btn-primary {\n  background: var(--ts-primary);\n  color: var(--ts-bg-elevated);\n}\n\n.ts-btn-primary:hover:not(:disabled) {\n  background: var(--ts-primary-hover);\n  box-shadow: var(--ts-shadow-md);\n  transform: translateY(-1px);\n}\n\n.ts-btn-primary:active:not(:disabled) {\n  transform: translateY(0);\n  box-shadow: var(--ts-shadow-sm);\n}\n\n.ts-btn-secondary {\n  background: var(--ts-surface-hover);\n  color: var(--ts-text);\n  border: 1px solid var(--ts-border);\n}\n\n.ts-btn-secondary:hover:not(:disabled) {\n  background: var(--ts-bg-tertiary);\n  border-color: var(--ts-text-muted);\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n.ts-btn-sm {\n  padding: 6px 14px;\n  font-size: 13px;\n}\n\n/* ========================================\n   Loading State\n   ======================================== */\n.ts-loading-state {\n  text-align: center;\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\n}\n\n.ts-spinner {\n  width: 48px;\n  height: 48px;\n  border: 4px solid var(--ts-border);\n  border-top-color: var(--ts-primary);\n  border-radius: 50%;\n  animation: spin 0.8s linear infinite;\n  margin: 0 auto var(--ts-spacing-md);\n}\n\n@keyframes spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.ts-loading-state p {\n  color: var(--ts-text-muted);\n  font-size: 15px;\n  font-weight: 500;\n}\n\n/* ========================================\n   Templates Grid\n   ======================================== */\n.ts-templates-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n  gap: var(--ts-spacing-lg);\n  margin-top: var(--ts-spacing-lg);\n}\n\n.ts-template-card {\n  display: flex;\n  flex-direction: column;\n}\n\n.ts-template-card .ts-card-body {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n}\n\n.ts-template-icon {\n  font-size: 48px;\n  margin-bottom: var(--ts-spacing-md);\n  text-align: center;\n}\n\n.ts-template-name {\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0 0 8px 0;\n  line-height: 1.4;\n}\n\n.ts-template-description {\n  font-size: 14px;\n  color: var(--ts-text-muted);\n  margin: 0 0 var(--ts-spacing-md) 0;\n  line-height: 1.6;\n  flex: 1;\n}\n\n.ts-template-meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--ts-spacing-sm);\n  margin-bottom: var(--ts-spacing-md);\n  padding-top: var(--ts-spacing-md);\n  border-top: 1px solid var(--ts-border);\n}\n\n.ts-template-add-btn {\n  margin-top: auto;\n}\n\n/* ========================================\n   Responsive Design\n   ======================================== */\n\n/* Tablet and below */\n@media (max-width: 768px) {\n  .ts-goals-page {\n    padding: var(--ts-spacing-md);\n  }\n\n  .ts-templates-grid {\n    grid-template-columns: 1fr;\n    gap: var(--ts-spacing-md);\n  }\n\n  .ts-goal-card {\n    padding: var(--ts-spacing-md);\n  }\n\n  .ts-goal-header {\n    flex-direction: column;\n    gap: var(--ts-spacing-sm);\n    padding-left: 30px;\n  }\n\n  .ts-goal-actions {\n    flex-wrap: wrap;\n  }\n\n  .ts-goal-performance {\n    grid-template-columns: 1fr 1fr;\n    gap: var(--ts-spacing-sm);\n  }\n\n  .ts-goal-stat-value {\n    font-size: 18px;\n  }\n\n  .ts-condition-row {\n    flex-direction: column;\n  }\n\n  .ts-modal {\n    width: 95%;\n    max-height: 95vh;\n  }\n\n  .ts-modal-footer {\n    flex-direction: column;\n  }\n\n  .ts-modal-footer .ts-btn {\n    width: 100%;\n  }\n}\n\n/* Small mobile */\n@media (max-width: 480px) {\n  .ts-goal-performance {\n    grid-template-columns: 1fr;\n  }\n  \n  .ts-goal-header {\n    padding-left: 28px;\n  }\n  \n  .ts-goal-name {\n    font-size: 15px;\n  }\n}\n\n/* ========================================\n   Dark Theme Support\n   ======================================== */\n[data-theme="dark"] .ts-goals-page {\n  background: var(--ts-bg-dark, #0f1419);\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-goal-card,\n[data-theme="dark"] .ts-template-card,\n[data-theme="dark"] .ts-modal-content,\n[data-theme="dark"] .ts-card {\n  background: var(--ts-surface-dark, #1a1f26);\n  border-color: var(--ts-border-dark, #2d3748);\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n}\n\n[data-theme="dark"] .ts-goal-card:hover,\n[data-theme="dark"] .ts-template-card:hover {\n  border-color: var(--ts-primary);\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6), 0 0 0 1px var(--ts-primary);\n}\n\n[data-theme="dark"] .ts-page-title,\n[data-theme="dark"] .ts-goal-title,\n[data-theme="dark"] .ts-template-title,\n[data-theme="dark"] .ts-modal-title {\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-page-description,\n[data-theme="dark"] .ts-goal-description,\n[data-theme="dark"] .ts-template-description,\n[data-theme="dark"] .ts-text-muted {\n  color: var(--ts-text-muted-dark, #9ca3af);\n}\n\n[data-theme="dark"] .ts-kpi-value,\n[data-theme="dark"] .ts-perf-value {\n  color: var(--ts-text-dark, #ffffff);\n}\n\n[data-theme="dark"] .ts-kpi-label,\n[data-theme="dark"] .ts-perf-label {\n  color: var(--ts-text-muted-dark, #9ca3af);\n}\n\n[data-theme="dark"] .ts-btn-outline {\n  border-color: var(--ts-border-dark, #2d3748);\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-btn-outline:hover {\n  background: var(--ts-surface-dark, #2d3748);\n  border-color: var(--ts-primary);\n}\n\n[data-theme="dark"] .ts-btn-danger-outline {\n  border-color: var(--ts-danger);\n  color: var(--ts-danger);\n}\n\n[data-theme="dark"] .ts-btn-danger-outline:hover {\n  background: var(--ts-danger);\n  color: #ffffff;\n}\n\n[data-theme="dark"] .ts-input,\n[data-theme="dark"] .ts-select,\n[data-theme="dark"] .ts-textarea {\n  background: var(--ts-surface-dark, #0f1419);\n  border-color: var(--ts-border-dark, #2d3748);\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-input:focus,\n[data-theme="dark"] .ts-select:focus,\n[data-theme="dark"] .ts-textarea:focus {\n  border-color: var(--ts-primary);\n  background: var(--ts-surface-dark, #1a1f26);\n}\n\n[data-theme="dark"] .ts-badge {\n  background: rgba(59, 130, 246, 0.15);\n  color: #60a5fa;\n}\n\n[data-theme="dark"] .ts-badge-success {\n  background: rgba(16, 185, 129, 0.15);\n  color: #34d399;\n}\n\n[data-theme="dark"] .ts-badge-warning {\n  background: rgba(245, 158, 11, 0.15);\n  color: #fbbf24;\n}\n\n[data-theme="dark"] .ts-badge-danger {\n  background: rgba(239, 68, 68, 0.15);\n  color: #f87171;\n}\n\n[data-theme="dark"] .ts-divider {\n  border-color: var(--ts-border-dark, #2d3748);\n}\n\n[data-theme="dark"] .ts-goal-status-inactive {\n  background: rgba(156, 163, 175, 0.1);\n  color: #9ca3af;\n}\n\n[data-theme="dark"] .ts-empty-state {\n  color: var(--ts-text-muted-dark, #9ca3af);\n}\n\n[data-theme="dark"] .ts-empty-state-title {\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-condition-row {\n  background: var(--ts-bg-dark, #0f1419);\n  border-color: var(--ts-border-dark, #2d3748);\n}\n\n[data-theme="dark"] .ts-template-category {\n  color: var(--ts-text-muted-dark, #9ca3af);\n  text-transform: uppercase;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: 0.05em;\n}\n\n[data-theme="dark"] .ts-modal-overlay {\n  background: rgba(0, 0, 0, 0.85);\n}\n\n[data-theme="dark"] .ts-skeleton {\n  background: linear-gradient(\n    90deg,\n    var(--ts-surface-dark, #1a1f26) 0%,\n    var(--ts-border-dark, #2d3748) 50%,\n    var(--ts-surface-dark, #1a1f26) 100%\n  );\n  background-size: 200% 100%;\n}\n',"",{version:3,sources:["webpack://./src/styles/pages/GoalsPage.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Goals Page - Modern, User-Friendly Design\r\n * Features: CSS Variables, Dark Mode Support, Smooth Animations\r\n * Now using global CSS variables for consistent theming\r\n */\r\n\r\n/* ========================================\r\n   Page Container\r\n\r\n   ======================================== */\r\n.ts-goals-page {\r\n  padding: var(--ts-spacing-lg);\r\n  background: var(--ts-bg);\r\n  min-height: 100vh;\r\n}\r\n\r\n/* ========================================\r\n   Page Header\r\n   ======================================== */\r\n.ts-page-header {\r\n  margin-bottom: var(--ts-spacing-xl);\r\n}\r\n\r\n.ts-page-title {\r\n  font-size: 28px;\r\n  font-weight: 700;\r\n  color: var(--ts-text);\r\n  margin: 0 0 8px 0;\r\n  letter-spacing: -0.025em;\r\n}\r\n\r\n.ts-page-description {\r\n  font-size: 15px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* ========================================\r\n   Tab Navigation\r\n   ======================================== */\r\n.ts-goals-tabs {\r\n  display: flex;\r\n  gap: var(--ts-spacing-xs);\r\n  margin-bottom: var(--ts-spacing-lg);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  padding: 0;\r\n}\r\n\r\n.ts-goals-tab {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs);\r\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\r\n  background: transparent;\r\n  border: none;\r\n  border-bottom: 2px solid transparent;\r\n  color: var(--ts-text-muted);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  position: relative;\r\n  top: 1px;\r\n}\r\n\r\n.ts-goals-tab:hover {\r\n  color: var(--ts-text);\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n.ts-goals-tab--active {\r\n  color: var(--ts-primary);\r\n  border-bottom-color: var(--ts-primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-goals-tab--active:hover {\r\n  background: transparent;\r\n}\r\n\r\n[data-theme="dark"] .ts-goals-tab:hover {\r\n  background: var(--ts-surface-hover-dark);\r\n}\r\n\r\n/* ========================================\r\n   Goals Grid\r\n   ======================================== */\r\n\r\n/* Summary Cards - Row Layout */\r\n.ts-goals-summary {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n  gap: var(--ts-spacing-md);\r\n  margin-bottom: var(--ts-spacing-xl);\r\n}\r\n\r\n.ts-goals-summary-row {\r\n  display: flex;\r\n  flex-direction: row;\r\n  gap: var(--ts-spacing-md);\r\n  margin-bottom: var(--ts-spacing-xl);\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-goals-summary-row > * {\r\n  flex: 1;\r\n  min-width: 200px;\r\n}\r\n\r\n.ts-goals-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));\r\n  gap: var(--ts-spacing-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n}\r\n\r\n/* ========================================\r\n   Goal Card\r\n   ======================================== */\r\n.ts-goal-card {\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  padding: var(--ts-spacing-lg);\r\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\r\n  position: relative;\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 0;\r\n}\r\n\r\n.ts-goal-card::before {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  height: 3px;\r\n  background: linear-gradient(90deg, var(--ts-primary), var(--ts-success));\r\n  opacity: 0;\r\n  transition: opacity 0.3s ease;\r\n}\r\n\r\n.ts-goal-card:hover {\r\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08);\r\n  transform: translateY(-3px);\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n.ts-goal-card:hover::before {\r\n  opacity: 1;\r\n}\r\n\r\n.ts-goal-card-selected {\r\n  border-color: var(--ts-primary);\r\n  background: var(--ts-surface-hover);\r\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\r\n}\r\n\r\n/* Goal Checkbox - Inline with header */\r\n.ts-goal-checkbox {\r\n  position: absolute;\r\n  top: var(--ts-spacing-lg);\r\n  left: var(--ts-spacing-lg);\r\n  z-index: 1;\r\n}\r\n\r\n.ts-goal-checkbox input[type="checkbox"] {\r\n  margin: 0;\r\n  cursor: pointer;\r\n  width: 18px;\r\n  height: 18px;\r\n  accent-color: var(--ts-primary);\r\n}\r\n\r\n/* Goal Header */\r\n.ts-goal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: flex-start;\r\n  margin-bottom: var(--ts-spacing-md);\r\n  gap: var(--ts-spacing-md);\r\n  padding-left: 30px; /* Space for absolute checkbox */\r\n}\r\n\r\n.ts-goal-title-section {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-goal-title-row {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm);\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-goal-name {\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0;\r\n  line-height: 1.4;\r\n}\r\n\r\n.ts-goal-description {\r\n  font-size: 14px;\r\n  color: var(--ts-text-muted);\r\n  margin: 6px 0 0 0;\r\n  line-height: 1.5;\r\n  display: -webkit-box;\r\n  line-clamp: 2;\r\n  -webkit-line-clamp: 2;\r\n  -webkit-box-orient: vertical;\r\n  overflow: hidden;\r\n}\r\n\r\n/* Goal Actions */\r\n.ts-goal-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs);\r\n  flex-shrink: 0;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-goal-status {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  padding: 6px 12px;\r\n  border-radius: var(--ts-radius-full);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-goal-status.ts-active {\r\n  background: var(--ts-success-soft);\r\n  color: var(--ts-success);\r\n  border: 1px solid var(--ts-success);\r\n}\r\n\r\n.ts-goal-status.ts-inactive {\r\n  background: var(--ts-danger-soft);\r\n  color: var(--ts-danger);\r\n  border: 1px solid var(--ts-danger);\r\n}\r\n\r\n.ts-btn-icon {\r\n  background: var(--ts-surface-hover);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  cursor: pointer;\r\n  font-size: 18px;\r\n  padding: 8px;\r\n  color: var(--ts-text-muted);\r\n  transition: all 0.2s ease;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 36px;\r\n  height: 36px;\r\n}\r\n\r\n.ts-btn-icon:hover {\r\n  background: var(--ts-primary-soft);\r\n  color: var(--ts-primary);\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.ts-btn-icon.ts-btn-danger:hover {\r\n  background: var(--ts-danger-soft);\r\n  color: var(--ts-danger);\r\n  border-color: var(--ts-danger);\r\n  box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);\r\n}\r\n\r\n/* Goal Details */\r\n.ts-goal-details {\r\n  margin-bottom: var(--ts-spacing-md);\r\n}\r\n\r\n.ts-goal-meta {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: var(--ts-spacing-sm);\r\n}\r\n\r\n.ts-goal-event,\r\n.ts-goal-conditions {\r\n  font-size: 13px;\r\n  color: var(--ts-text);\r\n  background: var(--ts-bg-tertiary);\r\n  padding: 6px 12px;\r\n  border-radius: var(--ts-radius-md);\r\n  border: 1px solid var(--ts-border);\r\n  font-weight: 500;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-goal-event:hover,\r\n.ts-goal-conditions:hover {\r\n  background: var(--ts-primary-soft);\r\n  border-color: var(--ts-primary);\r\n  color: var(--ts-primary);\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n/* Goal Performance */\r\n.ts-goal-performance {\r\n  display: grid;\r\n  grid-template-columns: repeat(2, 1fr);\r\n  gap: var(--ts-spacing-md);\r\n  padding-top: var(--ts-spacing-md);\r\n  border-top: 1px solid var(--ts-border);\r\n  margin-top: auto;\r\n}\r\n\r\n.ts-goal-stat {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 4px;\r\n}\r\n\r\n.ts-goal-stat-label {\r\n  font-size: 11px;\r\n  color: var(--ts-text-muted);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.8px;\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-goal-stat-value {\r\n  font-size: 24px;\r\n  font-weight: 700;\r\n  color: var(--ts-text);\r\n  line-height: 1;\r\n}\r\n\r\n/* View Details Button */\r\n.ts-goal-view-details {\r\n  width: 100%;\r\n  margin-top: var(--ts-spacing-md);\r\n  padding: var(--ts-spacing-sm) var(--ts-spacing-md);\r\n  background: var(--ts-primary-soft);\r\n  border: 1px solid var(--ts-primary);\r\n  color: var(--ts-primary);\r\n  border-radius: var(--ts-radius-md);\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: var(--ts-spacing-xs);\r\n  position: relative;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n}\r\n\r\n.ts-goal-view-details svg {\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-goal-view-details::before {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: 0;\r\n  left: -100%;\r\n  width: 100%;\r\n  height: 100%;\r\n  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\r\n  transition: left 0.5s ease;\r\n}\r\n\r\n.ts-goal-view-details:hover::before {\r\n  left: 100%;\r\n}\r\n\r\n.ts-goal-view-details:hover {\r\n  background: var(--ts-primary);\r\n  color: var(--ts-bg-elevated);\r\n  transform: translateY(-1px);\r\n  box-shadow: var(--ts-shadow-md);\r\n}\r\n\r\n/* ========================================\r\n   Empty State\r\n   ======================================== */\r\n.ts-empty-state {\r\n  text-align: center;\r\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\r\n  background: var(--ts-surface);\r\n  border: 2px dashed var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-empty-icon {\r\n  font-size: 64px;\r\n  margin-bottom: var(--ts-spacing-md);\r\n  opacity: 0.5;\r\n}\r\n\r\n.ts-empty-state h2 {\r\n  font-size: 22px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0 0 8px 0;\r\n}\r\n\r\n.ts-empty-state p {\r\n  font-size: 15px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0 0 var(--ts-spacing-lg) 0;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* ========================================\r\n   Error Banner\r\n   ======================================== */\r\n.ts-error-banner {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-md);\r\n  background: var(--ts-danger-soft);\r\n  border: 1px solid var(--ts-danger);\r\n  border-radius: var(--ts-radius-lg);\r\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\r\n  margin-bottom: var(--ts-spacing-lg);\r\n  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);\r\n}\r\n\r\n.ts-error-banner span {\r\n  font-size: 24px;\r\n  flex-shrink: 0;\r\n  color: var(--ts-danger);\r\n}\r\n\r\n.ts-error-banner p {\r\n  margin: 0;\r\n  color: var(--ts-danger);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  line-height: 1.5;\r\n}\r\n\r\n/* ========================================\r\n   Modal\r\n   ======================================== */\r\n.ts-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.65);\r\n  backdrop-filter: blur(8px);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 10000;\r\n  animation: fadeIn 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n  }\r\n  to {\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n\r\n\r\n@keyframes slideUp {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(20px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.ts-modal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: var(--ts-spacing-lg);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n.ts-modal-header h2 {\r\n  margin: 0;\r\n  font-size: 20px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n}\r\n\r\n.ts-modal-close {\r\n  background: transparent;\r\n  border: none;\r\n  font-size: 24px;\r\n  cursor: pointer;\r\n  color: var(--ts-text-muted);\r\n  padding: 8px;\r\n  width: 40px;\r\n  height: 40px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: var(--ts-radius-md);\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-modal-close:hover {\r\n  background: var(--ts-danger-soft);\r\n  color: var(--ts-danger);\r\n  transform: rotate(90deg);\r\n}\r\n\r\n.ts-modal-body {\r\n  padding: var(--ts-spacing-lg);\r\n  overflow-y: auto;\r\n  flex: 1;\r\n}\r\n\r\n.ts-modal-footer {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: var(--ts-spacing-sm);\r\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\r\n  border-top: 1px solid var(--ts-border);\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n/* ========================================\r\n   Form Fields\r\n   ======================================== */\r\n.ts-form-field {\r\n  margin-bottom: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-form-field label {\r\n  display: block;\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.ts-field-help {\r\n  font-size: 13px;\r\n  color: var(--ts-text-muted);\r\n  margin: 4px 0 0 0;\r\n  line-height: 1.5;\r\n}\r\n\r\n.ts-form-field input[type="text"],\r\n.ts-form-field textarea,\r\n.ts-form-field select {\r\n  width: 100%;\r\n  padding: 10px 14px;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  font-size: 14px;\r\n  color: var(--ts-text);\r\n  background: var(--ts-surface);\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-form-field input[type="text"]:focus,\r\n.ts-form-field textarea:focus,\r\n.ts-form-field select:focus {\r\n  outline: none;\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 0 0 3px var(--ts-primary-soft);\r\n}\r\n\r\n.ts-form-field textarea {\r\n  resize: vertical;\r\n  min-height: 100px;\r\n  font-family: inherit;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* ========================================\r\n   Condition Rows\r\n   ======================================== */\r\n.ts-condition-row {\r\n  display: flex;\r\n  gap: var(--ts-spacing-sm);\r\n  margin-bottom: var(--ts-spacing-sm);\r\n  align-items: flex-start;\r\n}\r\n\r\n.ts-condition-param,\r\n.ts-condition-operator,\r\n.ts-condition-value {\r\n  flex: 1;\r\n}\r\n\r\n.ts-condition-row .ts-btn-icon {\r\n  flex-shrink: 0;\r\n  margin-top: 2px;\r\n}\r\n\r\n/* ========================================\r\n   Checkbox\r\n   ======================================== */\r\n.ts-checkbox-label {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm);\r\n  cursor: pointer;\r\n  font-weight: normal !important;\r\n  padding: var(--ts-spacing-sm);\r\n  border-radius: var(--ts-radius-md);\r\n  transition: background 0.2s ease;\r\n}\r\n\r\n.ts-checkbox-label:hover {\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n.ts-checkbox-label input[type="checkbox"] {\r\n  width: 20px;\r\n  height: 20px;\r\n  cursor: pointer;\r\n  accent-color: var(--ts-primary);\r\n}\r\n\r\n.ts-checkbox-label span {\r\n  font-size: 14px;\r\n  color: var(--ts-text);\r\n  line-height: 1.5;\r\n}\r\n\r\n/* ========================================\r\n   Buttons\r\n   ======================================== */\r\n.ts-btn {\r\n  padding: 10px 20px;\r\n  border: none;\r\n  border-radius: var(--ts-radius-md);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: var(--ts-spacing-sm);\r\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n}\r\n\r\n.ts-btn:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n  transform: none !important;\r\n}\r\n\r\n.ts-btn-primary {\r\n  background: var(--ts-primary);\r\n  color: var(--ts-bg-elevated);\r\n}\r\n\r\n.ts-btn-primary:hover:not(:disabled) {\r\n  background: var(--ts-primary-hover);\r\n  box-shadow: var(--ts-shadow-md);\r\n  transform: translateY(-1px);\r\n}\r\n\r\n.ts-btn-primary:active:not(:disabled) {\r\n  transform: translateY(0);\r\n  box-shadow: var(--ts-shadow-sm);\r\n}\r\n\r\n.ts-btn-secondary {\r\n  background: var(--ts-surface-hover);\r\n  color: var(--ts-text);\r\n  border: 1px solid var(--ts-border);\r\n}\r\n\r\n.ts-btn-secondary:hover:not(:disabled) {\r\n  background: var(--ts-bg-tertiary);\r\n  border-color: var(--ts-text-muted);\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.ts-btn-sm {\r\n  padding: 6px 14px;\r\n  font-size: 13px;\r\n}\r\n\r\n/* ========================================\r\n   Loading State\r\n   ======================================== */\r\n.ts-loading-state {\r\n  text-align: center;\r\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-spinner {\r\n  width: 48px;\r\n  height: 48px;\r\n  border: 4px solid var(--ts-border);\r\n  border-top-color: var(--ts-primary);\r\n  border-radius: 50%;\r\n  animation: spin 0.8s linear infinite;\r\n  margin: 0 auto var(--ts-spacing-md);\r\n}\r\n\r\n@keyframes spin {\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n\r\n.ts-loading-state p {\r\n  color: var(--ts-text-muted);\r\n  font-size: 15px;\r\n  font-weight: 500;\r\n}\r\n\r\n/* ========================================\r\n   Templates Grid\r\n   ======================================== */\r\n.ts-templates-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n  gap: var(--ts-spacing-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-template-card {\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n.ts-template-card .ts-card-body {\r\n  display: flex;\r\n  flex-direction: column;\r\n  flex: 1;\r\n}\r\n\r\n.ts-template-icon {\r\n  font-size: 48px;\r\n  margin-bottom: var(--ts-spacing-md);\r\n  text-align: center;\r\n}\r\n\r\n.ts-template-name {\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0 0 8px 0;\r\n  line-height: 1.4;\r\n}\r\n\r\n.ts-template-description {\r\n  font-size: 14px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0 0 var(--ts-spacing-md) 0;\r\n  line-height: 1.6;\r\n  flex: 1;\r\n}\r\n\r\n.ts-template-meta {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: var(--ts-spacing-sm);\r\n  margin-bottom: var(--ts-spacing-md);\r\n  padding-top: var(--ts-spacing-md);\r\n  border-top: 1px solid var(--ts-border);\r\n}\r\n\r\n.ts-template-add-btn {\r\n  margin-top: auto;\r\n}\r\n\r\n/* ========================================\r\n   Responsive Design\r\n   ======================================== */\r\n\r\n/* Tablet and below */\r\n@media (max-width: 768px) {\r\n  .ts-goals-page {\r\n    padding: var(--ts-spacing-md);\r\n  }\r\n\r\n  .ts-templates-grid {\r\n    grid-template-columns: 1fr;\r\n    gap: var(--ts-spacing-md);\r\n  }\r\n\r\n  .ts-goal-card {\r\n    padding: var(--ts-spacing-md);\r\n  }\r\n\r\n  .ts-goal-header {\r\n    flex-direction: column;\r\n    gap: var(--ts-spacing-sm);\r\n    padding-left: 30px;\r\n  }\r\n\r\n  .ts-goal-actions {\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .ts-goal-performance {\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: var(--ts-spacing-sm);\r\n  }\r\n\r\n  .ts-goal-stat-value {\r\n    font-size: 18px;\r\n  }\r\n\r\n  .ts-condition-row {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .ts-modal {\r\n    width: 95%;\r\n    max-height: 95vh;\r\n  }\r\n\r\n  .ts-modal-footer {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .ts-modal-footer .ts-btn {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n/* Small mobile */\r\n@media (max-width: 480px) {\r\n  .ts-goal-performance {\r\n    grid-template-columns: 1fr;\r\n  }\r\n  \r\n  .ts-goal-header {\r\n    padding-left: 28px;\r\n  }\r\n  \r\n  .ts-goal-name {\r\n    font-size: 15px;\r\n  }\r\n}\r\n\r\n/* ========================================\r\n   Dark Theme Support\r\n   ======================================== */\r\n[data-theme="dark"] .ts-goals-page {\r\n  background: var(--ts-bg-dark, #0f1419);\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-card,\r\n[data-theme="dark"] .ts-template-card,\r\n[data-theme="dark"] .ts-modal-content,\r\n[data-theme="dark"] .ts-card {\r\n  background: var(--ts-surface-dark, #1a1f26);\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-card:hover,\r\n[data-theme="dark"] .ts-template-card:hover {\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6), 0 0 0 1px var(--ts-primary);\r\n}\r\n\r\n[data-theme="dark"] .ts-page-title,\r\n[data-theme="dark"] .ts-goal-title,\r\n[data-theme="dark"] .ts-template-title,\r\n[data-theme="dark"] .ts-modal-title {\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-page-description,\r\n[data-theme="dark"] .ts-goal-description,\r\n[data-theme="dark"] .ts-template-description,\r\n[data-theme="dark"] .ts-text-muted {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n}\r\n\r\n[data-theme="dark"] .ts-kpi-value,\r\n[data-theme="dark"] .ts-perf-value {\r\n  color: var(--ts-text-dark, #ffffff);\r\n}\r\n\r\n[data-theme="dark"] .ts-kpi-label,\r\n[data-theme="dark"] .ts-perf-label {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-outline {\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-outline:hover {\r\n  background: var(--ts-surface-dark, #2d3748);\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-danger-outline {\r\n  border-color: var(--ts-danger);\r\n  color: var(--ts-danger);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-danger-outline:hover {\r\n  background: var(--ts-danger);\r\n  color: #ffffff;\r\n}\r\n\r\n[data-theme="dark"] .ts-input,\r\n[data-theme="dark"] .ts-select,\r\n[data-theme="dark"] .ts-textarea {\r\n  background: var(--ts-surface-dark, #0f1419);\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-input:focus,\r\n[data-theme="dark"] .ts-select:focus,\r\n[data-theme="dark"] .ts-textarea:focus {\r\n  border-color: var(--ts-primary);\r\n  background: var(--ts-surface-dark, #1a1f26);\r\n}\r\n\r\n[data-theme="dark"] .ts-badge {\r\n  background: rgba(59, 130, 246, 0.15);\r\n  color: #60a5fa;\r\n}\r\n\r\n[data-theme="dark"] .ts-badge-success {\r\n  background: rgba(16, 185, 129, 0.15);\r\n  color: #34d399;\r\n}\r\n\r\n[data-theme="dark"] .ts-badge-warning {\r\n  background: rgba(245, 158, 11, 0.15);\r\n  color: #fbbf24;\r\n}\r\n\r\n[data-theme="dark"] .ts-badge-danger {\r\n  background: rgba(239, 68, 68, 0.15);\r\n  color: #f87171;\r\n}\r\n\r\n[data-theme="dark"] .ts-divider {\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-status-inactive {\r\n  background: rgba(156, 163, 175, 0.1);\r\n  color: #9ca3af;\r\n}\r\n\r\n[data-theme="dark"] .ts-empty-state {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n}\r\n\r\n[data-theme="dark"] .ts-empty-state-title {\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-condition-row {\r\n  background: var(--ts-bg-dark, #0f1419);\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n}\r\n\r\n[data-theme="dark"] .ts-template-category {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n  text-transform: uppercase;\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n[data-theme="dark"] .ts-modal-overlay {\r\n  background: rgba(0, 0, 0, 0.85);\r\n}\r\n\r\n[data-theme="dark"] .ts-skeleton {\r\n  background: linear-gradient(\r\n    90deg,\r\n    var(--ts-surface-dark, #1a1f26) 0%,\r\n    var(--ts-border-dark, #2d3748) 50%,\r\n    var(--ts-surface-dark, #1a1f26) 100%\r\n  );\r\n  background-size: 200% 100%;\r\n}\r\n'],sourceRoot:""}]);const i=s},80126:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Goal Modal Styles\n * \n * Unified styling for goal creation/editing modal\n * Supports dark/light themes with CSS variables\n * \n * @since 2.1.0\n * @package TrackSure\n */\n\n/* ============================================================\n   Modal Content\n   ============================================================ */\n\n.ts-goal-modal__content {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-lg, 1.5rem);\n  padding: var(--ts-spacing-md, 1rem);\n}\n\n/* ============================================================\n   Banner (Info/Error Messages)\n   ============================================================ */\n\n.ts-goal-modal__banner {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  padding: var(--ts-spacing-md, 1rem);\n  border-radius: var(--ts-radius-lg, 8px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.ts-goal-modal__banner-icon {\n  flex-shrink: 0;\n  font-size: 1.25rem;\n  line-height: 1;\n}\n\n.ts-goal-modal__banner--info {\n  background: var(--ts-info-bg, #e0f2fe);\n  border: 1px solid var(--ts-info-border, #7dd3fc);\n  color: var(--ts-info-text, #0c4a6e);\n}\n\n[data-theme="dark"] .ts-goal-modal__banner--info {\n  background: rgba(14, 116, 144, 0.1);\n  border-color: rgba(6, 182, 212, 0.3);\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__banner--error {\n  background: var(--ts-error-bg, #fef2f2);\n  border: 1px solid var(--ts-error-border, #fca5a5);\n  color: var(--ts-error-text, #991b1b);\n}\n\n[data-theme="dark"] .ts-goal-modal__banner--error {\n  background: rgba(127, 29, 29, 0.2);\n  border-color: rgba(248, 113, 113, 0.3);\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__banner strong {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 0.25rem;\n}\n\n.ts-goal-modal__banner p {\n  margin: 0;\n  color: inherit;\n  opacity: 0.9;\n}\n\n/* ============================================================\n   Sections\n   ============================================================ */\n\n.ts-goal-modal__section {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-md, 1rem);\n}\n\n.ts-goal-modal__section-title {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  margin: 0;\n  font-size: 1rem;\n  font-weight: 600;\n  color: var(--ts-text-primary, #1e293b);\n}\n\n[data-theme="dark"] .ts-goal-modal__section-title {\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__section-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1.25rem;\n  line-height: 1;\n}\n\n/* ============================================================\n   Form Fields\n   ============================================================ */\n\n.ts-goal-modal__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-xs, 0.5rem);\n}\n\n.ts-goal-modal__label {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs, 0.5rem);\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: var(--ts-text-primary, #334155);\n}\n\n[data-theme="dark"] .ts-goal-modal__label {\n  color: var(--ts-text-primary, #e2e8f0);\n}\n\n.ts-goal-modal__label--required::after {\n  content: \'*\';\n  color: var(--ts-danger, #ef4444);\n  margin-left: 0.125rem;\n}\n\n.ts-goal-modal__label-optional {\n  font-size: 0.75rem;\n  font-weight: 400;\n  color: var(--ts-text-tertiary, #94a3b8);\n}\n\n/* Input Styles */\n.ts-goal-modal__input,\n.ts-goal-modal__textarea,\n.ts-goal-modal__select {\n  width: 100%;\n  padding: 0.625rem 0.875rem;\n  font-size: 0.875rem;\n  font-family: var(--ts-font-sans);\n  color: var(--ts-text-primary, #1e293b);\n  background: var(--ts-bg-primary, #ffffff);\n  border: 1px solid var(--ts-border-color, #e2e8f0);\n  border-radius: var(--ts-radius-md, 6px);\n  transition: all var(--ts-fast, 120ms);\n  outline: none;\n}\n\n[data-theme="dark"] .ts-goal-modal__input,\n[data-theme="dark"] .ts-goal-modal__textarea,\n[data-theme="dark"] .ts-goal-modal__select {\n  color: var(--ts-text-primary, #f9fafb);\n  background: var(--ts-bg-secondary, #1e293b);\n  border-color: var(--ts-border-color, #334155);\n}\n\n.ts-goal-modal__input:hover,\n.ts-goal-modal__textarea:hover,\n.ts-goal-modal__select:hover {\n  border-color: var(--ts-border-color-hover, #cbd5e1);\n}\n\n[data-theme="dark"] .ts-goal-modal__input:hover,\n[data-theme="dark"] .ts-goal-modal__textarea:hover,\n[data-theme="dark"] .ts-goal-modal__select:hover {\n  border-color: var(--ts-border-color-hover, #475569);\n}\n\n.ts-goal-modal__input:focus,\n.ts-goal-modal__textarea:focus,\n.ts-goal-modal__select:focus {\n  border-color: var(--ts-primary, #6366f1);\n  box-shadow: var(--ts-ring, 0 0 0 3px rgba(99, 102, 241, 0.1));\n}\n\n[data-theme="dark"] .ts-goal-modal__input:focus,\n[data-theme="dark"] .ts-goal-modal__textarea:focus,\n[data-theme="dark"] .ts-goal-modal__select:focus {\n  border-color: var(--ts-primary, #818cf8);\n  box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2);\n}\n\n.ts-goal-modal__input::placeholder,\n.ts-goal-modal__textarea::placeholder {\n  color: var(--ts-text-tertiary, #94a3b8);\n  opacity: 1;\n}\n\n[data-theme="dark"] .ts-goal-modal__input::placeholder,\n[data-theme="dark"] .ts-goal-modal__textarea::placeholder {\n  color: var(--ts-text-tertiary, #64748b);\n}\n\n.ts-goal-modal__textarea {\n  resize: vertical;\n  min-height: 80px;\n}\n\n/* Error State */\n.ts-goal-modal__input--error,\n.ts-goal-modal__textarea--error {\n  border-color: var(--ts-danger, #ef4444);\n}\n\n[data-theme="dark"] .ts-goal-modal__input--error,\n[data-theme="dark"] .ts-goal-modal__textarea--error {\n  border-color: var(--ts-danger, #f87171);\n}\n\n.ts-goal-modal__input--error:focus,\n.ts-goal-modal__textarea--error:focus {\n  box-shadow: var(--ts-ring-danger, 0 0 0 3px rgba(239, 68, 68, 0.1));\n}\n\n[data-theme="dark"] .ts-goal-modal__input--error:focus,\n[data-theme="dark"] .ts-goal-modal__textarea--error:focus {\n  box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.2);\n}\n\n/* ============================================================\n   Help Text & Errors\n   ============================================================ */\n\n.ts-goal-modal__help {\n  margin: 0;\n  font-size: 0.75rem;\n  color: var(--ts-text-secondary, #64748b);\n  line-height: 1.5;\n}\n\n[data-theme="dark"] .ts-goal-modal__help {\n  color: var(--ts-text-secondary, #94a3b8);\n}\n\n.ts-goal-modal__error {\n  display: flex;\n  align-items: center;\n  gap: 0.375rem;\n  margin: 0;\n  font-size: 0.75rem;\n  color: var(--ts-danger, #ef4444);\n  line-height: 1.5;\n}\n\n[data-theme="dark"] .ts-goal-modal__error {\n  color: var(--ts-danger, #f87171);\n}\n\n.ts-goal-modal__error::before {\n  content: \'⚠\';\n  font-size: 0.875rem;\n}\n\n.ts-goal-modal__error-list {\n  margin: 0.5rem 0 0 0;\n  padding-left: 1.25rem;\n  list-style: disc;\n}\n\n.ts-goal-modal__error-list li {\n  margin: 0.25rem 0;\n}\n\n/* ============================================================\n   Toggle Switch\n   ============================================================ */\n\n.ts-goal-modal__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  padding: var(--ts-spacing-md, 1rem);\n  background: var(--ts-bg-secondary, #f8fafc);\n  border: 1px solid var(--ts-border-color, #e2e8f0);\n  border-radius: var(--ts-radius-lg, 8px);\n  cursor: pointer;\n  transition: all var(--ts-fast, 120ms);\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle {\n  background: var(--ts-bg-tertiary, #0f172a);\n  border-color: var(--ts-border-color, #1e293b);\n}\n\n.ts-goal-modal__toggle:hover {\n  background: var(--ts-surface-hover, #f1f5f9);\n  border-color: var(--ts-border-color-hover, #cbd5e1);\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle:hover {\n  background: var(--ts-surface-hover, #1e293b);\n  border-color: var(--ts-border-color-hover, #334155);\n}\n\n.ts-goal-modal__toggle-input {\n  width: 20px;\n  height: 20px;\n  flex-shrink: 0;\n  cursor: pointer;\n  accent-color: var(--ts-primary, #6366f1);\n}\n\n.ts-goal-modal__toggle-content {\n  flex: 1;\n}\n\n.ts-goal-modal__toggle-title {\n  font-weight: 600;\n  font-size: 0.875rem;\n  color: var(--ts-text-primary, #1e293b);\n  margin-bottom: 0.125rem;\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle-title {\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__toggle-description {\n  font-size: 0.75rem;\n  color: var(--ts-text-secondary, #64748b);\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle-description {\n  color: var(--ts-text-secondary, #94a3b8);\n}\n\n/* ============================================================\n   Footer\n   ============================================================ */\n\n.ts-goal-modal__footer {\n  display: flex;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  justify-content: flex-end;\n}\n\n/* ============================================================\n   Responsive Design\n   ============================================================ */\n\n@media (max-width: 768px) {\n  .ts-goal-modal__content {\n    padding: var(--ts-spacing-sm, 0.75rem);\n    gap: var(--ts-spacing-md, 1rem);\n  }\n\n  .ts-goal-modal__section {\n    gap: var(--ts-spacing-sm, 0.75rem);\n  }\n\n  .ts-goal-modal__footer {\n    flex-direction: column;\n  }\n\n  .ts-goal-modal__footer .ts-btn {\n    width: 100%;\n  }\n}\n\n/* ============================================================\n   Accessibility Improvements\n   ============================================================ */\n\n/* Focus visible (keyboard navigation) */\n.ts-goal-modal__input:focus-visible,\n.ts-goal-modal__textarea:focus-visible,\n.ts-goal-modal__select:focus-visible,\n.ts-goal-modal__toggle-input:focus-visible {\n  outline: 2px solid var(--ts-primary, #6366f1);\n  outline-offset: 2px;\n}\n\n[data-theme="dark"] .ts-goal-modal__input:focus-visible,\n[data-theme="dark"] .ts-goal-modal__textarea:focus-visible,\n[data-theme="dark"] .ts-goal-modal__select:focus-visible,\n[data-theme="dark"] .ts-goal-modal__toggle-input:focus-visible {\n  outline-color: var(--ts-primary, #818cf8);\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n  .ts-goal-modal__input,\n  .ts-goal-modal__textarea,\n  .ts-goal-modal__select,\n  .ts-goal-modal__toggle {\n    border-width: 2px;\n  }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .ts-goal-modal__input,\n  .ts-goal-modal__textarea,\n  .ts-goal-modal__select,\n  .ts-goal-modal__toggle {\n    transition: none;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/components/GoalModal.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Goal Modal Styles\r\n * \r\n * Unified styling for goal creation/editing modal\r\n * Supports dark/light themes with CSS variables\r\n * \r\n * @since 2.1.0\r\n * @package TrackSure\r\n */\r\n\r\n/* ============================================================\r\n   Modal Content\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__content {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-lg, 1.5rem);\r\n  padding: var(--ts-spacing-md, 1rem);\r\n}\r\n\r\n/* ============================================================\r\n   Banner (Info/Error Messages)\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__banner {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  padding: var(--ts-spacing-md, 1rem);\r\n  border-radius: var(--ts-radius-lg, 8px);\r\n  font-size: 0.875rem;\r\n  line-height: 1.5;\r\n}\r\n\r\n.ts-goal-modal__banner-icon {\r\n  flex-shrink: 0;\r\n  font-size: 1.25rem;\r\n  line-height: 1;\r\n}\r\n\r\n.ts-goal-modal__banner--info {\r\n  background: var(--ts-info-bg, #e0f2fe);\r\n  border: 1px solid var(--ts-info-border, #7dd3fc);\r\n  color: var(--ts-info-text, #0c4a6e);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__banner--info {\r\n  background: rgba(14, 116, 144, 0.1);\r\n  border-color: rgba(6, 182, 212, 0.3);\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__banner--error {\r\n  background: var(--ts-error-bg, #fef2f2);\r\n  border: 1px solid var(--ts-error-border, #fca5a5);\r\n  color: var(--ts-error-text, #991b1b);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__banner--error {\r\n  background: rgba(127, 29, 29, 0.2);\r\n  border-color: rgba(248, 113, 113, 0.3);\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__banner strong {\r\n  display: block;\r\n  font-weight: 600;\r\n  margin-bottom: 0.25rem;\r\n}\r\n\r\n.ts-goal-modal__banner p {\r\n  margin: 0;\r\n  color: inherit;\r\n  opacity: 0.9;\r\n}\r\n\r\n/* ============================================================\r\n   Sections\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__section {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-md, 1rem);\r\n}\r\n\r\n.ts-goal-modal__section-title {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  margin: 0;\r\n  font-size: 1rem;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary, #1e293b);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__section-title {\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__section-icon {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 1.25rem;\r\n  line-height: 1;\r\n}\r\n\r\n/* ============================================================\r\n   Form Fields\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__field {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-xs, 0.5rem);\r\n}\r\n\r\n.ts-goal-modal__label {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs, 0.5rem);\r\n  font-size: 0.875rem;\r\n  font-weight: 500;\r\n  color: var(--ts-text-primary, #334155);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__label {\r\n  color: var(--ts-text-primary, #e2e8f0);\r\n}\r\n\r\n.ts-goal-modal__label--required::after {\r\n  content: \'*\';\r\n  color: var(--ts-danger, #ef4444);\r\n  margin-left: 0.125rem;\r\n}\r\n\r\n.ts-goal-modal__label-optional {\r\n  font-size: 0.75rem;\r\n  font-weight: 400;\r\n  color: var(--ts-text-tertiary, #94a3b8);\r\n}\r\n\r\n/* Input Styles */\r\n.ts-goal-modal__input,\r\n.ts-goal-modal__textarea,\r\n.ts-goal-modal__select {\r\n  width: 100%;\r\n  padding: 0.625rem 0.875rem;\r\n  font-size: 0.875rem;\r\n  font-family: var(--ts-font-sans);\r\n  color: var(--ts-text-primary, #1e293b);\r\n  background: var(--ts-bg-primary, #ffffff);\r\n  border: 1px solid var(--ts-border-color, #e2e8f0);\r\n  border-radius: var(--ts-radius-md, 6px);\r\n  transition: all var(--ts-fast, 120ms);\r\n  outline: none;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input,\r\n[data-theme="dark"] .ts-goal-modal__textarea,\r\n[data-theme="dark"] .ts-goal-modal__select {\r\n  color: var(--ts-text-primary, #f9fafb);\r\n  background: var(--ts-bg-secondary, #1e293b);\r\n  border-color: var(--ts-border-color, #334155);\r\n}\r\n\r\n.ts-goal-modal__input:hover,\r\n.ts-goal-modal__textarea:hover,\r\n.ts-goal-modal__select:hover {\r\n  border-color: var(--ts-border-color-hover, #cbd5e1);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input:hover,\r\n[data-theme="dark"] .ts-goal-modal__textarea:hover,\r\n[data-theme="dark"] .ts-goal-modal__select:hover {\r\n  border-color: var(--ts-border-color-hover, #475569);\r\n}\r\n\r\n.ts-goal-modal__input:focus,\r\n.ts-goal-modal__textarea:focus,\r\n.ts-goal-modal__select:focus {\r\n  border-color: var(--ts-primary, #6366f1);\r\n  box-shadow: var(--ts-ring, 0 0 0 3px rgba(99, 102, 241, 0.1));\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input:focus,\r\n[data-theme="dark"] .ts-goal-modal__textarea:focus,\r\n[data-theme="dark"] .ts-goal-modal__select:focus {\r\n  border-color: var(--ts-primary, #818cf8);\r\n  box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2);\r\n}\r\n\r\n.ts-goal-modal__input::placeholder,\r\n.ts-goal-modal__textarea::placeholder {\r\n  color: var(--ts-text-tertiary, #94a3b8);\r\n  opacity: 1;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input::placeholder,\r\n[data-theme="dark"] .ts-goal-modal__textarea::placeholder {\r\n  color: var(--ts-text-tertiary, #64748b);\r\n}\r\n\r\n.ts-goal-modal__textarea {\r\n  resize: vertical;\r\n  min-height: 80px;\r\n}\r\n\r\n/* Error State */\r\n.ts-goal-modal__input--error,\r\n.ts-goal-modal__textarea--error {\r\n  border-color: var(--ts-danger, #ef4444);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input--error,\r\n[data-theme="dark"] .ts-goal-modal__textarea--error {\r\n  border-color: var(--ts-danger, #f87171);\r\n}\r\n\r\n.ts-goal-modal__input--error:focus,\r\n.ts-goal-modal__textarea--error:focus {\r\n  box-shadow: var(--ts-ring-danger, 0 0 0 3px rgba(239, 68, 68, 0.1));\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input--error:focus,\r\n[data-theme="dark"] .ts-goal-modal__textarea--error:focus {\r\n  box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.2);\r\n}\r\n\r\n/* ============================================================\r\n   Help Text & Errors\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__help {\r\n  margin: 0;\r\n  font-size: 0.75rem;\r\n  color: var(--ts-text-secondary, #64748b);\r\n  line-height: 1.5;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__help {\r\n  color: var(--ts-text-secondary, #94a3b8);\r\n}\r\n\r\n.ts-goal-modal__error {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.375rem;\r\n  margin: 0;\r\n  font-size: 0.75rem;\r\n  color: var(--ts-danger, #ef4444);\r\n  line-height: 1.5;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__error {\r\n  color: var(--ts-danger, #f87171);\r\n}\r\n\r\n.ts-goal-modal__error::before {\r\n  content: \'⚠\';\r\n  font-size: 0.875rem;\r\n}\r\n\r\n.ts-goal-modal__error-list {\r\n  margin: 0.5rem 0 0 0;\r\n  padding-left: 1.25rem;\r\n  list-style: disc;\r\n}\r\n\r\n.ts-goal-modal__error-list li {\r\n  margin: 0.25rem 0;\r\n}\r\n\r\n/* ============================================================\r\n   Toggle Switch\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__toggle {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  padding: var(--ts-spacing-md, 1rem);\r\n  background: var(--ts-bg-secondary, #f8fafc);\r\n  border: 1px solid var(--ts-border-color, #e2e8f0);\r\n  border-radius: var(--ts-radius-lg, 8px);\r\n  cursor: pointer;\r\n  transition: all var(--ts-fast, 120ms);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle {\r\n  background: var(--ts-bg-tertiary, #0f172a);\r\n  border-color: var(--ts-border-color, #1e293b);\r\n}\r\n\r\n.ts-goal-modal__toggle:hover {\r\n  background: var(--ts-surface-hover, #f1f5f9);\r\n  border-color: var(--ts-border-color-hover, #cbd5e1);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle:hover {\r\n  background: var(--ts-surface-hover, #1e293b);\r\n  border-color: var(--ts-border-color-hover, #334155);\r\n}\r\n\r\n.ts-goal-modal__toggle-input {\r\n  width: 20px;\r\n  height: 20px;\r\n  flex-shrink: 0;\r\n  cursor: pointer;\r\n  accent-color: var(--ts-primary, #6366f1);\r\n}\r\n\r\n.ts-goal-modal__toggle-content {\r\n  flex: 1;\r\n}\r\n\r\n.ts-goal-modal__toggle-title {\r\n  font-weight: 600;\r\n  font-size: 0.875rem;\r\n  color: var(--ts-text-primary, #1e293b);\r\n  margin-bottom: 0.125rem;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle-title {\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__toggle-description {\r\n  font-size: 0.75rem;\r\n  color: var(--ts-text-secondary, #64748b);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle-description {\r\n  color: var(--ts-text-secondary, #94a3b8);\r\n}\r\n\r\n/* ============================================================\r\n   Footer\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__footer {\r\n  display: flex;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  justify-content: flex-end;\r\n}\r\n\r\n/* ============================================================\r\n   Responsive Design\r\n   ============================================================ */\r\n\r\n@media (max-width: 768px) {\r\n  .ts-goal-modal__content {\r\n    padding: var(--ts-spacing-sm, 0.75rem);\r\n    gap: var(--ts-spacing-md, 1rem);\r\n  }\r\n\r\n  .ts-goal-modal__section {\r\n    gap: var(--ts-spacing-sm, 0.75rem);\r\n  }\r\n\r\n  .ts-goal-modal__footer {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .ts-goal-modal__footer .ts-btn {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n/* ============================================================\r\n   Accessibility Improvements\r\n   ============================================================ */\r\n\r\n/* Focus visible (keyboard navigation) */\r\n.ts-goal-modal__input:focus-visible,\r\n.ts-goal-modal__textarea:focus-visible,\r\n.ts-goal-modal__select:focus-visible,\r\n.ts-goal-modal__toggle-input:focus-visible {\r\n  outline: 2px solid var(--ts-primary, #6366f1);\r\n  outline-offset: 2px;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input:focus-visible,\r\n[data-theme="dark"] .ts-goal-modal__textarea:focus-visible,\r\n[data-theme="dark"] .ts-goal-modal__select:focus-visible,\r\n[data-theme="dark"] .ts-goal-modal__toggle-input:focus-visible {\r\n  outline-color: var(--ts-primary, #818cf8);\r\n}\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n  .ts-goal-modal__input,\r\n  .ts-goal-modal__textarea,\r\n  .ts-goal-modal__select,\r\n  .ts-goal-modal__toggle {\r\n    border-width: 2px;\r\n  }\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n  .ts-goal-modal__input,\r\n  .ts-goal-modal__textarea,\r\n  .ts-goal-modal__select,\r\n  .ts-goal-modal__toggle {\r\n    transition: none;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},96478:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'.goal-bulk-actions {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 12px 16px;\n  background: var(--ts-bg-secondary);\n  border: 1px solid var(--ts-border-color);\n  border-radius: 8px;\n  margin-bottom: 16px;\n  gap: 16px;\n}\n\n.bulk-actions-left {\n  display: flex;\n  align-items: center;\n}\n\n.bulk-select-all {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin: 0;\n  cursor: pointer;\n  user-select: none;\n}\n\n.bulk-select-all input[type="checkbox"] {\n  margin: 0;\n  cursor: pointer;\n}\n\n.bulk-select-all span {\n  font-weight: 500;\n  color: var(--ts-text-primary);\n}\n\n.bulk-actions-right {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n.bulk-action-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 12px;\n  font-size: 13px;\n  line-height: 1.4;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n  border: 1px solid var(--ts-border-color);\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  cursor: pointer;\n  font-weight: 500;\n}\n\n.bulk-action-btn .dashicons {\n  font-size: 16px;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n}\n\n.bulk-action-btn:hover:not(:disabled) {\n  transform: translateY(-1px);\n  background: var(--ts-bg-hover);\n  border-color: var(--ts-primary-color);\n}\n\n.bulk-action-btn:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  background: var(--ts-bg-secondary);\n  color: var(--ts-text-tertiary);\n}\n\n.bulk-action-btn.bulk-delete {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n\n.bulk-action-btn.bulk-delete:hover {\n  background: #dc3545;\n  color: #fff;\n}\n\n/* Confirmation Dialog */\n.bulk-confirm-dialog-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 100000;\n  backdrop-filter: blur(2px);\n}\n\n.bulk-confirm-dialog {\n  background: var(--ts-bg-primary);\n  border-radius: 8px;\n  padding: 24px;\n  max-width: 500px;\n  width: 90%;\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n}\n\n.bulk-confirm-dialog h3 {\n  margin: 0 0 12px;\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.bulk-confirm-dialog p {\n  margin: 0 0 20px;\n  color: var(--ts-text-secondary);\n  line-height: 1.5;\n}\n\n.bulk-confirm-actions {\n  display: flex;\n  gap: 8px;\n  justify-content: flex-end;\n}\n\n.bulk-confirm-actions .button {\n  min-width: 80px;\n  background: var(--ts-bg-primary);\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .goal-bulk-actions {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .bulk-actions-left,\n  .bulk-actions-right {\n    justify-content: center;\n  }\n\n  .bulk-actions-right {\n    width: 100%;\n  }\n\n  .bulk-action-btn {\n    flex: 1;\n    justify-content: center;\n  }\n}\n\n@media (max-width: 480px) {\n  .bulk-actions-right {\n    flex-direction: column;\n  }\n\n  .bulk-action-btn {\n    width: 100%;\n  }\n\n  .bulk-confirm-dialog {\n    padding: 16px;\n  }\n\n  .bulk-confirm-actions {\n    flex-direction: column-reverse;\n  }\n\n  .bulk-confirm-actions .button {\n    width: 100%;\n  }\n}\n\n/* Dark Theme */\n[data-theme="dark"] .bulk-confirm-dialog {\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n}\n',"",{version:3,sources:["webpack://./src/components/goals/features/bulk-actions/GoalBulkActions.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,kBAAkB;EAClB,kCAAkC;EAClC,wCAAwC;EACxC,kBAAkB;EAClB,mBAAmB;EACnB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,SAAS;EACT,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,eAAe;AACjB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,yBAAyB;EACzB,wCAAwC;EACxC,gCAAgC;EAChC,6BAA6B;EAC7B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,2BAA2B;EAC3B,8BAA8B;EAC9B,qCAAqC;AACvC;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,kCAAkC;EAClC,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;EACnB,WAAW;AACb;;AAEA,wBAAwB;AACxB;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,8BAA8B;EAC9B,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,0BAA0B;AAC5B;;AAEA;EACE,gCAAgC;EAChC,kBAAkB;EAClB,aAAa;EACb,gBAAgB;EAChB,UAAU;EACV,0CAA0C;AAC5C;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;EAC/B,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,gCAAgC;AAClC;;AAEA,sBAAsB;AACtB;EACE;IACE,sBAAsB;IACtB,oBAAoB;EACtB;;EAEA;;IAEE,uBAAuB;EACzB;;EAEA;IACE,WAAW;EACb;;EAEA;IACE,OAAO;IACP,uBAAuB;EACzB;AACF;;AAEA;EACE;IACE,sBAAsB;EACxB;;EAEA;IACE,WAAW;EACb;;EAEA;IACE,aAAa;EACf;;EAEA;IACE,8BAA8B;EAChC;;EAEA;IACE,WAAW;EACb;AACF;;AAEA,eAAe;AACf;EACE,yCAAyC;AAC3C",sourcesContent:['.goal-bulk-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 12px 16px;\r\n  background: var(--ts-bg-secondary);\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 8px;\r\n  margin-bottom: 16px;\r\n  gap: 16px;\r\n}\r\n\r\n.bulk-actions-left {\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.bulk-select-all {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  margin: 0;\r\n  cursor: pointer;\r\n  user-select: none;\r\n}\r\n\r\n.bulk-select-all input[type="checkbox"] {\r\n  margin: 0;\r\n  cursor: pointer;\r\n}\r\n\r\n.bulk-select-all span {\r\n  font-weight: 500;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.bulk-actions-right {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.bulk-action-btn {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 6px 12px;\r\n  font-size: 13px;\r\n  line-height: 1.4;\r\n  border-radius: 4px;\r\n  transition: all 0.2s ease;\r\n  border: 1px solid var(--ts-border-color);\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  cursor: pointer;\r\n  font-weight: 500;\r\n}\r\n\r\n.bulk-action-btn .dashicons {\r\n  font-size: 16px;\r\n  width: 16px;\r\n  height: 16px;\r\n  line-height: 16px;\r\n}\r\n\r\n.bulk-action-btn:hover:not(:disabled) {\r\n  transform: translateY(-1px);\r\n  background: var(--ts-bg-hover);\r\n  border-color: var(--ts-primary-color);\r\n}\r\n\r\n.bulk-action-btn:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n  background: var(--ts-bg-secondary);\r\n  color: var(--ts-text-tertiary);\r\n}\r\n\r\n.bulk-action-btn.bulk-delete {\r\n  color: #dc3545;\r\n  border-color: #dc3545;\r\n}\r\n\r\n.bulk-action-btn.bulk-delete:hover {\r\n  background: #dc3545;\r\n  color: #fff;\r\n}\r\n\r\n/* Confirmation Dialog */\r\n.bulk-confirm-dialog-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 100000;\r\n  backdrop-filter: blur(2px);\r\n}\r\n\r\n.bulk-confirm-dialog {\r\n  background: var(--ts-bg-primary);\r\n  border-radius: 8px;\r\n  padding: 24px;\r\n  max-width: 500px;\r\n  width: 90%;\r\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.bulk-confirm-dialog h3 {\r\n  margin: 0 0 12px;\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.bulk-confirm-dialog p {\r\n  margin: 0 0 20px;\r\n  color: var(--ts-text-secondary);\r\n  line-height: 1.5;\r\n}\r\n\r\n.bulk-confirm-actions {\r\n  display: flex;\r\n  gap: 8px;\r\n  justify-content: flex-end;\r\n}\r\n\r\n.bulk-confirm-actions .button {\r\n  min-width: 80px;\r\n  background: var(--ts-bg-primary);\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 768px) {\r\n  .goal-bulk-actions {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .bulk-actions-left,\r\n  .bulk-actions-right {\r\n    justify-content: center;\r\n  }\r\n\r\n  .bulk-actions-right {\r\n    width: 100%;\r\n  }\r\n\r\n  .bulk-action-btn {\r\n    flex: 1;\r\n    justify-content: center;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .bulk-actions-right {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .bulk-action-btn {\r\n    width: 100%;\r\n  }\r\n\r\n  .bulk-confirm-dialog {\r\n    padding: 16px;\r\n  }\r\n\r\n  .bulk-confirm-actions {\r\n    flex-direction: column-reverse;\r\n  }\r\n\r\n  .bulk-confirm-actions .button {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme="dark"] .bulk-confirm-dialog {\r\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\r\n}\r\n'],sourceRoot:""}]);const i=s}}]);
     1"use strict";(self.webpackChunktracksure_admin=self.webpackChunktracksure_admin||[]).push([[637],{9570:r=>{r.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%2712%27 viewBox=%270 0 12 12%27%3E%3Cpath fill=%27%23666%27 d=%27M6 8L2 4h8z%27/%3E%3C/svg%3E"},12577:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Goals Overview Dashboard Styles\n * \n * Theme-aware styling for the goals dashboard with:\n * - KPI cards grid\n * - Chart visualization\n * - Top goals list\n * - Dark/light theme support\n * - Responsive design\n * \n * @package TrackSure\n * @since 2.1.0\n */\n\n/* ========================================\n   Overview Container\n   ======================================== */\n.ts-goals-overview {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-lg);\n}\n\n/* ========================================\n   KPIs Row\n   ======================================== */\n.ts-goals-overview__kpis {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n  gap: var(--ts-spacing-md);\n}\n\n/* ========================================\n   Chart Card\n   ======================================== */\n.ts-goals-overview__chart {\n  margin-top: var(--ts-spacing-md);\n}\n\n/* ========================================\n   Premium Chart Container\n   ======================================== */\n.ts-simple-chart {\n  position: relative;\n  padding: var(--ts-spacing-lg) var(--ts-spacing-md) var(--ts-spacing-md);\n}\n\n/* Chart Grid Lines - Background Reference */\n.ts-simple-chart::before {\n  content: \'\';\n  position: absolute;\n  top: var(--ts-spacing-lg);\n  left: var(--ts-spacing-md);\n  right: var(--ts-spacing-md);\n  height: 280px;\n  background-image: \n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px);\n  background-size: 100% 25%, 100% 25%, 100% 25%, 100% 25%;\n  background-position: 0 0, 0 25%, 0 50%, 0 75%;\n  background-repeat: no-repeat;\n  opacity: 0.3;\n  pointer-events: none;\n  z-index: 0;\n}\n\n.ts-simple-chart__bars {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  height: 280px;\n  gap: 12px;\n  padding: 0;\n  position: relative;\n  z-index: 1;\n}\n\n.ts-simple-chart__bar-wrapper {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--ts-spacing-sm);\n  height: 100%;\n  justify-content: flex-end;\n  animation: fadeInUp 0.4s ease-out backwards;\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n/* Stagger animation for each bar */\n.ts-simple-chart__bar-wrapper:nth-child(1) { animation-delay: 0.05s; }\n.ts-simple-chart__bar-wrapper:nth-child(2) { animation-delay: 0.1s; }\n.ts-simple-chart__bar-wrapper:nth-child(3) { animation-delay: 0.15s; }\n.ts-simple-chart__bar-wrapper:nth-child(4) { animation-delay: 0.2s; }\n.ts-simple-chart__bar-wrapper:nth-child(5) { animation-delay: 0.25s; }\n.ts-simple-chart__bar-wrapper:nth-child(6) { animation-delay: 0.3s; }\n.ts-simple-chart__bar-wrapper:nth-child(7) { animation-delay: 0.35s; }\n\n.ts-simple-chart__bar {\n  width: 100%;\n  min-height: 20px;\n  background: linear-gradient(\n    180deg, \n    rgba(37, 99, 235, 0.9) 0%,\n    rgba(37, 99, 235, 1) 50%,\n    rgba(29, 78, 216, 1) 100%\n  );\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  position: relative;\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n  padding-top: 8px;\n  cursor: pointer;\n  box-shadow: \n    0 -2px 8px rgba(37, 99, 235, 0.15),\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\n}\n\n.ts-simple-chart__bar::after {\n  content: \'\';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 3px;\n  background: rgba(255, 255, 255, 0.4);\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\n}\n\n.ts-simple-chart__bar:hover {\n  background: linear-gradient(\n    180deg,\n    rgba(16, 185, 129, 0.9) 0%,\n    rgba(16, 185, 129, 1) 50%,\n    rgba(5, 150, 105, 1) 100%\n  );\n  transform: translateY(-4px) scale(1.02);\n  box-shadow: \n    0 -4px 16px rgba(16, 185, 129, 0.3),\n    0 4px 12px rgba(0, 0, 0, 0.1),\n    inset 0 1px 0 rgba(255, 255, 255, 0.3);\n  z-index: 2;\n}\n\n[data-theme="dark"] .ts-simple-chart__bar {\n  background: linear-gradient(\n    180deg,\n    rgba(96, 165, 250, 0.8) 0%,\n    rgba(59, 130, 246, 0.9) 50%,\n    rgba(37, 99, 235, 1) 100%\n  );\n  box-shadow: \n    0 -2px 12px rgba(96, 165, 250, 0.25),\n    inset 0 1px 0 rgba(255, 255, 255, 0.15);\n}\n\n[data-theme="dark"] .ts-simple-chart__bar:hover {\n  background: linear-gradient(\n    180deg,\n    rgba(52, 211, 153, 0.8) 0%,\n    rgba(16, 185, 129, 0.9) 50%,\n    rgba(5, 150, 105, 1) 100%\n  );\n  box-shadow: \n    0 -4px 20px rgba(52, 211, 153, 0.4),\n    0 4px 16px rgba(0, 0, 0, 0.2),\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\n}\n\n.ts-simple-chart__bar-value {\n  font-size: 12px;\n  font-weight: 700;\n  color: white;\n  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n  opacity: 0.9;\n  transition: all 0.2s ease;\n  line-height: 1;\n}\n\n.ts-simple-chart__bar:hover .ts-simple-chart__bar-value {\n  opacity: 1;\n  transform: scale(1.1);\n}\n\n.ts-simple-chart__bar-label {\n  font-size: 11px;\n  font-weight: 500;\n  color: var(--ts-text-secondary);\n  text-align: center;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  max-width: 100%;\n  transition: color 0.2s ease;\n}\n\n.ts-simple-chart__bar-wrapper:hover .ts-simple-chart__bar-label {\n  color: var(--ts-text-primary);\n  font-weight: 600;\n}\n\n/* ========================================\n   Top Goals List\n   ======================================== */\n.ts-goals-overview__top-goals {\n  margin-top: var(--ts-spacing-md);\n}\n\n.ts-top-goals-list {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-sm);\n}\n\n.ts-top-goal {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-md);\n  padding: var(--ts-spacing-md);\n  background: var(--ts-bg);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  transition: all 0.2s ease;\n}\n\n.ts-top-goal:hover {\n  background: var(--ts-surface-hover);\n  border-color: var(--ts-primary);\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n[data-theme="dark"] .ts-top-goal {\n  background: var(--ts-surface-dark);\n}\n\n[data-theme="dark"] .ts-top-goal:hover {\n  background: var(--ts-surface-hover-dark);\n}\n\n.ts-top-goal__rank {\n  flex-shrink: 0;\n  width: 32px;\n  height: 32px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--ts-primary);\n  color: var(--ts-surface);\n  border-radius: 50%;\n  font-size: 13px;\n  font-weight: 700;\n}\n\n.ts-top-goal__info {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-top-goal__name {\n  font-size: 15px;\n  font-weight: 600;\n  color: var(--ts-text);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.ts-top-goal__type {\n  font-size: 13px;\n  color: var(--ts-text-muted);\n  text-transform: capitalize;\n}\n\n.ts-top-goal__metrics {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-md);\n  flex-shrink: 0;\n}\n\n.ts-top-goal__conversions,\n.ts-top-goal__value {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs);\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--ts-text);\n}\n\n.ts-top-goal__conversions {\n  color: var(--ts-success);\n}\n\n.ts-top-goal__value {\n  color: var(--ts-primary);\n}\n\n/* ========================================\n   Empty State\n   ======================================== */\n.ts-empty-state {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\n  text-align: center;\n  gap: var(--ts-spacing-md);\n}\n\n.ts-empty-state h3 {\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0;\n}\n\n.ts-empty-state p {\n  font-size: 14px;\n  color: var(--ts-text-muted);\n  margin: 0;\n  max-width: 400px;\n}\n\n.ts-empty-state--error {\n  color: var(--ts-error);\n}\n\n.ts-empty-state--error h3 {\n  color: var(--ts-error);\n}\n\n/* ========================================\n   Responsive Design\n   ======================================== */\n@media (max-width: 768px) {\n  .ts-goals-overview__kpis {\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  }\n\n  .ts-simple-chart::before {\n    height: 200px;\n  }\n\n  .ts-simple-chart__bars {\n    height: 200px;\n  }\n\n  .ts-simple-chart__bar-label {\n    font-size: 10px;\n  }\n\n  .ts-top-goal {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--ts-spacing-sm);\n  }\n\n  .ts-top-goal__metrics {\n    width: 100%;\n    justify-content: space-between;\n  }\n}\n\n/* ========================================\n   Accessibility\n   ======================================== */\n@media (prefers-reduced-motion: reduce) {\n  .ts-simple-chart__bar,\n  .ts-top-goal {\n    transition: none;\n  }\n}\n\n@media (prefers-contrast: high) {\n  .ts-simple-chart__bar {\n    border: 2px solid currentColor;\n  }\n\n  .ts-top-goal {\n    border-width: 2px;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/views/GoalsOverview.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Goals Overview Dashboard Styles\r\n * \r\n * Theme-aware styling for the goals dashboard with:\r\n * - KPI cards grid\r\n * - Chart visualization\r\n * - Top goals list\r\n * - Dark/light theme support\r\n * - Responsive design\r\n * \r\n * @package TrackSure\r\n * @since 2.1.0\r\n */\r\n\r\n/* ========================================\r\n   Overview Container\r\n   ======================================== */\r\n.ts-goals-overview {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-lg);\r\n}\r\n\r\n/* ========================================\r\n   KPIs Row\r\n   ======================================== */\r\n.ts-goals-overview__kpis {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\r\n  gap: var(--ts-spacing-md);\r\n}\r\n\r\n/* ========================================\r\n   Chart Card\r\n   ======================================== */\r\n.ts-goals-overview__chart {\r\n  margin-top: var(--ts-spacing-md);\r\n}\r\n\r\n/* ========================================\r\n   Premium Chart Container\r\n   ======================================== */\r\n.ts-simple-chart {\r\n  position: relative;\r\n  padding: var(--ts-spacing-lg) var(--ts-spacing-md) var(--ts-spacing-md);\r\n}\r\n\r\n/* Chart Grid Lines - Background Reference */\r\n.ts-simple-chart::before {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: var(--ts-spacing-lg);\r\n  left: var(--ts-spacing-md);\r\n  right: var(--ts-spacing-md);\r\n  height: 280px;\r\n  background-image: \r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--ts-border-color) 1px, transparent 1px);\r\n  background-size: 100% 25%, 100% 25%, 100% 25%, 100% 25%;\r\n  background-position: 0 0, 0 25%, 0 50%, 0 75%;\r\n  background-repeat: no-repeat;\r\n  opacity: 0.3;\r\n  pointer-events: none;\r\n  z-index: 0;\r\n}\r\n\r\n.ts-simple-chart__bars {\r\n  display: flex;\r\n  align-items: flex-end;\r\n  justify-content: space-between;\r\n  height: 280px;\r\n  gap: 12px;\r\n  padding: 0;\r\n  position: relative;\r\n  z-index: 1;\r\n}\r\n\r\n.ts-simple-chart__bar-wrapper {\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm);\r\n  height: 100%;\r\n  justify-content: flex-end;\r\n  animation: fadeInUp 0.4s ease-out backwards;\r\n}\r\n\r\n@keyframes fadeInUp {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* Stagger animation for each bar */\r\n.ts-simple-chart__bar-wrapper:nth-child(1) { animation-delay: 0.05s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(2) { animation-delay: 0.1s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(3) { animation-delay: 0.15s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(4) { animation-delay: 0.2s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(5) { animation-delay: 0.25s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(6) { animation-delay: 0.3s; }\r\n.ts-simple-chart__bar-wrapper:nth-child(7) { animation-delay: 0.35s; }\r\n\r\n.ts-simple-chart__bar {\r\n  width: 100%;\r\n  min-height: 20px;\r\n  background: linear-gradient(\r\n    180deg, \r\n    rgba(37, 99, 235, 0.9) 0%,\r\n    rgba(37, 99, 235, 1) 50%,\r\n    rgba(29, 78, 216, 1) 100%\r\n  );\r\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\r\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n  position: relative;\r\n  display: flex;\r\n  align-items: flex-start;\r\n  justify-content: center;\r\n  padding-top: 8px;\r\n  cursor: pointer;\r\n  box-shadow: \r\n    0 -2px 8px rgba(37, 99, 235, 0.15),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.ts-simple-chart__bar::after {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  height: 3px;\r\n  background: rgba(255, 255, 255, 0.4);\r\n  border-radius: var(--ts-radius-md) var(--ts-radius-md) 0 0;\r\n}\r\n\r\n.ts-simple-chart__bar:hover {\r\n  background: linear-gradient(\r\n    180deg,\r\n    rgba(16, 185, 129, 0.9) 0%,\r\n    rgba(16, 185, 129, 1) 50%,\r\n    rgba(5, 150, 105, 1) 100%\r\n  );\r\n  transform: translateY(-4px) scale(1.02);\r\n  box-shadow: \r\n    0 -4px 16px rgba(16, 185, 129, 0.3),\r\n    0 4px 12px rgba(0, 0, 0, 0.1),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.3);\r\n  z-index: 2;\r\n}\r\n\r\n[data-theme="dark"] .ts-simple-chart__bar {\r\n  background: linear-gradient(\r\n    180deg,\r\n    rgba(96, 165, 250, 0.8) 0%,\r\n    rgba(59, 130, 246, 0.9) 50%,\r\n    rgba(37, 99, 235, 1) 100%\r\n  );\r\n  box-shadow: \r\n    0 -2px 12px rgba(96, 165, 250, 0.25),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.15);\r\n}\r\n\r\n[data-theme="dark"] .ts-simple-chart__bar:hover {\r\n  background: linear-gradient(\r\n    180deg,\r\n    rgba(52, 211, 153, 0.8) 0%,\r\n    rgba(16, 185, 129, 0.9) 50%,\r\n    rgba(5, 150, 105, 1) 100%\r\n  );\r\n  box-shadow: \r\n    0 -4px 20px rgba(52, 211, 153, 0.4),\r\n    0 4px 16px rgba(0, 0, 0, 0.2),\r\n    inset 0 1px 0 rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.ts-simple-chart__bar-value {\r\n  font-size: 12px;\r\n  font-weight: 700;\r\n  color: white;\r\n  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\r\n  opacity: 0.9;\r\n  transition: all 0.2s ease;\r\n  line-height: 1;\r\n}\r\n\r\n.ts-simple-chart__bar:hover .ts-simple-chart__bar-value {\r\n  opacity: 1;\r\n  transform: scale(1.1);\r\n}\r\n\r\n.ts-simple-chart__bar-label {\r\n  font-size: 11px;\r\n  font-weight: 500;\r\n  color: var(--ts-text-secondary);\r\n  text-align: center;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  max-width: 100%;\r\n  transition: color 0.2s ease;\r\n}\r\n\r\n.ts-simple-chart__bar-wrapper:hover .ts-simple-chart__bar-label {\r\n  color: var(--ts-text-primary);\r\n  font-weight: 600;\r\n}\r\n\r\n/* ========================================\r\n   Top Goals List\r\n   ======================================== */\r\n.ts-goals-overview__top-goals {\r\n  margin-top: var(--ts-spacing-md);\r\n}\r\n\r\n.ts-top-goals-list {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-sm);\r\n}\r\n\r\n.ts-top-goal {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-md);\r\n  padding: var(--ts-spacing-md);\r\n  background: var(--ts-bg);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-top-goal:hover {\r\n  background: var(--ts-surface-hover);\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n[data-theme="dark"] .ts-top-goal {\r\n  background: var(--ts-surface-dark);\r\n}\r\n\r\n[data-theme="dark"] .ts-top-goal:hover {\r\n  background: var(--ts-surface-hover-dark);\r\n}\r\n\r\n.ts-top-goal__rank {\r\n  flex-shrink: 0;\r\n  width: 32px;\r\n  height: 32px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: var(--ts-primary);\r\n  color: var(--ts-surface);\r\n  border-radius: 50%;\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-top-goal__info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-top-goal__name {\r\n  font-size: 15px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.ts-top-goal__type {\r\n  font-size: 13px;\r\n  color: var(--ts-text-muted);\r\n  text-transform: capitalize;\r\n}\r\n\r\n.ts-top-goal__metrics {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-md);\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-top-goal__conversions,\r\n.ts-top-goal__value {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n}\r\n\r\n.ts-top-goal__conversions {\r\n  color: var(--ts-success);\r\n}\r\n\r\n.ts-top-goal__value {\r\n  color: var(--ts-primary);\r\n}\r\n\r\n/* ========================================\r\n   Empty State\r\n   ======================================== */\r\n.ts-empty-state {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\r\n  text-align: center;\r\n  gap: var(--ts-spacing-md);\r\n}\r\n\r\n.ts-empty-state h3 {\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0;\r\n}\r\n\r\n.ts-empty-state p {\r\n  font-size: 14px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0;\r\n  max-width: 400px;\r\n}\r\n\r\n.ts-empty-state--error {\r\n  color: var(--ts-error);\r\n}\r\n\r\n.ts-empty-state--error h3 {\r\n  color: var(--ts-error);\r\n}\r\n\r\n/* ========================================\r\n   Responsive Design\r\n   ======================================== */\r\n@media (max-width: 768px) {\r\n  .ts-goals-overview__kpis {\r\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\r\n  }\r\n\r\n  .ts-simple-chart::before {\r\n    height: 200px;\r\n  }\r\n\r\n  .ts-simple-chart__bars {\r\n    height: 200px;\r\n  }\r\n\r\n  .ts-simple-chart__bar-label {\r\n    font-size: 10px;\r\n  }\r\n\r\n  .ts-top-goal {\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: var(--ts-spacing-sm);\r\n  }\r\n\r\n  .ts-top-goal__metrics {\r\n    width: 100%;\r\n    justify-content: space-between;\r\n  }\r\n}\r\n\r\n/* ========================================\r\n   Accessibility\r\n   ======================================== */\r\n@media (prefers-reduced-motion: reduce) {\r\n  .ts-simple-chart__bar,\r\n  .ts-top-goal {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n@media (prefers-contrast: high) {\r\n  .ts-simple-chart__bar {\r\n    border: 2px solid currentColor;\r\n  }\r\n\r\n  .ts-top-goal {\r\n    border-width: 2px;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},21421:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'.goal-filters {\n  background: var(--ts-bg-secondary);\n  border: 1px solid var(--ts-border-color);\n  border-radius: 8px;\n  margin-bottom: 16px;\n}\n\n.filters-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 12px 16px;\n  gap: 16px;\n}\n\n.filters-search {\n  position: relative;\n  flex: 1;\n  max-width: 400px;\n}\n\n.filters-search .dashicons-search {\n  position: absolute;\n  left: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--ts-text-tertiary);\n  font-size: 18px;\n  width: 18px;\n  height: 18px;\n  pointer-events: none;\n}\n\n.search-input {\n  width: 100%;\n  padding: 8px 36px 8px 36px;\n  border: 1px solid var(--ts-border-color);\n  border-radius: 6px;\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  font-size: 14px;\n  transition: all 0.2s ease;\n}\n\n.search-input:focus {\n  outline: none;\n  border-color: var(--ts-primary-color);\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.clear-search {\n  position: absolute;\n  right: 8px;\n  top: 50%;\n  transform: translateY(-50%);\n  background: none;\n  border: none;\n  padding: 4px;\n  cursor: pointer;\n  color: var(--ts-text-tertiary);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n}\n\n.clear-search:hover {\n  background: var(--ts-bg-hover);\n  color: var(--ts-text-primary);\n}\n\n.clear-search .dashicons {\n  font-size: 16px;\n  width: 16px;\n  height: 16px;\n}\n\n.filters-actions {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.filters-toggle {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 12px;\n  border: 1px solid var(--ts-border-color);\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  border-radius: 4px;\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 500;\n  transition: all 0.2s ease;\n}\n\n.filters-toggle .dashicons {\n  font-size: 16px;\n  width: 16px;\n  height: 16px;\n}\n\n.filters-toggle:hover {\n  background: var(--ts-bg-hover);\n  border-color: var(--ts-primary-color);\n  transform: translateY(-1px);\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.filters-toggle.active {\n  background: var(--ts-primary-color);\n  color: white;\n  border-color: var(--ts-primary-color);\n}\n\n.filters-toggle.active:hover {\n  background: var(--ts-primary-hover, #1d4ed8);\n}\n\n.filter-badge {\n  position: absolute;\n  top: -4px;\n  right: -4px;\n  width: 8px;\n  height: 8px;\n  background: #dc3545;\n  border-radius: 50%;\n  border: 2px solid var(--ts-bg-secondary);\n}\n\n.filters-panel {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n  gap: 16px;\n  padding: 16px;\n  border-top: 1px solid var(--ts-border-color);\n  animation: slideDown 0.2s ease;\n}\n\n@keyframes slideDown {\n  from {\n    opacity: 0;\n    transform: translateY(-10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.filters-panel .filter-group {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  width:100%;\n  background: var(--ts-surface);\n}\n\n.filter-group label {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--ts-text-secondary);\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n\n.filter-group select {\n  padding: 8px 12px;\n  border: 1px solid var(--ts-border-color);\n  border-radius: 6px;\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  font-size: 14px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.filter-group select:focus {\n  outline: none;\n  border-color: var(--ts-primary-color);\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.filter-group select:hover {\n  border-color: var(--ts-primary-color);\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .filters-header {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .filters-search {\n    max-width: none;\n  }\n\n  .filters-actions {\n    justify-content: space-between;\n  }\n\n  .filters-panel {\n    grid-template-columns: 1fr;\n  }\n}\n\n@media (max-width: 480px) {\n  .filters-header {\n    padding: 12px;\n  }\n\n  .filters-panel {\n    padding: 12px;\n    gap: 12px;\n  }\n\n  .search-input {\n    font-size: 16px; /* Prevent zoom on iOS */\n  }\n}\n\n/* Dark Theme */\n[data-theme="dark"] .search-input,\n[data-theme="dark"] .filter-group select {\n  background: var(--ts-bg-secondary);\n}\n\n[data-theme="dark"] .search-input:focus,\n[data-theme="dark"] .filter-group select:focus {\n  background: var(--ts-bg-primary);\n}\n',"",{version:3,sources:["webpack://./src/components/goals/features/filters/GoalFilters.css"],names:[],mappings:"AAAA;EACE,kCAAkC;EAClC,wCAAwC;EACxC,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,kBAAkB;EAClB,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,OAAO;EACP,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,2BAA2B;EAC3B,8BAA8B;EAC9B,eAAe;EACf,WAAW;EACX,YAAY;EACZ,oBAAoB;AACtB;;AAEA;EACE,WAAW;EACX,0BAA0B;EAC1B,wCAAwC;EACxC,kBAAkB;EAClB,gCAAgC;EAChC,6BAA6B;EAC7B,eAAe;EACf,yBAAyB;AAC3B;;AAEA;EACE,aAAa;EACb,qCAAqC;EACrC,4CAA4C;AAC9C;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,2BAA2B;EAC3B,gBAAgB;EAChB,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,8BAA8B;EAC9B,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;AACd;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;AACV;;AAEA;EACE,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,wCAAwC;EACxC,gCAAgC;EAChC,6BAA6B;EAC7B,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;AACd;;AAEA;EACE,8BAA8B;EAC9B,qCAAqC;EACrC,2BAA2B;EAC3B,wCAAwC;AAC1C;;AAEA;EACE,mCAAmC;EACnC,YAAY;EACZ,qCAAqC;AACvC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,UAAU;EACV,WAAW;EACX,mBAAmB;EACnB,kBAAkB;EAClB,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,2DAA2D;EAC3D,SAAS;EACT,aAAa;EACb,4CAA4C;EAC5C,8BAA8B;AAChC;;AAEA;EACE;IACE,UAAU;IACV,4BAA4B;EAC9B;EACA;IACE,UAAU;IACV,wBAAwB;EAC1B;AACF;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;EACR,UAAU;EACV,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,+BAA+B;EAC/B,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,iBAAiB;EACjB,wCAAwC;EACxC,kBAAkB;EAClB,gCAAgC;EAChC,6BAA6B;EAC7B,eAAe;EACf,eAAe;EACf,yBAAyB;AAC3B;;AAEA;EACE,aAAa;EACb,qCAAqC;EACrC,4CAA4C;AAC9C;;AAEA;EACE,qCAAqC;AACvC;;AAEA,sBAAsB;AACtB;EACE;IACE,sBAAsB;IACtB,oBAAoB;EACtB;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,8BAA8B;EAChC;;EAEA;IACE,0BAA0B;EAC5B;AACF;;AAEA;EACE;IACE,aAAa;EACf;;EAEA;IACE,aAAa;IACb,SAAS;EACX;;EAEA;IACE,eAAe,EAAE,wBAAwB;EAC3C;AACF;;AAEA,eAAe;AACf;;EAEE,kCAAkC;AACpC;;AAEA;;EAEE,gCAAgC;AAClC",sourcesContent:['.goal-filters {\r\n  background: var(--ts-bg-secondary);\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 8px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.filters-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 12px 16px;\r\n  gap: 16px;\r\n}\r\n\r\n.filters-search {\r\n  position: relative;\r\n  flex: 1;\r\n  max-width: 400px;\r\n}\r\n\r\n.filters-search .dashicons-search {\r\n  position: absolute;\r\n  left: 12px;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  color: var(--ts-text-tertiary);\r\n  font-size: 18px;\r\n  width: 18px;\r\n  height: 18px;\r\n  pointer-events: none;\r\n}\r\n\r\n.search-input {\r\n  width: 100%;\r\n  padding: 8px 36px 8px 36px;\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 6px;\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  font-size: 14px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.search-input:focus {\r\n  outline: none;\r\n  border-color: var(--ts-primary-color);\r\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\r\n}\r\n\r\n.clear-search {\r\n  position: absolute;\r\n  right: 8px;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  background: none;\r\n  border: none;\r\n  padding: 4px;\r\n  cursor: pointer;\r\n  color: var(--ts-text-tertiary);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: 4px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.clear-search:hover {\r\n  background: var(--ts-bg-hover);\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.clear-search .dashicons {\r\n  font-size: 16px;\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n\r\n.filters-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n}\r\n\r\n.filters-toggle {\r\n  position: relative;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 6px 12px;\r\n  border: 1px solid var(--ts-border-color);\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.filters-toggle .dashicons {\r\n  font-size: 16px;\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n\r\n.filters-toggle:hover {\r\n  background: var(--ts-bg-hover);\r\n  border-color: var(--ts-primary-color);\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.filters-toggle.active {\r\n  background: var(--ts-primary-color);\r\n  color: white;\r\n  border-color: var(--ts-primary-color);\r\n}\r\n\r\n.filters-toggle.active:hover {\r\n  background: var(--ts-primary-hover, #1d4ed8);\r\n}\r\n\r\n.filter-badge {\r\n  position: absolute;\r\n  top: -4px;\r\n  right: -4px;\r\n  width: 8px;\r\n  height: 8px;\r\n  background: #dc3545;\r\n  border-radius: 50%;\r\n  border: 2px solid var(--ts-bg-secondary);\r\n}\r\n\r\n.filters-panel {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\r\n  gap: 16px;\r\n  padding: 16px;\r\n  border-top: 1px solid var(--ts-border-color);\r\n  animation: slideDown 0.2s ease;\r\n}\r\n\r\n@keyframes slideDown {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(-10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.filters-panel .filter-group {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 6px;\r\n  width:100%;\r\n  background: var(--ts-surface);\r\n}\r\n\r\n.filter-group label {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-secondary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n}\r\n\r\n.filter-group select {\r\n  padding: 8px 12px;\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 6px;\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  font-size: 14px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.filter-group select:focus {\r\n  outline: none;\r\n  border-color: var(--ts-primary-color);\r\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\r\n}\r\n\r\n.filter-group select:hover {\r\n  border-color: var(--ts-primary-color);\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 768px) {\r\n  .filters-header {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .filters-search {\r\n    max-width: none;\r\n  }\r\n\r\n  .filters-actions {\r\n    justify-content: space-between;\r\n  }\r\n\r\n  .filters-panel {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .filters-header {\r\n    padding: 12px;\r\n  }\r\n\r\n  .filters-panel {\r\n    padding: 12px;\r\n    gap: 12px;\r\n  }\r\n\r\n  .search-input {\r\n    font-size: 16px; /* Prevent zoom on iOS */\r\n  }\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme="dark"] .search-input,\r\n[data-theme="dark"] .filter-group select {\r\n  background: var(--ts-bg-secondary);\r\n}\r\n\r\n[data-theme="dark"] .search-input:focus,\r\n[data-theme="dark"] .filter-group select:focus {\r\n  background: var(--ts-bg-primary);\r\n}\r\n'],sourceRoot:""}]);const i=s},27691:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'.goal-import-modal {\n  background: var(--ts-bg-primary);\n  border-radius: 12px;\n  max-width: 600px;\n  width: 90%;\n  max-height: 80vh;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\n}\n\n.goal-import-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 20px 24px;\n  border-bottom: 1px solid var(--ts-border-color);\n}\n\n.goal-import-header h2 {\n  margin: 0;\n  font-size: 20px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-close {\n  background: none;\n  border: none;\n  padding: 4px;\n  cursor: pointer;\n  color: var(--ts-text-tertiary);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n}\n\n.goal-import-close:hover {\n  background: var(--ts-bg-hover);\n  color: var(--ts-text-primary);\n}\n\n.goal-import-close .dashicons {\n  font-size: 20px;\n  width: 20px;\n  height: 20px;\n}\n\n.goal-import-body {\n  padding: 24px;\n  overflow-y: auto;\n  flex: 1;\n}\n\n/* Dropzone */\n.goal-import-dropzone {\n  border: 2px dashed var(--ts-border-color);\n  border-radius: 8px;\n  padding: 48px 24px;\n  text-align: center;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  background: var(--ts-bg-secondary);\n}\n\n.goal-import-dropzone:hover,\n.goal-import-dropzone.dragging {\n  border-color: var(--ts-primary-color);\n  background: var(--ts-primary-soft);\n}\n\n.goal-import-dropzone .dashicons {\n  font-size: 48px;\n  width: 48px;\n  height: 48px;\n  color: var(--ts-text-tertiary);\n  margin-bottom: 16px;\n}\n\n.goal-import-dropzone h3 {\n  margin: 0 0 8px;\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-dropzone p {\n  margin: 0;\n  color: var(--ts-text-secondary);\n  font-size: 14px;\n}\n\n/* Preview */\n.goal-import-preview h3 {\n  margin: 0 0 12px;\n  font-size: 16px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-preview > p {\n  margin: 0 0 16px;\n  color: var(--ts-text-secondary);\n}\n\n.preview-list {\n  max-height: 400px;\n  overflow-y: auto;\n  border: 1px solid var(--ts-border-color);\n  border-radius: 8px;\n  background: var(--ts-bg-secondary);\n  margin-bottom: 20px;\n}\n\n.preview-item {\n  padding: 16px;\n  border-bottom: 1px solid var(--ts-border-color);\n}\n\n.preview-item:last-child {\n  border-bottom: none;\n}\n\n.preview-item-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n  gap: 12px;\n}\n\n.preview-item-header strong {\n  font-size: 15px;\n  color: var(--ts-text-primary);\n  flex: 1;\n}\n\n.preview-badge {\n  display: inline-block;\n  padding: 4px 10px;\n  background: var(--ts-primary-soft);\n  color: var(--ts-primary-color);\n  border-radius: 12px;\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: capitalize;\n}\n\n.preview-description {\n  margin: 0 0 8px;\n  color: var(--ts-text-secondary);\n  font-size: 13px;\n  line-height: 1.5;\n}\n\n.preview-meta {\n  display: flex;\n  gap: 12px;\n  font-size: 12px;\n  color: var(--ts-text-tertiary);\n}\n\n.preview-meta span {\n  text-transform: capitalize;\n}\n\n/* Actions */\n.goal-import-actions {\n  display: flex;\n  gap: 12px;\n  justify-content: flex-end;\n}\n\n.goal-import-actions .button {\n  min-width: 100px;\n}\n\n/* Result */\n.goal-import-result {\n  text-align: center;\n  padding: 24px;\n}\n\n.goal-import-result .dashicons {\n  font-size: 64px;\n  width: 64px;\n  height: 64px;\n  margin-bottom: 16px;\n}\n\n.goal-import-result.success .dashicons {\n  color: #10b981;\n}\n\n.goal-import-result.error .dashicons {\n  color: #dc3545;\n}\n\n.goal-import-result h3 {\n  margin: 0 0 12px;\n  font-size: 20px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.goal-import-result p {\n  margin: 0 0 20px;\n  color: var(--ts-text-secondary);\n}\n\n.error-list {\n  text-align: left;\n  background: #fef2f2;\n  border: 1px solid #fecaca;\n  border-radius: 6px;\n  padding: 12px 16px;\n  margin-bottom: 20px;\n}\n\n[data-theme="dark"] .error-list {\n  background: rgba(220, 53, 69, 0.1);\n  border-color: rgba(220, 53, 69, 0.3);\n}\n\n.error-message {\n  margin: 6px 0;\n  color: #dc3545;\n  font-size: 13px;\n  line-height: 1.5;\n}\n\n/* Responsive */\n@media (max-width: 640px) {\n  .goal-import-modal {\n    max-width: 100%;\n    width: 100%;\n    height: 100%;\n    max-height: 100vh;\n    border-radius: 0;\n  }\n\n  .goal-import-dropzone {\n    padding: 32px 16px;\n  }\n\n  .goal-import-actions {\n    flex-direction: column-reverse;\n  }\n\n  .goal-import-actions .button {\n    width: 100%;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/features/import/GoalImport.css"],names:[],mappings:"AAAA;EACE,gCAAgC;EAChC,mBAAmB;EACnB,gBAAgB;EAChB,UAAU;EACV,gBAAgB;EAChB,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,0CAA0C;AAC5C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,kBAAkB;EAClB,+CAA+C;AACjD;;AAEA;EACE,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,8BAA8B;EAC9B,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;AACd;;AAEA;EACE,aAAa;EACb,gBAAgB;EAChB,OAAO;AACT;;AAEA,aAAa;AACb;EACE,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,eAAe;EACf,yBAAyB;EACzB,kCAAkC;AACpC;;AAEA;;EAEE,qCAAqC;EACrC,kCAAkC;AACpC;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,8BAA8B;EAC9B,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,SAAS;EACT,+BAA+B;EAC/B,eAAe;AACjB;;AAEA,YAAY;AACZ;EACE,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;EAChB,wCAAwC;EACxC,kBAAkB;EAClB,kCAAkC;EAClC,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,+CAA+C;AACjD;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,kBAAkB;EAClB,SAAS;AACX;;AAEA;EACE,eAAe;EACf,6BAA6B;EAC7B,OAAO;AACT;;AAEA;EACE,qBAAqB;EACrB,iBAAiB;EACjB,kCAAkC;EAClC,8BAA8B;EAC9B,mBAAmB;EACnB,eAAe;EACf,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;EACE,eAAe;EACf,+BAA+B;EAC/B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,SAAS;EACT,eAAe;EACf,8BAA8B;AAChC;;AAEA;EACE,0BAA0B;AAC5B;;AAEA,YAAY;AACZ;EACE,aAAa;EACb,SAAS;EACT,yBAAyB;AAC3B;;AAEA;EACE,gBAAgB;AAClB;;AAEA,WAAW;AACX;EACE,kBAAkB;EAClB,aAAa;AACf;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,yBAAyB;EACzB,kBAAkB;EAClB,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,kCAAkC;EAClC,oCAAoC;AACtC;;AAEA;EACE,aAAa;EACb,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA,eAAe;AACf;EACE;IACE,eAAe;IACf,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,gBAAgB;EAClB;;EAEA;IACE,kBAAkB;EACpB;;EAEA;IACE,8BAA8B;EAChC;;EAEA;IACE,WAAW;EACb;AACF",sourcesContent:['.goal-import-modal {\r\n  background: var(--ts-bg-primary);\r\n  border-radius: 12px;\r\n  max-width: 600px;\r\n  width: 90%;\r\n  max-height: 80vh;\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.goal-import-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 20px 24px;\r\n  border-bottom: 1px solid var(--ts-border-color);\r\n}\r\n\r\n.goal-import-header h2 {\r\n  margin: 0;\r\n  font-size: 20px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-close {\r\n  background: none;\r\n  border: none;\r\n  padding: 4px;\r\n  cursor: pointer;\r\n  color: var(--ts-text-tertiary);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: 4px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.goal-import-close:hover {\r\n  background: var(--ts-bg-hover);\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-close .dashicons {\r\n  font-size: 20px;\r\n  width: 20px;\r\n  height: 20px;\r\n}\r\n\r\n.goal-import-body {\r\n  padding: 24px;\r\n  overflow-y: auto;\r\n  flex: 1;\r\n}\r\n\r\n/* Dropzone */\r\n.goal-import-dropzone {\r\n  border: 2px dashed var(--ts-border-color);\r\n  border-radius: 8px;\r\n  padding: 48px 24px;\r\n  text-align: center;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  background: var(--ts-bg-secondary);\r\n}\r\n\r\n.goal-import-dropzone:hover,\r\n.goal-import-dropzone.dragging {\r\n  border-color: var(--ts-primary-color);\r\n  background: var(--ts-primary-soft);\r\n}\r\n\r\n.goal-import-dropzone .dashicons {\r\n  font-size: 48px;\r\n  width: 48px;\r\n  height: 48px;\r\n  color: var(--ts-text-tertiary);\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.goal-import-dropzone h3 {\r\n  margin: 0 0 8px;\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-dropzone p {\r\n  margin: 0;\r\n  color: var(--ts-text-secondary);\r\n  font-size: 14px;\r\n}\r\n\r\n/* Preview */\r\n.goal-import-preview h3 {\r\n  margin: 0 0 12px;\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-preview > p {\r\n  margin: 0 0 16px;\r\n  color: var(--ts-text-secondary);\r\n}\r\n\r\n.preview-list {\r\n  max-height: 400px;\r\n  overflow-y: auto;\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 8px;\r\n  background: var(--ts-bg-secondary);\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.preview-item {\r\n  padding: 16px;\r\n  border-bottom: 1px solid var(--ts-border-color);\r\n}\r\n\r\n.preview-item:last-child {\r\n  border-bottom: none;\r\n}\r\n\r\n.preview-item-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 8px;\r\n  gap: 12px;\r\n}\r\n\r\n.preview-item-header strong {\r\n  font-size: 15px;\r\n  color: var(--ts-text-primary);\r\n  flex: 1;\r\n}\r\n\r\n.preview-badge {\r\n  display: inline-block;\r\n  padding: 4px 10px;\r\n  background: var(--ts-primary-soft);\r\n  color: var(--ts-primary-color);\r\n  border-radius: 12px;\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  text-transform: capitalize;\r\n}\r\n\r\n.preview-description {\r\n  margin: 0 0 8px;\r\n  color: var(--ts-text-secondary);\r\n  font-size: 13px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.preview-meta {\r\n  display: flex;\r\n  gap: 12px;\r\n  font-size: 12px;\r\n  color: var(--ts-text-tertiary);\r\n}\r\n\r\n.preview-meta span {\r\n  text-transform: capitalize;\r\n}\r\n\r\n/* Actions */\r\n.goal-import-actions {\r\n  display: flex;\r\n  gap: 12px;\r\n  justify-content: flex-end;\r\n}\r\n\r\n.goal-import-actions .button {\r\n  min-width: 100px;\r\n}\r\n\r\n/* Result */\r\n.goal-import-result {\r\n  text-align: center;\r\n  padding: 24px;\r\n}\r\n\r\n.goal-import-result .dashicons {\r\n  font-size: 64px;\r\n  width: 64px;\r\n  height: 64px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.goal-import-result.success .dashicons {\r\n  color: #10b981;\r\n}\r\n\r\n.goal-import-result.error .dashicons {\r\n  color: #dc3545;\r\n}\r\n\r\n.goal-import-result h3 {\r\n  margin: 0 0 12px;\r\n  font-size: 20px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.goal-import-result p {\r\n  margin: 0 0 20px;\r\n  color: var(--ts-text-secondary);\r\n}\r\n\r\n.error-list {\r\n  text-align: left;\r\n  background: #fef2f2;\r\n  border: 1px solid #fecaca;\r\n  border-radius: 6px;\r\n  padding: 12px 16px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n[data-theme="dark"] .error-list {\r\n  background: rgba(220, 53, 69, 0.1);\r\n  border-color: rgba(220, 53, 69, 0.3);\r\n}\r\n\r\n.error-message {\r\n  margin: 6px 0;\r\n  color: #dc3545;\r\n  font-size: 13px;\r\n  line-height: 1.5;\r\n}\r\n\r\n/* Responsive */\r\n@media (max-width: 640px) {\r\n  .goal-import-modal {\r\n    max-width: 100%;\r\n    width: 100%;\r\n    height: 100%;\r\n    max-height: 100vh;\r\n    border-radius: 0;\r\n  }\r\n\r\n  .goal-import-dropzone {\r\n    padding: 32px 16px;\r\n  }\r\n\r\n  .goal-import-actions {\r\n    flex-direction: column-reverse;\r\n  }\r\n\r\n  .goal-import-actions .button {\r\n    width: 100%;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},31637:(r,n,e)=>{e.r(n),e.d(n,{default:()=>mr});var a=e(74848),t=e(41594),o=e(37090),s=e(82381),i=e(87387);const A=["pageview","click","form_submit","scroll_depth","time_on_page","engagement","video_play","download","outbound_link","custom_event"],l=["equals","not_equals","contains","not_contains","starts_with","ends_with","greater_than","less_than","greater_than_or_equal","less_than_or_equal","matches_regex"],d=["none","fixed","dynamic"],c=["once","session","unlimited"];var p=e(87318),g=e(84013),m=e(51481),C=e(45767);const u={engagement:{id:"engagement",label:"Engagement",description:"Track user interactions and content engagement",icon:"MousePointer",color:"var(--color-primary)"},leads:{id:"leads",label:"Lead Generation",description:"Capture contact requests, forms, and inquiries",icon:"Users",color:"var(--color-success)"},ecommerce:{id:"ecommerce",label:"Ecommerce",description:"Track purchases, cart actions, and revenue",icon:"ShoppingCart",color:"var(--color-warning)"},content:{id:"content",label:"Content",description:"Monitor content consumption and downloads",icon:"FileText",color:"var(--color-info)"}},E=[{id:"eng_time_on_page",name:"Deep Content Engagement",description:"Visitors who spent 3+ minutes on a page",event_name:"page_exit",trigger_type:"time_on_page",category:"engagement",priority:1,recommended:!0,icon:"Timer",conditions:[{param:"time_seconds",operator:"greater_than_or_equal",value:180}],trigger_config:{time_seconds:180}},{id:"eng_scroll_depth",name:"Read to Bottom",description:"Visitors who scrolled to 80% of page",event_name:"scroll",trigger_type:"scroll_depth",category:"engagement",priority:2,recommended:!0,icon:"ArrowDown",conditions:[{param:"scroll_depth",operator:"greater_than_or_equal",value:80}],trigger_config:{scroll_depth:80}},{id:"eng_video_complete",name:"Video Completed",description:"Track video completion",event_name:"video_complete",trigger_type:"video_play",category:"engagement",priority:3,recommended:!0,icon:"Film",conditions:[]},{id:"eng_outbound_click",name:"Outbound Link Click",description:"Track external link clicks (affiliate, partner sites)",event_name:"outbound_click",trigger_type:"outbound_link",category:"engagement",priority:4,recommended:!1,icon:"ExternalLink",conditions:[]},{id:"eng_social_share",name:"Social Share Click",description:"Track content shares on social media",event_name:"click",trigger_type:"click",category:"engagement",priority:5,recommended:!1,icon:"Share2",conditions:[{param:"element_class",operator:"contains",value:"share"}],trigger_config:{css_selector:".share-button, .social-share"}},{id:"eng_search",name:"Site Search Used",description:"Track what visitors are searching for",event_name:"search",trigger_type:"custom_event",category:"engagement",priority:6,recommended:!1,icon:"Search",conditions:[]},{id:"eng_pricing_view",name:"Pricing Page Viewed",description:"High-intent visitors checking pricing",event_name:"page_view",trigger_type:"pageview",category:"engagement",priority:7,recommended:!0,icon:"DollarSign",conditions:[{param:"page_url",operator:"contains",value:"/pricing"}]},{id:"lead_contact_form",name:"Contact Form Submitted",description:"Track contact form submissions",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:1,recommended:!0,icon:"Mail",conditions:[{param:"form_name",operator:"contains",value:"contact"}],trigger_config:{form_id:"contact-form"},value_type:"fixed",typical_value:50},{id:"lead_phone_click",name:"Phone Number Clicked",description:"Track when visitors click your phone number",event_name:"click",trigger_type:"click",category:"leads",priority:2,recommended:!0,icon:"Phone",conditions:[{param:"element_type",operator:"equals",value:"tel"}],trigger_config:{css_selector:'a[href^="tel:"]'},value_type:"fixed",typical_value:60},{id:"lead_quote_request",name:"Quote Requested",description:"Track quote or estimate requests",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:3,recommended:!0,icon:"FileText",conditions:[{param:"form_name",operator:"contains",value:"quote"}],value_type:"fixed",typical_value:75},{id:"lead_email_click",name:"Email Link Clicked",description:"Track when visitors click your email address",event_name:"click",trigger_type:"click",category:"leads",priority:4,recommended:!1,icon:"AtSign",conditions:[{param:"element_type",operator:"equals",value:"mailto"}],trigger_config:{css_selector:'a[href^="mailto:"]'},value_type:"fixed",typical_value:40},{id:"lead_appointment",name:"Appointment Booked",description:"Track appointment/meeting bookings",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:5,recommended:!0,icon:"Calendar",conditions:[{param:"form_name",operator:"contains",value:"appointment"}],value_type:"fixed",typical_value:100},{id:"lead_chat_started",name:"Live Chat Started",description:"Track when visitors initiate live chat",event_name:"chat_started",trigger_type:"custom_event",category:"leads",priority:6,recommended:!1,icon:"MessageCircle",conditions:[],value_type:"fixed",typical_value:45},{id:"lead_callback_request",name:"Callback Requested",description:"Track callback form submissions",event_name:"form_submit",trigger_type:"form_submit",category:"leads",priority:7,recommended:!1,icon:"PhoneCall",conditions:[{param:"form_name",operator:"contains",value:"callback"}],value_type:"fixed",typical_value:55},{id:"ecom_purchase",name:"Purchase Completed",description:"Track completed transactions and revenue",event_name:"purchase",trigger_type:"custom_event",category:"ecommerce",priority:1,recommended:!0,icon:"DollarSign",conditions:[],value_type:"dynamic"},{id:"ecom_add_to_cart",name:"Add to Cart",description:"Track product additions to cart",event_name:"add_to_cart",trigger_type:"custom_event",category:"ecommerce",priority:2,recommended:!0,icon:"ShoppingCart",conditions:[]},{id:"ecom_checkout_start",name:"Checkout Started",description:"Track when customers begin checkout",event_name:"begin_checkout",trigger_type:"custom_event",category:"ecommerce",priority:3,recommended:!0,icon:"CreditCard",conditions:[]},{id:"ecom_product_view",name:"Product Viewed",description:"Track product page views",event_name:"view_item",trigger_type:"custom_event",category:"ecommerce",priority:4,recommended:!1,icon:"Package",conditions:[]},{id:"ecom_view_cart",name:"Cart Viewed",description:"Track cart page views",event_name:"view_cart",trigger_type:"custom_event",category:"ecommerce",priority:5,recommended:!1,icon:"Eye",conditions:[]},{id:"ecom_payment_info",name:"Payment Info Added",description:"Track when payment details are entered",event_name:"add_payment_info",trigger_type:"custom_event",category:"ecommerce",priority:6,recommended:!1,icon:"Lock",conditions:[]},{id:"ecom_remove_from_cart",name:"Remove from Cart",description:"Track cart abandonment signals",event_name:"remove_from_cart",trigger_type:"custom_event",category:"ecommerce",priority:7,recommended:!1,icon:"XCircle",conditions:[]},{id:"content_newsletter",name:"Newsletter Signup",description:"Track newsletter subscriptions",event_name:"form_submit",trigger_type:"form_submit",category:"content",priority:1,recommended:!0,icon:"Newspaper",conditions:[{param:"form_name",operator:"contains",value:"newsletter"}],trigger_config:{form_id:"newsletter-form"},value_type:"fixed",typical_value:10},{id:"content_download",name:"Resource Downloaded",description:"Track PDF, ebook, or template downloads",event_name:"file_download",trigger_type:"download",category:"content",priority:2,recommended:!0,icon:"Download",conditions:[],value_type:"fixed",typical_value:15},{id:"content_ebook",name:"Ebook Downloaded",description:"Track ebook or guide downloads",event_name:"file_download",trigger_type:"download",category:"content",priority:3,recommended:!0,icon:"BookOpen",conditions:[{param:"file_name",operator:"contains",value:".pdf"}],value_type:"fixed",typical_value:20},{id:"content_case_study",name:"Case Study Viewed",description:"Track case study page views",event_name:"page_view",trigger_type:"pageview",category:"content",priority:4,recommended:!1,icon:"BarChart2",conditions:[{param:"page_url",operator:"contains",value:"/case-stud"}]},{id:"content_webinar",name:"Webinar Registration",description:"Track webinar signups",event_name:"form_submit",trigger_type:"form_submit",category:"content",priority:5,recommended:!1,icon:"Video",conditions:[{param:"form_name",operator:"contains",value:"webinar"}],value_type:"fixed",typical_value:30},{id:"content_whitepaper",name:"Whitepaper Downloaded",description:"Track whitepaper downloads",event_name:"file_download",trigger_type:"download",category:"content",priority:6,recommended:!1,icon:"FileDown",conditions:[{param:"file_name",operator:"contains",value:"whitepaper"}],value_type:"fixed",typical_value:25},{id:"content_portfolio",name:"Portfolio Viewed",description:"Track portfolio or work samples page views",event_name:"page_view",trigger_type:"pageview",category:"content",priority:7,recommended:!1,icon:"Folder",conditions:[{param:"page_url",operator:"contains",value:"/portfolio"}]}],x=r=>E.filter(n=>n.category===r);var v=e(66557);const h={pageview:[{value:"page_url",label:"Page URL",example:"/pricing",description:"Full page URL (e.g., https://site.com/pricing or /pricing)"},{value:"page_path",label:"Page Path",example:"/products",description:"URL path only (without domain)"},{value:"page_title",label:"Page Title",example:"Pricing",description:"Browser page title"}],form_submit:[{value:"form_id",label:"Form ID",example:"gform_3",description:"HTML form ID attribute (e.g., gform_3, wpforms-form-1245)"},{value:"form_name",label:"Form Name",example:"contact",description:"Form name or type (e.g., contact, inquiry, newsletter)"},{value:"form_builder",label:"Form Builder",example:"gravity_forms",description:"Form builder plugin (gravity_forms, wpforms, contact_form_7, etc.)"},{value:"form_type",label:"Form Type",example:"contact",description:"Form category (contact, newsletter, inquiry, etc.)"}],click:[{value:"element_text",label:"Button/Link Text",example:"Buy Now",description:"Text inside the clicked element"},{value:"element_id",label:"Element ID",example:"cta-button",description:"HTML ID attribute of the element"},{value:"element_class",label:"Element Class",example:"btn-primary",description:"CSS class of the element"},{value:"element_type",label:"Element Type",example:"tel",description:"Link type (tel, mailto, etc.)"},{value:"link_url",label:"Link URL",example:"https://example.com",description:"Destination URL for links"}],scroll_depth:[{value:"scroll_depth",label:"Scroll Depth %",example:"75",description:"Scroll percentage (0-100)"},{value:"page_url",label:"Page URL",example:"/blog",description:"Track scroll on specific pages"}],time_on_page:[{value:"time_seconds",label:"Time (seconds)",example:"180",description:"Time spent on page in seconds"},{value:"page_url",label:"Page URL",example:"/blog",description:"Track time on specific pages"}],engagement:[{value:"scroll_depth",label:"Scroll Depth %",example:"50",description:"Minimum scroll percentage"},{value:"time_seconds",label:"Time (seconds)",example:"120",description:"Minimum time on page"},{value:"page_url",label:"Page URL",example:"/blog",description:"Track engagement on specific pages"}],video_play:[{value:"video_title",label:"Video Title",example:"product demo",description:"Video title or name"},{value:"video_url",label:"Video URL",example:"youtube.com/watch?v=",description:"Video source URL"},{value:"video_type",label:"Video Type",example:"youtube",description:"Video platform (html5, youtube, vimeo)"}],download:[{value:"file_name",label:"File Name",example:"pricing-guide",description:"Name of downloaded file"},{value:"file_type",label:"File Type",example:"pdf",description:"File extension (pdf, doc, jpg, etc.)"},{value:"link_url",label:"Download URL",example:"/downloads/",description:"Download link URL"}],outbound_link:[{value:"link_domain",label:"Link Domain",example:"partner.com",description:"External website domain"},{value:"link_url",label:"Link URL",example:"https://partner.com",description:"Full external URL"},{value:"link_text",label:"Link Text",example:"Visit Partner",description:"Text of the clicked link"}],custom_event:[{value:"event_name",label:"Event Name",example:"calculator_completed",description:"Custom event identifier"},{value:"page_url",label:"Page URL",example:"/pricing",description:"Full page URL where event fires"},{value:"page_path",label:"Page Path",example:"/products",description:"URL path only (without domain)"},{value:"page_title",label:"Page Title",example:"Pricing",description:"Browser page title when event fires"},{value:"referrer",label:"Referrer URL",example:"https://google.com",description:"Referring page URL"}]},b=[{value:"equals",label:"Equals",description:"Exact match (case-sensitive)"},{value:"not_equals",label:"Not equals",description:"Does not exactly match"},{value:"contains",label:"Contains",description:"Partial match (most flexible)"},{value:"not_contains",label:"Does not contain",description:"Excludes partial match"},{value:"starts_with",label:"Starts with",description:"Begins with the value"},{value:"ends_with",label:"Ends with",description:"Finishes with the value"},{value:"matches_regex",label:"Matches regex",description:"Advanced pattern matching"},{value:"greater_than",label:"Greater than",description:"For numbers only"},{value:"greater_than_or_equal",label:"Greater than or equal",description:"For numbers only"},{value:"less_than",label:"Less than",description:"For numbers only"},{value:"less_than_or_equal",label:"Less than or equal",description:"For numbers only"}],B=({conditions:r,onChange:n,triggerType:e,matchLogic:t="all",onMatchLogicChange:o})=>{const s=h[e]||[],i=(e,a,t)=>{const o=[...r];o[e]={...o[e],[a]:t},n(o)},A=r=>""!==r&&"__custom__"!==r&&!s.some(n=>n.value===r),l=r=>A(r)?"__custom__":r;return(0,a.jsxs)("div",{className:"ts-condition-builder",children:[(0,a.jsxs)("div",{className:"ts-condition-builder-header",children:[(0,a.jsx)("h4",{style:{margin:0},children:"Conditions"}),0===r.length&&(0,a.jsxs)("p",{style:{margin:"8px 0",color:"#666",fontSize:"13px"},children:["💡 No conditions = Goal will fire for ",(0,a.jsx)("strong",{children:"ALL"})," ",e," events"]})]}),(0,a.jsx)("div",{className:"ts-conditions-list",children:r.map((t,o)=>{const d=(c=t.param,s.find(r=>r.value===c));var c;return(0,a.jsxs)("div",{className:"ts-condition-row",style:{display:"grid",gridTemplateColumns:"1fr 1fr 1.5fr auto",gap:"12px",alignItems:"start",padding:"16px",background:"#f9fafb",borderRadius:"8px",marginBottom:"12px",border:"1px solid #e5e7eb"},children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"6px",fontSize:"13px",fontWeight:500},children:"Parameter"}),(0,a.jsxs)("select",{value:l(t.param),onChange:r=>{const n=r.target.value;i(o,"param","__custom__"===n?"":n)},style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px"},children:[(0,a.jsx)("option",{value:"",children:"Select parameter..."}),s.map(r=>(0,a.jsx)("option",{value:r.value,children:r.label},r.value)),"custom_event"===e&&(0,a.jsx)("option",{value:"__custom__",children:"✏️ Custom Data Key..."})]}),"custom_event"===e&&("__custom__"===l(t.param)||A(t.param))&&(0,a.jsx)("input",{type:"text",value:A(t.param)?t.param:"",onChange:r=>i(o,"param",r.target.value),placeholder:"e.g. product_id, amount, category",style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px",marginTop:"6px",background:"#fefce8"}}),d&&(0,a.jsx)("p",{style:{margin:"4px 0 0",fontSize:"12px",color:"#6b7280"},children:d.description}),"custom_event"===e&&A(t.param)&&(0,a.jsxs)("p",{style:{margin:"4px 0 0",fontSize:"12px",color:"#92400e"},children:["Matches key “",(0,a.jsx)("strong",{children:t.param}),"” from fireCustomEvent() data"]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"6px",fontSize:"13px",fontWeight:500},children:"Operator"}),(0,a.jsx)("select",{value:t.operator,onChange:r=>i(o,"operator",r.target.value),style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px"},children:b.map(r=>(0,a.jsx)("option",{value:r.value,title:r.description,children:r.label},r.value))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"6px",fontSize:"13px",fontWeight:500},children:"Value"}),(0,a.jsx)("input",{type:"text",value:t.value,onChange:r=>i(o,"value",r.target.value),placeholder:d?.example||"Enter value...",style:{width:"100%",padding:"8px 12px",borderRadius:"6px",border:"1px solid #d1d5db",fontSize:"14px"}}),d&&(0,a.jsxs)("p",{style:{margin:"4px 0 0",fontSize:"12px",color:"#6b7280"},children:["Example: ",(0,a.jsx)("code",{style:{background:"#e5e7eb",padding:"2px 6px",borderRadius:"4px"},children:d.example})]})]}),(0,a.jsx)("div",{style:{paddingTop:"28px"},children:(0,a.jsx)("button",{onClick:()=>(e=>{n(r.filter((r,n)=>n!==e))})(o),style:{padding:"8px 12px",background:"#ef4444",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontSize:"14px",fontWeight:500},title:"Remove condition",children:"🗑️"})})]},o)})}),(0,a.jsx)("button",{onClick:()=>{n([...r,{param:"",operator:"contains",value:""}])},style:{padding:"10px 16px",background:"#3b82f6",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontSize:"14px",fontWeight:500,marginBottom:"16px"},children:"➕ Add Condition"}),r.length>1&&o&&(0,a.jsxs)("div",{style:{padding:"16px",background:"#eff6ff",borderRadius:"8px",border:"1px solid #bfdbfe"},children:[(0,a.jsx)("label",{style:{display:"block",marginBottom:"8px",fontSize:"13px",fontWeight:500},children:"Match Logic"}),(0,a.jsxs)("div",{style:{display:"flex",gap:"12px"},children:[(0,a.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"6px",cursor:"pointer"},children:[(0,a.jsx)("input",{type:"radio",name:"match_logic",value:"all",checked:"all"===t,onChange:r=>o(r.target.value)}),(0,a.jsxs)("span",{style:{fontSize:"14px"},children:[(0,a.jsx)("strong",{children:"ALL"})," conditions must match (AND)"]})]}),(0,a.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"6px",cursor:"pointer"},children:[(0,a.jsx)("input",{type:"radio",name:"match_logic",value:"any",checked:"any"===t,onChange:r=>o(r.target.value)}),(0,a.jsxs)("span",{style:{fontSize:"14px"},children:[(0,a.jsx)("strong",{children:"ANY"})," condition can match (OR)"]})]})]}),(0,a.jsx)("p",{style:{margin:"8px 0 0",fontSize:"12px",color:"#1e40af"},children:"all"===t?"✓ Goal fires only when ALL conditions are satisfied":"✓ Goal fires when ANY ONE condition is satisfied"})]}),s.length>0&&(0,a.jsxs)("details",{style:{marginTop:"16px",fontSize:"13px",color:"#6b7280"},children:[(0,a.jsxs)("summary",{style:{cursor:"pointer",fontWeight:500},children:["💡 Available Parameters for ",e]}),(0,a.jsx)("ul",{style:{marginTop:"8px",paddingLeft:"20px"},children:s.map(r=>(0,a.jsxs)("li",{style:{marginBottom:"4px"},children:[(0,a.jsxs)("strong",{children:[r.label,":"]})," ",r.description,(0,a.jsx)("br",{}),(0,a.jsxs)("code",{style:{background:"#e5e7eb",padding:"2px 6px",borderRadius:"4px",fontSize:"12px"},children:["Example: ",r.example]})]},r.value))}),"custom_event"===e&&(0,a.jsxs)("div",{style:{marginTop:"12px",padding:"12px",background:"#fefce8",borderRadius:"6px",border:"1px solid #fde68a"},children:[(0,a.jsx)("strong",{style:{color:"#92400e"},children:"💡 Custom Data Keys"}),(0,a.jsx)("p",{style:{margin:"6px 0 0",fontSize:"12px",color:"#78350f"},children:"Select “Custom Data Key” to match any key from your event data. For example:"}),(0,a.jsx)("pre",{style:{margin:"6px 0 0",padding:"8px",background:"#fffbeb",borderRadius:"4px",fontSize:"11px",color:"#78350f",whiteSpace:"pre-wrap"},children:"window.trackSureGoals.fireCustomEvent('purchase', {\n  product_id: 'sku-123',\n  amount: '49.99',\n  category: 'software'\n});"}),(0,a.jsxs)("p",{style:{margin:"6px 0 0",fontSize:"12px",color:"#78350f"},children:["Then use ",(0,a.jsx)("strong",{children:"product_id"}),", ",(0,a.jsx)("strong",{children:"amount"}),", or ",(0,a.jsx)("strong",{children:"category"})," as custom data keys in your conditions."]})]})]})]})};var f=e(71255),k=e(85072),_=e.n(k),y=e(97825),w=e.n(y),j=e(77659),z=e.n(j),N=e(55056),I=e.n(N),S=e(10540),T=e.n(S),D=e(41113),q=e.n(D),Y=e(80126),F={};F.styleTagTransform=q(),F.setAttributes=I(),F.insert=z().bind(null,"head"),F.domAPI=w(),F.insertStyleElement=T();_()(Y.A,F);Y.A&&Y.A.locals&&Y.A.locals;const R=[{value:"pageview",label:(0,f.__)("Page View","tracksure"),eventName:"page_view",icon:"📄"},{value:"click",label:(0,f.__)("Element Click","tracksure"),eventName:"click",icon:"👆"},{value:"form_submit",label:(0,f.__)("Form Submission","tracksure"),eventName:"form_submit",icon:"📝"},{value:"scroll_depth",label:(0,f.__)("Scroll Depth","tracksure"),eventName:"scroll",icon:"📜"},{value:"time_on_page",label:(0,f.__)("Time on Page","tracksure"),eventName:"time_on_page",icon:"⏱️"},{value:"engagement",label:(0,f.__)("Engagement Rate","tracksure"),eventName:"engagement",icon:"❤️"},{value:"video_play",label:(0,f.__)("Video Play","tracksure"),eventName:"video_play",icon:"🎬"},{value:"download",label:(0,f.__)("File Download","tracksure"),eventName:"file_download",icon:"💾"},{value:"outbound_link",label:(0,f.__)("Outbound Link","tracksure"),eventName:"outbound_click",icon:"🔗"},{value:"custom_event",label:(0,f.__)("Custom Event","tracksure"),eventName:"custom_event",icon:"⚡"}],G=({isOpen:r,onClose:n,onSave:e,mode:o,template:s,existingGoal:i})=>{const A=()=>"edit"===o&&i?{...i}:"create-from-template"===o&&s?{name:s.name,description:s.description,event_name:s.event_name,trigger_type:s.trigger_type,category:s.category,conditions:[...s.conditions||[]],match_logic:s.match_logic||"all",value_type:s.value_type||"none",value:s.typical_value||0,attribution_window:30,frequency:"unlimited",is_active:!0}:{name:"",description:"",event_name:"page_view",trigger_type:"pageview",category:"engagement",conditions:[],match_logic:"all",value_type:"none",value:0,attribution_window:30,frequency:"unlimited",is_active:!0},[l,d]=(0,t.useState)(A()),[c,p]=(0,t.useState)({}),[g,m]=(0,t.useState)(!1);(0,t.useEffect)(()=>{r&&(d(A()),p({}),m(!1))},[r,o,s,i]);const C=(r,n)=>{const e={...l,[r]:n};if("trigger_type"===r){const r=R.find(r=>r.value===n);r&&(e.event_name=r.eventName)}d(e),c[r]&&p(n=>({...n,[r]:void 0}))};return(0,a.jsx)(v.a,{isOpen:r,onClose:n,size:"lg",title:(()=>{switch(o){case"edit":return(0,f.__)("Edit Goal");case"create-from-template":return(0,f.__)("Customize Goal Template");default:return(0,f.__)("Create Custom Goal")}})(),footer:(0,a.jsxs)("div",{className:"ts-goal-modal__footer",children:[(0,a.jsx)("button",{onClick:n,className:"ts-btn ts-btn--secondary",disabled:g,"aria-label":(0,f.__)("Cancel"),children:(0,f.__)("Cancel")}),(0,a.jsx)("button",{onClick:async()=>{if((()=>{const r={};return l.name.trim()?l.name.trim().length<3?r.name=(0,f.__)("Goal name must be at least 3 characters"):l.name.trim().length>100&&(r.name=(0,f.__)("Goal name must not exceed 100 characters")):r.name=(0,f.__)("Goal name is required"),l.description&&l.description.length>500&&(r.description=(0,f.__)("Description must not exceed 500 characters")),"fixed"===l.value_type&&(!l.value||l.value<=0)&&(r.fixed_value=(0,f.__)("Fixed value must be greater than 0")),p(r),0===Object.keys(r).length})()){m(!0);try{const r={...l,name:l.name.trim(),description:l.description?.trim()||""};await e(r),n()}catch(r){p({name:(0,f.__)("An error occurred while saving. Please try again.")})}finally{m(!1)}}},className:"ts-btn ts-btn--primary",disabled:g,"aria-label":"edit"===o?(0,f.__)("Update goal"):(0,f.__)("Create goal"),children:g?(0,f.__)("Saving..."):"edit"===o?(0,f.__)("Update Goal"):(0,f.__)("Create Goal")})]}),children:(0,a.jsxs)("div",{className:"ts-goal-modal__content",children:["create-from-template"===o&&(0,a.jsxs)("div",{className:"ts-goal-modal__banner ts-goal-modal__banner--info",role:"alert",children:[(0,a.jsx)("span",{className:"ts-goal-modal__banner-icon",children:"💡"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Customize this template")}),(0,a.jsx)("p",{children:(0,f.__)("Modify the conditions to match your website's URLs, form IDs, or other specific values before creating.")})]})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"basic-info-heading",children:[(0,a.jsxs)("h3",{id:"basic-info-heading",className:"ts-goal-modal__section-title",children:[(0,a.jsx)("span",{className:"ts-goal-modal__section-icon",children:"📝"}),(0,f.__)("Basic Information")]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"goal-name",className:"ts-goal-modal__label ts-goal-modal__label--required",children:(0,f.__)("Goal Name")}),(0,a.jsx)("input",{id:"goal-name",type:"text",className:"ts-goal-modal__input "+(c.name?"ts-goal-modal__input--error":""),value:l.name,onChange:r=>C("name",r.target.value),placeholder:(0,f.__)("e.g., Pricing Page Viewed"),required:!0,"aria-required":"true","aria-invalid":!!c.name,"aria-describedby":c.name?"goal-name-error":void 0,maxLength:100}),c.name&&(0,a.jsx)("p",{id:"goal-name-error",className:"ts-goal-modal__error",role:"alert",children:c.name})]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsxs)("label",{htmlFor:"goal-description",className:"ts-goal-modal__label",children:[(0,f.__)("Description"),(0,a.jsxs)("span",{className:"ts-goal-modal__label-optional",children:[" (",(0,f.__)("optional"),")"]})]}),(0,a.jsx)("textarea",{id:"goal-description",className:"ts-goal-modal__textarea "+(c.description?"ts-goal-modal__input--error":""),value:l.description,onChange:r=>C("description",r.target.value),placeholder:(0,f.__)("Describe what this goal tracks..."),rows:3,"aria-invalid":!!c.description,"aria-describedby":c.description?"goal-description-error":void 0,maxLength:500}),c.description&&(0,a.jsx)("p",{id:"goal-description-error",className:"ts-goal-modal__error",role:"alert",children:c.description}),(0,a.jsxs)("p",{className:"ts-goal-modal__help",children:[(l.description||"").length,"/500 ",(0,f.__)("characters")]})]})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"trigger-heading",children:[(0,a.jsxs)("h3",{id:"trigger-heading",className:"ts-goal-modal__section-title",children:[(0,a.jsx)("span",{className:"ts-goal-modal__section-icon",children:"⚡"}),(0,f.__)("Trigger Type")]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"trigger-type",className:"ts-goal-modal__label ts-goal-modal__label--required",children:(0,f.__)("When should this goal fire?")}),(0,a.jsx)("select",{id:"trigger-type",className:"ts-goal-modal__select",value:l.trigger_type,onChange:r=>C("trigger_type",r.target.value),"aria-required":"true",children:R.map(r=>(0,a.jsxs)("option",{value:r.value,children:[r.icon," ",r.label]},r.value))}),(0,a.jsx)("p",{className:"ts-goal-modal__help",children:(r=>{const n={pageview:(0,f.__)("Fires when a specific page is viewed"),click:(0,f.__)("Fires when a specific element is clicked"),form_submit:(0,f.__)("Fires when a form is submitted"),scroll_depth:(0,f.__)("Fires when user scrolls to a specific depth"),time_on_page:(0,f.__)("Fires when user spends specific time on page"),engagement:(0,f.__)("Fires when user meets scroll + time engagement thresholds"),video_play:(0,f.__)("Fires when a video is played or completed"),download:(0,f.__)("Fires when a file is downloaded"),outbound_link:(0,f.__)("Fires when an external link is clicked"),custom_event:(0,f.__)("Fires when a custom event occurs (e.g., WooCommerce purchase)")};return r in n?n[r]:""})(l.trigger_type)})]}),"custom_event"===l.trigger_type&&(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"custom-event-name",className:"ts-goal-modal__label ts-goal-modal__label--required",children:(0,f.__)("Event Name")}),(0,a.jsx)("input",{id:"custom-event-name",type:"text",className:"ts-goal-modal__input",value:l.event_name||"",onChange:r=>C("event_name",r.target.value),placeholder:(0,f.__)("e.g., purchase, add_to_cart, calculator_completed")}),(0,a.jsx)("p",{className:"ts-goal-modal__help",children:(0,f.__)("The exact event name your custom code or WooCommerce dispatches")})]})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"conditions-heading",children:[(0,a.jsx)(B,{conditions:l.conditions,onChange:r=>C("conditions",r),triggerType:l.trigger_type,matchLogic:l.match_logic,onMatchLogicChange:r=>C("match_logic",r)}),c.conditions&&(0,a.jsx)("p",{className:"ts-goal-modal__error",role:"alert",children:c.conditions})]}),(0,a.jsxs)("section",{className:"ts-goal-modal__section","aria-labelledby":"value-heading",children:[(0,a.jsxs)("h3",{id:"value-heading",className:"ts-goal-modal__section-title",children:[(0,a.jsx)("span",{className:"ts-goal-modal__section-icon",children:"💰"}),(0,f.__)("Conversion Value")]}),(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsx)("label",{htmlFor:"value-type",className:"ts-goal-modal__label",children:(0,f.__)("Value Type")}),(0,a.jsxs)("select",{id:"value-type",className:"ts-goal-modal__select",value:l.value_type,onChange:r=>C("value_type",r.target.value),children:[(0,a.jsx)("option",{value:"none",children:(0,f.__)("No Value (Engagement Metric)")}),(0,a.jsx)("option",{value:"fixed",children:(0,f.__)("Fixed Value (Same for all conversions)")}),(0,a.jsx)("option",{value:"dynamic",children:(0,f.__)("Dynamic Value (Use transaction amount)")})]})]}),"fixed"===l.value_type&&(0,a.jsxs)("div",{className:"ts-goal-modal__field",children:[(0,a.jsxs)("label",{htmlFor:"fixed-value",className:"ts-goal-modal__label ts-goal-modal__label--required",children:[(0,f.__)("Fixed Value")," ($)"]}),(0,a.jsx)("input",{id:"fixed-value",type:"number",className:"ts-goal-modal__input "+(c.fixed_value?"ts-goal-modal__input--error":""),value:l.value||0,onChange:r=>C("value",parseFloat(r.target.value)||0),placeholder:"0",min:"0",step:"0.01",required:!0,"aria-required":"true","aria-invalid":!!c.fixed_value,"aria-describedby":c.fixed_value?"fixed-value-error":"fixed-value-help"}),c.fixed_value?(0,a.jsx)("p",{id:"fixed-value-error",className:"ts-goal-modal__error",role:"alert",children:c.fixed_value}):(0,a.jsx)("p",{id:"fixed-value-help",className:"ts-goal-modal__help",children:(0,f.__)("This value will be assigned to every conversion (e.g., lead value, estimated revenue)")})]}),"dynamic"===l.value_type&&(0,a.jsxs)("div",{className:"ts-goal-modal__banner ts-goal-modal__banner--info",children:[(0,a.jsx)("span",{className:"ts-goal-modal__banner-icon",children:"💡"}),(0,a.jsx)("div",{children:(0,f.__)("Value will be automatically pulled from transaction data (e.g., WooCommerce order total)")})]})]}),"edit"===o&&(0,a.jsx)("section",{className:"ts-goal-modal__section",children:(0,a.jsxs)("label",{className:"ts-goal-modal__toggle",children:[(0,a.jsx)("input",{type:"checkbox",className:"ts-goal-modal__toggle-input",checked:l.is_active,onChange:r=>C("is_active",r.target.checked),"aria-label":(0,f.__)("Activate this goal")}),(0,a.jsxs)("div",{className:"ts-goal-modal__toggle-content",children:[(0,a.jsx)("div",{className:"ts-goal-modal__toggle-title",children:(0,f.__)("Activate this goal")}),(0,a.jsx)("div",{className:"ts-goal-modal__toggle-description",children:(0,f.__)("Start tracking conversions for this goal")})]})]})}),Object.keys(c).length>0&&(0,a.jsxs)("div",{className:"ts-goal-modal__banner ts-goal-modal__banner--error",role:"alert",children:[(0,a.jsx)("span",{className:"ts-goal-modal__banner-icon",children:"⚠️"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Please fix the following errors:")}),(0,a.jsx)("ul",{className:"ts-goal-modal__error-list",children:Object.entries(c).map(([r,n])=>n&&(0,a.jsx)("li",{children:n},r))})]})]})]})})};var W=e(26604),L=e(99003),P=e(28343),U=e(51768),O={};O.styleTagTransform=q(),O.setAttributes=I(),O.insert=z().bind(null,"head"),O.domAPI=w(),O.insertStyleElement=T();_()(U.A,O);U.A&&U.A.locals&&U.A.locals;const M=({goal:r,onClose:n})=>{const{config:e,dateRange:s}=(0,o.n)(),A=(0,L.iW)(),[l,d]=(0,t.useState)("overview"),[c,p]=(0,t.useState)(1),[g,u]=(0,t.useState)("date"),[E,x]=(0,t.useState)("desc"),[h,b]=(0,t.useState)("all"),[B,k]=(0,t.useState)([]),[_,y]=(0,t.useState)(0),[w,j]=(0,t.useState)(!1),[z,N]=(0,t.useState)(null),[I,S]=(0,t.useState)(null),[T,D]=(0,t.useState)([]),[q,Y]=(0,t.useState)([]),[F,R]=(0,t.useState)(!0),[G,U]=(0,t.useState)(!1);(0,t.useEffect)(()=>{(async()=>{R(!0);try{const n=new i.n(e),a=await n.getGoalSources(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA"),attribution_model:"last_touch"});D(a.sources||[]);const t=await n.getGoalPerformance(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA")});t&&S({total_conversions:t.conversions||0,total_value:t.revenue||0,conversion_rate:t.conversion_rate||0,avg_value:t.avg_value||0,unique_visitors:t.unique_visitors||0,top_pages:(t.top_pages||[]).map(r=>({page_url:r.page,conversions:r.count}))})}catch(r){}finally{R(!1)}})()},[r.goal_id,s,e]),(0,t.useEffect)(()=>{if("timeline"!==l)return;(async()=>{j(!0),N(null);try{const n=new i.n(e),a=await n.getGoalTimeline(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA"),page:c,per_page:20});k(a.conversions||[]),y(a.total||0)}catch(r){const n=r instanceof Error?r.message:(0,f.__)("Failed to load conversions","tracksure");N(n)}finally{j(!1)}})()},[r.goal_id,s,c,e,l]),(0,t.useEffect)(()=>{if("devices"!==l)return;(async()=>{U(!0);try{const n=new i.n(e),a=await n.getGoalDevices(r.goal_id,{date_start:s.start.toLocaleDateString("en-CA"),date_end:s.end.toLocaleDateString("en-CA")});Y((a.devices||[]).map(r=>({device:r.device||"desktop",browser:r.browser||"unknown",conversions:r.conversions||0,percentage:r.percentage||0})))}catch(r){}finally{U(!1)}})()},[r.goal_id,s,e,l]);const O=(0,t.useMemo)(()=>{const r=new Set(B.map(r=>r.source||"direct"));return["all",...Array.from(r)]},[B]),M=(0,t.useMemo)(()=>{let r=[...B];return"all"!==h&&(r=r.filter(r=>(r.source||"direct")===h)),r.sort((r,n)=>{let e=0;return"date"===g?e=new Date(r.converted_at.replace(" ","T")+"Z").getTime()-new Date(n.converted_at.replace(" ","T")+"Z").getTime():"value"===g?e=(r.value||0)-(n.value||0):"page"===g&&(e=(r.page_url||"").localeCompare(n.page_url||"")),"asc"===E?e:-e}),r},[B,h,g,E]),Z=r=>{g===r?x("asc"===E?"desc":"asc"):(u(r),x("desc"))},V=r=>r.product_name?r.product_name:r.product_id?`Product #${r.product_id}`:r.form_id?`Form: ${r.form_id}`:r.element_selector?r.element_selector:null,$=Math.ceil(_/20),X=()=>{const n=[(0,f.__)("Date","tracksure"),(0,f.__)("Page URL","tracksure"),"none"!==r.value_type?(0,f.__)("Value","tracksure"):null,(0,f.__)("Context","tracksure"),(0,f.__)("Source","tracksure"),(0,f.__)("Medium","tracksure"),(0,f.__)("Campaign","tracksure"),(0,f.__)("Device","tracksure"),(0,f.__)("Browser","tracksure")].filter(Boolean),e=M.map(e=>[e.converted_at,e.page_url,"none"!==r.value_type?e.value:null,V(e)||"-",e.source||"direct",e.medium||"-",e.campaign||"-",e.device||"-",e.browser||"-"].filter((r,e)=>null!==n[e])),a=[n.join(","),...e.map(r=>r.map(r=>`"${r}"`).join(","))].join("\n"),t=new Blob([a],{type:"text/csv"}),o=window.URL.createObjectURL(t),s=document.createElement("a");s.href=o,s.download=`${r.name.replace(/[^a-z0-9]/gi,"_")}_conversions.csv`,s.click(),window.URL.revokeObjectURL(o)},Q=()=>F?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading overview...","tracksure")})]}):I?(0,a.jsxs)("div",{className:"ts-goal-overview-tab",children:[(0,a.jsxs)("div",{className:"ts-overview-metrics",children:[(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Total Conversions","tracksure")}),(0,a.jsx)("div",{className:"ts-metric-value",children:I.total_conversions.toLocaleString()})]})})}),"none"!==r.value_type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Total Value","tracksure")}),(0,a.jsx)("div",{className:"ts-metric-value",children:(0,P.vv)(I.total_value)})]})})}),(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Average Value","tracksure")}),(0,a.jsx)("div",{className:"ts-metric-value",children:(0,P.vv)(I.avg_value)})]})})})]}),(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-metric",children:[(0,a.jsx)("div",{className:"ts-metric-label",children:(0,f.__)("Conversion Rate","tracksure")}),(0,a.jsxs)("div",{className:"ts-metric-value",children:[I.conversion_rate.toFixed(2),"%"]})]})})})]}),I.top_pages&&I.top_pages.length>0&&(0,a.jsxs)(C.Zp,{children:[(0,a.jsx)(C.aR,{children:(0,f.__)("Top Converting Pages","tracksure")}),(0,a.jsx)(C.bw,{children:(0,a.jsx)("div",{className:"ts-top-pages",children:I.top_pages.map((r,n)=>(0,a.jsxs)("div",{className:"ts-top-page",children:[(0,a.jsxs)("div",{className:"ts-top-page-rank",children:["#",n+1]}),(0,a.jsx)("div",{className:"ts-top-page-url",children:(0,a.jsx)("a",{href:r.page_url,target:"_blank",rel:"noopener noreferrer",children:r.page_url})}),(0,a.jsx)("div",{className:"ts-top-page-conversions",children:(0,a.jsxs)(W.E,{variant:"success",children:[r.conversions," ",(0,f.__)("conversions","tracksure")]})})]},n))})})]})]}):(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"BarChart3",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No data available for this period.","tracksure")})]}),H=()=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"ts-modal-filters",children:[(0,a.jsxs)("div",{className:"ts-filter-group",children:[(0,a.jsx)("label",{children:(0,f.__)("Filter by Source:","tracksure")}),(0,a.jsx)("select",{value:h,onChange:r=>b(r.target.value),className:"ts-filter-select",children:O.map(r=>(0,a.jsx)("option",{value:r,children:"all"===r?(0,f.__)("All Sources","tracksure"):r},r))})]}),(0,a.jsxs)("button",{className:"ts-export-btn",onClick:X,children:[(0,a.jsx)(m.I,{name:"Download",size:14}),(0,f.__)("Export CSV","tracksure")]})]}),(0,a.jsx)("div",{className:"ts-modal-content",children:w?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading conversions...","tracksure")})]}):z?(0,a.jsxs)("div",{className:"ts-error",children:[(0,a.jsx)(m.I,{name:"AlertCircle",size:24}),(0,a.jsx)("span",{children:z})]}):0===M.length?(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"FileText",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No conversions found for this date range.","tracksure")})]}):(0,a.jsx)("div",{className:"ts-table-scroll",children:(0,a.jsxs)("table",{className:"ts-conversions-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsxs)("th",{onClick:()=>Z("date"),className:"date"===g?"ts-sorted":"",children:[(0,f.__)("Date","tracksure")," ","date"===g&&("asc"===E?"↑":"↓")]}),(0,a.jsxs)("th",{onClick:()=>Z("page"),className:"page"===g?"ts-sorted":"",children:[(0,f.__)("Page URL","tracksure")," ","page"===g&&("asc"===E?"↑":"↓")]}),(0,a.jsx)("th",{children:(0,f.__)("Context","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Source","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Device","tracksure")}),"none"!==r.value_type&&(0,a.jsxs)("th",{onClick:()=>Z("value"),className:"value"===g?"ts-sorted":"",children:[(0,f.__)("Value","tracksure")," ","value"===g&&("asc"===E?"↑":"↓")]})]})}),(0,a.jsx)("tbody",{children:M.map(n=>{return(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"ts-date-cell",children:(e=n.converted_at,(0,L.oD)(e,A))}),(0,a.jsx)("td",{className:"ts-url-cell",children:n.page_url?(0,a.jsxs)("a",{href:n.page_url,target:"_blank",rel:"noopener noreferrer",className:"ts-url-link",children:[n.page_url,(0,a.jsx)(m.I,{name:"ExternalLink",size:12})]}):(0,a.jsx)("span",{className:"ts-url-empty",children:"-"})}),(0,a.jsx)("td",{className:"ts-context-cell",children:V(n)?(0,a.jsxs)("span",{className:"ts-context-badge",children:[(0,a.jsx)(m.I,{name:"Tag",size:12}),V(n)]}):(0,a.jsx)("span",{className:"ts-context-empty",children:"-"})}),(0,a.jsx)("td",{className:"ts-source-cell",children:(0,a.jsxs)("div",{className:"ts-source-info",children:[(0,a.jsx)("strong",{children:n.source||"direct"}),n.medium&&(0,a.jsxs)("span",{className:"ts-medium",children:[" / ",n.medium]}),n.campaign&&(0,a.jsx)("div",{className:"ts-campaign",children:n.campaign})]})}),(0,a.jsx)("td",{className:"ts-device-cell",children:(0,a.jsxs)("span",{className:"ts-device-badge",children:[(0,a.jsx)(m.I,{name:"mobile"===n.device?"Smartphone":"tablet"===n.device?"Tablet":"Monitor",size:12}),n.device||"desktop"]})}),"none"!==r.value_type&&(0,a.jsx)("td",{className:"ts-value-cell",children:(0,P.vv)(n.value||0)})]},n.conversion_id);var e})})]})})}),!w&&$>1&&(0,a.jsxs)("div",{className:"ts-modal-pagination",children:[(0,a.jsxs)("button",{onClick:()=>p(r=>Math.max(1,r-1)),disabled:1===c,className:"ts-page-btn",children:[(0,a.jsx)(m.I,{name:"ChevronLeft",size:16}),(0,f.__)("Previous","tracksure")]}),(0,a.jsxs)("span",{className:"ts-page-info",children:[(0,f.__)("Page","tracksure")," ",c," ",(0,f.__)("of","tracksure")," ",$," (",_," ",(0,f.__)("total conversions","tracksure"),")"]}),(0,a.jsxs)("button",{onClick:()=>p(r=>Math.min($,r+1)),disabled:c===$,className:"ts-page-btn",children:[(0,f.__)("Next","tracksure"),(0,a.jsx)(m.I,{name:"ChevronRight",size:16})]})]})]}),J=()=>F?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading sources...","tracksure")})]}):0===T.length?(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"Globe",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No source data available for this period.","tracksure")})]}):(0,a.jsx)("div",{className:"ts-sources-tab",children:(0,a.jsxs)("table",{className:"ts-sources-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{children:(0,f.__)("Source","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Medium","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Conversions","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Percentage","tracksure")}),"none"!==r.value_type&&(0,a.jsx)("th",{children:(0,f.__)("Revenue","tracksure")})]})}),(0,a.jsx)("tbody",{children:T.map((n,e)=>(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"ts-source-name",children:n.source}),(0,a.jsx)("td",{className:"ts-source-medium",children:n.medium||"-"}),(0,a.jsx)("td",{className:"ts-source-conversions",children:n.conversions}),(0,a.jsxs)("td",{className:"ts-source-percentage",children:[(0,a.jsx)("div",{className:"ts-progress-bar",children:(0,a.jsx)("div",{className:"ts-progress-fill",style:{width:`${n.percentage}%`}})}),(0,a.jsxs)("span",{children:[n.percentage.toFixed(1),"%"]})]}),"none"!==r.value_type&&(0,a.jsx)("td",{className:"ts-source-revenue",children:(0,P.vv)(n.revenue)})]},e))})]})}),K=()=>G?(0,a.jsxs)("div",{className:"ts-loading",children:[(0,a.jsx)(m.I,{name:"Loader",size:24}),(0,a.jsx)("span",{children:(0,f.__)("Loading devices...","tracksure")})]}):0===q.length?(0,a.jsxs)("div",{className:"ts-empty",children:[(0,a.jsx)(m.I,{name:"Monitor",size:48}),(0,a.jsx)("p",{children:(0,f.__)("No device data available for this period.","tracksure")})]}):(0,a.jsx)("div",{className:"ts-devices-tab",children:(0,a.jsxs)("table",{className:"ts-devices-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{children:(0,f.__)("Device","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Browser","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Conversions","tracksure")}),(0,a.jsx)("th",{children:(0,f.__)("Percentage","tracksure")})]})}),(0,a.jsx)("tbody",{children:q.map((r,n)=>(0,a.jsxs)("tr",{children:[(0,a.jsxs)("td",{className:"ts-device-name",children:[(0,a.jsx)(m.I,{name:"mobile"===r.device?"Smartphone":"tablet"===r.device?"Tablet":"Monitor",size:16}),r.device]}),(0,a.jsx)("td",{className:"ts-device-browser",children:r.browser}),(0,a.jsx)("td",{className:"ts-device-conversions",children:r.conversions}),(0,a.jsxs)("td",{className:"ts-device-percentage",children:[(0,a.jsx)("div",{className:"ts-progress-bar",children:(0,a.jsx)("div",{className:"ts-progress-fill",style:{width:`${r.percentage}%`}})}),(0,a.jsxs)("span",{children:[r.percentage.toFixed(1),"%"]})]})]},n))})]})});return(0,a.jsx)(v.a,{isOpen:!0,onClose:n,size:"xl",title:(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{children:r.name}),(0,a.jsx)("p",{className:"ts-modal-subtitle",children:r.description})]}),children:(0,a.jsxs)("div",{className:"ts-goal-details-modal",children:[(0,a.jsxs)("div",{className:"ts-modal-tabs",children:[(0,a.jsxs)("button",{className:"ts-modal-tab "+("overview"===l?"ts-modal-tab--active":""),onClick:()=>d("overview"),children:[(0,a.jsx)(m.I,{name:"BarChart3",size:18}),(0,f.__)("Overview","tracksure")]}),(0,a.jsxs)("button",{className:"ts-modal-tab "+("timeline"===l?"ts-modal-tab--active":""),onClick:()=>d("timeline"),children:[(0,a.jsx)(m.I,{name:"Clock",size:18}),(0,f.__)("Timeline","tracksure")]}),(0,a.jsxs)("button",{className:"ts-modal-tab "+("sources"===l?"ts-modal-tab--active":""),onClick:()=>d("sources"),children:[(0,a.jsx)(m.I,{name:"Globe",size:18}),(0,f.__)("Sources","tracksure")]}),(0,a.jsxs)("button",{className:"ts-modal-tab "+("devices"===l?"ts-modal-tab--active":""),onClick:()=>d("devices"),children:[(0,a.jsx)(m.I,{name:"Monitor",size:18}),(0,f.__)("Devices","tracksure")]})]}),(0,a.jsx)("div",{className:"ts-modal-tab-content",children:(()=>{switch(l){case"overview":return Q();case"timeline":return H();case"sources":return J();case"devices":return K();default:return null}})()})]})})};var Z=e(66522),V=e(87791),$=e(56883),X={};X.styleTagTransform=q(),X.setAttributes=I(),X.insert=z().bind(null,"head"),X.domAPI=w(),X.insertStyleElement=T();_()($.A,X);$.A&&$.A.locals&&$.A.locals;const Q=[{id:"basic",title:(0,f.__)("Basic Information","tracksure"),description:(0,f.__)("Name and describe your goal","tracksure"),icon:"FileText"},{id:"trigger",title:(0,f.__)("Trigger Configuration","tracksure"),description:(0,f.__)("Choose what triggers this goal","tracksure"),icon:"Zap"},{id:"conditions",title:(0,f.__)("Conditions","tracksure"),description:(0,f.__)("Define when the goal converts","tracksure"),icon:"Filter"},{id:"advanced",title:(0,f.__)("Advanced Settings","tracksure"),description:(0,f.__)("Value, frequency, and attribution","tracksure"),icon:"Settings"},{id:"preview",title:(0,f.__)("Review & Save","tracksure"),description:(0,f.__)("Preview and confirm your goal","tracksure"),icon:"Eye"}],H=[{value:"pageview",label:(0,f.__)("Page View","tracksure"),description:(0,f.__)("Track visits to specific pages or sections","tracksure"),icon:"FileText",eventName:"page_view"},{value:"click",label:(0,f.__)("Element Click","tracksure"),description:(0,f.__)("Track clicks on buttons, links, or elements","tracksure"),icon:"MousePointer",eventName:"click"},{value:"form_submit",label:(0,f.__)("Form Submission","tracksure"),description:(0,f.__)("Track form completions and leads","tracksure"),icon:"Send",eventName:"form_submit"},{value:"scroll_depth",label:(0,f.__)("Scroll Depth","tracksure"),description:(0,f.__)("Track how far users scroll on a page","tracksure"),icon:"ArrowDown",eventName:"scroll"},{value:"time_on_page",label:(0,f.__)("Time on Page","tracksure"),description:(0,f.__)("Track engagement duration","tracksure"),icon:"Clock",eventName:"time_on_page"},{value:"engagement",label:(0,f.__)("Engagement Rate","tracksure"),description:(0,f.__)("Track combined scroll + time engagement","tracksure"),icon:"Heart",eventName:"engagement"},{value:"video_play",label:(0,f.__)("Video Play","tracksure"),description:(0,f.__)("Track video interactions","tracksure"),icon:"Play",eventName:"video_play"},{value:"download",label:(0,f.__)("File Download","tracksure"),description:(0,f.__)("Track file and document downloads","tracksure"),icon:"Download",eventName:"file_download"},{value:"outbound_link",label:(0,f.__)("Outbound Link","tracksure"),description:(0,f.__)("Track clicks to external websites","tracksure"),icon:"ExternalLink",eventName:"outbound_click"},{value:"custom_event",label:(0,f.__)("Custom Event","tracksure"),description:(0,f.__)("Track custom JavaScript events","tracksure"),icon:"Code",eventName:"custom_event"}],J=[{value:"engagement",label:(0,f.__)("Engagement","tracksure"),icon:"Heart"},{value:"leads",label:(0,f.__)("Leads & Conversions","tracksure"),icon:"Users"},{value:"ecommerce",label:(0,f.__)("E-commerce","tracksure"),icon:"ShoppingCart"},{value:"content",label:(0,f.__)("Content & Media","tracksure"),icon:"FileText"}],K=({isOpen:r,onClose:n,onSave:e,onSaveAsTemplate:o})=>{const[s,i]=(0,t.useState)("basic"),[A,l]=(0,t.useState)({name:"",description:"",category:"engagement",trigger_type:"pageview",event_name:"page_view",conditions:[],match_logic:"all",value_type:"none",value:0,attribution_window:30,frequency:"unlimited",is_active:!0}),[d,c]=(0,t.useState)({}),[p,g]=(0,t.useState)(!1),C=Q.findIndex(r=>r.id===s),u=0===C,E=C===Q.length-1,x=r=>{const n={};if("basic"===r){const r=A.name?.trim()||"";r?r.length<3?n.name=(0,f.__)("Goal name must be at least 3 characters","tracksure"):r.length>100&&(n.name=(0,f.__)("Goal name cannot exceed 100 characters","tracksure")):n.name=(0,f.__)("Goal name is required","tracksure"),A.description&&A.description.length>500&&(n.description=(0,f.__)("Description cannot exceed 500 characters","tracksure")),A.category||(n.category=(0,f.__)("Please select a category","tracksure"))}if("trigger"===r){A.trigger_type||(n.trigger_type=(0,f.__)("Please select a trigger type","tracksure"));const r=A.event_name?.trim()||"";r?r.length>100?n.event_name=(0,f.__)("Event name cannot exceed 100 characters","tracksure"):/^[a-z0-9_]+$/.test(r)||(n.event_name=(0,f.__)("Event name must contain only lowercase letters, numbers, and underscores","tracksure")):n.event_name=(0,f.__)("Event name is required","tracksure")}return"advanced"===r&&"fixed"===A.value_type&&(!A.value||A.value<=0)&&(n.value=(0,f.__)("Fixed value must be greater than 0","tracksure")),c(n),0===Object.keys(n).length},h=()=>{for(const r of Q)if(!x(r.id))return i(r.id),!1;return!0};(0,t.useEffect)(()=>{if(!r)return;const n=localStorage.getItem("tracksure_goal_draft");if(n)try{const r=JSON.parse(n);l(r),g(!0)}catch(r){}},[r]),(0,t.useEffect)(()=>{if("custom_event"===A.trigger_type)return;const r=H.find(r=>r.value===A.trigger_type);r&&l(n=>({...n,event_name:r.eventName}))},[A.trigger_type]);return(0,a.jsx)(v.a,{isOpen:r,onClose:n,size:"xl",title:(0,f.__)("Create Custom Goal","tracksure"),children:(0,a.jsxs)("div",{className:"ts-custom-goal-builder",children:[(0,a.jsx)("div",{className:"ts-goal-builder-steps",children:Q.map((r,n)=>(0,a.jsxs)("div",{className:`ts-step ${s===r.id?"ts-step--active":""} ${n<C?"ts-step--completed":""}`,children:[(0,a.jsx)("div",{className:"ts-step-number",children:n<C?(0,a.jsx)(m.I,{name:"Check",size:16}):(0,a.jsx)("span",{children:n+1})}),(0,a.jsxs)("div",{className:"ts-step-info",children:[(0,a.jsx)("div",{className:"ts-step-title",children:r.title}),(0,a.jsx)("div",{className:"ts-step-description",children:r.description})]})]},r.id))}),(0,a.jsxs)("div",{className:"ts-builder-content",children:[p&&(0,a.jsxs)("div",{className:"ts-draft-notice",children:[(0,a.jsx)(m.I,{name:"Info",size:16}),(0,f.__)("Draft loaded from previous session","tracksure")]}),(()=>{switch(s){case"basic":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"FileText",size:20}),(0,f.__)("Basic Information","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsxs)("label",{htmlFor:"goal-name",children:[(0,f.__)("Goal Name","tracksure")," ",(0,a.jsx)("span",{className:"ts-required",children:"*"})]}),(0,a.jsx)("input",{id:"goal-name",type:"text",value:A.name||"",onChange:r=>l({...A,name:r.target.value}),placeholder:(0,f.__)("e.g., Newsletter Signup, Product Purchase","tracksure"),className:d.name?"ts-input-error":"",autoFocus:!0}),d.name&&(0,a.jsx)("span",{className:"ts-error-message",children:d.name}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Choose a clear, descriptive name that identifies this goal","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsxs)("label",{htmlFor:"goal-description",children:[(0,f.__)("Description","tracksure")," ",(0,a.jsxs)("span",{className:"ts-optional",children:["(",(0,f.__)("optional","tracksure"),")"]})]}),(0,a.jsx)("textarea",{id:"goal-description",value:A.description||"",onChange:r=>l({...A,description:r.target.value}),placeholder:(0,f.__)("Describe the purpose of this goal and what success looks like","tracksure"),rows:3}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Help team members understand what this goal measures","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsxs)("label",{children:[(0,f.__)("Category","tracksure")," ",(0,a.jsx)("span",{className:"ts-required",children:"*"})]}),(0,a.jsx)("div",{className:"ts-category-grid",children:J.map(r=>(0,a.jsxs)("button",{type:"button",className:"ts-category-card "+(A.category===r.value?"ts-category-card--selected":""),onClick:()=>l({...A,category:r.value}),children:[(0,a.jsx)(m.I,{name:r.icon,size:24}),(0,a.jsx)("span",{children:r.label})]},r.value))}),d.category&&(0,a.jsx)("span",{className:"ts-error-message",children:d.category})]})]})]})});case"trigger":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Zap",size:20}),(0,f.__)("Choose Trigger Type","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsx)("p",{className:"ts-section-intro",children:(0,f.__)("Select what user action will trigger this goal conversion","tracksure")}),(0,a.jsx)("div",{className:"ts-trigger-grid",children:H.map(r=>(0,a.jsxs)("button",{type:"button",className:"ts-trigger-card "+(A.trigger_type===r.value?"ts-trigger-card--selected":""),onClick:()=>l({...A,trigger_type:r.value}),children:[(0,a.jsx)("div",{className:"ts-trigger-icon",children:(0,a.jsx)(m.I,{name:r.icon,size:32})}),(0,a.jsxs)("div",{className:"ts-trigger-info",children:[(0,a.jsx)("div",{className:"ts-trigger-label",children:r.label}),(0,a.jsx)("div",{className:"ts-trigger-description",children:r.description})]}),A.trigger_type===r.value&&(0,a.jsx)("div",{className:"ts-trigger-check",children:(0,a.jsx)(m.I,{name:"CheckCircle",size:20})})]},r.value))}),d.trigger_type&&(0,a.jsx)("span",{className:"ts-error-message",children:d.trigger_type}),"custom_event"===A.trigger_type&&(0,a.jsxs)("div",{className:"ts-form-field",style:{marginTop:"16px"},children:[(0,a.jsxs)("label",{htmlFor:"custom-event-name",children:[(0,f.__)("Event Name","tracksure")," ",(0,a.jsx)("span",{className:"ts-required",children:"*"})]}),(0,a.jsx)("input",{id:"custom-event-name",type:"text",value:A.event_name||"",onChange:r=>l({...A,event_name:r.target.value}),placeholder:(0,f.__)("e.g., purchase, add_to_cart, calculator_completed","tracksure"),maxLength:100}),d.event_name&&(0,a.jsx)("p",{className:"ts-field-error",children:d.event_name}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("The exact event name your custom code dispatches","tracksure")})]})]})]})});case"conditions":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Filter",size:20}),(0,f.__)("Define Conditions","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsx)("p",{className:"ts-section-intro",children:(0,f.__)("Add conditions to specify exactly when this goal should convert","tracksure")}),(0,a.jsx)(B,{conditions:A.conditions||[],onChange:r=>l({...A,conditions:r}),triggerType:A.trigger_type||"pageview",matchLogic:A.match_logic,onMatchLogicChange:r=>l({...A,match_logic:r})}),d.conditions&&(0,a.jsx)("span",{className:"ts-error-message",children:d.conditions}),A.conditions&&A.conditions.length>0&&(0,a.jsxs)("div",{className:"ts-conditions-preview",children:[(0,a.jsxs)("h4",{children:[(0,a.jsx)(m.I,{name:"Eye",size:16}),(0,f.__)("Condition Logic Preview","tracksure")]}),(0,a.jsxs)("div",{className:"ts-logic-preview",children:["all"===A.match_logic?(0,a.jsxs)("p",{children:[(0,f.__)("Goal converts when","tracksure")," ",(0,a.jsx)("strong",{children:(0,f.__)("ALL","tracksure")})," ",(0,f.__)("of the following are true:","tracksure")]}):(0,a.jsxs)("p",{children:[(0,f.__)("Goal converts when","tracksure")," ",(0,a.jsx)("strong",{children:(0,f.__)("ANY","tracksure")})," ",(0,f.__)("of the following are true:","tracksure")]}),(0,a.jsx)("ul",{className:"ts-condition-list",children:A.conditions.map((r,n)=>(0,a.jsxs)("li",{children:[(0,a.jsx)("code",{children:r.param})," ",(0,a.jsx)("em",{children:r.operator})," ",(0,a.jsxs)("code",{children:['"',r.value,'"']})]},n))})]})]})]})]})});case"advanced":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Settings",size:20}),(0,f.__)("Advanced Settings","tracksure")]}),(0,a.jsxs)(Z.bw,{children:[(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsx)("label",{children:(0,f.__)("Conversion Value","tracksure")}),(0,a.jsxs)("div",{className:"ts-radio-group",children:[(0,a.jsxs)("label",{className:"ts-radio-option",children:[(0,a.jsx)("input",{type:"radio",name:"value_type",value:"none",checked:"none"===A.value_type,onChange:r=>l({...A,value_type:"none"})}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:(0,f.__)("No Value","tracksure")}),(0,a.jsx)("small",{children:(0,f.__)("Track conversions only (most common)","tracksure")})]})]}),(0,a.jsxs)("label",{className:"ts-radio-option",children:[(0,a.jsx)("input",{type:"radio",name:"value_type",value:"fixed",checked:"fixed"===A.value_type,onChange:r=>l({...A,value_type:"fixed"})}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Fixed Value","tracksure")}),(0,a.jsx)("small",{children:(0,f.__)("Assign a specific value to each conversion","tracksure")})]})]}),(0,a.jsxs)("label",{className:"ts-radio-option",children:[(0,a.jsx)("input",{type:"radio",name:"value_type",value:"dynamic",checked:"dynamic"===A.value_type,onChange:r=>l({...A,value_type:"dynamic"})}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:(0,f.__)("Dynamic Value","tracksure")}),(0,a.jsx)("small",{children:(0,f.__)("Use actual transaction amounts (e.g., order totals)","tracksure")})]})]})]}),"fixed"===A.value_type&&(0,a.jsxs)("div",{className:"ts-value-input",children:[(0,a.jsx)("input",{type:"number",value:A.value||0,onChange:r=>l({...A,value:parseFloat(r.target.value)||0}),min:"0",step:"0.01",placeholder:"0.00",className:d.value?"ts-input-error":""}),d.value&&(0,a.jsx)("span",{className:"ts-error-message",children:d.value}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Enter the monetary value for each conversion (e.g., average lead value)","tracksure")})]})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsx)("label",{htmlFor:"attribution-window",children:(0,f.__)("Attribution Window","tracksure")}),(0,a.jsxs)("select",{id:"attribution-window",value:A.attribution_window||30,onChange:r=>l({...A,attribution_window:parseInt(r.target.value)}),children:[(0,a.jsx)("option",{value:"1",children:(0,f.__)("1 day","tracksure")}),(0,a.jsx)("option",{value:"7",children:(0,f.__)("7 days","tracksure")}),(0,a.jsx)("option",{value:"14",children:(0,f.__)("14 days","tracksure")}),(0,a.jsx)("option",{value:"30",children:(0,f.__)("30 days (recommended)","tracksure")}),(0,a.jsx)("option",{value:"60",children:(0,f.__)("60 days","tracksure")}),(0,a.jsx)("option",{value:"90",children:(0,f.__)("90 days","tracksure")})]}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("How long to connect conversions to original traffic sources","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-form-field",children:[(0,a.jsx)("label",{htmlFor:"frequency",children:(0,f.__)("Conversion Frequency","tracksure")}),(0,a.jsxs)("select",{id:"frequency",value:A.frequency||"unlimited",onChange:r=>l({...A,frequency:r.target.value}),children:[(0,a.jsx)("option",{value:"unlimited",children:(0,f.__)("Unlimited (track every occurrence)","tracksure")}),(0,a.jsx)("option",{value:"session",children:(0,f.__)("Once per session","tracksure")}),(0,a.jsx)("option",{value:"once",children:(0,f.__)("Once per visitor (lifetime)","tracksure")})]}),(0,a.jsx)("p",{className:"ts-field-help",children:(0,f.__)("Control how often the same user can trigger this goal","tracksure")})]})]})]})});case"preview":return(0,a.jsx)("div",{className:"ts-step-content",children:(0,a.jsxs)(Z.Zp,{children:[(0,a.jsxs)(Z.aR,{children:[(0,a.jsx)(m.I,{name:"Eye",size:20}),(0,f.__)("Review Your Goal","tracksure")]}),(0,a.jsx)(Z.bw,{children:(0,a.jsxs)("div",{className:"ts-goal-preview",children:[(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Basic Information","tracksure")}),(0,a.jsxs)("dl",{children:[(0,a.jsx)("dt",{children:(0,f.__)("Name","tracksure")}),(0,a.jsx)("dd",{children:A.name}),A.description&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("dt",{children:(0,f.__)("Description","tracksure")}),(0,a.jsx)("dd",{children:A.description})]}),(0,a.jsx)("dt",{children:(0,f.__)("Category","tracksure")}),(0,a.jsx)("dd",{children:J.find(r=>r.value===A.category)?.label})]})]}),(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Trigger Configuration","tracksure")}),(0,a.jsxs)("dl",{children:[(0,a.jsx)("dt",{children:(0,f.__)("Trigger Type","tracksure")}),(0,a.jsx)("dd",{children:H.find(r=>r.value===A.trigger_type)?.label}),(0,a.jsx)("dt",{children:(0,f.__)("Event Name","tracksure")}),(0,a.jsx)("dd",{children:(0,a.jsx)("code",{children:A.event_name})})]})]}),(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Conditions","tracksure")}),(0,a.jsx)("p",{children:"all"===A.match_logic?(0,f.__)("Must match ALL conditions:","tracksure"):(0,f.__)("Must match ANY condition:","tracksure")}),A.conditions&&A.conditions.length>0?(0,a.jsx)("ul",{className:"ts-condition-list",children:A.conditions.map((r,n)=>(0,a.jsxs)("li",{children:[(0,a.jsx)("code",{children:r.param})," ",(0,a.jsx)("em",{children:r.operator})," ",(0,a.jsxs)("code",{children:['"',r.value,'"']})]},n))}):(0,a.jsx)("p",{className:"ts-no-conditions",children:(0,f.__)("No conditions defined","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-preview-section",children:[(0,a.jsx)("h4",{children:(0,f.__)("Advanced Settings","tracksure")}),(0,a.jsxs)("dl",{children:[(0,a.jsx)("dt",{children:(0,f.__)("Value Type","tracksure")}),(0,a.jsxs)("dd",{children:["none"===A.value_type&&(0,f.__)("No value tracked","tracksure"),"fixed"===A.value_type&&`${(0,f.__)("Fixed:","tracksure")} $${A.value}`,"dynamic"===A.value_type&&(0,f.__)("Dynamic (from transaction)","tracksure")]}),(0,a.jsx)("dt",{children:(0,f.__)("Attribution Window","tracksure")}),(0,a.jsxs)("dd",{children:[A.attribution_window," ",(0,f.__)("days","tracksure")]}),(0,a.jsx)("dt",{children:(0,f.__)("Frequency","tracksure")}),(0,a.jsxs)("dd",{children:["unlimited"===A.frequency&&(0,f.__)("Unlimited","tracksure"),"session"===A.frequency&&(0,f.__)("Once per session","tracksure"),"once"===A.frequency&&(0,f.__)("Once per visitor","tracksure")]})]})]})]})})]})});default:return null}})()]}),(0,a.jsxs)("div",{className:"ts-builder-actions",children:[(0,a.jsx)("div",{className:"ts-actions-left",children:!u&&(0,a.jsxs)(V.$,{variant:"outline",onClick:()=>{const r=C-1;if(r>=0){const n=Q[r];n&&(i(n.id),c({}))}},children:[(0,a.jsx)(m.I,{name:"ChevronLeft",size:16}),(0,f.__)("Back","tracksure")]})}),(0,a.jsxs)("div",{className:"ts-actions-right",children:[(0,a.jsxs)(V.$,{variant:"ghost",onClick:()=>{g(!0),localStorage.setItem("tracksure_goal_draft",JSON.stringify(A))},children:[(0,a.jsx)(m.I,{name:"Save",size:16}),(0,f.__)("Save Draft","tracksure")]}),E?(0,a.jsxs)(a.Fragment,{children:[o&&(0,a.jsxs)(V.$,{variant:"outline",onClick:()=>{o&&h()&&o(A)},children:[(0,a.jsx)(m.I,{name:"Bookmark",size:16}),(0,f.__)("Save as Template","tracksure")]}),(0,a.jsxs)(V.$,{variant:"primary",onClick:()=>{h()&&(e(A),localStorage.removeItem("tracksure_goal_draft"),g(!1))},children:[(0,a.jsx)(m.I,{name:"Check",size:16}),(0,f.__)("Create Goal","tracksure")]})]}):(0,a.jsxs)(V.$,{variant:"primary",onClick:()=>{if(x(s)){const r=C+1;if(r<Q.length){const n=Q[r];n&&i(n.id)}}},children:[(0,f.__)("Next","tracksure"),(0,a.jsx)(m.I,{name:"ChevronRight",size:16})]})]})]})]})})};var rr=e(96478),nr={};nr.styleTagTransform=q(),nr.setAttributes=I(),nr.insert=z().bind(null,"head"),nr.domAPI=w(),nr.insertStyleElement=T();_()(rr.A,nr);rr.A&&rr.A.locals&&rr.A.locals;const er=({selectedGoals:r,allGoals:n,onActionComplete:e,onSelectionChange:o})=>{const[s,i]=(0,t.useState)(!1),[A,l]=(0,t.useState)(null);(0,t.useEffect)(()=>{const r=r=>{"Escape"===r.key&&A&&l(null)};if(A)return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[A]);const d=async n=>{if(0!==r.length)if("delete"!==n)if("disable"!==n){i(!0);try{"export"===n?await p():await c(n)}catch(r){alert((0,f.__)("Failed to perform bulk action. Please try again.","tracksure"))}finally{i(!1)}}else l("disable");else l("delete");else alert((0,f.__)("Please select at least one goal.","tracksure"))},c=async n=>{const a="enable"===n?1:0,t=r.map(r=>window.wp.apiFetch({path:`/ts/v1/goals/${r}`,method:"POST",data:{is_active:a}}));await Promise.all(t),o([]),e(),alert(1===r.length?(0,f.__)("Goal updated successfully.","tracksure"):(0,f.__)(`${r.length} goals updated successfully.`,"tracksure"))},p=async()=>{const e=n.filter(n=>r.includes(n.goal_id)),a={version:"2.1.0",exported_at:(new Date).toISOString(),goals:e.map(r=>({name:r.name,description:r.description,category:r.category,trigger_type:r.trigger_type,event_name:r.event_name,conditions:r.conditions,match_logic:r.match_logic,value_type:r.value_type,value:r.value,attribution_window:r.attribution_window,frequency:r.frequency,is_active:r.is_active}))},t=new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),s=URL.createObjectURL(t),i=document.createElement("a");i.href=s,i.download=`tracksure-goals-${Date.now()}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(s),alert(1===r.length?(0,f.__)("Goal exported successfully.","tracksure"):(0,f.__)(`${r.length} goals exported successfully.`,"tracksure")),o([])},g=r.length===n.length&&n.length>0,m=r.length>0&&r.length<n.length;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"goal-bulk-actions",role:"toolbar","aria-label":(0,f.__)("Bulk actions for goals","tracksure"),children:[(0,a.jsx)("div",{className:"bulk-actions-left",children:(0,a.jsxs)("label",{className:"bulk-select-all",children:[(0,a.jsx)("input",{type:"checkbox",checked:g,ref:r=>{r&&(r.indeterminate=m)},onChange:()=>{r.length===n.length?o([]):o(n.map(r=>r.goal_id))},disabled:0===n.length,"aria-label":g?(0,f.__)("Deselect all goals","tracksure"):(0,f.__)("Select all goals","tracksure")}),(0,a.jsx)("span",{children:r.length>0?(0,f.__)(`${r.length} selected`,"tracksure"):(0,f.__)("Select all","tracksure")})]})}),r.length>0&&(0,a.jsxs)("div",{className:"bulk-actions-right",role:"group","aria-label":(0,f.__)("Available bulk actions","tracksure"),children:[(0,a.jsxs)("button",{className:"bulk-action-btn",onClick:()=>d("enable"),disabled:s,"aria-label":(0,f.__)("Enable selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-yes-alt","aria-hidden":"true"}),(0,f.__)("Enable","tracksure")]}),(0,a.jsxs)("button",{className:"bulk-action-btn",onClick:()=>d("disable"),disabled:s,"aria-label":(0,f.__)("Disable selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-dismiss","aria-hidden":"true"}),(0,f.__)("Disable","tracksure")]}),(0,a.jsxs)("button",{className:"bulk-action-btn",onClick:()=>d("export"),disabled:s,"aria-label":(0,f.__)("Export selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-download","aria-hidden":"true"}),(0,f.__)("Export","tracksure")]}),(0,a.jsxs)("button",{className:"bulk-action-btn bulk-delete",onClick:()=>d("delete"),disabled:s,"aria-label":(0,f.__)("Delete selected goals","tracksure"),children:[(0,a.jsx)("span",{className:"dashicons dashicons-trash","aria-hidden":"true"}),(0,f.__)("Delete","tracksure")]})]})]}),A&&(0,a.jsx)("div",{className:"bulk-confirm-dialog-overlay",onClick:()=>l(null),role:"dialog","aria-modal":"true","aria-labelledby":"bulk-confirm-title",children:(0,a.jsxs)("div",{className:"bulk-confirm-dialog",onClick:r=>r.stopPropagation(),children:[(0,a.jsx)("h3",{id:"bulk-confirm-title",children:"delete"===A?(0,f.__)("Confirm Deletion","tracksure"):(0,f.__)("Confirm Disable","tracksure")}),(0,a.jsx)("p",{children:"delete"===A?1===r.length?(0,f.__)("Are you sure you want to delete this goal? This action cannot be undone.","tracksure"):`${(0,f.__)("Are you sure you want to delete","tracksure")} ${r.length} ${(0,f.__)("goals? This action cannot be undone.","tracksure")}`:1===r.length?(0,f.__)("Are you sure you want to disable this goal?","tracksure"):`${(0,f.__)("Are you sure you want to disable","tracksure")} ${r.length} ${(0,f.__)("goals?","tracksure")}`}),(0,a.jsxs)("div",{className:"bulk-confirm-actions",children:[(0,a.jsx)("button",{className:"button",onClick:()=>l(null),children:(0,f.__)("Cancel","tracksure")}),(0,a.jsx)("button",{className:"button button-primary",onClick:"delete"===A?async()=>{l(null),i(!0);try{const n=r.map(r=>window.wp.apiFetch({path:`/ts/v1/goals/${r}`,method:"DELETE"}));await Promise.all(n),o([]),e(),alert(1===r.length?(0,f.__)("Goal deleted successfully.","tracksure"):(0,f.__)(`${r.length} goals deleted successfully.`,"tracksure"))}catch(r){alert((0,f.__)("Failed to delete goals. Please try again.","tracksure"))}finally{i(!1)}}:()=>{l(null),c("disable")},autoFocus:!0,children:(0,f.__)("Confirm","tracksure")})]})]})})]})};var ar=e(21421),tr={};tr.styleTagTransform=q(),tr.setAttributes=I(),tr.insert=z().bind(null,"head"),tr.domAPI=w(),tr.insertStyleElement=T();_()(ar.A,tr);ar.A&&ar.A.locals&&ar.A.locals;const or=({filters:r,onFiltersChange:n,onReset:e})=>{const[o,s]=(0,t.useState)(!1),[i,A]=(0,t.useState)(r.search);(0,t.useEffect)(()=>{const e=setTimeout(()=>{i!==r.search&&n({...r,search:i})},300);return()=>clearTimeout(e)},[i]);const l=(e,a)=>{n({...r,[e]:a})},d=""!==r.search||"all"!==r.category||"all"!==r.triggerType||"all"!==r.status||"name"!==r.sortBy||"asc"!==r.sortOrder;return(0,a.jsxs)("div",{className:"goal-filters",role:"search","aria-label":(0,f.__)("Filter and search goals","tracksure"),children:[(0,a.jsxs)("div",{className:"filters-header",children:[(0,a.jsxs)("div",{className:"filters-search",children:[(0,a.jsx)("span",{className:"dashicons dashicons-search","aria-hidden":"true"}),(0,a.jsx)("input",{type:"text",placeholder:(0,f.__)("Search goals...","tracksure"),value:i,onChange:r=>A(r.target.value),className:"search-input","aria-label":(0,f.__)("Search goals","tracksure")}),i&&(0,a.jsx)("button",{className:"clear-search",onClick:()=>A(""),title:(0,f.__)("Clear search","tracksure"),"aria-label":(0,f.__)("Clear search","tracksure"),children:(0,a.jsx)("span",{className:"dashicons dashicons-no-alt","aria-hidden":"true"})})]}),(0,a.jsxs)("div",{className:"filters-actions",children:[(0,a.jsxs)("button",{className:"filters-toggle "+(d?"active":""),onClick:()=>s(!o),"aria-expanded":o,"aria-controls":"filter-panel",children:[(0,a.jsx)("span",{className:"dashicons dashicons-filter","aria-hidden":"true"}),(0,f.__)("Filters","tracksure"),d&&(0,a.jsx)("span",{className:"filter-badge","aria-label":(0,f.__)("Active filters","tracksure")})]}),d&&(0,a.jsx)("button",{className:"button",onClick:e,"aria-label":(0,f.__)("Reset all filters","tracksure"),children:(0,f.__)("Reset","tracksure")})]})]}),o&&(0,a.jsxs)("div",{className:"filters-panel",id:"filter-panel",children:[(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-category",children:(0,f.__)("Category","tracksure")}),(0,a.jsxs)("select",{id:"filter-category",value:r.category,onChange:r=>l("category",r.target.value),children:[(0,a.jsx)("option",{value:"all",children:(0,f.__)("All Categories","tracksure")}),(0,a.jsx)("option",{value:"engagement",children:(0,f.__)("Engagement","tracksure")}),(0,a.jsx)("option",{value:"leads",children:(0,f.__)("Leads","tracksure")}),(0,a.jsx)("option",{value:"ecommerce",children:(0,f.__)("E-commerce","tracksure")}),(0,a.jsx)("option",{value:"content",children:(0,f.__)("Content","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-trigger",children:(0,f.__)("Trigger Type","tracksure")}),(0,a.jsxs)("select",{id:"filter-trigger",value:r.triggerType,onChange:r=>l("triggerType",r.target.value),children:[(0,a.jsx)("option",{value:"all",children:(0,f.__)("All Triggers","tracksure")}),(0,a.jsx)("option",{value:"page_visit",children:(0,f.__)("Page Visit","tracksure")}),(0,a.jsx)("option",{value:"element_click",children:(0,f.__)("Element Click","tracksure")}),(0,a.jsx)("option",{value:"form_submission",children:(0,f.__)("Form Submission","tracksure")}),(0,a.jsx)("option",{value:"scroll_depth",children:(0,f.__)("Scroll Depth","tracksure")}),(0,a.jsx)("option",{value:"time_on_page",children:(0,f.__)("Time on Page","tracksure")}),(0,a.jsx)("option",{value:"custom_event",children:(0,f.__)("Custom Event","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-status",children:(0,f.__)("Status","tracksure")}),(0,a.jsxs)("select",{id:"filter-status",value:r.status,onChange:r=>l("status",r.target.value),children:[(0,a.jsx)("option",{value:"all",children:(0,f.__)("All Status","tracksure")}),(0,a.jsx)("option",{value:"active",children:(0,f.__)("Active","tracksure")}),(0,a.jsx)("option",{value:"inactive",children:(0,f.__)("Inactive","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-sortby",children:(0,f.__)("Sort By","tracksure")}),(0,a.jsxs)("select",{id:"filter-sortby",value:r.sortBy,onChange:r=>l("sortBy",r.target.value),children:[(0,a.jsx)("option",{value:"name",children:(0,f.__)("Name","tracksure")}),(0,a.jsx)("option",{value:"created_at",children:(0,f.__)("Date Created","tracksure")}),(0,a.jsx)("option",{value:"conversions",children:(0,f.__)("Conversions","tracksure")})]})]}),(0,a.jsxs)("div",{className:"filter-group",children:[(0,a.jsx)("label",{htmlFor:"filter-order",children:(0,f.__)("Order","tracksure")}),(0,a.jsxs)("select",{id:"filter-order",value:r.sortOrder,onChange:r=>l("sortOrder",r.target.value),children:[(0,a.jsx)("option",{value:"asc",children:(0,f.__)("Ascending","tracksure")}),(0,a.jsx)("option",{value:"desc",children:(0,f.__)("Descending","tracksure")})]})]})]})]})};var sr=e(27691),ir={};ir.styleTagTransform=q(),ir.setAttributes=I(),ir.insert=z().bind(null,"head"),ir.domAPI=w(),ir.insertStyleElement=T();_()(sr.A,ir);sr.A&&sr.A.locals&&sr.A.locals;const Ar=({onImport:r,onClose:n})=>{const[e,o]=(0,t.useState)(!1),[s,i]=(0,t.useState)(!1),[A,l]=(0,t.useState)(null),[d,c]=(0,t.useState)([]),[p,g]=(0,t.useState)(!1),m=(0,t.useRef)(null),C=async r=>{try{const n=await r.text(),e=JSON.parse(n),a=(r=>{const n=[];if(!r||"object"!=typeof r)return n.push((0,f.__)("Invalid JSON format","tracksure")),{valid:!1,errors:n};const e=r;return e.goals&&Array.isArray(e.goals)?0===e.goals.length?(n.push((0,f.__)("Import file contains no goals","tracksure")),{valid:!1,errors:n}):(e.goals.forEach((r,e)=>{r.name||n.push((0,f.__)(`Goal ${e+1}: Missing name`,"tracksure")),r.category||n.push((0,f.__)(`Goal ${e+1}: Missing category`,"tracksure")),r.trigger_type||n.push((0,f.__)(`Goal ${e+1}: Missing trigger type`,"tracksure"))}),{valid:0===n.length,errors:n}):(n.push((0,f.__)("No goals array found in import file","tracksure")),{valid:!1,errors:n})})(e);if(!a.valid)return void l({success:!1,imported:0,skipped:0,errors:a.errors});const t=e.goals.map(r=>({name:String(r.name||""),description:String(r.description||""),event_name:String(r.event_name||r.trigger_type||""),trigger_type:r.trigger_type||"custom_event",category:r.category||void 0,conditions:Array.isArray(r.conditions)?r.conditions:[],match_logic:r.match_logic||"all",value_type:r.value_type||"none",value:"number"==typeof r.conversion_value?r.conversion_value:void 0,frequency:["once","session","unlimited"].includes(String(r.frequency))?String(r.frequency):"once",is_active:void 0===r.is_active||Boolean(r.is_active)}));c(t),g(!0)}catch(r){l({success:!1,imported:0,skipped:0,errors:[(0,f.__)("Failed to parse JSON file. Please check the file format.","tracksure")]})}},u=r=>{r.name.endsWith(".json")?C(r):l({success:!1,imported:0,skipped:0,errors:[(0,f.__)("Please select a JSON file","tracksure")]})};return(0,a.jsxs)("div",{className:"goal-import-modal",role:"dialog","aria-modal":"true","aria-labelledby":"import-title",children:[(0,a.jsxs)("div",{className:"goal-import-header",children:[(0,a.jsx)("h2",{id:"import-title",children:(0,f.__)("Import Goals","tracksure")}),(0,a.jsx)("button",{className:"goal-import-close",onClick:n,"aria-label":(0,f.__)("Close import dialog","tracksure"),children:(0,a.jsx)("span",{className:"dashicons dashicons-no-alt","aria-hidden":"true"})})]}),(0,a.jsxs)("div",{className:"goal-import-body",children:[!p&&!A&&(0,a.jsxs)("div",{className:"goal-import-dropzone "+(e?"dragging":""),onDrop:r=>{r.preventDefault(),o(!1);const n=Array.from(r.dataTransfer.files);n.length>0&&u(n[0])},onDragOver:r=>{r.preventDefault(),o(!0)},onDragLeave:()=>{o(!1)},onClick:()=>m.current?.click(),children:[(0,a.jsx)("span",{className:"dashicons dashicons-upload","aria-hidden":"true"}),(0,a.jsx)("h3",{children:(0,f.__)("Drop JSON file here","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("or click to browse files","tracksure")}),(0,a.jsx)("input",{ref:m,type:"file",accept:".json",onChange:r=>{const n=r.target.files;n&&n.length>0&&u(n[0])},style:{display:"none"},"aria-label":(0,f.__)("Select JSON file","tracksure")})]}),p&&(0,a.jsxs)("div",{className:"goal-import-preview",children:[(0,a.jsx)("h3",{children:(0,f.__)("Preview Import","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)(`${d.length} goal(s) will be imported:`,"tracksure")}),(0,a.jsx)("div",{className:"preview-list",children:d.map((r,n)=>(0,a.jsxs)("div",{className:"preview-item",children:[(0,a.jsxs)("div",{className:"preview-item-header",children:[(0,a.jsx)("strong",{children:r.name}),(0,a.jsx)("span",{className:"preview-badge",children:r.category})]}),(0,a.jsx)("p",{className:"preview-description",children:r.description}),(0,a.jsxs)("div",{className:"preview-meta",children:[(0,a.jsx)("span",{children:r.trigger_type.replace(/_/g," ")}),r.conditions.length>0&&(0,a.jsxs)("span",{children:[r.conditions.length," conditions"]})]})]},n))}),(0,a.jsxs)("div",{className:"goal-import-actions",children:[(0,a.jsx)("button",{className:"button",onClick:()=>{g(!1),c([])},disabled:s,children:(0,f.__)("Cancel","tracksure")}),(0,a.jsx)("button",{className:"button button-primary",onClick:async()=>{i(!0);try{await r(d),l({success:!0,imported:d.length,skipped:0,errors:[]}),g(!1),setTimeout(()=>{n()},2e3)}catch(r){l({success:!1,imported:0,skipped:d.length,errors:[(0,f.__)("Failed to import goals. Please try again.","tracksure")]})}finally{i(!1)}},disabled:s,children:s?(0,f.__)("Importing...","tracksure"):(0,f.__)(`Import ${d.length} Goal(s)`,"tracksure")})]})]}),A&&(0,a.jsxs)("div",{className:"goal-import-result "+(A.success?"success":"error"),children:[(0,a.jsx)("span",{className:"dashicons "+(A.success?"dashicons-yes-alt":"dashicons-warning"),"aria-hidden":"true"}),(0,a.jsx)("h3",{children:A.success?(0,f.__)("Import Successful!","tracksure"):(0,f.__)("Import Failed","tracksure")}),A.success?(0,a.jsx)("p",{children:(0,f.__)(`Successfully imported ${A.imported} goal(s)`,"tracksure")}):(0,a.jsx)("div",{className:"error-list",children:A.errors.map((r,n)=>(0,a.jsx)("p",{className:"error-message",children:r},n))}),(0,a.jsx)("button",{className:"button button-primary",onClick:n,children:(0,f.__)("Close","tracksure")})]})]})]})};var lr=e(12577),dr={};dr.styleTagTransform=q(),dr.setAttributes=I(),dr.insert=z().bind(null,"head"),dr.domAPI=w(),dr.insertStyleElement=T();_()(lr.A,dr);lr.A&&lr.A.locals&&lr.A.locals;const cr=()=>{const{dateRange:r}=(0,o.n)(),{data:n,isLoading:e,error:i,refetch:A}=(0,s.S)("getGoalsOverview",{start_date:(0,P.TJ)(r.start),end_date:(0,P.TJ)(r.end)},{staleTime:3e4}),l=(0,t.useMemo)(()=>{if(!n?.conversions_trend)return null;const r=n.total_conversions,e=n.conversions_trend.previous_period||0;if(0===e)return{direction:"neutral",percentage:0};const a=(r-e)/e*100;return{direction:a>0?"up":a<0?"down":"neutral",percentage:Math.abs(Math.round(a))}},[n]),d=(0,t.useMemo)(()=>{if(!n?.value_trend)return null;const r=n.total_value,e=n.value_trend.previous_period||0;if(0===e)return{direction:"neutral",percentage:0};const a=(r-e)/e*100;return{direction:a>0?"up":a<0?"down":"neutral",percentage:Math.abs(Math.round(a))}},[n]),c=(0,t.useMemo)(()=>{if(!n?.rate_trend)return null;const r=n.conversion_rate,e=n.rate_trend.previous_period||0;if(0===e)return{direction:"neutral",percentage:0};const a=(r-e)/e*100;return{direction:a>0?"up":a<0?"down":"neutral",percentage:Math.abs(Math.round(a))}},[n]);return e?(0,a.jsx)("div",{className:"ts-goals-overview",children:(0,a.jsxs)("div",{className:"ts-goals-overview__kpis",children:[(0,a.jsx)(g.or,{}),(0,a.jsx)(g.or,{}),(0,a.jsx)(g.or,{}),(0,a.jsx)(g.or,{})]})}):i?(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-empty-state ts-empty-state--error",children:[(0,a.jsx)(m.I,{name:"AlertCircle",size:48,color:"var(--ts-error)"}),(0,a.jsx)("h3",{children:(0,f.__)("Failed to load goals overview","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("There was an error loading the dashboard data.","tracksure")}),(0,a.jsx)("button",{onClick:A,className:"ts-btn ts-btn--primary",children:(0,f.__)("Retry","tracksure")})]})})}):n?(0,a.jsxs)("div",{className:"ts-goals-overview",children:[(0,a.jsxs)("div",{className:"ts-goals-overview__kpis",children:[(0,a.jsx)(p.l,{metric:{label:(0,f.__)("All Conversions","tracksure"),value:n.total_conversions,format:"number",change:l?.percentage||0}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Conversion Value","tracksure"),value:n.total_value,format:"currency",change:d?.percentage||0}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Avg Conversion Rate","tracksure"),value:n.conversion_rate,format:"percent",change:c?.percentage||0}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Active Goals","tracksure"),value:n.active_goals,format:"number"}})]}),n.daily_conversions&&n.daily_conversions.length>0&&(0,a.jsxs)(C.Zp,{className:"ts-goals-overview__chart",children:[(0,a.jsxs)(C.aR,{children:[(0,a.jsx)("h3",{children:(0,f.__)("Conversions Trend","tracksure")}),(0,a.jsx)("span",{className:"ts-card-header__subtitle",children:(0,f.__)("Last 30 days","tracksure")})]}),(0,a.jsx)(C.bw,{children:(0,a.jsx)("div",{className:"ts-simple-chart",children:(0,a.jsx)("div",{className:"ts-simple-chart__bars",children:(()=>{const r=Math.max(...n.daily_conversions.map(r=>r.conversions));return n.daily_conversions.map((n,e)=>{const t=r>0?n.conversions/r*100:0;return(0,a.jsxs)("div",{className:"ts-simple-chart__bar-wrapper",children:[(0,a.jsx)("div",{className:"ts-simple-chart__bar",style:{height:`${t}%`},title:`${n.date}: ${n.conversions} conversions`,children:(0,a.jsx)("span",{className:"ts-simple-chart__bar-value",children:n.conversions})}),(0,a.jsx)("span",{className:"ts-simple-chart__bar-label",children:new Date(n.date+"T00:00:00").toLocaleDateString(void 0,{month:"short",day:"numeric"})})]},e)})})()})})})]}),n.top_goals&&n.top_goals.length>0&&(0,a.jsxs)(C.Zp,{className:"ts-goals-overview__top-goals",children:[(0,a.jsxs)(C.aR,{children:[(0,a.jsx)("h3",{children:(0,f.__)("Top Performing Goals","tracksure")}),(0,a.jsx)("span",{className:"ts-card-header__subtitle",children:(0,f.__)("By conversion count","tracksure")})]}),(0,a.jsx)(C.bw,{children:(0,a.jsx)("div",{className:"ts-top-goals-list",children:n.top_goals.slice(0,5).map((r,n)=>(0,a.jsxs)("div",{className:"ts-top-goal",children:[(0,a.jsxs)("div",{className:"ts-top-goal__rank",children:["#",n+1]}),(0,a.jsxs)("div",{className:"ts-top-goal__info",children:[(0,a.jsx)("div",{className:"ts-top-goal__name",children:r.name}),(0,a.jsx)("div",{className:"ts-top-goal__type",children:r.trigger_type})]}),(0,a.jsxs)("div",{className:"ts-top-goal__metrics",children:[(0,a.jsxs)("div",{className:"ts-top-goal__conversions",children:[(0,a.jsx)(m.I,{name:"CheckCircle",size:16}),r.conversions.toLocaleString()]}),r.value>0&&(0,a.jsx)("div",{className:"ts-top-goal__value",children:(0,P.vv)(r.value)})]})]},r.goal_id))})})]}),0===n.total_conversions&&(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-empty-state",children:[(0,a.jsx)(m.I,{name:"Inbox",size:64,color:"var(--ts-text-muted)"}),(0,a.jsx)("h3",{children:(0,f.__)("No conversions yet","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Start tracking conversions by creating your first goal.","tracksure")})]})})})]}):null};var pr=e(76840),gr={};gr.styleTagTransform=q(),gr.setAttributes=I(),gr.insert=z().bind(null,"head"),gr.domAPI=w(),gr.insertStyleElement=T();_()(pr.A,gr);pr.A&&pr.A.locals&&pr.A.locals;const mr=()=>{const{config:r,dateRange:n}=(0,o.n)(),[e,v]=(0,t.useState)("overview"),[h,b]=(0,t.useState)("list"),[B,k]=(0,t.useState)("all"),[_,y]=(0,t.useState)(""),[w,j]=(0,t.useState)(!1),[z,N]=(0,t.useState)(null),[I,S]=(0,t.useState)(null),[T,D]=(0,t.useState)([]),[q,Y]=(0,t.useState)(!1),[F,R]=(0,t.useState)({search:"",category:"all",triggerType:"all",status:"all",sortBy:"name",sortOrder:"asc"}),[W,L]=(0,t.useState)(null),[U,O]=(0,t.useState)(null),[Z,V]=(0,t.useState)(null),{data:$,isLoading:X,error:Q,refetch:H}=(0,s.S)("getGoals",{},{staleTime:3e4,retry:2,onError:r=>{}}),J=(0,t.useMemo)(()=>$?.goals||[],[$]),rr=J.map(r=>r.goal_id).join(","),nr=(0,t.useMemo)(()=>({goal_ids:rr,date_start:(0,P.TJ)(n.start),date_end:(0,P.TJ)(n.end)}),[rr,n]),{data:ar,isLoading:tr}=(0,s.S)("getGoalsPerformance",nr,{enabled:J.length>0&&rr.length>0,staleTime:3e4,refetchInterval:3e5,retry:2,onError:r=>{}}),sr=(0,t.useMemo)(()=>ar?.performance||{},[ar]),ir=Q?Q.message:null,lr=async n=>{try{const a=function(r){const n=[];return r.name&&""!==r.name.trim()||n.push("Goal name is required"),r.event_name&&""!==r.event_name.trim()||n.push("Event name is required"),r.trigger_type?A.includes(r.trigger_type)||n.push(`Invalid trigger type: ${r.trigger_type}. Allowed: ${A.join(", ")}`):n.push("Trigger type is required"),r.conditions&&Array.isArray(r.conditions)&&r.conditions.forEach((r,e)=>{const a=e+1;if(r.param&&""!==r.param.trim()||n.push(`Condition #${a}: Parameter (param) is required`),r.operator?l.includes(r.operator)||n.push(`Condition #${a}: Invalid operator '${r.operator}'. Allowed: ${l.join(", ")}`):n.push(`Condition #${a}: Operator is required`),void 0!==r.value&&""!==r.value||n.push(`Condition #${a}: Value is required`),"matches_regex"===r.operator)try{new RegExp(String(r.value))}catch(e){n.push(`Condition #${a}: Invalid regex pattern: ${r.value}`)}}),r.match_logic&&!["all","any"].includes(r.match_logic)&&n.push(`Match logic must be 'all' or 'any', got: ${r.match_logic}`),r.value_type&&!d.includes(r.value_type)&&n.push(`Invalid value_type. Must be: ${d.join(", ")}`),"fixed"===r.value_type&&(void 0===r.value||null===r.value?n.push('Fixed value is required when value_type is "fixed"'):isNaN(Number(r.value))&&n.push("Fixed value must be a number")),r.frequency&&!c.includes(r.frequency)&&n.push(`Invalid frequency. Must be: ${c.join(", ")}`),{valid:0===n.length,errors:n}}(n);if(!a.valid){const r=0===(e=a.errors).length?"":1===e.length?e[0]:`Please fix the following errors:\n• ${e.join("\n• ")}`;throw new Error("Goal validation failed:\n\n"+r)}const t=new i.n(r);if("edit"===W&&Z){const r=Z.goal_id;await t.put(`/goals/${r}`,n)}else await t.post("/goals",n);H(),L(null),O(null),V(null),b("list")}catch(r){throw r}var e},dr=()=>{let r=[];return r="all"===B?E:x(B),_?(r=>{const n=r.toLowerCase();return E.filter(r=>r.name.toLowerCase().includes(n)||r.description.toLowerCase().includes(n))})(_):r},pr=(0,t.useMemo)(()=>{let r=[...J];if(F.search){const n=F.search.toLowerCase();r=r.filter(r=>r.name&&r.name.toLowerCase().includes(n)||r.description&&r.description.toLowerCase().includes(n))}return"all"!==F.category&&(r=r.filter(r=>r.category===F.category)),"all"!==F.triggerType&&(r=r.filter(r=>r.trigger_type===F.triggerType)),"all"!==F.status&&(r=r.filter(r=>r.is_active===("active"===F.status))),r.sort((r,n)=>{let e=0;switch(F.sortBy){case"name":e=(r.name||"").localeCompare(n.name||"");break;case"created_at":e=new Date(r.created_at.replace(" ","T")+"Z").getTime()-new Date(n.created_at.replace(" ","T")+"Z").getTime();break;case"conversions":e=(sr[r.goal_id]?.conversions||0)-(sr[n.goal_id]?.conversions||0);break}return"asc"===F.sortOrder?e:-e}),r},[J,F,sr]),gr=()=>{R({search:"",category:"all",triggerType:"all",status:"all",sortBy:"name",sortOrder:"asc"})};return(0,a.jsxs)("div",{className:"ts-goals-page",children:[(0,a.jsxs)("div",{className:"ts-goals-header",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"ts-page-title",children:(0,f.__)("Goals","tracksure")}),(0,a.jsx)("p",{className:"ts-page-subtitle",children:(0,f.__)("Track conversions and measure what matters most","tracksure")})]}),(0,a.jsxs)("div",{className:"ts-goals-header-actions",children:["goals"===e&&"list"===h&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.$n,{variant:"ghost",onClick:()=>Y(!0),icon:(0,a.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M10 14V6M10 6L7 9M10 6L13 9M4 16h12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),children:(0,f.__)("Import Goals","tracksure")}),(0,a.jsx)(C.$n,{variant:"outline",onClick:()=>{v("templates"),b("templates")},icon:(0,a.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M4 6h12M4 10h12M4 14h12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),children:(0,f.__)("Browse Templates","tracksure")}),(0,a.jsx)(C.$n,{variant:"primary",onClick:()=>b("custom-builder"),icon:(0,a.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M10 5v10M5 10h10",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),children:(0,f.__)("Create Custom Goal","tracksure")})]}),"list"!==h&&(0,a.jsx)(C.$n,{variant:"ghost",onClick:()=>{b("list"),v("goals")},children:(0,f.__)("← Back to Goals","tracksure")})]})]}),(0,a.jsxs)("div",{className:"ts-goals-tabs",children:[(0,a.jsxs)("button",{className:"ts-goals-tab "+("overview"===e?"ts-goals-tab--active":""),onClick:()=>{v("overview"),b("list")},children:[(0,a.jsx)(m.I,{name:"BarChart3",size:18}),(0,f.__)("Overview","tracksure")]}),(0,a.jsxs)("button",{className:"ts-goals-tab "+("goals"===e?"ts-goals-tab--active":""),onClick:()=>{v("goals"),b("list")},children:[(0,a.jsx)(m.I,{name:"Target",size:18}),(0,f.__)("All Goals","tracksure"),J.length>0&&(0,a.jsx)(C.Ex,{variant:"default",size:"sm",children:J.length})]}),(0,a.jsxs)("button",{className:"ts-goals-tab "+("templates"===e?"ts-goals-tab--active":""),onClick:()=>{v("templates"),b("templates")},children:[(0,a.jsx)(m.I,{name:"LayoutTemplate",size:18}),(0,f.__)("Templates","tracksure")]})]}),ir&&(0,a.jsxs)("div",{className:"ts-error-banner",children:[(0,a.jsx)(m.I,{name:"AlertTriangle",size:20,color:"warning"}),(0,a.jsx)("p",{children:ir})]}),"overview"===e&&(0,a.jsx)(cr,{}),"goals"===e&&(0,a.jsxs)(a.Fragment,{children:["list"===h&&(()=>{if(X)return(0,a.jsxs)("div",{className:"ts-goals-loading",children:[(0,a.jsx)("div",{className:"ts-goals-summary",children:[1,2,3].map(r=>(0,a.jsx)(g.or,{},r))}),(0,a.jsx)("div",{className:"ts-goals-table",children:(0,a.jsx)(g.cU,{rows:6,columns:5})})]});if(0===J.length)return(0,a.jsxs)("div",{className:"ts-empty-state",children:[(0,a.jsx)("div",{className:"ts-empty-icon",children:(0,a.jsx)(m.I,{name:"Target",size:64,color:"muted"})}),(0,a.jsx)("h2",{children:(0,f.__)("No goals yet","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Start tracking conversions by creating your first goal from a template or building a custom one.","tracksure")}),(0,a.jsxs)("div",{style:{display:"flex",gap:"12px",justifyContent:"center",marginTop:"16px"},children:[(0,a.jsx)(C.$n,{variant:"primary",onClick:()=>b("templates"),children:(0,f.__)("Browse Templates","tracksure")}),(0,a.jsx)(C.$n,{variant:"outline",onClick:()=>b("custom-builder"),children:(0,f.__)("Create Custom Goal","tracksure")})]})]});if(0===pr.length&&J.length>0)return(0,a.jsxs)("div",{style:{textAlign:"center",padding:"40px 20px"},children:[(0,a.jsx)("h2",{children:(0,f.__)("No Goals Found","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Try adjusting your filters or search query.","tracksure")}),(0,a.jsx)(C.$n,{onClick:gr,children:(0,f.__)("Clear Filters","tracksure")})]});const n=pr.filter(r=>r.is_active),e=n.reduce((r,n)=>{const e=sr[n.goal_id];return r+(e?.conversions||0)},0),t=n.reduce((r,n)=>{const e=sr[n.goal_id];return r+(e?.revenue||0)},0),o=n.filter(r=>"none"!==r.value_type).length,s=n.length>0?n.reduce((r,n)=>{const e=sr[n.goal_id];return r+(e?.conversion_rate||0)},0)/n.length:0;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"ts-goals-summary ts-goals-summary-row",children:[(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Total Achievements","tracksure"),value:e,format:"number"}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Active Goals","tracksure"),value:n.length,format:"number"}}),(0,a.jsx)(p.l,{metric:{label:t>0?(0,f.__)("Total Value","tracksure"):(0,f.__)("Goals with Value","tracksure"),value:t>0?t:o,format:t>0?"currency":"number",currency:(0,P._1)()}}),(0,a.jsx)(p.l,{metric:{label:(0,f.__)("Avg Conversion Rate","tracksure"),value:s,format:"percent"}})]}),(0,a.jsx)(or,{filters:F,onFiltersChange:R,onReset:gr}),(0,a.jsx)(er,{selectedGoals:T,allGoals:pr,onActionComplete:H,onSelectionChange:D}),0===pr.length?(0,a.jsxs)("div",{className:"ts-empty-state",children:[(0,a.jsx)("div",{className:"ts-empty-icon",children:(0,a.jsx)(m.I,{name:"Search",size:64,color:"muted"})}),(0,a.jsx)("h2",{children:(0,f.__)("No Goals Found","tracksure")}),(0,a.jsx)("p",{children:(0,f.__)("Try adjusting your filters or search query.","tracksure")}),(0,a.jsx)(C.$n,{variant:"outline",onClick:gr,children:(0,f.__)("Clear Filters","tracksure")})]}):(0,a.jsx)("div",{className:"ts-goals-grid",children:pr.map(n=>{const e=sr[n.goal_id],t=T.includes(n.goal_id);return(0,a.jsxs)("div",{className:"ts-goal-card "+(t?"ts-goal-card-selected":""),children:[(0,a.jsx)("div",{className:"ts-goal-checkbox",children:(0,a.jsx)("input",{type:"checkbox",checked:t,onChange:r=>{r.target.checked?D([...T,n.goal_id]):D(T.filter(r=>r!==n.goal_id))}})}),(0,a.jsxs)("div",{className:"ts-goal-header",children:[(0,a.jsxs)("div",{className:"ts-goal-title-section",children:[(0,a.jsxs)("div",{className:"ts-goal-title-row",children:[(0,a.jsx)("h3",{className:"ts-goal-name",children:n.name}),(0,a.jsx)("span",{className:"ts-goal-status "+(n.is_active?"ts-active":"ts-inactive"),children:n.is_active?(0,f.__)("Active","tracksure"):(0,f.__)("Inactive","tracksure")})]}),(0,a.jsx)("p",{className:"ts-goal-description",children:n.description})]}),(0,a.jsxs)("div",{className:"ts-goal-actions",children:[(0,a.jsx)("button",{className:"ts-btn-icon",onClick:()=>{L("edit"),V(n)},title:(0,f.__)("Edit goal","tracksure"),children:(0,a.jsx)(m.I,{name:"Edit2",size:16})}),(0,a.jsx)("button",{className:"ts-btn-icon",onClick:()=>(async n=>{try{const e=new i.n(r);await e.put(`/goals/${n.goal_id}`,{is_active:n.is_active?0:1}),H()}catch(r){throw r}})(n),title:n.is_active?(0,f.__)("Deactivate","tracksure"):(0,f.__)("Activate","tracksure"),children:(0,a.jsx)(m.I,{name:n.is_active?"Pause":"Play",size:16})}),(0,a.jsx)("button",{className:"ts-btn-icon ts-btn-danger",onClick:()=>{N(n),j(!0)},title:(0,f.__)("Delete goal","tracksure"),children:(0,a.jsx)(m.I,{name:"Trash2",size:16,color:"danger"})})]})]}),(0,a.jsx)("div",{className:"ts-goal-details",children:(0,a.jsxs)("div",{className:"ts-goal-meta",children:[(0,a.jsxs)("span",{className:"ts-goal-event",children:[(0,a.jsx)(m.I,{name:"BarChart2",size:16})," ",n.event_name]}),n.conditions.length>0&&(0,a.jsxs)("span",{className:"ts-goal-conditions",children:[(0,a.jsx)(m.I,{name:"Target",size:16})," ",n.conditions.length," ",1===n.conditions.length?(0,f.__)("condition","tracksure"):(0,f.__)("conditions","tracksure")]})]})}),e?(0,a.jsxs)("div",{className:"ts-goal-performance",children:[(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Conversions","tracksure")}),(0,a.jsx)("span",{className:"ts-goal-stat-value",children:e.conversions.toLocaleString()})]}),"none"!==n.value_type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Revenue","tracksure")}),(0,a.jsx)("span",{className:"ts-goal-stat-value",children:(0,P.vv)(e.revenue)})]}),(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Avg. Value","tracksure")}),(0,a.jsx)("span",{className:"ts-goal-stat-value",children:(0,P.vv)(e.avg_value)})]})]}),(0,a.jsxs)("div",{className:"ts-goal-stat",children:[(0,a.jsx)("span",{className:"ts-goal-stat-label",children:(0,f.__)("Conv. Rate","tracksure")}),(0,a.jsxs)("span",{className:"ts-goal-stat-value",children:[e.conversion_rate.toFixed(2),"%"]})]})]}):tr?(0,a.jsxs)("div",{className:"ts-goal-performance ts-goal-performance--loading",children:[(0,a.jsx)("div",{className:"ts-goal-stat",children:(0,a.jsx)("span",{className:"ts-skeleton ts-skeleton--sm"})}),(0,a.jsx)("div",{className:"ts-goal-stat",children:(0,a.jsx)("span",{className:"ts-skeleton ts-skeleton--sm"})}),(0,a.jsx)("div",{className:"ts-goal-stat",children:(0,a.jsx)("span",{className:"ts-skeleton ts-skeleton--sm"})})]}):null,e&&e.conversions>0&&(0,a.jsxs)("button",{className:"ts-goal-view-details",onClick:()=>{S(n)},children:[(0,a.jsx)(m.I,{name:"Eye",size:14}),(0,f.__)("View Details","tracksure")]})]},n.goal_id)})})]})})(),"custom-builder"===h&&null]}),"templates"===e&&(()=>{const r=dr();return(0,a.jsxs)("div",{className:"ts-templates-view",children:[(0,a.jsx)(C.Zp,{className:"ts-templates-filters",children:(0,a.jsx)(C.bw,{children:(0,a.jsxs)("div",{className:"ts-filters-row",children:[(0,a.jsx)(C.l6,{label:(0,f.__)("Goal Category","tracksure"),value:B,onChange:r=>k(r.target.value),options:[{value:"all",label:(0,f.__)("All Categories","tracksure")},...Object.values(u).map(r=>({value:r.id,label:r.label}))],fullWidth:!0}),(0,a.jsx)(C.pd,{placeholder:(0,f.__)("Search templates...","tracksure"),value:_,onChange:r=>y(r.target.value),icon:(0,a.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",children:(0,a.jsx)("path",{d:"M9 17A8 8 0 109 1a8 8 0 000 16zM19 19l-4.35-4.35",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),fullWidth:!0})]})})}),(0,a.jsx)("div",{className:"ts-templates-grid",children:r.map(r=>(0,a.jsx)(C.Zp,{variant:"elevated",hoverable:!0,className:"ts-template-card",children:(0,a.jsxs)(C.bw,{children:[(0,a.jsx)("div",{className:"ts-template-icon",children:(0,a.jsx)(m.I,{name:r.icon,size:32,color:"primary"})}),(0,a.jsx)("h3",{className:"ts-template-name",children:r.name}),(0,a.jsx)("p",{className:"ts-template-description",children:r.description}),(0,a.jsxs)("div",{className:"ts-template-meta",children:[(0,a.jsx)(C.Ex,{variant:"default",size:"sm",children:r.event_name}),(0,a.jsx)(C.Ex,{variant:"leads"===r.category?"success":"ecommerce"===r.category?"info":"default",size:"sm",children:r.category})]}),(0,a.jsx)(C.$n,{variant:"primary",fullWidth:!0,onClick:()=>{L("create-from-template"),O(r)},className:"ts-template-add-btn",children:(0,f.__)("Customize & Add","tracksure")})]})},r.id))}),0===r.length&&(0,a.jsx)(C.Zp,{children:(0,a.jsx)(C.bw,{children:(0,a.jsx)(C.pp,{icon:"Search",title:(0,f.__)("No templates found","tracksure"),message:(0,f.__)("Try adjusting your filters or search query.","tracksure")})})})]})})(),I&&(0,a.jsx)(M,{goal:I,onClose:()=>{S(null)}}),W&&(0,a.jsx)(G,{isOpen:!0,onClose:()=>{L(null),O(null),V(null)},onSave:lr,mode:W,template:U||void 0,existingGoal:Z||void 0}),"custom-builder"===h&&(0,a.jsx)(K,{isOpen:!0,onClose:()=>b("list"),onSave:r=>{lr(r),b("list")},onSaveAsTemplate:r=>{}}),(0,a.jsxs)(C.aF,{isOpen:w,onClose:()=>{j(!1),N(null)},title:(0,f.__)("Delete Goal","tracksure"),size:"sm",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.$n,{variant:"ghost",onClick:()=>{j(!1),N(null)},children:(0,f.__)("Cancel","tracksure")}),(0,a.jsx)(C.$n,{variant:"danger",onClick:()=>z&&(async n=>{try{const e=new i.n(r);await e.delete(`/goals/${n.goal_id}`),H(),j(!1),N(null)}catch(r){}})(z),children:(0,f.__)("Delete","tracksure")})]}),children:[(0,a.jsxs)("p",{children:[(0,f.__)("Are you sure you want to delete","tracksure")," ",(0,a.jsx)("strong",{children:z?.name}),"?"]}),(0,a.jsx)("p",{style:{marginTop:"12px",color:"var(--ts-text-secondary)"},children:(0,f.__)("This action cannot be undone.","tracksure")})]}),q&&(0,a.jsx)("div",{className:"ts-modal-overlay",onClick:()=>Y(!1),children:(0,a.jsx)("div",{onClick:r=>r.stopPropagation(),children:(0,a.jsx)(Ar,{onImport:async n=>{const e=new i.n(r);for(const r of n)await e.post("/goals",r);H()},onClose:()=>Y(!1)})})})]})}},51768:(r,n,e)=>{e.d(n,{A:()=>p});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o),i=e(4417),A=e.n(i),l=new URL(e(9570),e.b),d=s()(t()),c=A()(l);d.push([r.id,`/**\n * Goal Details Modal Styles\n * Enhanced with tab navigation and analytics views\n * \n * @since 2.1.0\n * @package TrackSure\n */\n\n/* Main Container */\n.ts-goal-details-modal {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  min-height: 600px;\n}\n\n/* Modal Subtitle */\n.ts-modal-subtitle {\n  margin: 4px 0 0;\n  font-size: 13px;\n  font-weight: 400;\n  color: var(--text-tertiary);\n  opacity: 0.8;\n}\n\n/* Tab Navigation */\n.ts-modal-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 1px solid var(--border-color);\n  margin-bottom: 20px;\n  padding: 0 4px;\n}\n\n.ts-modal-tab {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 12px 20px;\n  background: transparent;\n  border: none;\n  border-bottom: 2px solid transparent;\n  color: var(--text-secondary);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  position: relative;\n  bottom: -1px;\n}\n\n.ts-modal-tab:hover {\n  color: var(--text-primary);\n  background: var(--background-secondary);\n}\n\n.ts-modal-tab--active {\n  color: var(--primary);\n  border-bottom-color: var(--primary);\n  font-weight: 600;\n}\n\n.ts-modal-tab--active:hover {\n  background: transparent;\n}\n\n/* Tab Content */\n.ts-modal-tab-content {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n/* Overview Tab */\n.ts-goal-overview-tab {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n}\n\n.ts-overview-metrics {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 16px;\n}\n\n.ts-metric {\n  text-align: center;\n  padding: 8px 0;\n}\n\n.ts-metric-label {\n  font-size: 12px;\n  font-weight: 500;\n  color: var(--text-tertiary);\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 8px;\n}\n\n.ts-metric .ts-metric-value {\n  font-size: 28px;\n  font-weight: 700;\n  color: var(--text-primary);\n  line-height: 1.2;\n}\n\n.ts-top-pages {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.ts-top-page {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  padding: 12px;\n  background: var(--background-secondary);\n  border-radius: 8px;\n  transition: all 0.2s ease;\n}\n\n.ts-top-page:hover {\n  background: var(--background-tertiary);\n  transform: translateX(4px);\n}\n\n.ts-top-page-rank {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  background: var(--primary);\n  color: white;\n  border-radius: 50%;\n  font-size: 14px;\n  font-weight: 700;\n  flex-shrink: 0;\n}\n\n.ts-top-page-url {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-top-page-url a {\n  color: var(--text-primary);\n  text-decoration: none;\n  font-size: 14px;\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.ts-top-page-url a:hover {\n  color: var(--primary);\n  text-decoration: underline;\n}\n\n.ts-top-page-conversions {\n  flex-shrink: 0;\n}\n\n/* Timeline Tab */\n.ts-modal-filters {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n  margin-bottom: 16px;\n  padding: 12px 16px;\n  background: var(--background-secondary);\n  border-radius: 8px;\n}\n\n.ts-filter-group {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.ts-filter-group label {\n  font-size: 13px;\n  font-weight: 500;\n  color: var(--text-secondary);\n  white-space: nowrap;\n}\n\n.ts-filter-select {\n  padding: 6px 32px 6px 12px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  background: var(--background-primary);\n  color: var(--text-primary);\n  font-size: 13px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  appearance: none;\n  background-image: url(${c});\n  background-repeat: no-repeat;\n  background-position: right 8px center;\n}\n\n.ts-filter-select:hover {\n  border-color: var(--primary);\n}\n\n.ts-filter-select:focus {\n  outline: none;\n  border-color: var(--primary);\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\n}\n\n.ts-export-btn {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 6px 14px;\n  background: var(--primary);\n  color: white;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  white-space: nowrap;\n}\n\n.ts-export-btn:hover {\n  background: var(--primary-dark);\n  transform: translateY(-1px);\n  box-shadow: 0 2px 8px var(--primary-alpha-20);\n}\n\n.ts-modal-content {\n  flex: 1;\n  overflow: auto;\n  margin-bottom: 16px;\n}\n\n.ts-table-scroll {\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1px solid var(--border-color);\n}\n\n.ts-conversions-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-conversions-table thead {\n  background: var(--background-secondary);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n.ts-conversions-table thead th {\n  padding: 12px;\n  text-align: left;\n  font-weight: 600;\n  color: var(--text-secondary);\n  text-transform: uppercase;\n  font-size: 11px;\n  letter-spacing: 0.05em;\n  white-space: nowrap;\n  cursor: pointer;\n  user-select: none;\n  transition: background 0.2s ease;\n}\n\n.ts-conversions-table thead th:hover {\n  background: var(--background-tertiary);\n}\n\n.ts-conversions-table thead th.ts-sorted {\n  color: var(--primary);\n}\n\n.ts-conversions-table tbody tr {\n  border-bottom: 1px solid var(--border-color);\n  transition: background 0.15s ease;\n}\n\n.ts-conversions-table tbody tr:hover {\n  background: var(--background-secondary);\n}\n\n.ts-conversions-table tbody td {\n  padding: 12px;\n  color: var(--text-primary);\n}\n\n.ts-date-cell {\n  white-space: nowrap;\n  color: var(--text-secondary);\n  font-size: 12px;\n}\n\n.ts-url-cell {\n  max-width: 300px;\n}\n\n.ts-url-link {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  color: var(--primary);\n  text-decoration: none;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.ts-url-link:hover {\n  text-decoration: underline;\n}\n\n.ts-url-empty,\n.ts-context-empty {\n  color: var(--text-tertiary);\n  font-style: italic;\n}\n\n.ts-context-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 8px;\n  background: var(--background-secondary);\n  border-radius: 4px;\n  font-size: 12px;\n  color: var(--text-secondary);\n}\n\n.ts-source-info strong {\n  color: var(--text-primary);\n  font-weight: 600;\n}\n\n.ts-medium {\n  color: var(--text-secondary);\n  font-size: 12px;\n}\n\n.ts-campaign {\n  font-size: 11px;\n  color: var(--text-tertiary);\n  margin-top: 2px;\n}\n\n.ts-device-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 10px;\n  background: var(--background-secondary);\n  border-radius: 12px;\n  font-size: 12px;\n  color: var(--text-secondary);\n  text-transform: capitalize;\n}\n\n.ts-value-cell {\n  font-weight: 600;\n  color: var(--success);\n  white-space: nowrap;\n}\n\n/* Pagination */\n.ts-modal-pagination {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n  padding: 12px 16px;\n  background: var(--background-secondary);\n  border-radius: 8px;\n  margin-top: auto;\n}\n\n.ts-page-btn {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 14px;\n  background: var(--background-primary);\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  color: var(--text-primary);\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ts-page-btn:hover:not(:disabled) {\n  background: var(--background-tertiary);\n  border-color: var(--primary);\n  color: var(--primary);\n}\n\n.ts-page-btn:disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n\n.ts-page-info {\n  font-size: 13px;\n  color: var(--text-secondary);\n}\n\n/* Sources Tab */\n.ts-sources-tab {\n  overflow: auto;\n}\n\n.ts-sources-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-sources-table thead {\n  background: var(--background-secondary);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n.ts-sources-table thead th {\n  padding: 12px;\n  text-align: left;\n  font-weight: 600;\n  color: var(--text-secondary);\n  text-transform: uppercase;\n  font-size: 11px;\n  letter-spacing: 0.05em;\n}\n\n.ts-sources-table tbody tr {\n  border-bottom: 1px solid var(--border-color);\n  transition: background 0.15s ease;\n}\n\n.ts-sources-table tbody tr:hover {\n  background: var(--background-secondary);\n}\n\n.ts-sources-table tbody td {\n  padding: 12px;\n}\n\n.ts-source-name {\n  font-weight: 600;\n  color: var(--text-primary);\n}\n\n.ts-source-medium {\n  color: var(--text-secondary);\n  font-size: 12px;\n}\n\n.ts-source-conversions {\n  font-weight: 600;\n  color: var(--primary);\n}\n\n.ts-source-percentage {\n  min-width: 200px;\n}\n\n.ts-progress-bar {\n  display: inline-block;\n  width: 100px;\n  height: 6px;\n  background: var(--background-secondary);\n  border-radius: 3px;\n  overflow: hidden;\n  margin-right: 12px;\n  vertical-align: middle;\n}\n\n.ts-progress-fill {\n  height: 100%;\n  background: linear-gradient(90deg, var(--primary), var(--primary-dark));\n  border-radius: 3px;\n  transition: width 0.3s ease;\n}\n\n.ts-source-revenue {\n  font-weight: 600;\n  color: var(--success);\n  white-space: nowrap;\n}\n\n/* Devices Tab */\n.ts-devices-tab {\n  overflow: auto;\n}\n\n.ts-devices-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n.ts-devices-table thead {\n  background: var(--background-secondary);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n.ts-devices-table thead th {\n  padding: 12px;\n  text-align: left;\n  font-weight: 600;\n  color: var(--text-secondary);\n  text-transform: uppercase;\n  font-size: 11px;\n  letter-spacing: 0.05em;\n}\n\n.ts-devices-table tbody tr {\n  border-bottom: 1px solid var(--border-color);\n  transition: background 0.15s ease;\n}\n\n.ts-devices-table tbody tr:hover {\n  background: var(--background-secondary);\n}\n\n.ts-devices-table tbody td {\n  padding: 12px;\n}\n\n.ts-device-name {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: var(--text-primary);\n  text-transform: capitalize;\n}\n\n.ts-device-browser {\n  color: var(--text-secondary);\n}\n\n.ts-device-conversions {\n  font-weight: 600;\n  color: var(--primary);\n}\n\n.ts-device-percentage {\n  min-width: 200px;\n}\n\n/* Loading & Empty States */\n.ts-loading,\n.ts-error,\n.ts-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 16px;\n  padding: 60px 20px;\n  text-align: center;\n  color: var(--text-secondary);\n}\n\n.ts-loading svg,\n.ts-error svg,\n.ts-empty svg {\n  color: var(--text-tertiary);\n  opacity: 0.4;\n  animation: pulse 2s ease-in-out infinite;\n}\n\n.ts-loading svg {\n  animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes pulse {\n  0%, 100% {\n    opacity: 0.3;\n  }\n  50% {\n    opacity: 0.6;\n  }\n}\n\n.ts-error {\n  color: var(--danger);\n}\n\n/* Dark Theme */\n[data-theme="dark"] {\n  .ts-modal-tabs {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-modal-tab {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-modal-tab:hover {\n    color: var(--text-dark-primary);\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-modal-tab--active {\n    color: var(--primary-light);\n    border-bottom-color: var(--primary-light);\n  }\n\n  .ts-metric-label {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-metric-value {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-top-page {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-top-page:hover {\n    background: var(--background-dark-tertiary);\n  }\n\n  .ts-top-page-url a {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-top-page-url a:hover {\n    color: var(--primary-light);\n  }\n\n  .ts-modal-filters {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-filter-group label {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-filter-select {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n    color: var(--text-dark-primary);\n  }\n\n  .ts-filter-select:hover {\n    border-color: var(--primary-light);\n  }\n\n  .ts-export-btn {\n    background: var(--primary-dark);\n  }\n\n  .ts-export-btn:hover {\n    background: var(--primary);\n  }\n\n  .ts-table-scroll {\n    border-color: var(--border-dark);\n  }\n\n  .ts-conversions-table thead {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-conversions-table thead th {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-conversions-table thead th.ts-sorted {\n    color: var(--primary-light);\n  }\n\n  .ts-conversions-table tbody tr {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-conversions-table tbody tr:hover {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-conversions-table tbody td {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-url-link {\n    color: var(--primary-light);\n  }\n\n  .ts-context-badge {\n    background: var(--background-dark-secondary);\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-device-badge {\n    background: var(--background-dark-secondary);\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-modal-pagination {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-page-btn {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n    color: var(--text-dark-primary);\n  }\n\n  .ts-page-btn:hover:not(:disabled) {\n    background: var(--background-dark-tertiary);\n    border-color: var(--primary-light);\n    color: var(--primary-light);\n  }\n\n  .ts-page-info {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-sources-table thead,\n  .ts-devices-table thead {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-sources-table thead th,\n  .ts-devices-table thead th {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-sources-table tbody tr,\n  .ts-devices-table tbody tr {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-sources-table tbody tr:hover,\n  .ts-devices-table tbody tr:hover {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-source-name,\n  .ts-device-name {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-source-medium,\n  .ts-device-browser {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-source-conversions,\n  .ts-device-conversions {\n    color: var(--primary-light);\n  }\n\n  .ts-progress-bar {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-progress-fill {\n    background: linear-gradient(90deg, var(--primary-light), var(--primary));\n  }\n\n  .ts-loading,\n  .ts-error,\n  .ts-empty {\n    color: var(--text-dark-secondary);\n  }\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .ts-modal-tabs {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n\n  .ts-modal-tab {\n    padding: 10px 16px;\n    font-size: 13px;\n  }\n\n  .ts-overview-metrics {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .ts-modal-filters {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .ts-filter-group {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .ts-export-btn {\n    width: 100%;\n    justify-content: center;\n  }\n\n  .ts-table-scroll {\n    font-size: 12px;\n  }\n\n  .ts-conversions-table thead th,\n  .ts-sources-table thead th,\n  .ts-devices-table thead th {\n    padding: 8px;\n    font-size: 10px;\n  }\n\n  .ts-conversions-table tbody td,\n  .ts-sources-table tbody td,\n  .ts-devices-table tbody td {\n    padding: 8px;\n  }\n\n  .ts-modal-pagination {\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .ts-page-info {\n    font-size: 12px;\n    text-align: center;\n  }\n\n  .ts-top-page {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 8px;\n  }\n\n  .ts-top-page-url {\n    width: 100%;\n  }\n\n  .ts-source-percentage,\n  .ts-device-percentage {\n    min-width: 150px;\n  }\n\n  .ts-progress-bar {\n    width: 60px;\n  }\n}\n\n/* Accessibility */\n@media (prefers-reduced-motion: reduce) {\n  *,\n  *::before,\n  *::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n  }\n}\n\n@media (prefers-contrast: high) {\n  .ts-modal-tab--active {\n    border-bottom-width: 3px;\n  }\n\n  .ts-progress-fill {\n    background: var(--primary);\n  }\n\n  .ts-url-link {\n    text-decoration: underline;\n  }\n}\n`,"",{version:3,sources:["webpack://./src/components/goals/components/GoalDetailsModal.css"],names:[],mappings:"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",sourcesContent:["/**\r\n * Goal Details Modal Styles\r\n * Enhanced with tab navigation and analytics views\r\n * \r\n * @since 2.1.0\r\n * @package TrackSure\r\n */\r\n\r\n/* Main Container */\r\n.ts-goal-details-modal {\r\n  display: flex;\r\n  flex-direction: column;\r\n  height: 100%;\r\n  min-height: 600px;\r\n}\r\n\r\n/* Modal Subtitle */\r\n.ts-modal-subtitle {\r\n  margin: 4px 0 0;\r\n  font-size: 13px;\r\n  font-weight: 400;\r\n  color: var(--text-tertiary);\r\n  opacity: 0.8;\r\n}\r\n\r\n/* Tab Navigation */\r\n.ts-modal-tabs {\r\n  display: flex;\r\n  gap: 0;\r\n  border-bottom: 1px solid var(--border-color);\r\n  margin-bottom: 20px;\r\n  padding: 0 4px;\r\n}\r\n\r\n.ts-modal-tab {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 12px 20px;\r\n  background: transparent;\r\n  border: none;\r\n  border-bottom: 2px solid transparent;\r\n  color: var(--text-secondary);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  position: relative;\r\n  bottom: -1px;\r\n}\r\n\r\n.ts-modal-tab:hover {\r\n  color: var(--text-primary);\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-modal-tab--active {\r\n  color: var(--primary);\r\n  border-bottom-color: var(--primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-modal-tab--active:hover {\r\n  background: transparent;\r\n}\r\n\r\n/* Tab Content */\r\n.ts-modal-tab-content {\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n}\r\n\r\n/* Overview Tab */\r\n.ts-goal-overview-tab {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 20px;\r\n}\r\n\r\n.ts-overview-metrics {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n  gap: 16px;\r\n}\r\n\r\n.ts-metric {\r\n  text-align: center;\r\n  padding: 8px 0;\r\n}\r\n\r\n.ts-metric-label {\r\n  font-size: 12px;\r\n  font-weight: 500;\r\n  color: var(--text-tertiary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.05em;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.ts-metric .ts-metric-value {\r\n  font-size: 28px;\r\n  font-weight: 700;\r\n  color: var(--text-primary);\r\n  line-height: 1.2;\r\n}\r\n\r\n.ts-top-pages {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 12px;\r\n}\r\n\r\n.ts-top-page {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 16px;\r\n  padding: 12px;\r\n  background: var(--background-secondary);\r\n  border-radius: 8px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-top-page:hover {\r\n  background: var(--background-tertiary);\r\n  transform: translateX(4px);\r\n}\r\n\r\n.ts-top-page-rank {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 32px;\r\n  height: 32px;\r\n  background: var(--primary);\r\n  color: white;\r\n  border-radius: 50%;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-top-page-url {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-top-page-url a {\r\n  color: var(--text-primary);\r\n  text-decoration: none;\r\n  font-size: 14px;\r\n  display: block;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-top-page-url a:hover {\r\n  color: var(--primary);\r\n  text-decoration: underline;\r\n}\r\n\r\n.ts-top-page-conversions {\r\n  flex-shrink: 0;\r\n}\r\n\r\n/* Timeline Tab */\r\n.ts-modal-filters {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 16px;\r\n  margin-bottom: 16px;\r\n  padding: 12px 16px;\r\n  background: var(--background-secondary);\r\n  border-radius: 8px;\r\n}\r\n\r\n.ts-filter-group {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n}\r\n\r\n.ts-filter-group label {\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  color: var(--text-secondary);\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-filter-select {\r\n  padding: 6px 32px 6px 12px;\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  background: var(--background-primary);\r\n  color: var(--text-primary);\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  appearance: none;\r\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L2 4h8z'/%3E%3C/svg%3E\");\r\n  background-repeat: no-repeat;\r\n  background-position: right 8px center;\r\n}\r\n\r\n.ts-filter-select:hover {\r\n  border-color: var(--primary);\r\n}\r\n\r\n.ts-filter-select:focus {\r\n  outline: none;\r\n  border-color: var(--primary);\r\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-export-btn {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 6px 14px;\r\n  background: var(--primary);\r\n  color: white;\r\n  border: none;\r\n  border-radius: 6px;\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-export-btn:hover {\r\n  background: var(--primary-dark);\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 2px 8px var(--primary-alpha-20);\r\n}\r\n\r\n.ts-modal-content {\r\n  flex: 1;\r\n  overflow: auto;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.ts-table-scroll {\r\n  overflow-x: auto;\r\n  border-radius: 8px;\r\n  border: 1px solid var(--border-color);\r\n}\r\n\r\n.ts-conversions-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-conversions-table thead {\r\n  background: var(--background-secondary);\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 10;\r\n}\r\n\r\n.ts-conversions-table thead th {\r\n  padding: 12px;\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  font-size: 11px;\r\n  letter-spacing: 0.05em;\r\n  white-space: nowrap;\r\n  cursor: pointer;\r\n  user-select: none;\r\n  transition: background 0.2s ease;\r\n}\r\n\r\n.ts-conversions-table thead th:hover {\r\n  background: var(--background-tertiary);\r\n}\r\n\r\n.ts-conversions-table thead th.ts-sorted {\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-conversions-table tbody tr {\r\n  border-bottom: 1px solid var(--border-color);\r\n  transition: background 0.15s ease;\r\n}\r\n\r\n.ts-conversions-table tbody tr:hover {\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-conversions-table tbody td {\r\n  padding: 12px;\r\n  color: var(--text-primary);\r\n}\r\n\r\n.ts-date-cell {\r\n  white-space: nowrap;\r\n  color: var(--text-secondary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-url-cell {\r\n  max-width: 300px;\r\n}\r\n\r\n.ts-url-link {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  color: var(--primary);\r\n  text-decoration: none;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.ts-url-link:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n.ts-url-empty,\r\n.ts-context-empty {\r\n  color: var(--text-tertiary);\r\n  font-style: italic;\r\n}\r\n\r\n.ts-context-badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 4px 8px;\r\n  background: var(--background-secondary);\r\n  border-radius: 4px;\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-source-info strong {\r\n  color: var(--text-primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-medium {\r\n  color: var(--text-secondary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-campaign {\r\n  font-size: 11px;\r\n  color: var(--text-tertiary);\r\n  margin-top: 2px;\r\n}\r\n\r\n.ts-device-badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 4px 10px;\r\n  background: var(--background-secondary);\r\n  border-radius: 12px;\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n  text-transform: capitalize;\r\n}\r\n\r\n.ts-value-cell {\r\n  font-weight: 600;\r\n  color: var(--success);\r\n  white-space: nowrap;\r\n}\r\n\r\n/* Pagination */\r\n.ts-modal-pagination {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 16px;\r\n  padding: 12px 16px;\r\n  background: var(--background-secondary);\r\n  border-radius: 8px;\r\n  margin-top: auto;\r\n}\r\n\r\n.ts-page-btn {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 8px 14px;\r\n  background: var(--background-primary);\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  color: var(--text-primary);\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-page-btn:hover:not(:disabled) {\r\n  background: var(--background-tertiary);\r\n  border-color: var(--primary);\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-page-btn:disabled {\r\n  opacity: 0.4;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.ts-page-info {\r\n  font-size: 13px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n/* Sources Tab */\r\n.ts-sources-tab {\r\n  overflow: auto;\r\n}\r\n\r\n.ts-sources-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-sources-table thead {\r\n  background: var(--background-secondary);\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 10;\r\n}\r\n\r\n.ts-sources-table thead th {\r\n  padding: 12px;\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  font-size: 11px;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n.ts-sources-table tbody tr {\r\n  border-bottom: 1px solid var(--border-color);\r\n  transition: background 0.15s ease;\r\n}\r\n\r\n.ts-sources-table tbody tr:hover {\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-sources-table tbody td {\r\n  padding: 12px;\r\n}\r\n\r\n.ts-source-name {\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n}\r\n\r\n.ts-source-medium {\r\n  color: var(--text-secondary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-source-conversions {\r\n  font-weight: 600;\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-source-percentage {\r\n  min-width: 200px;\r\n}\r\n\r\n.ts-progress-bar {\r\n  display: inline-block;\r\n  width: 100px;\r\n  height: 6px;\r\n  background: var(--background-secondary);\r\n  border-radius: 3px;\r\n  overflow: hidden;\r\n  margin-right: 12px;\r\n  vertical-align: middle;\r\n}\r\n\r\n.ts-progress-fill {\r\n  height: 100%;\r\n  background: linear-gradient(90deg, var(--primary), var(--primary-dark));\r\n  border-radius: 3px;\r\n  transition: width 0.3s ease;\r\n}\r\n\r\n.ts-source-revenue {\r\n  font-weight: 600;\r\n  color: var(--success);\r\n  white-space: nowrap;\r\n}\r\n\r\n/* Devices Tab */\r\n.ts-devices-tab {\r\n  overflow: auto;\r\n}\r\n\r\n.ts-devices-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 13px;\r\n}\r\n\r\n.ts-devices-table thead {\r\n  background: var(--background-secondary);\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 10;\r\n}\r\n\r\n.ts-devices-table thead th {\r\n  padding: 12px;\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  font-size: 11px;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n.ts-devices-table tbody tr {\r\n  border-bottom: 1px solid var(--border-color);\r\n  transition: background 0.15s ease;\r\n}\r\n\r\n.ts-devices-table tbody tr:hover {\r\n  background: var(--background-secondary);\r\n}\r\n\r\n.ts-devices-table tbody td {\r\n  padding: 12px;\r\n}\r\n\r\n.ts-device-name {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  text-transform: capitalize;\r\n}\r\n\r\n.ts-device-browser {\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-device-conversions {\r\n  font-weight: 600;\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-device-percentage {\r\n  min-width: 200px;\r\n}\r\n\r\n/* Loading & Empty States */\r\n.ts-loading,\r\n.ts-error,\r\n.ts-empty {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 16px;\r\n  padding: 60px 20px;\r\n  text-align: center;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-loading svg,\r\n.ts-error svg,\r\n.ts-empty svg {\r\n  color: var(--text-tertiary);\r\n  opacity: 0.4;\r\n  animation: pulse 2s ease-in-out infinite;\r\n}\r\n\r\n.ts-loading svg {\r\n  animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n\r\n@keyframes pulse {\r\n  0%, 100% {\r\n    opacity: 0.3;\r\n  }\r\n  50% {\r\n    opacity: 0.6;\r\n  }\r\n}\r\n\r\n.ts-error {\r\n  color: var(--danger);\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme=\"dark\"] {\r\n  .ts-modal-tabs {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-modal-tab {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-modal-tab:hover {\r\n    color: var(--text-dark-primary);\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-modal-tab--active {\r\n    color: var(--primary-light);\r\n    border-bottom-color: var(--primary-light);\r\n  }\r\n\r\n  .ts-metric-label {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-metric-value {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-top-page {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-top-page:hover {\r\n    background: var(--background-dark-tertiary);\r\n  }\r\n\r\n  .ts-top-page-url a {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-top-page-url a:hover {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-modal-filters {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-filter-group label {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-filter-select {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-filter-select:hover {\r\n    border-color: var(--primary-light);\r\n  }\r\n\r\n  .ts-export-btn {\r\n    background: var(--primary-dark);\r\n  }\r\n\r\n  .ts-export-btn:hover {\r\n    background: var(--primary);\r\n  }\r\n\r\n  .ts-table-scroll {\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-conversions-table thead {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-conversions-table thead th {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-conversions-table thead th.ts-sorted {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-conversions-table tbody tr {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-conversions-table tbody tr:hover {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-conversions-table tbody td {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-url-link {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-context-badge {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-device-badge {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-modal-pagination {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-page-btn {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-page-btn:hover:not(:disabled) {\r\n    background: var(--background-dark-tertiary);\r\n    border-color: var(--primary-light);\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-page-info {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-sources-table thead,\r\n  .ts-devices-table thead {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-sources-table thead th,\r\n  .ts-devices-table thead th {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-sources-table tbody tr,\r\n  .ts-devices-table tbody tr {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-sources-table tbody tr:hover,\r\n  .ts-devices-table tbody tr:hover {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-source-name,\r\n  .ts-device-name {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-source-medium,\r\n  .ts-device-browser {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-source-conversions,\r\n  .ts-device-conversions {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-progress-bar {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-progress-fill {\r\n    background: linear-gradient(90deg, var(--primary-light), var(--primary));\r\n  }\r\n\r\n  .ts-loading,\r\n  .ts-error,\r\n  .ts-empty {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 768px) {\r\n  .ts-modal-tabs {\r\n    overflow-x: auto;\r\n    -webkit-overflow-scrolling: touch;\r\n  }\r\n\r\n  .ts-modal-tab {\r\n    padding: 10px 16px;\r\n    font-size: 13px;\r\n  }\r\n\r\n  .ts-overview-metrics {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n\r\n  .ts-modal-filters {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .ts-filter-group {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .ts-export-btn {\r\n    width: 100%;\r\n    justify-content: center;\r\n  }\r\n\r\n  .ts-table-scroll {\r\n    font-size: 12px;\r\n  }\r\n\r\n  .ts-conversions-table thead th,\r\n  .ts-sources-table thead th,\r\n  .ts-devices-table thead th {\r\n    padding: 8px;\r\n    font-size: 10px;\r\n  }\r\n\r\n  .ts-conversions-table tbody td,\r\n  .ts-sources-table tbody td,\r\n  .ts-devices-table tbody td {\r\n    padding: 8px;\r\n  }\r\n\r\n  .ts-modal-pagination {\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .ts-page-info {\r\n    font-size: 12px;\r\n    text-align: center;\r\n  }\r\n\r\n  .ts-top-page {\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 8px;\r\n  }\r\n\r\n  .ts-top-page-url {\r\n    width: 100%;\r\n  }\r\n\r\n  .ts-source-percentage,\r\n  .ts-device-percentage {\r\n    min-width: 150px;\r\n  }\r\n\r\n  .ts-progress-bar {\r\n    width: 60px;\r\n  }\r\n}\r\n\r\n/* Accessibility */\r\n@media (prefers-reduced-motion: reduce) {\r\n  *,\r\n  *::before,\r\n  *::after {\r\n    animation-duration: 0.01ms !important;\r\n    animation-iteration-count: 1 !important;\r\n    transition-duration: 0.01ms !important;\r\n  }\r\n}\r\n\r\n@media (prefers-contrast: high) {\r\n  .ts-modal-tab--active {\r\n    border-bottom-width: 3px;\r\n  }\r\n\r\n  .ts-progress-fill {\r\n    background: var(--primary);\r\n  }\r\n\r\n  .ts-url-link {\r\n    text-decoration: underline;\r\n  }\r\n}\r\n"],sourceRoot:""}]);const p=d},56883:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Custom Goal Builder Styles\n * \n * Step-by-step wizard interface with clear visual hierarchy,\n * contextual help, and premium UI/UX\n * \n * @since 2.1.0\n * @package TrackSure\n */\n\n/* Main Container */\n.ts-custom-goal-builder {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n  min-height: 600px;\n}\n\n/* Step Indicator */\n.ts-goal-builder-steps {\n  display: flex;\n  gap: 12px;\n  padding: 20px;\n  background: var(--background-secondary);\n  border-radius: 12px;\n  overflow-x: auto;\n}\n\n.ts-step {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex: 1;\n  min-width: 160px;\n  padding: 12px 16px;\n  background: var(--background-primary);\n  border: 2px solid var(--border-color);\n  border-radius: 8px;\n  transition: all 0.3s ease;\n  cursor: default;\n}\n\n.ts-step--active {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\n}\n\n.ts-step--completed {\n  border-color: var(--success);\n  background: var(--success-alpha-5);\n}\n\n.ts-step-number {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  background: var(--background-secondary);\n  border-radius: 50%;\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--text-secondary);\n  flex-shrink: 0;\n  transition: all 0.3s ease;\n}\n\n.ts-step--active .ts-step-number {\n  background: var(--primary);\n  color: white;\n}\n\n.ts-step--completed .ts-step-number {\n  background: var(--success);\n  color: white;\n}\n\n.ts-step-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-step-title {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 2px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.ts-step-description {\n  font-size: 11px;\n  color: var(--text-tertiary);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.ts-step--active .ts-step-title {\n  color: var(--primary);\n}\n\n/* Builder Content */\n.ts-builder-content {\n  flex: 1;\n  overflow-y: auto;\n  max-height: 500px;\n}\n\n.ts-step-content {\n  animation: fadeIn 0.3s ease;\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.ts-draft-notice {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 12px 16px;\n  background: var(--info-alpha-10);\n  border-left: 4px solid var(--info);\n  border-radius: 6px;\n  color: var(--info);\n  font-size: 13px;\n  margin-bottom: 16px;\n}\n\n/* Section Intro */\n.ts-section-intro {\n  font-size: 14px;\n  color: var(--text-secondary);\n  margin-bottom: 20px;\n  line-height: 1.6;\n}\n\n/* Form Fields */\n.ts-form-field {\n  margin-bottom: 24px;\n}\n\n.ts-form-field label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 8px;\n}\n\n.ts-required {\n  color: var(--danger);\n  margin-left: 2px;\n}\n\n.ts-optional {\n  font-weight: 400;\n  color: var(--text-tertiary);\n  font-size: 12px;\n}\n\n.ts-form-field input[type="text"],\n.ts-form-field input[type="number"],\n.ts-form-field textarea,\n.ts-form-field select {\n  width: 100%;\n  padding: 10px 14px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  background: var(--background-primary);\n  color: var(--text-primary);\n  font-size: 14px;\n  transition: all 0.2s ease;\n}\n\n.ts-form-field input:focus,\n.ts-form-field textarea:focus,\n.ts-form-field select:focus {\n  outline: none;\n  border-color: var(--primary);\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\n}\n\n.ts-input-error {\n  border-color: var(--danger) !important;\n}\n\n.ts-error-message {\n  display: block;\n  margin-top: 6px;\n  font-size: 12px;\n  color: var(--danger);\n}\n\n.ts-field-help {\n  margin-top: 6px;\n  font-size: 12px;\n  color: var(--text-tertiary);\n  line-height: 1.5;\n}\n\n/* Category Grid */\n.ts-category-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n  gap: 12px;\n}\n\n.ts-category-card {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  padding: 20px 16px;\n  background: var(--background-secondary);\n  border: 2px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  text-align: center;\n}\n\n.ts-category-card:hover {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n  transform: translateY(-2px);\n  box-shadow: 0 4px 12px var(--shadow-color);\n}\n\n.ts-category-card--selected {\n  border-color: var(--primary);\n  background: var(--primary-alpha-10);\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\n}\n\n.ts-category-card span {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n}\n\n/* Trigger Grid */\n.ts-trigger-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n  gap: 12px;\n}\n\n.ts-trigger-card {\n  position: relative;\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n  padding: 16px;\n  background: var(--background-secondary);\n  border: 2px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  text-align: left;\n}\n\n.ts-trigger-card:hover {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n  box-shadow: 0 4px 12px var(--shadow-color);\n}\n\n.ts-trigger-card--selected {\n  border-color: var(--primary);\n  background: var(--primary-alpha-10);\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\n}\n\n.ts-trigger-icon {\n  flex-shrink: 0;\n  width: 48px;\n  height: 48px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--background-primary);\n  border-radius: 8px;\n  color: var(--primary);\n}\n\n.ts-trigger-card--selected .ts-trigger-icon {\n  background: var(--primary);\n  color: white;\n}\n\n.ts-trigger-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-trigger-label {\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 4px;\n}\n\n.ts-trigger-description {\n  font-size: 12px;\n  color: var(--text-secondary);\n  line-height: 1.4;\n}\n\n.ts-trigger-check {\n  position: absolute;\n  top: 12px;\n  right: 12px;\n  color: var(--primary);\n}\n\n/* Radio Options */\n.ts-radio-group {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.ts-radio-option {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  padding: 12px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ts-radio-option:hover {\n  border-color: var(--primary);\n  background: var(--primary-alpha-5);\n}\n\n.ts-radio-option input[type="radio"] {\n  margin-top: 2px;\n  flex-shrink: 0;\n}\n\n.ts-radio-option span {\n  flex: 1;\n}\n\n.ts-radio-option strong {\n  display: block;\n  font-size: 14px;\n  color: var(--text-primary);\n  margin-bottom: 4px;\n}\n\n.ts-radio-option small {\n  display: block;\n  font-size: 12px;\n  color: var(--text-secondary);\n}\n\n.ts-value-input {\n  margin-top: 12px;\n  padding-left: 24px;\n}\n\n.ts-value-input input[type="number"] {\n  max-width: 200px;\n}\n\n/* Conditions Preview */\n.ts-conditions-preview {\n  margin-top: 24px;\n  padding: 16px;\n  background: var(--background-secondary);\n  border-left: 4px solid var(--primary);\n  border-radius: 6px;\n}\n\n.ts-conditions-preview h4 {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 12px;\n}\n\n.ts-logic-preview {\n  font-size: 13px;\n  color: var(--text-secondary);\n}\n\n.ts-logic-preview p {\n  margin-bottom: 12px;\n}\n\n.ts-logic-preview strong {\n  color: var(--primary);\n  font-weight: 700;\n}\n\n.ts-condition-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.ts-condition-list li {\n  padding: 8px 12px;\n  background: var(--background-primary);\n  border-radius: 4px;\n  margin-bottom: 6px;\n  font-size: 12px;\n  font-family: \'Courier New\', monospace;\n}\n\n.ts-condition-list code {\n  color: var(--primary);\n  font-weight: 600;\n}\n\n.ts-condition-list em {\n  color: var(--text-tertiary);\n  font-style: normal;\n  margin: 0 6px;\n}\n\n/* Goal Preview */\n.ts-goal-preview {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n}\n\n.ts-preview-section {\n  padding-bottom: 20px;\n  border-bottom: 1px solid var(--border-color);\n}\n\n.ts-preview-section:last-child {\n  border-bottom: none;\n  padding-bottom: 0;\n}\n\n.ts-preview-section h4 {\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: 12px;\n}\n\n.ts-preview-section p {\n  font-size: 13px;\n  color: var(--text-secondary);\n  margin-bottom: 12px;\n}\n\n.ts-preview-section dl {\n  display: grid;\n  grid-template-columns: 140px 1fr;\n  gap: 12px 16px;\n  margin: 0;\n}\n\n.ts-preview-section dt {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--text-tertiary);\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n.ts-preview-section dd {\n  font-size: 14px;\n  color: var(--text-primary);\n  margin: 0;\n}\n\n.ts-preview-section code {\n  padding: 2px 6px;\n  background: var(--background-secondary);\n  border-radius: 3px;\n  font-size: 12px;\n  color: var(--primary);\n  font-family: \'Courier New\', monospace;\n}\n\n.ts-no-conditions {\n  font-style: italic;\n  color: var(--text-tertiary);\n}\n\n/* Builder Actions */\n.ts-builder-actions {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n  padding: 16px 20px;\n  background: var(--background-secondary);\n  border-top: 1px solid var(--border-color);\n  border-radius: 0 0 12px 12px;\n  margin: 0 -24px -24px;\n}\n\n.ts-actions-left,\n.ts-actions-right {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n/* Dark Theme */\n[data-theme="dark"] {\n  .ts-goal-builder-steps {\n    background: var(--background-dark-secondary);\n  }\n\n  .ts-step {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n  }\n\n  .ts-step--active {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-10);\n  }\n\n  .ts-step--completed {\n    border-color: var(--success-light);\n    background: var(--success-dark-alpha-10);\n  }\n\n  .ts-step-number {\n    background: var(--background-dark-secondary);\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-step--active .ts-step-number {\n    background: var(--primary-light);\n  }\n\n  .ts-step--completed .ts-step-number {\n    background: var(--success-light);\n  }\n\n  .ts-step-title {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-step-description {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-step--active .ts-step-title {\n    color: var(--primary-light);\n  }\n\n  .ts-draft-notice {\n    background: var(--info-dark-alpha-10);\n    border-left-color: var(--info-light);\n    color: var(--info-light);\n  }\n\n  .ts-section-intro {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-form-field label {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-form-field input,\n  .ts-form-field textarea,\n  .ts-form-field select {\n    background: var(--background-dark-primary);\n    border-color: var(--border-dark);\n    color: var(--text-dark-primary);\n  }\n\n  .ts-field-help {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-category-card,\n  .ts-trigger-card {\n    background: var(--background-dark-secondary);\n    border-color: var(--border-dark);\n  }\n\n  .ts-category-card:hover,\n  .ts-trigger-card:hover {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-5);\n  }\n\n  .ts-category-card--selected,\n  .ts-trigger-card--selected {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-10);\n  }\n\n  .ts-trigger-icon {\n    background: var(--background-dark-primary);\n    color: var(--primary-light);\n  }\n\n  .ts-trigger-card--selected .ts-trigger-icon {\n    background: var(--primary-light);\n  }\n\n  .ts-trigger-label {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-trigger-description {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-trigger-check {\n    color: var(--primary-light);\n  }\n\n  .ts-radio-option {\n    border-color: var(--border-dark);\n  }\n\n  .ts-radio-option:hover {\n    border-color: var(--primary-light);\n    background: var(--primary-dark-alpha-5);\n  }\n\n  .ts-radio-option strong {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-radio-option small {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-conditions-preview {\n    background: var(--background-dark-secondary);\n    border-left-color: var(--primary-light);\n  }\n\n  .ts-conditions-preview h4 {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-logic-preview {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-logic-preview strong {\n    color: var(--primary-light);\n  }\n\n  .ts-condition-list li {\n    background: var(--background-dark-primary);\n  }\n\n  .ts-condition-list code {\n    color: var(--primary-light);\n  }\n\n  .ts-condition-list em {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-preview-section {\n    border-bottom-color: var(--border-dark);\n  }\n\n  .ts-preview-section h4 {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-preview-section p {\n    color: var(--text-dark-secondary);\n  }\n\n  .ts-preview-section dt {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-preview-section dd {\n    color: var(--text-dark-primary);\n  }\n\n  .ts-preview-section code {\n    background: var(--background-dark-secondary);\n    color: var(--primary-light);\n  }\n\n  .ts-no-conditions {\n    color: var(--text-dark-tertiary);\n  }\n\n  .ts-builder-actions {\n    background: var(--background-dark-secondary);\n    border-top-color: var(--border-dark);\n  }\n}\n\n/* Responsive Design */\n@media (max-width: 1024px) {\n  .ts-goal-builder-steps {\n    flex-wrap: nowrap;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n\n  .ts-step {\n    min-width: 140px;\n  }\n\n  .ts-trigger-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n@media (max-width: 768px) {\n  .ts-step-description {\n    display: none;\n  }\n\n  .ts-category-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .ts-preview-section dl {\n    grid-template-columns: 1fr;\n    gap: 8px;\n  }\n\n  .ts-preview-section dt {\n    font-weight: 700;\n  }\n\n  .ts-builder-actions {\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .ts-actions-left,\n  .ts-actions-right {\n    width: 100%;\n    justify-content: space-between;\n  }\n}\n\n/* Accessibility */\n@media (prefers-reduced-motion: reduce) {\n  .ts-step-content {\n    animation: none;\n  }\n\n  .ts-step,\n  .ts-category-card,\n  .ts-trigger-card,\n  .ts-radio-option {\n    transition: none;\n  }\n}\n\n@media (prefers-contrast: high) {\n  .ts-step--active {\n    border-width: 3px;\n  }\n\n  .ts-category-card--selected,\n  .ts-trigger-card--selected {\n    border-width: 3px;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/components/CustomGoalBuilder.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Custom Goal Builder Styles\r\n * \r\n * Step-by-step wizard interface with clear visual hierarchy,\r\n * contextual help, and premium UI/UX\r\n * \r\n * @since 2.1.0\r\n * @package TrackSure\r\n */\r\n\r\n/* Main Container */\r\n.ts-custom-goal-builder {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 24px;\r\n  min-height: 600px;\r\n}\r\n\r\n/* Step Indicator */\r\n.ts-goal-builder-steps {\r\n  display: flex;\r\n  gap: 12px;\r\n  padding: 20px;\r\n  background: var(--background-secondary);\r\n  border-radius: 12px;\r\n  overflow-x: auto;\r\n}\r\n\r\n.ts-step {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  flex: 1;\r\n  min-width: 160px;\r\n  padding: 12px 16px;\r\n  background: var(--background-primary);\r\n  border: 2px solid var(--border-color);\r\n  border-radius: 8px;\r\n  transition: all 0.3s ease;\r\n  cursor: default;\r\n}\r\n\r\n.ts-step--active {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-step--completed {\r\n  border-color: var(--success);\r\n  background: var(--success-alpha-5);\r\n}\r\n\r\n.ts-step-number {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 32px;\r\n  height: 32px;\r\n  background: var(--background-secondary);\r\n  border-radius: 50%;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  color: var(--text-secondary);\r\n  flex-shrink: 0;\r\n  transition: all 0.3s ease;\r\n}\r\n\r\n.ts-step--active .ts-step-number {\r\n  background: var(--primary);\r\n  color: white;\r\n}\r\n\r\n.ts-step--completed .ts-step-number {\r\n  background: var(--success);\r\n  color: white;\r\n}\r\n\r\n.ts-step-info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-step-title {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 2px;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.ts-step-description {\r\n  font-size: 11px;\r\n  color: var(--text-tertiary);\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.ts-step--active .ts-step-title {\r\n  color: var(--primary);\r\n}\r\n\r\n/* Builder Content */\r\n.ts-builder-content {\r\n  flex: 1;\r\n  overflow-y: auto;\r\n  max-height: 500px;\r\n}\r\n\r\n.ts-step-content {\r\n  animation: fadeIn 0.3s ease;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.ts-draft-notice {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 10px;\r\n  padding: 12px 16px;\r\n  background: var(--info-alpha-10);\r\n  border-left: 4px solid var(--info);\r\n  border-radius: 6px;\r\n  color: var(--info);\r\n  font-size: 13px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n/* Section Intro */\r\n.ts-section-intro {\r\n  font-size: 14px;\r\n  color: var(--text-secondary);\r\n  margin-bottom: 20px;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* Form Fields */\r\n.ts-form-field {\r\n  margin-bottom: 24px;\r\n}\r\n\r\n.ts-form-field label {\r\n  display: block;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.ts-required {\r\n  color: var(--danger);\r\n  margin-left: 2px;\r\n}\r\n\r\n.ts-optional {\r\n  font-weight: 400;\r\n  color: var(--text-tertiary);\r\n  font-size: 12px;\r\n}\r\n\r\n.ts-form-field input[type="text"],\r\n.ts-form-field input[type="number"],\r\n.ts-form-field textarea,\r\n.ts-form-field select {\r\n  width: 100%;\r\n  padding: 10px 14px;\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  background: var(--background-primary);\r\n  color: var(--text-primary);\r\n  font-size: 14px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-form-field input:focus,\r\n.ts-form-field textarea:focus,\r\n.ts-form-field select:focus {\r\n  outline: none;\r\n  border-color: var(--primary);\r\n  box-shadow: 0 0 0 3px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-input-error {\r\n  border-color: var(--danger) !important;\r\n}\r\n\r\n.ts-error-message {\r\n  display: block;\r\n  margin-top: 6px;\r\n  font-size: 12px;\r\n  color: var(--danger);\r\n}\r\n\r\n.ts-field-help {\r\n  margin-top: 6px;\r\n  font-size: 12px;\r\n  color: var(--text-tertiary);\r\n  line-height: 1.5;\r\n}\r\n\r\n/* Category Grid */\r\n.ts-category-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\r\n  gap: 12px;\r\n}\r\n\r\n.ts-category-card {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 20px 16px;\r\n  background: var(--background-secondary);\r\n  border: 2px solid var(--border-color);\r\n  border-radius: 8px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  text-align: center;\r\n}\r\n\r\n.ts-category-card:hover {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n  transform: translateY(-2px);\r\n  box-shadow: 0 4px 12px var(--shadow-color);\r\n}\r\n\r\n.ts-category-card--selected {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-10);\r\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-category-card span {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n}\r\n\r\n/* Trigger Grid */\r\n.ts-trigger-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n  gap: 12px;\r\n}\r\n\r\n.ts-trigger-card {\r\n  position: relative;\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 16px;\r\n  padding: 16px;\r\n  background: var(--background-secondary);\r\n  border: 2px solid var(--border-color);\r\n  border-radius: 8px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  text-align: left;\r\n}\r\n\r\n.ts-trigger-card:hover {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n  box-shadow: 0 4px 12px var(--shadow-color);\r\n}\r\n\r\n.ts-trigger-card--selected {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-10);\r\n  box-shadow: 0 0 0 4px var(--primary-alpha-10);\r\n}\r\n\r\n.ts-trigger-icon {\r\n  flex-shrink: 0;\r\n  width: 48px;\r\n  height: 48px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: var(--background-primary);\r\n  border-radius: 8px;\r\n  color: var(--primary);\r\n}\r\n\r\n.ts-trigger-card--selected .ts-trigger-icon {\r\n  background: var(--primary);\r\n  color: white;\r\n}\r\n\r\n.ts-trigger-info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-trigger-label {\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 4px;\r\n}\r\n\r\n.ts-trigger-description {\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n  line-height: 1.4;\r\n}\r\n\r\n.ts-trigger-check {\r\n  position: absolute;\r\n  top: 12px;\r\n  right: 12px;\r\n  color: var(--primary);\r\n}\r\n\r\n/* Radio Options */\r\n.ts-radio-group {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 12px;\r\n}\r\n\r\n.ts-radio-option {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 12px;\r\n  padding: 12px;\r\n  border: 1px solid var(--border-color);\r\n  border-radius: 6px;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-radio-option:hover {\r\n  border-color: var(--primary);\r\n  background: var(--primary-alpha-5);\r\n}\r\n\r\n.ts-radio-option input[type="radio"] {\r\n  margin-top: 2px;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-radio-option span {\r\n  flex: 1;\r\n}\r\n\r\n.ts-radio-option strong {\r\n  display: block;\r\n  font-size: 14px;\r\n  color: var(--text-primary);\r\n  margin-bottom: 4px;\r\n}\r\n\r\n.ts-radio-option small {\r\n  display: block;\r\n  font-size: 12px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-value-input {\r\n  margin-top: 12px;\r\n  padding-left: 24px;\r\n}\r\n\r\n.ts-value-input input[type="number"] {\r\n  max-width: 200px;\r\n}\r\n\r\n/* Conditions Preview */\r\n.ts-conditions-preview {\r\n  margin-top: 24px;\r\n  padding: 16px;\r\n  background: var(--background-secondary);\r\n  border-left: 4px solid var(--primary);\r\n  border-radius: 6px;\r\n}\r\n\r\n.ts-conditions-preview h4 {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-logic-preview {\r\n  font-size: 13px;\r\n  color: var(--text-secondary);\r\n}\r\n\r\n.ts-logic-preview p {\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-logic-preview strong {\r\n  color: var(--primary);\r\n  font-weight: 700;\r\n}\r\n\r\n.ts-condition-list {\r\n  list-style: none;\r\n  padding: 0;\r\n  margin: 0;\r\n}\r\n\r\n.ts-condition-list li {\r\n  padding: 8px 12px;\r\n  background: var(--background-primary);\r\n  border-radius: 4px;\r\n  margin-bottom: 6px;\r\n  font-size: 12px;\r\n  font-family: \'Courier New\', monospace;\r\n}\r\n\r\n.ts-condition-list code {\r\n  color: var(--primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-condition-list em {\r\n  color: var(--text-tertiary);\r\n  font-style: normal;\r\n  margin: 0 6px;\r\n}\r\n\r\n/* Goal Preview */\r\n.ts-goal-preview {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 24px;\r\n}\r\n\r\n.ts-preview-section {\r\n  padding-bottom: 20px;\r\n  border-bottom: 1px solid var(--border-color);\r\n}\r\n\r\n.ts-preview-section:last-child {\r\n  border-bottom: none;\r\n  padding-bottom: 0;\r\n}\r\n\r\n.ts-preview-section h4 {\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--text-primary);\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-preview-section p {\r\n  font-size: 13px;\r\n  color: var(--text-secondary);\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.ts-preview-section dl {\r\n  display: grid;\r\n  grid-template-columns: 140px 1fr;\r\n  gap: 12px 16px;\r\n  margin: 0;\r\n}\r\n\r\n.ts-preview-section dt {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--text-tertiary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n.ts-preview-section dd {\r\n  font-size: 14px;\r\n  color: var(--text-primary);\r\n  margin: 0;\r\n}\r\n\r\n.ts-preview-section code {\r\n  padding: 2px 6px;\r\n  background: var(--background-secondary);\r\n  border-radius: 3px;\r\n  font-size: 12px;\r\n  color: var(--primary);\r\n  font-family: \'Courier New\', monospace;\r\n}\r\n\r\n.ts-no-conditions {\r\n  font-style: italic;\r\n  color: var(--text-tertiary);\r\n}\r\n\r\n/* Builder Actions */\r\n.ts-builder-actions {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 16px;\r\n  padding: 16px 20px;\r\n  background: var(--background-secondary);\r\n  border-top: 1px solid var(--border-color);\r\n  border-radius: 0 0 12px 12px;\r\n  margin: 0 -24px -24px;\r\n}\r\n\r\n.ts-actions-left,\r\n.ts-actions-right {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme="dark"] {\r\n  .ts-goal-builder-steps {\r\n    background: var(--background-dark-secondary);\r\n  }\r\n\r\n  .ts-step {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-step--active {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-10);\r\n  }\r\n\r\n  .ts-step--completed {\r\n    border-color: var(--success-light);\r\n    background: var(--success-dark-alpha-10);\r\n  }\r\n\r\n  .ts-step-number {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-step--active .ts-step-number {\r\n    background: var(--primary-light);\r\n  }\r\n\r\n  .ts-step--completed .ts-step-number {\r\n    background: var(--success-light);\r\n  }\r\n\r\n  .ts-step-title {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-step-description {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-step--active .ts-step-title {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-draft-notice {\r\n    background: var(--info-dark-alpha-10);\r\n    border-left-color: var(--info-light);\r\n    color: var(--info-light);\r\n  }\r\n\r\n  .ts-section-intro {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-form-field label {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-form-field input,\r\n  .ts-form-field textarea,\r\n  .ts-form-field select {\r\n    background: var(--background-dark-primary);\r\n    border-color: var(--border-dark);\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-field-help {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-category-card,\r\n  .ts-trigger-card {\r\n    background: var(--background-dark-secondary);\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-category-card:hover,\r\n  .ts-trigger-card:hover {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-5);\r\n  }\r\n\r\n  .ts-category-card--selected,\r\n  .ts-trigger-card--selected {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-10);\r\n  }\r\n\r\n  .ts-trigger-icon {\r\n    background: var(--background-dark-primary);\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-trigger-card--selected .ts-trigger-icon {\r\n    background: var(--primary-light);\r\n  }\r\n\r\n  .ts-trigger-label {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-trigger-description {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-trigger-check {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-radio-option {\r\n    border-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-radio-option:hover {\r\n    border-color: var(--primary-light);\r\n    background: var(--primary-dark-alpha-5);\r\n  }\r\n\r\n  .ts-radio-option strong {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-radio-option small {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-conditions-preview {\r\n    background: var(--background-dark-secondary);\r\n    border-left-color: var(--primary-light);\r\n  }\r\n\r\n  .ts-conditions-preview h4 {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-logic-preview {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-logic-preview strong {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-condition-list li {\r\n    background: var(--background-dark-primary);\r\n  }\r\n\r\n  .ts-condition-list code {\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-condition-list em {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-preview-section {\r\n    border-bottom-color: var(--border-dark);\r\n  }\r\n\r\n  .ts-preview-section h4 {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-preview-section p {\r\n    color: var(--text-dark-secondary);\r\n  }\r\n\r\n  .ts-preview-section dt {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-preview-section dd {\r\n    color: var(--text-dark-primary);\r\n  }\r\n\r\n  .ts-preview-section code {\r\n    background: var(--background-dark-secondary);\r\n    color: var(--primary-light);\r\n  }\r\n\r\n  .ts-no-conditions {\r\n    color: var(--text-dark-tertiary);\r\n  }\r\n\r\n  .ts-builder-actions {\r\n    background: var(--background-dark-secondary);\r\n    border-top-color: var(--border-dark);\r\n  }\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 1024px) {\r\n  .ts-goal-builder-steps {\r\n    flex-wrap: nowrap;\r\n    overflow-x: auto;\r\n    -webkit-overflow-scrolling: touch;\r\n  }\r\n\r\n  .ts-step {\r\n    min-width: 140px;\r\n  }\r\n\r\n  .ts-trigger-grid {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  .ts-step-description {\r\n    display: none;\r\n  }\r\n\r\n  .ts-category-grid {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n\r\n  .ts-preview-section dl {\r\n    grid-template-columns: 1fr;\r\n    gap: 8px;\r\n  }\r\n\r\n  .ts-preview-section dt {\r\n    font-weight: 700;\r\n  }\r\n\r\n  .ts-builder-actions {\r\n    flex-direction: column;\r\n    gap: 12px;\r\n  }\r\n\r\n  .ts-actions-left,\r\n  .ts-actions-right {\r\n    width: 100%;\r\n    justify-content: space-between;\r\n  }\r\n}\r\n\r\n/* Accessibility */\r\n@media (prefers-reduced-motion: reduce) {\r\n  .ts-step-content {\r\n    animation: none;\r\n  }\r\n\r\n  .ts-step,\r\n  .ts-category-card,\r\n  .ts-trigger-card,\r\n  .ts-radio-option {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n@media (prefers-contrast: high) {\r\n  .ts-step--active {\r\n    border-width: 3px;\r\n  }\r\n\r\n  .ts-category-card--selected,\r\n  .ts-trigger-card--selected {\r\n    border-width: 3px;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},76840:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Goals Page - Modern, User-Friendly Design\n * Features: CSS Variables, Dark Mode Support, Smooth Animations\n * Now using global CSS variables for consistent theming\n */\n\n/* ========================================\n   Page Container\n\n   ======================================== */\n.ts-goals-page {\n  padding: var(--ts-spacing-lg);\n  background: var(--ts-bg);\n  min-height: 100vh;\n}\n\n/* ========================================\n   Page Header\n   ======================================== */\n.ts-page-header {\n  margin-bottom: var(--ts-spacing-xl);\n}\n\n.ts-page-title {\n  font-size: 28px;\n  font-weight: 700;\n  color: var(--ts-text);\n  margin: 0 0 8px 0;\n  letter-spacing: -0.025em;\n}\n\n.ts-page-description {\n  font-size: 15px;\n  color: var(--ts-text-muted);\n  margin: 0;\n  line-height: 1.6;\n}\n\n/* ========================================\n   Tab Navigation\n   ======================================== */\n.ts-goals-tabs {\n  display: flex;\n  gap: var(--ts-spacing-xs);\n  margin-bottom: var(--ts-spacing-lg);\n  border-bottom: 1px solid var(--ts-border);\n  padding: 0;\n}\n\n.ts-goals-tab {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs);\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\n  background: transparent;\n  border: none;\n  border-bottom: 2px solid transparent;\n  color: var(--ts-text-muted);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  position: relative;\n  top: 1px;\n}\n\n.ts-goals-tab:hover {\n  color: var(--ts-text);\n  background: var(--ts-surface-hover);\n}\n\n.ts-goals-tab--active {\n  color: var(--ts-primary);\n  border-bottom-color: var(--ts-primary);\n  font-weight: 600;\n}\n\n.ts-goals-tab--active:hover {\n  background: transparent;\n}\n\n[data-theme="dark"] .ts-goals-tab:hover {\n  background: var(--ts-surface-hover-dark);\n}\n\n/* ========================================\n   Goals Grid\n   ======================================== */\n\n/* Summary Cards - Row Layout */\n.ts-goals-summary {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: var(--ts-spacing-md);\n  margin-bottom: var(--ts-spacing-xl);\n}\n\n.ts-goals-summary-row {\n  display: flex;\n  flex-direction: row;\n  gap: var(--ts-spacing-md);\n  margin-bottom: var(--ts-spacing-xl);\n  flex-wrap: wrap;\n}\n\n.ts-goals-summary-row > * {\n  flex: 1;\n  min-width: 200px;\n}\n\n.ts-goals-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));\n  gap: var(--ts-spacing-lg);\n  margin-top: var(--ts-spacing-lg);\n}\n\n/* ========================================\n   Goal Card\n   ======================================== */\n.ts-goal-card {\n  background: var(--ts-surface);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  padding: var(--ts-spacing-lg);\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n  position: relative;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  gap: 0;\n}\n\n.ts-goal-card::before {\n  content: \'\';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 3px;\n  background: linear-gradient(90deg, var(--ts-primary), var(--ts-success));\n  opacity: 0;\n  transition: opacity 0.3s ease;\n}\n\n.ts-goal-card:hover {\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08);\n  transform: translateY(-3px);\n  border-color: var(--ts-primary);\n}\n\n.ts-goal-card:hover::before {\n  opacity: 1;\n}\n\n.ts-goal-card-selected {\n  border-color: var(--ts-primary);\n  background: var(--ts-surface-hover);\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n/* Goal Checkbox - Inline with header */\n.ts-goal-checkbox {\n  position: absolute;\n  top: var(--ts-spacing-lg);\n  left: var(--ts-spacing-lg);\n  z-index: 1;\n}\n\n.ts-goal-checkbox input[type="checkbox"] {\n  margin: 0;\n  cursor: pointer;\n  width: 18px;\n  height: 18px;\n  accent-color: var(--ts-primary);\n}\n\n/* Goal Header */\n.ts-goal-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  margin-bottom: var(--ts-spacing-md);\n  gap: var(--ts-spacing-md);\n  padding-left: 30px; /* Space for absolute checkbox */\n}\n\n.ts-goal-title-section {\n  flex: 1;\n  min-width: 0;\n}\n\n.ts-goal-title-row {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm);\n  flex-wrap: wrap;\n}\n\n.ts-goal-name {\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0;\n  line-height: 1.4;\n}\n\n.ts-goal-description {\n  font-size: 14px;\n  color: var(--ts-text-muted);\n  margin: 6px 0 0 0;\n  line-height: 1.5;\n  display: -webkit-box;\n  line-clamp: 2;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* Goal Actions */\n.ts-goal-actions {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs);\n  flex-shrink: 0;\n  flex-wrap: wrap;\n}\n\n.ts-goal-status {\n  font-size: 12px;\n  font-weight: 600;\n  padding: 6px 12px;\n  border-radius: var(--ts-radius-full);\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  transition: all 0.2s ease;\n}\n\n.ts-goal-status.ts-active {\n  background: var(--ts-success-soft);\n  color: var(--ts-success);\n  border: 1px solid var(--ts-success);\n}\n\n.ts-goal-status.ts-inactive {\n  background: var(--ts-danger-soft);\n  color: var(--ts-danger);\n  border: 1px solid var(--ts-danger);\n}\n\n.ts-btn-icon {\n  background: var(--ts-surface-hover);\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  cursor: pointer;\n  font-size: 18px;\n  padding: 8px;\n  color: var(--ts-text-muted);\n  transition: all 0.2s ease;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n}\n\n.ts-btn-icon:hover {\n  background: var(--ts-primary-soft);\n  color: var(--ts-primary);\n  border-color: var(--ts-primary);\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.ts-btn-icon.ts-btn-danger:hover {\n  background: var(--ts-danger-soft);\n  color: var(--ts-danger);\n  border-color: var(--ts-danger);\n  box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);\n}\n\n/* Goal Details */\n.ts-goal-details {\n  margin-bottom: var(--ts-spacing-md);\n}\n\n.ts-goal-meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--ts-spacing-sm);\n}\n\n.ts-goal-event,\n.ts-goal-conditions {\n  font-size: 13px;\n  color: var(--ts-text);\n  background: var(--ts-bg-tertiary);\n  padding: 6px 12px;\n  border-radius: var(--ts-radius-md);\n  border: 1px solid var(--ts-border);\n  font-weight: 500;\n  transition: all 0.2s ease;\n}\n\n.ts-goal-event:hover,\n.ts-goal-conditions:hover {\n  background: var(--ts-primary-soft);\n  border-color: var(--ts-primary);\n  color: var(--ts-primary);\n  transform: translateY(-1px);\n  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\n}\n\n/* Goal Performance */\n.ts-goal-performance {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: var(--ts-spacing-md);\n  padding-top: var(--ts-spacing-md);\n  border-top: 1px solid var(--ts-border);\n  margin-top: auto;\n}\n\n.ts-goal-stat {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.ts-goal-stat-label {\n  font-size: 11px;\n  color: var(--ts-text-muted);\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  font-weight: 600;\n}\n\n.ts-goal-stat-value {\n  font-size: 24px;\n  font-weight: 700;\n  color: var(--ts-text);\n  line-height: 1;\n}\n\n/* View Details Button */\n.ts-goal-view-details {\n  width: 100%;\n  margin-top: var(--ts-spacing-md);\n  padding: var(--ts-spacing-sm) var(--ts-spacing-md);\n  background: var(--ts-primary-soft);\n  border: 1px solid var(--ts-primary);\n  color: var(--ts-primary);\n  border-radius: var(--ts-radius-md);\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--ts-spacing-xs);\n  position: relative;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.ts-goal-view-details svg {\n  flex-shrink: 0;\n}\n\n.ts-goal-view-details::before {\n  content: \'\';\n  position: absolute;\n  top: 0;\n  left: -100%;\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\n  transition: left 0.5s ease;\n}\n\n.ts-goal-view-details:hover::before {\n  left: 100%;\n}\n\n.ts-goal-view-details:hover {\n  background: var(--ts-primary);\n  color: var(--ts-bg-elevated);\n  transform: translateY(-1px);\n  box-shadow: var(--ts-shadow-md);\n}\n\n/* ========================================\n   Empty State\n   ======================================== */\n.ts-empty-state {\n  text-align: center;\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\n  background: var(--ts-surface);\n  border: 2px dashed var(--ts-border);\n  border-radius: var(--ts-radius-lg);\n  margin-top: var(--ts-spacing-lg);\n}\n\n.ts-empty-icon {\n  font-size: 64px;\n  margin-bottom: var(--ts-spacing-md);\n  opacity: 0.5;\n}\n\n.ts-empty-state h2 {\n  font-size: 22px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0 0 8px 0;\n}\n\n.ts-empty-state p {\n  font-size: 15px;\n  color: var(--ts-text-muted);\n  margin: 0 0 var(--ts-spacing-lg) 0;\n  line-height: 1.6;\n}\n\n/* ========================================\n   Error Banner\n   ======================================== */\n.ts-error-banner {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-md);\n  background: var(--ts-danger-soft);\n  border: 1px solid var(--ts-danger);\n  border-radius: var(--ts-radius-lg);\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\n  margin-bottom: var(--ts-spacing-lg);\n  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);\n}\n\n.ts-error-banner span {\n  font-size: 24px;\n  flex-shrink: 0;\n  color: var(--ts-danger);\n}\n\n.ts-error-banner p {\n  margin: 0;\n  color: var(--ts-danger);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1.5;\n}\n\n/* ========================================\n   Modal\n   ======================================== */\n.ts-modal-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.65);\n  backdrop-filter: blur(8px);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 10000;\n  animation: fadeIn 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n\n\n@keyframes slideUp {\n  from {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.ts-modal-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: var(--ts-spacing-lg);\n  border-bottom: 1px solid var(--ts-border);\n  background: var(--ts-surface-hover);\n}\n\n.ts-modal-header h2 {\n  margin: 0;\n  font-size: 20px;\n  font-weight: 600;\n  color: var(--ts-text);\n}\n\n.ts-modal-close {\n  background: transparent;\n  border: none;\n  font-size: 24px;\n  cursor: pointer;\n  color: var(--ts-text-muted);\n  padding: 8px;\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: var(--ts-radius-md);\n  transition: all 0.2s ease;\n}\n\n.ts-modal-close:hover {\n  background: var(--ts-danger-soft);\n  color: var(--ts-danger);\n  transform: rotate(90deg);\n}\n\n.ts-modal-body {\n  padding: var(--ts-spacing-lg);\n  overflow-y: auto;\n  flex: 1;\n}\n\n.ts-modal-footer {\n  display: flex;\n  justify-content: flex-end;\n  gap: var(--ts-spacing-sm);\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\n  border-top: 1px solid var(--ts-border);\n  background: var(--ts-surface-hover);\n}\n\n/* ========================================\n   Form Fields\n   ======================================== */\n.ts-form-field {\n  margin-bottom: var(--ts-spacing-lg);\n}\n\n.ts-form-field label {\n  display: block;\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin-bottom: 8px;\n}\n\n.ts-field-help {\n  font-size: 13px;\n  color: var(--ts-text-muted);\n  margin: 4px 0 0 0;\n  line-height: 1.5;\n}\n\n.ts-form-field input[type="text"],\n.ts-form-field textarea,\n.ts-form-field select {\n  width: 100%;\n  padding: 10px 14px;\n  border: 1px solid var(--ts-border);\n  border-radius: var(--ts-radius-md);\n  font-size: 14px;\n  color: var(--ts-text);\n  background: var(--ts-surface);\n  transition: all 0.2s ease;\n}\n\n.ts-form-field input[type="text"]:focus,\n.ts-form-field textarea:focus,\n.ts-form-field select:focus {\n  outline: none;\n  border-color: var(--ts-primary);\n  box-shadow: 0 0 0 3px var(--ts-primary-soft);\n}\n\n.ts-form-field textarea {\n  resize: vertical;\n  min-height: 100px;\n  font-family: inherit;\n  line-height: 1.6;\n}\n\n/* ========================================\n   Condition Rows\n   ======================================== */\n.ts-condition-row {\n  display: flex;\n  gap: var(--ts-spacing-sm);\n  margin-bottom: var(--ts-spacing-sm);\n  align-items: flex-start;\n}\n\n.ts-condition-param,\n.ts-condition-operator,\n.ts-condition-value {\n  flex: 1;\n}\n\n.ts-condition-row .ts-btn-icon {\n  flex-shrink: 0;\n  margin-top: 2px;\n}\n\n/* ========================================\n   Checkbox\n   ======================================== */\n.ts-checkbox-label {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm);\n  cursor: pointer;\n  font-weight: normal !important;\n  padding: var(--ts-spacing-sm);\n  border-radius: var(--ts-radius-md);\n  transition: background 0.2s ease;\n}\n\n.ts-checkbox-label:hover {\n  background: var(--ts-surface-hover);\n}\n\n.ts-checkbox-label input[type="checkbox"] {\n  width: 20px;\n  height: 20px;\n  cursor: pointer;\n  accent-color: var(--ts-primary);\n}\n\n.ts-checkbox-label span {\n  font-size: 14px;\n  color: var(--ts-text);\n  line-height: 1.5;\n}\n\n/* ========================================\n   Buttons\n   ======================================== */\n.ts-btn {\n  padding: 10px 20px;\n  border: none;\n  border-radius: var(--ts-radius-md);\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--ts-spacing-sm);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.ts-btn:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  transform: none !important;\n}\n\n.ts-btn-primary {\n  background: var(--ts-primary);\n  color: var(--ts-bg-elevated);\n}\n\n.ts-btn-primary:hover:not(:disabled) {\n  background: var(--ts-primary-hover);\n  box-shadow: var(--ts-shadow-md);\n  transform: translateY(-1px);\n}\n\n.ts-btn-primary:active:not(:disabled) {\n  transform: translateY(0);\n  box-shadow: var(--ts-shadow-sm);\n}\n\n.ts-btn-secondary {\n  background: var(--ts-surface-hover);\n  color: var(--ts-text);\n  border: 1px solid var(--ts-border);\n}\n\n.ts-btn-secondary:hover:not(:disabled) {\n  background: var(--ts-bg-tertiary);\n  border-color: var(--ts-text-muted);\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n.ts-btn-sm {\n  padding: 6px 14px;\n  font-size: 13px;\n}\n\n/* ========================================\n   Loading State\n   ======================================== */\n.ts-loading-state {\n  text-align: center;\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\n}\n\n.ts-spinner {\n  width: 48px;\n  height: 48px;\n  border: 4px solid var(--ts-border);\n  border-top-color: var(--ts-primary);\n  border-radius: 50%;\n  animation: spin 0.8s linear infinite;\n  margin: 0 auto var(--ts-spacing-md);\n}\n\n@keyframes spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.ts-loading-state p {\n  color: var(--ts-text-muted);\n  font-size: 15px;\n  font-weight: 500;\n}\n\n/* ========================================\n   Templates Grid\n   ======================================== */\n.ts-templates-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n  gap: var(--ts-spacing-lg);\n  margin-top: var(--ts-spacing-lg);\n}\n\n.ts-template-card {\n  display: flex;\n  flex-direction: column;\n}\n\n.ts-template-card .ts-card-body {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n}\n\n.ts-template-icon {\n  font-size: 48px;\n  margin-bottom: var(--ts-spacing-md);\n  text-align: center;\n}\n\n.ts-template-name {\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text);\n  margin: 0 0 8px 0;\n  line-height: 1.4;\n}\n\n.ts-template-description {\n  font-size: 14px;\n  color: var(--ts-text-muted);\n  margin: 0 0 var(--ts-spacing-md) 0;\n  line-height: 1.6;\n  flex: 1;\n}\n\n.ts-template-meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--ts-spacing-sm);\n  margin-bottom: var(--ts-spacing-md);\n  padding-top: var(--ts-spacing-md);\n  border-top: 1px solid var(--ts-border);\n}\n\n.ts-template-add-btn {\n  margin-top: auto;\n}\n\n/* ========================================\n   Responsive Design\n   ======================================== */\n\n/* Tablet and below */\n@media (max-width: 768px) {\n  .ts-goals-page {\n    padding: var(--ts-spacing-md);\n  }\n\n  .ts-templates-grid {\n    grid-template-columns: 1fr;\n    gap: var(--ts-spacing-md);\n  }\n\n  .ts-goal-card {\n    padding: var(--ts-spacing-md);\n  }\n\n  .ts-goal-header {\n    flex-direction: column;\n    gap: var(--ts-spacing-sm);\n    padding-left: 30px;\n  }\n\n  .ts-goal-actions {\n    flex-wrap: wrap;\n  }\n\n  .ts-goal-performance {\n    grid-template-columns: 1fr 1fr;\n    gap: var(--ts-spacing-sm);\n  }\n\n  .ts-goal-stat-value {\n    font-size: 18px;\n  }\n\n  .ts-condition-row {\n    flex-direction: column;\n  }\n\n  .ts-modal {\n    width: 95%;\n    max-height: 95vh;\n  }\n\n  .ts-modal-footer {\n    flex-direction: column;\n  }\n\n  .ts-modal-footer .ts-btn {\n    width: 100%;\n  }\n}\n\n/* Small mobile */\n@media (max-width: 480px) {\n  .ts-goal-performance {\n    grid-template-columns: 1fr;\n  }\n  \n  .ts-goal-header {\n    padding-left: 28px;\n  }\n  \n  .ts-goal-name {\n    font-size: 15px;\n  }\n}\n\n/* ========================================\n   Dark Theme Support\n   ======================================== */\n[data-theme="dark"] .ts-goals-page {\n  background: var(--ts-bg-dark, #0f1419);\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-goal-card,\n[data-theme="dark"] .ts-template-card,\n[data-theme="dark"] .ts-modal-content,\n[data-theme="dark"] .ts-card {\n  background: var(--ts-surface-dark, #1a1f26);\n  border-color: var(--ts-border-dark, #2d3748);\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n}\n\n[data-theme="dark"] .ts-goal-card:hover,\n[data-theme="dark"] .ts-template-card:hover {\n  border-color: var(--ts-primary);\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6), 0 0 0 1px var(--ts-primary);\n}\n\n[data-theme="dark"] .ts-page-title,\n[data-theme="dark"] .ts-goal-title,\n[data-theme="dark"] .ts-template-title,\n[data-theme="dark"] .ts-modal-title {\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-page-description,\n[data-theme="dark"] .ts-goal-description,\n[data-theme="dark"] .ts-template-description,\n[data-theme="dark"] .ts-text-muted {\n  color: var(--ts-text-muted-dark, #9ca3af);\n}\n\n[data-theme="dark"] .ts-kpi-value,\n[data-theme="dark"] .ts-perf-value {\n  color: var(--ts-text-dark, #ffffff);\n}\n\n[data-theme="dark"] .ts-kpi-label,\n[data-theme="dark"] .ts-perf-label {\n  color: var(--ts-text-muted-dark, #9ca3af);\n}\n\n[data-theme="dark"] .ts-btn-outline {\n  border-color: var(--ts-border-dark, #2d3748);\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-btn-outline:hover {\n  background: var(--ts-surface-dark, #2d3748);\n  border-color: var(--ts-primary);\n}\n\n[data-theme="dark"] .ts-btn-danger-outline {\n  border-color: var(--ts-danger);\n  color: var(--ts-danger);\n}\n\n[data-theme="dark"] .ts-btn-danger-outline:hover {\n  background: var(--ts-danger);\n  color: #ffffff;\n}\n\n[data-theme="dark"] .ts-input,\n[data-theme="dark"] .ts-select,\n[data-theme="dark"] .ts-textarea {\n  background: var(--ts-surface-dark, #0f1419);\n  border-color: var(--ts-border-dark, #2d3748);\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-input:focus,\n[data-theme="dark"] .ts-select:focus,\n[data-theme="dark"] .ts-textarea:focus {\n  border-color: var(--ts-primary);\n  background: var(--ts-surface-dark, #1a1f26);\n}\n\n[data-theme="dark"] .ts-badge {\n  background: rgba(59, 130, 246, 0.15);\n  color: #60a5fa;\n}\n\n[data-theme="dark"] .ts-badge-success {\n  background: rgba(16, 185, 129, 0.15);\n  color: #34d399;\n}\n\n[data-theme="dark"] .ts-badge-warning {\n  background: rgba(245, 158, 11, 0.15);\n  color: #fbbf24;\n}\n\n[data-theme="dark"] .ts-badge-danger {\n  background: rgba(239, 68, 68, 0.15);\n  color: #f87171;\n}\n\n[data-theme="dark"] .ts-divider {\n  border-color: var(--ts-border-dark, #2d3748);\n}\n\n[data-theme="dark"] .ts-goal-status-inactive {\n  background: rgba(156, 163, 175, 0.1);\n  color: #9ca3af;\n}\n\n[data-theme="dark"] .ts-empty-state {\n  color: var(--ts-text-muted-dark, #9ca3af);\n}\n\n[data-theme="dark"] .ts-empty-state-title {\n  color: var(--ts-text-dark, #e8eaed);\n}\n\n[data-theme="dark"] .ts-condition-row {\n  background: var(--ts-bg-dark, #0f1419);\n  border-color: var(--ts-border-dark, #2d3748);\n}\n\n[data-theme="dark"] .ts-template-category {\n  color: var(--ts-text-muted-dark, #9ca3af);\n  text-transform: uppercase;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: 0.05em;\n}\n\n[data-theme="dark"] .ts-modal-overlay {\n  background: rgba(0, 0, 0, 0.85);\n}\n\n[data-theme="dark"] .ts-skeleton {\n  background: linear-gradient(\n    90deg,\n    var(--ts-surface-dark, #1a1f26) 0%,\n    var(--ts-border-dark, #2d3748) 50%,\n    var(--ts-surface-dark, #1a1f26) 100%\n  );\n  background-size: 200% 100%;\n}\n\n/* Performance skeleton loading state */\n.ts-goal-performance--loading {\n  opacity: 0.6;\n}\n\n.ts-goal-performance--loading .ts-skeleton--sm {\n  display: inline-block;\n  width: 48px;\n  height: 14px;\n  border-radius: 4px;\n}\n',"",{version:3,sources:["webpack://./src/styles/pages/GoalsPage.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Goals Page - Modern, User-Friendly Design\r\n * Features: CSS Variables, Dark Mode Support, Smooth Animations\r\n * Now using global CSS variables for consistent theming\r\n */\r\n\r\n/* ========================================\r\n   Page Container\r\n\r\n   ======================================== */\r\n.ts-goals-page {\r\n  padding: var(--ts-spacing-lg);\r\n  background: var(--ts-bg);\r\n  min-height: 100vh;\r\n}\r\n\r\n/* ========================================\r\n   Page Header\r\n   ======================================== */\r\n.ts-page-header {\r\n  margin-bottom: var(--ts-spacing-xl);\r\n}\r\n\r\n.ts-page-title {\r\n  font-size: 28px;\r\n  font-weight: 700;\r\n  color: var(--ts-text);\r\n  margin: 0 0 8px 0;\r\n  letter-spacing: -0.025em;\r\n}\r\n\r\n.ts-page-description {\r\n  font-size: 15px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* ========================================\r\n   Tab Navigation\r\n   ======================================== */\r\n.ts-goals-tabs {\r\n  display: flex;\r\n  gap: var(--ts-spacing-xs);\r\n  margin-bottom: var(--ts-spacing-lg);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  padding: 0;\r\n}\r\n\r\n.ts-goals-tab {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs);\r\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\r\n  background: transparent;\r\n  border: none;\r\n  border-bottom: 2px solid transparent;\r\n  color: var(--ts-text-muted);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n  transition: all 0.2s ease;\r\n  position: relative;\r\n  top: 1px;\r\n}\r\n\r\n.ts-goals-tab:hover {\r\n  color: var(--ts-text);\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n.ts-goals-tab--active {\r\n  color: var(--ts-primary);\r\n  border-bottom-color: var(--ts-primary);\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-goals-tab--active:hover {\r\n  background: transparent;\r\n}\r\n\r\n[data-theme="dark"] .ts-goals-tab:hover {\r\n  background: var(--ts-surface-hover-dark);\r\n}\r\n\r\n/* ========================================\r\n   Goals Grid\r\n   ======================================== */\r\n\r\n/* Summary Cards - Row Layout */\r\n.ts-goals-summary {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n  gap: var(--ts-spacing-md);\r\n  margin-bottom: var(--ts-spacing-xl);\r\n}\r\n\r\n.ts-goals-summary-row {\r\n  display: flex;\r\n  flex-direction: row;\r\n  gap: var(--ts-spacing-md);\r\n  margin-bottom: var(--ts-spacing-xl);\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-goals-summary-row > * {\r\n  flex: 1;\r\n  min-width: 200px;\r\n}\r\n\r\n.ts-goals-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));\r\n  gap: var(--ts-spacing-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n}\r\n\r\n/* ========================================\r\n   Goal Card\r\n   ======================================== */\r\n.ts-goal-card {\r\n  background: var(--ts-surface);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  padding: var(--ts-spacing-lg);\r\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\r\n  position: relative;\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 0;\r\n}\r\n\r\n.ts-goal-card::before {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  height: 3px;\r\n  background: linear-gradient(90deg, var(--ts-primary), var(--ts-success));\r\n  opacity: 0;\r\n  transition: opacity 0.3s ease;\r\n}\r\n\r\n.ts-goal-card:hover {\r\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08);\r\n  transform: translateY(-3px);\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n.ts-goal-card:hover::before {\r\n  opacity: 1;\r\n}\r\n\r\n.ts-goal-card-selected {\r\n  border-color: var(--ts-primary);\r\n  background: var(--ts-surface-hover);\r\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\r\n}\r\n\r\n/* Goal Checkbox - Inline with header */\r\n.ts-goal-checkbox {\r\n  position: absolute;\r\n  top: var(--ts-spacing-lg);\r\n  left: var(--ts-spacing-lg);\r\n  z-index: 1;\r\n}\r\n\r\n.ts-goal-checkbox input[type="checkbox"] {\r\n  margin: 0;\r\n  cursor: pointer;\r\n  width: 18px;\r\n  height: 18px;\r\n  accent-color: var(--ts-primary);\r\n}\r\n\r\n/* Goal Header */\r\n.ts-goal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: flex-start;\r\n  margin-bottom: var(--ts-spacing-md);\r\n  gap: var(--ts-spacing-md);\r\n  padding-left: 30px; /* Space for absolute checkbox */\r\n}\r\n\r\n.ts-goal-title-section {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.ts-goal-title-row {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm);\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-goal-name {\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0;\r\n  line-height: 1.4;\r\n}\r\n\r\n.ts-goal-description {\r\n  font-size: 14px;\r\n  color: var(--ts-text-muted);\r\n  margin: 6px 0 0 0;\r\n  line-height: 1.5;\r\n  display: -webkit-box;\r\n  line-clamp: 2;\r\n  -webkit-line-clamp: 2;\r\n  -webkit-box-orient: vertical;\r\n  overflow: hidden;\r\n}\r\n\r\n/* Goal Actions */\r\n.ts-goal-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs);\r\n  flex-shrink: 0;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.ts-goal-status {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  padding: 6px 12px;\r\n  border-radius: var(--ts-radius-full);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-goal-status.ts-active {\r\n  background: var(--ts-success-soft);\r\n  color: var(--ts-success);\r\n  border: 1px solid var(--ts-success);\r\n}\r\n\r\n.ts-goal-status.ts-inactive {\r\n  background: var(--ts-danger-soft);\r\n  color: var(--ts-danger);\r\n  border: 1px solid var(--ts-danger);\r\n}\r\n\r\n.ts-btn-icon {\r\n  background: var(--ts-surface-hover);\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  cursor: pointer;\r\n  font-size: 18px;\r\n  padding: 8px;\r\n  color: var(--ts-text-muted);\r\n  transition: all 0.2s ease;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 36px;\r\n  height: 36px;\r\n}\r\n\r\n.ts-btn-icon:hover {\r\n  background: var(--ts-primary-soft);\r\n  color: var(--ts-primary);\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.ts-btn-icon.ts-btn-danger:hover {\r\n  background: var(--ts-danger-soft);\r\n  color: var(--ts-danger);\r\n  border-color: var(--ts-danger);\r\n  box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);\r\n}\r\n\r\n/* Goal Details */\r\n.ts-goal-details {\r\n  margin-bottom: var(--ts-spacing-md);\r\n}\r\n\r\n.ts-goal-meta {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: var(--ts-spacing-sm);\r\n}\r\n\r\n.ts-goal-event,\r\n.ts-goal-conditions {\r\n  font-size: 13px;\r\n  color: var(--ts-text);\r\n  background: var(--ts-bg-tertiary);\r\n  padding: 6px 12px;\r\n  border-radius: var(--ts-radius-md);\r\n  border: 1px solid var(--ts-border);\r\n  font-weight: 500;\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-goal-event:hover,\r\n.ts-goal-conditions:hover {\r\n  background: var(--ts-primary-soft);\r\n  border-color: var(--ts-primary);\r\n  color: var(--ts-primary);\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n/* Goal Performance */\r\n.ts-goal-performance {\r\n  display: grid;\r\n  grid-template-columns: repeat(2, 1fr);\r\n  gap: var(--ts-spacing-md);\r\n  padding-top: var(--ts-spacing-md);\r\n  border-top: 1px solid var(--ts-border);\r\n  margin-top: auto;\r\n}\r\n\r\n.ts-goal-stat {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 4px;\r\n}\r\n\r\n.ts-goal-stat-label {\r\n  font-size: 11px;\r\n  color: var(--ts-text-muted);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.8px;\r\n  font-weight: 600;\r\n}\r\n\r\n.ts-goal-stat-value {\r\n  font-size: 24px;\r\n  font-weight: 700;\r\n  color: var(--ts-text);\r\n  line-height: 1;\r\n}\r\n\r\n/* View Details Button */\r\n.ts-goal-view-details {\r\n  width: 100%;\r\n  margin-top: var(--ts-spacing-md);\r\n  padding: var(--ts-spacing-sm) var(--ts-spacing-md);\r\n  background: var(--ts-primary-soft);\r\n  border: 1px solid var(--ts-primary);\r\n  color: var(--ts-primary);\r\n  border-radius: var(--ts-radius-md);\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: var(--ts-spacing-xs);\r\n  position: relative;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n}\r\n\r\n.ts-goal-view-details svg {\r\n  flex-shrink: 0;\r\n}\r\n\r\n.ts-goal-view-details::before {\r\n  content: \'\';\r\n  position: absolute;\r\n  top: 0;\r\n  left: -100%;\r\n  width: 100%;\r\n  height: 100%;\r\n  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\r\n  transition: left 0.5s ease;\r\n}\r\n\r\n.ts-goal-view-details:hover::before {\r\n  left: 100%;\r\n}\r\n\r\n.ts-goal-view-details:hover {\r\n  background: var(--ts-primary);\r\n  color: var(--ts-bg-elevated);\r\n  transform: translateY(-1px);\r\n  box-shadow: var(--ts-shadow-md);\r\n}\r\n\r\n/* ========================================\r\n   Empty State\r\n   ======================================== */\r\n.ts-empty-state {\r\n  text-align: center;\r\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\r\n  background: var(--ts-surface);\r\n  border: 2px dashed var(--ts-border);\r\n  border-radius: var(--ts-radius-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-empty-icon {\r\n  font-size: 64px;\r\n  margin-bottom: var(--ts-spacing-md);\r\n  opacity: 0.5;\r\n}\r\n\r\n.ts-empty-state h2 {\r\n  font-size: 22px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0 0 8px 0;\r\n}\r\n\r\n.ts-empty-state p {\r\n  font-size: 15px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0 0 var(--ts-spacing-lg) 0;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* ========================================\r\n   Error Banner\r\n   ======================================== */\r\n.ts-error-banner {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-md);\r\n  background: var(--ts-danger-soft);\r\n  border: 1px solid var(--ts-danger);\r\n  border-radius: var(--ts-radius-lg);\r\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\r\n  margin-bottom: var(--ts-spacing-lg);\r\n  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);\r\n}\r\n\r\n.ts-error-banner span {\r\n  font-size: 24px;\r\n  flex-shrink: 0;\r\n  color: var(--ts-danger);\r\n}\r\n\r\n.ts-error-banner p {\r\n  margin: 0;\r\n  color: var(--ts-danger);\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  line-height: 1.5;\r\n}\r\n\r\n/* ========================================\r\n   Modal\r\n   ======================================== */\r\n.ts-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.65);\r\n  backdrop-filter: blur(8px);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 10000;\r\n  animation: fadeIn 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n  }\r\n  to {\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n\r\n\r\n@keyframes slideUp {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(20px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.ts-modal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: var(--ts-spacing-lg);\r\n  border-bottom: 1px solid var(--ts-border);\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n.ts-modal-header h2 {\r\n  margin: 0;\r\n  font-size: 20px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n}\r\n\r\n.ts-modal-close {\r\n  background: transparent;\r\n  border: none;\r\n  font-size: 24px;\r\n  cursor: pointer;\r\n  color: var(--ts-text-muted);\r\n  padding: 8px;\r\n  width: 40px;\r\n  height: 40px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: var(--ts-radius-md);\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-modal-close:hover {\r\n  background: var(--ts-danger-soft);\r\n  color: var(--ts-danger);\r\n  transform: rotate(90deg);\r\n}\r\n\r\n.ts-modal-body {\r\n  padding: var(--ts-spacing-lg);\r\n  overflow-y: auto;\r\n  flex: 1;\r\n}\r\n\r\n.ts-modal-footer {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: var(--ts-spacing-sm);\r\n  padding: var(--ts-spacing-md) var(--ts-spacing-lg);\r\n  border-top: 1px solid var(--ts-border);\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n/* ========================================\r\n   Form Fields\r\n   ======================================== */\r\n.ts-form-field {\r\n  margin-bottom: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-form-field label {\r\n  display: block;\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.ts-field-help {\r\n  font-size: 13px;\r\n  color: var(--ts-text-muted);\r\n  margin: 4px 0 0 0;\r\n  line-height: 1.5;\r\n}\r\n\r\n.ts-form-field input[type="text"],\r\n.ts-form-field textarea,\r\n.ts-form-field select {\r\n  width: 100%;\r\n  padding: 10px 14px;\r\n  border: 1px solid var(--ts-border);\r\n  border-radius: var(--ts-radius-md);\r\n  font-size: 14px;\r\n  color: var(--ts-text);\r\n  background: var(--ts-surface);\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n.ts-form-field input[type="text"]:focus,\r\n.ts-form-field textarea:focus,\r\n.ts-form-field select:focus {\r\n  outline: none;\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 0 0 3px var(--ts-primary-soft);\r\n}\r\n\r\n.ts-form-field textarea {\r\n  resize: vertical;\r\n  min-height: 100px;\r\n  font-family: inherit;\r\n  line-height: 1.6;\r\n}\r\n\r\n/* ========================================\r\n   Condition Rows\r\n   ======================================== */\r\n.ts-condition-row {\r\n  display: flex;\r\n  gap: var(--ts-spacing-sm);\r\n  margin-bottom: var(--ts-spacing-sm);\r\n  align-items: flex-start;\r\n}\r\n\r\n.ts-condition-param,\r\n.ts-condition-operator,\r\n.ts-condition-value {\r\n  flex: 1;\r\n}\r\n\r\n.ts-condition-row .ts-btn-icon {\r\n  flex-shrink: 0;\r\n  margin-top: 2px;\r\n}\r\n\r\n/* ========================================\r\n   Checkbox\r\n   ======================================== */\r\n.ts-checkbox-label {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm);\r\n  cursor: pointer;\r\n  font-weight: normal !important;\r\n  padding: var(--ts-spacing-sm);\r\n  border-radius: var(--ts-radius-md);\r\n  transition: background 0.2s ease;\r\n}\r\n\r\n.ts-checkbox-label:hover {\r\n  background: var(--ts-surface-hover);\r\n}\r\n\r\n.ts-checkbox-label input[type="checkbox"] {\r\n  width: 20px;\r\n  height: 20px;\r\n  cursor: pointer;\r\n  accent-color: var(--ts-primary);\r\n}\r\n\r\n.ts-checkbox-label span {\r\n  font-size: 14px;\r\n  color: var(--ts-text);\r\n  line-height: 1.5;\r\n}\r\n\r\n/* ========================================\r\n   Buttons\r\n   ======================================== */\r\n.ts-btn {\r\n  padding: 10px 20px;\r\n  border: none;\r\n  border-radius: var(--ts-radius-md);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: var(--ts-spacing-sm);\r\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n}\r\n\r\n.ts-btn:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n  transform: none !important;\r\n}\r\n\r\n.ts-btn-primary {\r\n  background: var(--ts-primary);\r\n  color: var(--ts-bg-elevated);\r\n}\r\n\r\n.ts-btn-primary:hover:not(:disabled) {\r\n  background: var(--ts-primary-hover);\r\n  box-shadow: var(--ts-shadow-md);\r\n  transform: translateY(-1px);\r\n}\r\n\r\n.ts-btn-primary:active:not(:disabled) {\r\n  transform: translateY(0);\r\n  box-shadow: var(--ts-shadow-sm);\r\n}\r\n\r\n.ts-btn-secondary {\r\n  background: var(--ts-surface-hover);\r\n  color: var(--ts-text);\r\n  border: 1px solid var(--ts-border);\r\n}\r\n\r\n.ts-btn-secondary:hover:not(:disabled) {\r\n  background: var(--ts-bg-tertiary);\r\n  border-color: var(--ts-text-muted);\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.ts-btn-sm {\r\n  padding: 6px 14px;\r\n  font-size: 13px;\r\n}\r\n\r\n/* ========================================\r\n   Loading State\r\n   ======================================== */\r\n.ts-loading-state {\r\n  text-align: center;\r\n  padding: var(--ts-spacing-xl) var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-spinner {\r\n  width: 48px;\r\n  height: 48px;\r\n  border: 4px solid var(--ts-border);\r\n  border-top-color: var(--ts-primary);\r\n  border-radius: 50%;\r\n  animation: spin 0.8s linear infinite;\r\n  margin: 0 auto var(--ts-spacing-md);\r\n}\r\n\r\n@keyframes spin {\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n\r\n.ts-loading-state p {\r\n  color: var(--ts-text-muted);\r\n  font-size: 15px;\r\n  font-weight: 500;\r\n}\r\n\r\n/* ========================================\r\n   Templates Grid\r\n   ======================================== */\r\n.ts-templates-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n  gap: var(--ts-spacing-lg);\r\n  margin-top: var(--ts-spacing-lg);\r\n}\r\n\r\n.ts-template-card {\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n.ts-template-card .ts-card-body {\r\n  display: flex;\r\n  flex-direction: column;\r\n  flex: 1;\r\n}\r\n\r\n.ts-template-icon {\r\n  font-size: 48px;\r\n  margin-bottom: var(--ts-spacing-md);\r\n  text-align: center;\r\n}\r\n\r\n.ts-template-name {\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text);\r\n  margin: 0 0 8px 0;\r\n  line-height: 1.4;\r\n}\r\n\r\n.ts-template-description {\r\n  font-size: 14px;\r\n  color: var(--ts-text-muted);\r\n  margin: 0 0 var(--ts-spacing-md) 0;\r\n  line-height: 1.6;\r\n  flex: 1;\r\n}\r\n\r\n.ts-template-meta {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: var(--ts-spacing-sm);\r\n  margin-bottom: var(--ts-spacing-md);\r\n  padding-top: var(--ts-spacing-md);\r\n  border-top: 1px solid var(--ts-border);\r\n}\r\n\r\n.ts-template-add-btn {\r\n  margin-top: auto;\r\n}\r\n\r\n/* ========================================\r\n   Responsive Design\r\n   ======================================== */\r\n\r\n/* Tablet and below */\r\n@media (max-width: 768px) {\r\n  .ts-goals-page {\r\n    padding: var(--ts-spacing-md);\r\n  }\r\n\r\n  .ts-templates-grid {\r\n    grid-template-columns: 1fr;\r\n    gap: var(--ts-spacing-md);\r\n  }\r\n\r\n  .ts-goal-card {\r\n    padding: var(--ts-spacing-md);\r\n  }\r\n\r\n  .ts-goal-header {\r\n    flex-direction: column;\r\n    gap: var(--ts-spacing-sm);\r\n    padding-left: 30px;\r\n  }\r\n\r\n  .ts-goal-actions {\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .ts-goal-performance {\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: var(--ts-spacing-sm);\r\n  }\r\n\r\n  .ts-goal-stat-value {\r\n    font-size: 18px;\r\n  }\r\n\r\n  .ts-condition-row {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .ts-modal {\r\n    width: 95%;\r\n    max-height: 95vh;\r\n  }\r\n\r\n  .ts-modal-footer {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .ts-modal-footer .ts-btn {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n/* Small mobile */\r\n@media (max-width: 480px) {\r\n  .ts-goal-performance {\r\n    grid-template-columns: 1fr;\r\n  }\r\n  \r\n  .ts-goal-header {\r\n    padding-left: 28px;\r\n  }\r\n  \r\n  .ts-goal-name {\r\n    font-size: 15px;\r\n  }\r\n}\r\n\r\n/* ========================================\r\n   Dark Theme Support\r\n   ======================================== */\r\n[data-theme="dark"] .ts-goals-page {\r\n  background: var(--ts-bg-dark, #0f1419);\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-card,\r\n[data-theme="dark"] .ts-template-card,\r\n[data-theme="dark"] .ts-modal-content,\r\n[data-theme="dark"] .ts-card {\r\n  background: var(--ts-surface-dark, #1a1f26);\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-card:hover,\r\n[data-theme="dark"] .ts-template-card:hover {\r\n  border-color: var(--ts-primary);\r\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6), 0 0 0 1px var(--ts-primary);\r\n}\r\n\r\n[data-theme="dark"] .ts-page-title,\r\n[data-theme="dark"] .ts-goal-title,\r\n[data-theme="dark"] .ts-template-title,\r\n[data-theme="dark"] .ts-modal-title {\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-page-description,\r\n[data-theme="dark"] .ts-goal-description,\r\n[data-theme="dark"] .ts-template-description,\r\n[data-theme="dark"] .ts-text-muted {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n}\r\n\r\n[data-theme="dark"] .ts-kpi-value,\r\n[data-theme="dark"] .ts-perf-value {\r\n  color: var(--ts-text-dark, #ffffff);\r\n}\r\n\r\n[data-theme="dark"] .ts-kpi-label,\r\n[data-theme="dark"] .ts-perf-label {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-outline {\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-outline:hover {\r\n  background: var(--ts-surface-dark, #2d3748);\r\n  border-color: var(--ts-primary);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-danger-outline {\r\n  border-color: var(--ts-danger);\r\n  color: var(--ts-danger);\r\n}\r\n\r\n[data-theme="dark"] .ts-btn-danger-outline:hover {\r\n  background: var(--ts-danger);\r\n  color: #ffffff;\r\n}\r\n\r\n[data-theme="dark"] .ts-input,\r\n[data-theme="dark"] .ts-select,\r\n[data-theme="dark"] .ts-textarea {\r\n  background: var(--ts-surface-dark, #0f1419);\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-input:focus,\r\n[data-theme="dark"] .ts-select:focus,\r\n[data-theme="dark"] .ts-textarea:focus {\r\n  border-color: var(--ts-primary);\r\n  background: var(--ts-surface-dark, #1a1f26);\r\n}\r\n\r\n[data-theme="dark"] .ts-badge {\r\n  background: rgba(59, 130, 246, 0.15);\r\n  color: #60a5fa;\r\n}\r\n\r\n[data-theme="dark"] .ts-badge-success {\r\n  background: rgba(16, 185, 129, 0.15);\r\n  color: #34d399;\r\n}\r\n\r\n[data-theme="dark"] .ts-badge-warning {\r\n  background: rgba(245, 158, 11, 0.15);\r\n  color: #fbbf24;\r\n}\r\n\r\n[data-theme="dark"] .ts-badge-danger {\r\n  background: rgba(239, 68, 68, 0.15);\r\n  color: #f87171;\r\n}\r\n\r\n[data-theme="dark"] .ts-divider {\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-status-inactive {\r\n  background: rgba(156, 163, 175, 0.1);\r\n  color: #9ca3af;\r\n}\r\n\r\n[data-theme="dark"] .ts-empty-state {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n}\r\n\r\n[data-theme="dark"] .ts-empty-state-title {\r\n  color: var(--ts-text-dark, #e8eaed);\r\n}\r\n\r\n[data-theme="dark"] .ts-condition-row {\r\n  background: var(--ts-bg-dark, #0f1419);\r\n  border-color: var(--ts-border-dark, #2d3748);\r\n}\r\n\r\n[data-theme="dark"] .ts-template-category {\r\n  color: var(--ts-text-muted-dark, #9ca3af);\r\n  text-transform: uppercase;\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.05em;\r\n}\r\n\r\n[data-theme="dark"] .ts-modal-overlay {\r\n  background: rgba(0, 0, 0, 0.85);\r\n}\r\n\r\n[data-theme="dark"] .ts-skeleton {\r\n  background: linear-gradient(\r\n    90deg,\r\n    var(--ts-surface-dark, #1a1f26) 0%,\r\n    var(--ts-border-dark, #2d3748) 50%,\r\n    var(--ts-surface-dark, #1a1f26) 100%\r\n  );\r\n  background-size: 200% 100%;\r\n}\r\n\r\n/* Performance skeleton loading state */\r\n.ts-goal-performance--loading {\r\n  opacity: 0.6;\r\n}\r\n\r\n.ts-goal-performance--loading .ts-skeleton--sm {\r\n  display: inline-block;\r\n  width: 48px;\r\n  height: 14px;\r\n  border-radius: 4px;\r\n}\r\n'],sourceRoot:""}]);const i=s},80126:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'/**\n * Goal Modal Styles\n * \n * Unified styling for goal creation/editing modal\n * Supports dark/light themes with CSS variables\n * \n * @since 2.1.0\n * @package TrackSure\n */\n\n/* ============================================================\n   Modal Content\n   ============================================================ */\n\n.ts-goal-modal__content {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-lg, 1.5rem);\n  padding: var(--ts-spacing-md, 1rem);\n}\n\n/* ============================================================\n   Banner (Info/Error Messages)\n   ============================================================ */\n\n.ts-goal-modal__banner {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  padding: var(--ts-spacing-md, 1rem);\n  border-radius: var(--ts-radius-lg, 8px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.ts-goal-modal__banner-icon {\n  flex-shrink: 0;\n  font-size: 1.25rem;\n  line-height: 1;\n}\n\n.ts-goal-modal__banner--info {\n  background: var(--ts-info-bg, #e0f2fe);\n  border: 1px solid var(--ts-info-border, #7dd3fc);\n  color: var(--ts-info-text, #0c4a6e);\n}\n\n[data-theme="dark"] .ts-goal-modal__banner--info {\n  background: rgba(14, 116, 144, 0.1);\n  border-color: rgba(6, 182, 212, 0.3);\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__banner--error {\n  background: var(--ts-error-bg, #fef2f2);\n  border: 1px solid var(--ts-error-border, #fca5a5);\n  color: var(--ts-error-text, #991b1b);\n}\n\n[data-theme="dark"] .ts-goal-modal__banner--error {\n  background: rgba(127, 29, 29, 0.2);\n  border-color: rgba(248, 113, 113, 0.3);\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__banner strong {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 0.25rem;\n}\n\n.ts-goal-modal__banner p {\n  margin: 0;\n  color: inherit;\n  opacity: 0.9;\n}\n\n/* ============================================================\n   Sections\n   ============================================================ */\n\n.ts-goal-modal__section {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-md, 1rem);\n}\n\n.ts-goal-modal__section-title {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  margin: 0;\n  font-size: 1rem;\n  font-weight: 600;\n  color: var(--ts-text-primary, #1e293b);\n}\n\n[data-theme="dark"] .ts-goal-modal__section-title {\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__section-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1.25rem;\n  line-height: 1;\n}\n\n/* ============================================================\n   Form Fields\n   ============================================================ */\n\n.ts-goal-modal__field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--ts-spacing-xs, 0.5rem);\n}\n\n.ts-goal-modal__label {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-xs, 0.5rem);\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: var(--ts-text-primary, #334155);\n}\n\n[data-theme="dark"] .ts-goal-modal__label {\n  color: var(--ts-text-primary, #e2e8f0);\n}\n\n.ts-goal-modal__label--required::after {\n  content: \'*\';\n  color: var(--ts-danger, #ef4444);\n  margin-left: 0.125rem;\n}\n\n.ts-goal-modal__label-optional {\n  font-size: 0.75rem;\n  font-weight: 400;\n  color: var(--ts-text-tertiary, #94a3b8);\n}\n\n/* Input Styles */\n.ts-goal-modal__input,\n.ts-goal-modal__textarea,\n.ts-goal-modal__select {\n  width: 100%;\n  padding: 0.625rem 0.875rem;\n  font-size: 0.875rem;\n  font-family: var(--ts-font-sans);\n  color: var(--ts-text-primary, #1e293b);\n  background: var(--ts-bg-primary, #ffffff);\n  border: 1px solid var(--ts-border-color, #e2e8f0);\n  border-radius: var(--ts-radius-md, 6px);\n  transition: all var(--ts-fast, 120ms);\n  outline: none;\n}\n\n[data-theme="dark"] .ts-goal-modal__input,\n[data-theme="dark"] .ts-goal-modal__textarea,\n[data-theme="dark"] .ts-goal-modal__select {\n  color: var(--ts-text-primary, #f9fafb);\n  background: var(--ts-bg-secondary, #1e293b);\n  border-color: var(--ts-border-color, #334155);\n}\n\n.ts-goal-modal__input:hover,\n.ts-goal-modal__textarea:hover,\n.ts-goal-modal__select:hover {\n  border-color: var(--ts-border-color-hover, #cbd5e1);\n}\n\n[data-theme="dark"] .ts-goal-modal__input:hover,\n[data-theme="dark"] .ts-goal-modal__textarea:hover,\n[data-theme="dark"] .ts-goal-modal__select:hover {\n  border-color: var(--ts-border-color-hover, #475569);\n}\n\n.ts-goal-modal__input:focus,\n.ts-goal-modal__textarea:focus,\n.ts-goal-modal__select:focus {\n  border-color: var(--ts-primary, #6366f1);\n  box-shadow: var(--ts-ring, 0 0 0 3px rgba(99, 102, 241, 0.1));\n}\n\n[data-theme="dark"] .ts-goal-modal__input:focus,\n[data-theme="dark"] .ts-goal-modal__textarea:focus,\n[data-theme="dark"] .ts-goal-modal__select:focus {\n  border-color: var(--ts-primary, #818cf8);\n  box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2);\n}\n\n.ts-goal-modal__input::placeholder,\n.ts-goal-modal__textarea::placeholder {\n  color: var(--ts-text-tertiary, #94a3b8);\n  opacity: 1;\n}\n\n[data-theme="dark"] .ts-goal-modal__input::placeholder,\n[data-theme="dark"] .ts-goal-modal__textarea::placeholder {\n  color: var(--ts-text-tertiary, #64748b);\n}\n\n.ts-goal-modal__textarea {\n  resize: vertical;\n  min-height: 80px;\n}\n\n/* Error State */\n.ts-goal-modal__input--error,\n.ts-goal-modal__textarea--error {\n  border-color: var(--ts-danger, #ef4444);\n}\n\n[data-theme="dark"] .ts-goal-modal__input--error,\n[data-theme="dark"] .ts-goal-modal__textarea--error {\n  border-color: var(--ts-danger, #f87171);\n}\n\n.ts-goal-modal__input--error:focus,\n.ts-goal-modal__textarea--error:focus {\n  box-shadow: var(--ts-ring-danger, 0 0 0 3px rgba(239, 68, 68, 0.1));\n}\n\n[data-theme="dark"] .ts-goal-modal__input--error:focus,\n[data-theme="dark"] .ts-goal-modal__textarea--error:focus {\n  box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.2);\n}\n\n/* ============================================================\n   Help Text & Errors\n   ============================================================ */\n\n.ts-goal-modal__help {\n  margin: 0;\n  font-size: 0.75rem;\n  color: var(--ts-text-secondary, #64748b);\n  line-height: 1.5;\n}\n\n[data-theme="dark"] .ts-goal-modal__help {\n  color: var(--ts-text-secondary, #94a3b8);\n}\n\n.ts-goal-modal__error {\n  display: flex;\n  align-items: center;\n  gap: 0.375rem;\n  margin: 0;\n  font-size: 0.75rem;\n  color: var(--ts-danger, #ef4444);\n  line-height: 1.5;\n}\n\n[data-theme="dark"] .ts-goal-modal__error {\n  color: var(--ts-danger, #f87171);\n}\n\n.ts-goal-modal__error::before {\n  content: \'⚠\';\n  font-size: 0.875rem;\n}\n\n.ts-goal-modal__error-list {\n  margin: 0.5rem 0 0 0;\n  padding-left: 1.25rem;\n  list-style: disc;\n}\n\n.ts-goal-modal__error-list li {\n  margin: 0.25rem 0;\n}\n\n/* ============================================================\n   Toggle Switch\n   ============================================================ */\n\n.ts-goal-modal__toggle {\n  display: flex;\n  align-items: center;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  padding: var(--ts-spacing-md, 1rem);\n  background: var(--ts-bg-secondary, #f8fafc);\n  border: 1px solid var(--ts-border-color, #e2e8f0);\n  border-radius: var(--ts-radius-lg, 8px);\n  cursor: pointer;\n  transition: all var(--ts-fast, 120ms);\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle {\n  background: var(--ts-bg-tertiary, #0f172a);\n  border-color: var(--ts-border-color, #1e293b);\n}\n\n.ts-goal-modal__toggle:hover {\n  background: var(--ts-surface-hover, #f1f5f9);\n  border-color: var(--ts-border-color-hover, #cbd5e1);\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle:hover {\n  background: var(--ts-surface-hover, #1e293b);\n  border-color: var(--ts-border-color-hover, #334155);\n}\n\n.ts-goal-modal__toggle-input {\n  width: 20px;\n  height: 20px;\n  flex-shrink: 0;\n  cursor: pointer;\n  accent-color: var(--ts-primary, #6366f1);\n}\n\n.ts-goal-modal__toggle-content {\n  flex: 1;\n}\n\n.ts-goal-modal__toggle-title {\n  font-weight: 600;\n  font-size: 0.875rem;\n  color: var(--ts-text-primary, #1e293b);\n  margin-bottom: 0.125rem;\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle-title {\n  color: var(--ts-text-primary, #f9fafb);\n}\n\n.ts-goal-modal__toggle-description {\n  font-size: 0.75rem;\n  color: var(--ts-text-secondary, #64748b);\n}\n\n[data-theme="dark"] .ts-goal-modal__toggle-description {\n  color: var(--ts-text-secondary, #94a3b8);\n}\n\n/* ============================================================\n   Footer\n   ============================================================ */\n\n.ts-goal-modal__footer {\n  display: flex;\n  gap: var(--ts-spacing-sm, 0.75rem);\n  justify-content: flex-end;\n}\n\n/* ============================================================\n   Responsive Design\n   ============================================================ */\n\n@media (max-width: 768px) {\n  .ts-goal-modal__content {\n    padding: var(--ts-spacing-sm, 0.75rem);\n    gap: var(--ts-spacing-md, 1rem);\n  }\n\n  .ts-goal-modal__section {\n    gap: var(--ts-spacing-sm, 0.75rem);\n  }\n\n  .ts-goal-modal__footer {\n    flex-direction: column;\n  }\n\n  .ts-goal-modal__footer .ts-btn {\n    width: 100%;\n  }\n}\n\n/* ============================================================\n   Accessibility Improvements\n   ============================================================ */\n\n/* Focus visible (keyboard navigation) */\n.ts-goal-modal__input:focus-visible,\n.ts-goal-modal__textarea:focus-visible,\n.ts-goal-modal__select:focus-visible,\n.ts-goal-modal__toggle-input:focus-visible {\n  outline: 2px solid var(--ts-primary, #6366f1);\n  outline-offset: 2px;\n}\n\n[data-theme="dark"] .ts-goal-modal__input:focus-visible,\n[data-theme="dark"] .ts-goal-modal__textarea:focus-visible,\n[data-theme="dark"] .ts-goal-modal__select:focus-visible,\n[data-theme="dark"] .ts-goal-modal__toggle-input:focus-visible {\n  outline-color: var(--ts-primary, #818cf8);\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n  .ts-goal-modal__input,\n  .ts-goal-modal__textarea,\n  .ts-goal-modal__select,\n  .ts-goal-modal__toggle {\n    border-width: 2px;\n  }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .ts-goal-modal__input,\n  .ts-goal-modal__textarea,\n  .ts-goal-modal__select,\n  .ts-goal-modal__toggle {\n    transition: none;\n  }\n}\n',"",{version:3,sources:["webpack://./src/components/goals/components/GoalModal.css"],names:[],mappings:"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",sourcesContent:['/**\r\n * Goal Modal Styles\r\n * \r\n * Unified styling for goal creation/editing modal\r\n * Supports dark/light themes with CSS variables\r\n * \r\n * @since 2.1.0\r\n * @package TrackSure\r\n */\r\n\r\n/* ============================================================\r\n   Modal Content\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__content {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-lg, 1.5rem);\r\n  padding: var(--ts-spacing-md, 1rem);\r\n}\r\n\r\n/* ============================================================\r\n   Banner (Info/Error Messages)\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__banner {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  padding: var(--ts-spacing-md, 1rem);\r\n  border-radius: var(--ts-radius-lg, 8px);\r\n  font-size: 0.875rem;\r\n  line-height: 1.5;\r\n}\r\n\r\n.ts-goal-modal__banner-icon {\r\n  flex-shrink: 0;\r\n  font-size: 1.25rem;\r\n  line-height: 1;\r\n}\r\n\r\n.ts-goal-modal__banner--info {\r\n  background: var(--ts-info-bg, #e0f2fe);\r\n  border: 1px solid var(--ts-info-border, #7dd3fc);\r\n  color: var(--ts-info-text, #0c4a6e);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__banner--info {\r\n  background: rgba(14, 116, 144, 0.1);\r\n  border-color: rgba(6, 182, 212, 0.3);\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__banner--error {\r\n  background: var(--ts-error-bg, #fef2f2);\r\n  border: 1px solid var(--ts-error-border, #fca5a5);\r\n  color: var(--ts-error-text, #991b1b);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__banner--error {\r\n  background: rgba(127, 29, 29, 0.2);\r\n  border-color: rgba(248, 113, 113, 0.3);\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__banner strong {\r\n  display: block;\r\n  font-weight: 600;\r\n  margin-bottom: 0.25rem;\r\n}\r\n\r\n.ts-goal-modal__banner p {\r\n  margin: 0;\r\n  color: inherit;\r\n  opacity: 0.9;\r\n}\r\n\r\n/* ============================================================\r\n   Sections\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__section {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-md, 1rem);\r\n}\r\n\r\n.ts-goal-modal__section-title {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  margin: 0;\r\n  font-size: 1rem;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary, #1e293b);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__section-title {\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__section-icon {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 1.25rem;\r\n  line-height: 1;\r\n}\r\n\r\n/* ============================================================\r\n   Form Fields\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__field {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: var(--ts-spacing-xs, 0.5rem);\r\n}\r\n\r\n.ts-goal-modal__label {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-xs, 0.5rem);\r\n  font-size: 0.875rem;\r\n  font-weight: 500;\r\n  color: var(--ts-text-primary, #334155);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__label {\r\n  color: var(--ts-text-primary, #e2e8f0);\r\n}\r\n\r\n.ts-goal-modal__label--required::after {\r\n  content: \'*\';\r\n  color: var(--ts-danger, #ef4444);\r\n  margin-left: 0.125rem;\r\n}\r\n\r\n.ts-goal-modal__label-optional {\r\n  font-size: 0.75rem;\r\n  font-weight: 400;\r\n  color: var(--ts-text-tertiary, #94a3b8);\r\n}\r\n\r\n/* Input Styles */\r\n.ts-goal-modal__input,\r\n.ts-goal-modal__textarea,\r\n.ts-goal-modal__select {\r\n  width: 100%;\r\n  padding: 0.625rem 0.875rem;\r\n  font-size: 0.875rem;\r\n  font-family: var(--ts-font-sans);\r\n  color: var(--ts-text-primary, #1e293b);\r\n  background: var(--ts-bg-primary, #ffffff);\r\n  border: 1px solid var(--ts-border-color, #e2e8f0);\r\n  border-radius: var(--ts-radius-md, 6px);\r\n  transition: all var(--ts-fast, 120ms);\r\n  outline: none;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input,\r\n[data-theme="dark"] .ts-goal-modal__textarea,\r\n[data-theme="dark"] .ts-goal-modal__select {\r\n  color: var(--ts-text-primary, #f9fafb);\r\n  background: var(--ts-bg-secondary, #1e293b);\r\n  border-color: var(--ts-border-color, #334155);\r\n}\r\n\r\n.ts-goal-modal__input:hover,\r\n.ts-goal-modal__textarea:hover,\r\n.ts-goal-modal__select:hover {\r\n  border-color: var(--ts-border-color-hover, #cbd5e1);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input:hover,\r\n[data-theme="dark"] .ts-goal-modal__textarea:hover,\r\n[data-theme="dark"] .ts-goal-modal__select:hover {\r\n  border-color: var(--ts-border-color-hover, #475569);\r\n}\r\n\r\n.ts-goal-modal__input:focus,\r\n.ts-goal-modal__textarea:focus,\r\n.ts-goal-modal__select:focus {\r\n  border-color: var(--ts-primary, #6366f1);\r\n  box-shadow: var(--ts-ring, 0 0 0 3px rgba(99, 102, 241, 0.1));\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input:focus,\r\n[data-theme="dark"] .ts-goal-modal__textarea:focus,\r\n[data-theme="dark"] .ts-goal-modal__select:focus {\r\n  border-color: var(--ts-primary, #818cf8);\r\n  box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2);\r\n}\r\n\r\n.ts-goal-modal__input::placeholder,\r\n.ts-goal-modal__textarea::placeholder {\r\n  color: var(--ts-text-tertiary, #94a3b8);\r\n  opacity: 1;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input::placeholder,\r\n[data-theme="dark"] .ts-goal-modal__textarea::placeholder {\r\n  color: var(--ts-text-tertiary, #64748b);\r\n}\r\n\r\n.ts-goal-modal__textarea {\r\n  resize: vertical;\r\n  min-height: 80px;\r\n}\r\n\r\n/* Error State */\r\n.ts-goal-modal__input--error,\r\n.ts-goal-modal__textarea--error {\r\n  border-color: var(--ts-danger, #ef4444);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input--error,\r\n[data-theme="dark"] .ts-goal-modal__textarea--error {\r\n  border-color: var(--ts-danger, #f87171);\r\n}\r\n\r\n.ts-goal-modal__input--error:focus,\r\n.ts-goal-modal__textarea--error:focus {\r\n  box-shadow: var(--ts-ring-danger, 0 0 0 3px rgba(239, 68, 68, 0.1));\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input--error:focus,\r\n[data-theme="dark"] .ts-goal-modal__textarea--error:focus {\r\n  box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.2);\r\n}\r\n\r\n/* ============================================================\r\n   Help Text & Errors\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__help {\r\n  margin: 0;\r\n  font-size: 0.75rem;\r\n  color: var(--ts-text-secondary, #64748b);\r\n  line-height: 1.5;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__help {\r\n  color: var(--ts-text-secondary, #94a3b8);\r\n}\r\n\r\n.ts-goal-modal__error {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.375rem;\r\n  margin: 0;\r\n  font-size: 0.75rem;\r\n  color: var(--ts-danger, #ef4444);\r\n  line-height: 1.5;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__error {\r\n  color: var(--ts-danger, #f87171);\r\n}\r\n\r\n.ts-goal-modal__error::before {\r\n  content: \'⚠\';\r\n  font-size: 0.875rem;\r\n}\r\n\r\n.ts-goal-modal__error-list {\r\n  margin: 0.5rem 0 0 0;\r\n  padding-left: 1.25rem;\r\n  list-style: disc;\r\n}\r\n\r\n.ts-goal-modal__error-list li {\r\n  margin: 0.25rem 0;\r\n}\r\n\r\n/* ============================================================\r\n   Toggle Switch\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__toggle {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  padding: var(--ts-spacing-md, 1rem);\r\n  background: var(--ts-bg-secondary, #f8fafc);\r\n  border: 1px solid var(--ts-border-color, #e2e8f0);\r\n  border-radius: var(--ts-radius-lg, 8px);\r\n  cursor: pointer;\r\n  transition: all var(--ts-fast, 120ms);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle {\r\n  background: var(--ts-bg-tertiary, #0f172a);\r\n  border-color: var(--ts-border-color, #1e293b);\r\n}\r\n\r\n.ts-goal-modal__toggle:hover {\r\n  background: var(--ts-surface-hover, #f1f5f9);\r\n  border-color: var(--ts-border-color-hover, #cbd5e1);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle:hover {\r\n  background: var(--ts-surface-hover, #1e293b);\r\n  border-color: var(--ts-border-color-hover, #334155);\r\n}\r\n\r\n.ts-goal-modal__toggle-input {\r\n  width: 20px;\r\n  height: 20px;\r\n  flex-shrink: 0;\r\n  cursor: pointer;\r\n  accent-color: var(--ts-primary, #6366f1);\r\n}\r\n\r\n.ts-goal-modal__toggle-content {\r\n  flex: 1;\r\n}\r\n\r\n.ts-goal-modal__toggle-title {\r\n  font-weight: 600;\r\n  font-size: 0.875rem;\r\n  color: var(--ts-text-primary, #1e293b);\r\n  margin-bottom: 0.125rem;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle-title {\r\n  color: var(--ts-text-primary, #f9fafb);\r\n}\r\n\r\n.ts-goal-modal__toggle-description {\r\n  font-size: 0.75rem;\r\n  color: var(--ts-text-secondary, #64748b);\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__toggle-description {\r\n  color: var(--ts-text-secondary, #94a3b8);\r\n}\r\n\r\n/* ============================================================\r\n   Footer\r\n   ============================================================ */\r\n\r\n.ts-goal-modal__footer {\r\n  display: flex;\r\n  gap: var(--ts-spacing-sm, 0.75rem);\r\n  justify-content: flex-end;\r\n}\r\n\r\n/* ============================================================\r\n   Responsive Design\r\n   ============================================================ */\r\n\r\n@media (max-width: 768px) {\r\n  .ts-goal-modal__content {\r\n    padding: var(--ts-spacing-sm, 0.75rem);\r\n    gap: var(--ts-spacing-md, 1rem);\r\n  }\r\n\r\n  .ts-goal-modal__section {\r\n    gap: var(--ts-spacing-sm, 0.75rem);\r\n  }\r\n\r\n  .ts-goal-modal__footer {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .ts-goal-modal__footer .ts-btn {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n/* ============================================================\r\n   Accessibility Improvements\r\n   ============================================================ */\r\n\r\n/* Focus visible (keyboard navigation) */\r\n.ts-goal-modal__input:focus-visible,\r\n.ts-goal-modal__textarea:focus-visible,\r\n.ts-goal-modal__select:focus-visible,\r\n.ts-goal-modal__toggle-input:focus-visible {\r\n  outline: 2px solid var(--ts-primary, #6366f1);\r\n  outline-offset: 2px;\r\n}\r\n\r\n[data-theme="dark"] .ts-goal-modal__input:focus-visible,\r\n[data-theme="dark"] .ts-goal-modal__textarea:focus-visible,\r\n[data-theme="dark"] .ts-goal-modal__select:focus-visible,\r\n[data-theme="dark"] .ts-goal-modal__toggle-input:focus-visible {\r\n  outline-color: var(--ts-primary, #818cf8);\r\n}\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n  .ts-goal-modal__input,\r\n  .ts-goal-modal__textarea,\r\n  .ts-goal-modal__select,\r\n  .ts-goal-modal__toggle {\r\n    border-width: 2px;\r\n  }\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n  .ts-goal-modal__input,\r\n  .ts-goal-modal__textarea,\r\n  .ts-goal-modal__select,\r\n  .ts-goal-modal__toggle {\r\n    transition: none;\r\n  }\r\n}\r\n'],sourceRoot:""}]);const i=s},96478:(r,n,e)=>{e.d(n,{A:()=>i});var a=e(71354),t=e.n(a),o=e(76314),s=e.n(o)()(t());s.push([r.id,'.goal-bulk-actions {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 12px 16px;\n  background: var(--ts-bg-secondary);\n  border: 1px solid var(--ts-border-color);\n  border-radius: 8px;\n  margin-bottom: 16px;\n  gap: 16px;\n}\n\n.bulk-actions-left {\n  display: flex;\n  align-items: center;\n}\n\n.bulk-select-all {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin: 0;\n  cursor: pointer;\n  user-select: none;\n}\n\n.bulk-select-all input[type="checkbox"] {\n  margin: 0;\n  cursor: pointer;\n}\n\n.bulk-select-all span {\n  font-weight: 500;\n  color: var(--ts-text-primary);\n}\n\n.bulk-actions-right {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n.bulk-action-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 12px;\n  font-size: 13px;\n  line-height: 1.4;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n  border: 1px solid var(--ts-border-color);\n  background: var(--ts-bg-primary);\n  color: var(--ts-text-primary);\n  cursor: pointer;\n  font-weight: 500;\n}\n\n.bulk-action-btn .dashicons {\n  font-size: 16px;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n}\n\n.bulk-action-btn:hover:not(:disabled) {\n  transform: translateY(-1px);\n  background: var(--ts-bg-hover);\n  border-color: var(--ts-primary-color);\n}\n\n.bulk-action-btn:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  background: var(--ts-bg-secondary);\n  color: var(--ts-text-tertiary);\n}\n\n.bulk-action-btn.bulk-delete {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n\n.bulk-action-btn.bulk-delete:hover {\n  background: #dc3545;\n  color: #fff;\n}\n\n/* Confirmation Dialog */\n.bulk-confirm-dialog-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 100000;\n  backdrop-filter: blur(2px);\n}\n\n.bulk-confirm-dialog {\n  background: var(--ts-bg-primary);\n  border-radius: 8px;\n  padding: 24px;\n  max-width: 500px;\n  width: 90%;\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n}\n\n.bulk-confirm-dialog h3 {\n  margin: 0 0 12px;\n  font-size: 18px;\n  font-weight: 600;\n  color: var(--ts-text-primary);\n}\n\n.bulk-confirm-dialog p {\n  margin: 0 0 20px;\n  color: var(--ts-text-secondary);\n  line-height: 1.5;\n}\n\n.bulk-confirm-actions {\n  display: flex;\n  gap: 8px;\n  justify-content: flex-end;\n}\n\n.bulk-confirm-actions .button {\n  min-width: 80px;\n  background: var(--ts-bg-primary);\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .goal-bulk-actions {\n    flex-direction: column;\n    align-items: stretch;\n  }\n\n  .bulk-actions-left,\n  .bulk-actions-right {\n    justify-content: center;\n  }\n\n  .bulk-actions-right {\n    width: 100%;\n  }\n\n  .bulk-action-btn {\n    flex: 1;\n    justify-content: center;\n  }\n}\n\n@media (max-width: 480px) {\n  .bulk-actions-right {\n    flex-direction: column;\n  }\n\n  .bulk-action-btn {\n    width: 100%;\n  }\n\n  .bulk-confirm-dialog {\n    padding: 16px;\n  }\n\n  .bulk-confirm-actions {\n    flex-direction: column-reverse;\n  }\n\n  .bulk-confirm-actions .button {\n    width: 100%;\n  }\n}\n\n/* Dark Theme */\n[data-theme="dark"] .bulk-confirm-dialog {\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n}\n',"",{version:3,sources:["webpack://./src/components/goals/features/bulk-actions/GoalBulkActions.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,kBAAkB;EAClB,kCAAkC;EAClC,wCAAwC;EACxC,kBAAkB;EAClB,mBAAmB;EACnB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,SAAS;EACT,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,eAAe;AACjB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,yBAAyB;EACzB,wCAAwC;EACxC,gCAAgC;EAChC,6BAA6B;EAC7B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,2BAA2B;EAC3B,8BAA8B;EAC9B,qCAAqC;AACvC;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,kCAAkC;EAClC,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;EACnB,WAAW;AACb;;AAEA,wBAAwB;AACxB;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,8BAA8B;EAC9B,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,0BAA0B;AAC5B;;AAEA;EACE,gCAAgC;EAChC,kBAAkB;EAClB,aAAa;EACb,gBAAgB;EAChB,UAAU;EACV,0CAA0C;AAC5C;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;EAC/B,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,gCAAgC;AAClC;;AAEA,sBAAsB;AACtB;EACE;IACE,sBAAsB;IACtB,oBAAoB;EACtB;;EAEA;;IAEE,uBAAuB;EACzB;;EAEA;IACE,WAAW;EACb;;EAEA;IACE,OAAO;IACP,uBAAuB;EACzB;AACF;;AAEA;EACE;IACE,sBAAsB;EACxB;;EAEA;IACE,WAAW;EACb;;EAEA;IACE,aAAa;EACf;;EAEA;IACE,8BAA8B;EAChC;;EAEA;IACE,WAAW;EACb;AACF;;AAEA,eAAe;AACf;EACE,yCAAyC;AAC3C",sourcesContent:['.goal-bulk-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 12px 16px;\r\n  background: var(--ts-bg-secondary);\r\n  border: 1px solid var(--ts-border-color);\r\n  border-radius: 8px;\r\n  margin-bottom: 16px;\r\n  gap: 16px;\r\n}\r\n\r\n.bulk-actions-left {\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.bulk-select-all {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  margin: 0;\r\n  cursor: pointer;\r\n  user-select: none;\r\n}\r\n\r\n.bulk-select-all input[type="checkbox"] {\r\n  margin: 0;\r\n  cursor: pointer;\r\n}\r\n\r\n.bulk-select-all span {\r\n  font-weight: 500;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.bulk-actions-right {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.bulk-action-btn {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 6px 12px;\r\n  font-size: 13px;\r\n  line-height: 1.4;\r\n  border-radius: 4px;\r\n  transition: all 0.2s ease;\r\n  border: 1px solid var(--ts-border-color);\r\n  background: var(--ts-bg-primary);\r\n  color: var(--ts-text-primary);\r\n  cursor: pointer;\r\n  font-weight: 500;\r\n}\r\n\r\n.bulk-action-btn .dashicons {\r\n  font-size: 16px;\r\n  width: 16px;\r\n  height: 16px;\r\n  line-height: 16px;\r\n}\r\n\r\n.bulk-action-btn:hover:not(:disabled) {\r\n  transform: translateY(-1px);\r\n  background: var(--ts-bg-hover);\r\n  border-color: var(--ts-primary-color);\r\n}\r\n\r\n.bulk-action-btn:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n  background: var(--ts-bg-secondary);\r\n  color: var(--ts-text-tertiary);\r\n}\r\n\r\n.bulk-action-btn.bulk-delete {\r\n  color: #dc3545;\r\n  border-color: #dc3545;\r\n}\r\n\r\n.bulk-action-btn.bulk-delete:hover {\r\n  background: #dc3545;\r\n  color: #fff;\r\n}\r\n\r\n/* Confirmation Dialog */\r\n.bulk-confirm-dialog-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 100000;\r\n  backdrop-filter: blur(2px);\r\n}\r\n\r\n.bulk-confirm-dialog {\r\n  background: var(--ts-bg-primary);\r\n  border-radius: 8px;\r\n  padding: 24px;\r\n  max-width: 500px;\r\n  width: 90%;\r\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.bulk-confirm-dialog h3 {\r\n  margin: 0 0 12px;\r\n  font-size: 18px;\r\n  font-weight: 600;\r\n  color: var(--ts-text-primary);\r\n}\r\n\r\n.bulk-confirm-dialog p {\r\n  margin: 0 0 20px;\r\n  color: var(--ts-text-secondary);\r\n  line-height: 1.5;\r\n}\r\n\r\n.bulk-confirm-actions {\r\n  display: flex;\r\n  gap: 8px;\r\n  justify-content: flex-end;\r\n}\r\n\r\n.bulk-confirm-actions .button {\r\n  min-width: 80px;\r\n  background: var(--ts-bg-primary);\r\n}\r\n\r\n/* Responsive Design */\r\n@media (max-width: 768px) {\r\n  .goal-bulk-actions {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .bulk-actions-left,\r\n  .bulk-actions-right {\r\n    justify-content: center;\r\n  }\r\n\r\n  .bulk-actions-right {\r\n    width: 100%;\r\n  }\r\n\r\n  .bulk-action-btn {\r\n    flex: 1;\r\n    justify-content: center;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .bulk-actions-right {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .bulk-action-btn {\r\n    width: 100%;\r\n  }\r\n\r\n  .bulk-confirm-dialog {\r\n    padding: 16px;\r\n  }\r\n\r\n  .bulk-confirm-actions {\r\n    flex-direction: column-reverse;\r\n  }\r\n\r\n  .bulk-confirm-actions .button {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n/* Dark Theme */\r\n[data-theme="dark"] .bulk-confirm-dialog {\r\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\r\n}\r\n'],sourceRoot:""}]);const i=s}}]);
    22//# sourceMappingURL=637.js.map
  • tracksure/trunk/admin/tracking-goals.js

    r3472561 r3473414  
    321321                // ── Timing / scroll params ──────────────────────────────
    322322                case 'time_seconds':
     323                case 'time_on_page':
    323324                    // ConditionBuilder stores 'time_seconds'; handlers pass 'time_on_page'.
     325                    // Accept both param names for forward/backward compatibility.
    324326                    actualValue = eventData.time_on_page ?? eventData.time_seconds ?? '';
    325327                    break;
     
    386388     */
    387389    function evaluateOperator(actualValue, operator, expectedValue) {
     390        // Coerce both values to strings for consistent comparison.
     391        // wp_localize_script serialises all values to strings, and runtime
     392        // values from DOM/events might be numbers.  Normalising here avoids
     393        // subtle type-mismatch bugs (e.g. 180 !== "180").
     394        const a = actualValue != null ? String(actualValue) : '';
     395        const e = expectedValue != null ? String(expectedValue) : '';
     396
    388397        switch (operator) {
    389398            case 'equals':
    390                 return actualValue === expectedValue;
     399                return a === e;
    391400            case 'not_equals':
    392                 return actualValue !== expectedValue;
     401                return a !== e;
    393402            case 'contains':
    394                 return actualValue && String(actualValue).includes(expectedValue);
     403                return a.includes(e);
    395404            case 'not_contains':
    396                 return !actualValue || !String(actualValue).includes(expectedValue);
     405                return !a.includes(e);
    397406            case 'starts_with':
    398                 return actualValue && String(actualValue).startsWith(expectedValue);
     407                return a.startsWith(e);
    399408            case 'ends_with':
    400                 return actualValue && String(actualValue).endsWith(expectedValue);
     409                return a.endsWith(e);
    401410            case 'matches_regex':
    402411            case 'regex':
  • tracksure/trunk/admin/tracksure-goal-constants.js

    r3472561 r3473414  
    2424        form_submit: ['form_submit', 'form_submission'],
    2525        scroll_depth: ['scroll'], // Maps scroll_depth trigger → scroll event
    26         time_on_page: ['page_exit', 'time_on_page'],
    27         engagement: ['engagement'], //  Added: engagement trigger
    28         video_play: ['video_play', 'video_start'],
     26        time_on_page: ['page_exit', 'time_on_page', 'time_on_page_threshold'],
     27        engagement: ['engagement', 'page_exit'], // engagement evaluates scroll+time from page_exit data
     28        video_play: ['video_play', 'video_start', 'video_complete'],
    2929        download: ['file_download', 'download'],
    3030        outbound_link: ['outbound_click', 'external_link'],
  • tracksure/trunk/includes/core/admin/class-tracksure-admin-ui.php

    r3472561 r3473414  
    2020
    2121// Exit if accessed directly.
    22 if ( ! defined( 'ABSPATH' ) ) {
     22if (! defined('ABSPATH')) {
    2323    exit;
    2424}
     
    2727 * Admin UI class.
    2828 */
    29 class TrackSure_Admin_UI {
     29class TrackSure_Admin_UI
     30{
    3031
    3132
     
    4647     * @return TrackSure_Admin_UI
    4748     */
    48     public static function get_instance() {
    49         if ( null === self::$instance ) {
     49    public static function get_instance()
     50    {
     51        if (null === self::$instance) {
    5052            self::$instance = new self();
    5153        }
     
    5658     * Constructor.
    5759     */
    58     private function __construct() {
    59         add_action( 'admin_menu', array( $this, 'register_menu' ) );
    60         add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
     60    private function __construct()
     61    {
     62        add_action('admin_menu', array($this, 'register_menu'));
     63        add_action('admin_enqueue_scripts', array($this, 'enqueue_assets'));
    6164    }
    6265
     
    6467     * Register admin menu.
    6568     */
    66     public function register_menu() {
     69    public function register_menu()
     70    {
    6771        add_menu_page(
    68             __( 'TrackSure', 'tracksure' ),
    69             __( 'TrackSure', 'tracksure' ),
     72            __('TrackSure', 'tracksure'),
     73            __('TrackSure', 'tracksure'),
    7074            'manage_options',
    7175            'tracksure',
    72             array( $this, 'render_admin_page' ),
     76            array($this, 'render_admin_page'),
    7377            'dashicons-chart-area',
    7478            56
     
    7983     * Render admin page.
    8084     */
    81     public function render_admin_page() {
    82         ?>
     85    public function render_admin_page()
     86    {
     87?>
    8388        <div id="tracksure-admin-root"></div>
    84         <?php
     89<?php
    8590    }
    8691
     
    9095     * @param string $hook Current admin page hook.
    9196     */
    92     public function enqueue_assets( $hook ) {
     97    public function enqueue_assets($hook)
     98    {
    9399        // Only load on TrackSure admin pages.
    94         if ( empty( $hook ) || strpos( $hook, 'tracksure' ) === false ) {
     100        if (empty($hook) || strpos($hook, 'tracksure') === false) {
    95101            return;
    96102        }
    97103
    98104        // Use TRACKSURE_ADMIN_DIR which points to plugin root admin folder.
    99         $admin_dir = defined( 'TRACKSURE_ADMIN_DIR' ) ? TRACKSURE_ADMIN_DIR : TRACKSURE_PLUGIN_DIR . 'admin/';
     105        $admin_dir = defined('TRACKSURE_ADMIN_DIR') ? TRACKSURE_ADMIN_DIR : TRACKSURE_PLUGIN_DIR . 'admin/';
    100106        $admin_url = defined(
    101107            'TRACKSURE_ADMIN_DIR'
     
    108114        // Check if built assets exist.
    109115        $script_file = $admin_dir . 'dist/tracksure-admin.js';
    110         if ( ! file_exists( $script_file ) ) {
     116        if (! file_exists($script_file)) {
    111117            printf(
    112118                '<div class="notice notice-error"><p>%s</p></div>',
    113                 esc_html__( 'TrackSure admin assets not built. Run: cd admin && npm install && npm run build', 'tracksure' )
     119                esc_html__('TrackSure admin assets not built. Run: cd admin && npm install && npm run build', 'tracksure')
    114120            );
    115121            return;
     
    117123
    118124        // Enqueue React and ReactDOM from WordPress core.
    119         wp_enqueue_script( 'react' );
    120         wp_enqueue_script( 'react-dom' );
    121         wp_enqueue_script( 'wp-i18n' );
     125        wp_enqueue_script('react');
     126        wp_enqueue_script('react-dom');
     127        wp_enqueue_script('wp-i18n');
    122128
    123129        // Webpack code splitting: Enqueue chunks in correct order
    124130        // 1. Runtime (webpack module loader - MUST be first)
    125131        $runtime_file = $admin_dir . 'dist/runtime.js';
    126         if ( file_exists( $runtime_file ) ) {
     132        if (file_exists($runtime_file)) {
    127133            wp_enqueue_script(
    128134                'tracksure-runtime',
    129135                $admin_url . 'dist/runtime.js',
    130                 array( 'react', 'react-dom', 'wp-i18n' ),
    131                 filemtime( $runtime_file ),
     136                array('react', 'react-dom', 'wp-i18n'),
     137                filemtime($runtime_file),
    132138                true
    133139            );
     
    136142        // 2. Core vendors (axios, react-query, etc. - small, frequently used)
    137143        $vendors_file = $admin_dir . 'dist/vendors.js';
    138         if ( file_exists( $vendors_file ) ) {
     144        if (file_exists($vendors_file)) {
    139145            wp_enqueue_script(
    140146                'tracksure-vendors',
    141147                $admin_url . 'dist/vendors.js',
    142                 array( 'react', 'react-dom', 'tracksure-runtime' ),
    143                 filemtime( $vendors_file ),
     148                array('react', 'react-dom', 'tracksure-runtime'),
     149                filemtime($vendors_file),
    144150                true
    145151            );
     
    148154        // 3. React Router (navigation - needed immediately)
    149155        $router_file = $admin_dir . 'dist/react-router.js';
    150         if ( file_exists( $router_file ) ) {
     156        if (file_exists($router_file)) {
    151157            wp_enqueue_script(
    152158                'tracksure-react-router',
    153159                $admin_url . 'dist/react-router.js',
    154                 array( 'react', 'react-dom', 'tracksure-runtime', 'tracksure-vendors' ),
    155                 filemtime( $router_file ),
     160                array('react', 'react-dom', 'tracksure-runtime', 'tracksure-vendors'),
     161                filemtime($router_file),
    156162                true
    157163            );
     
    160166        // 4. Lucide icons (tree-shaken icons - loaded upfront for UI)
    161167        $lucide_file = $admin_dir . 'dist/lucide.js';
    162         if ( file_exists( $lucide_file ) ) {
     168        if (file_exists($lucide_file)) {
    163169            wp_enqueue_script(
    164170                'tracksure-lucide',
    165171                $admin_url . 'dist/lucide.js',
    166                 array( 'react', 'react-dom', 'tracksure-runtime' ),
    167                 filemtime( $lucide_file ),
     172                array('react', 'react-dom', 'tracksure-runtime'),
     173                filemtime($lucide_file),
    168174                true
    169175            );
     
    172178        // 5. Common code (shared across pages)
    173179        $common_file = $admin_dir . 'dist/common.js';
    174         if ( file_exists( $common_file ) ) {
     180        if (file_exists($common_file)) {
    175181            wp_enqueue_script(
    176182                'tracksure-common',
    177183                $admin_url . 'dist/common.js',
    178                 array( 'react', 'react-dom', 'tracksure-runtime', 'tracksure-vendors' ),
    179                 filemtime( $common_file ),
     184                array('react', 'react-dom', 'tracksure-runtime', 'tracksure-vendors'),
     185                filemtime($common_file),
    180186                true
    181187            );
     
    183189
    184190        // 6. Main app (depends on all core chunks)
    185         $deps = array( 'react', 'react-dom', 'tracksure-runtime' );
    186         if ( file_exists( $vendors_file ) ) {
     191        $deps = array('react', 'react-dom', 'tracksure-runtime');
     192        if (file_exists($vendors_file)) {
    187193            $deps[] = 'tracksure-vendors';
    188194        }
    189         if ( file_exists( $router_file ) ) {
     195        if (file_exists($router_file)) {
    190196            $deps[] = 'tracksure-react-router';
    191197        }
    192         if ( file_exists( $lucide_file ) ) {
     198        if (file_exists($lucide_file)) {
    193199            $deps[] = 'tracksure-lucide';
    194200        }
    195         if ( file_exists( $common_file ) ) {
     201        if (file_exists($common_file)) {
    196202            $deps[] = 'tracksure-common';
    197203        }
     
    201207            $admin_url . 'dist/tracksure-admin.js',
    202208            $deps,
    203             filemtime( $script_file ),
     209            filemtime($script_file),
    204210            true
    205211        );
     
    210216        $currency_symbol = '$';
    211217
    212         if ( function_exists( 'get_woocommerce_currency' ) ) {
     218        if (function_exists('get_woocommerce_currency')) {
    213219            // WooCommerce (also covers CartFlows which uses WooCommerce).
    214220            $currency        = get_woocommerce_currency();
    215             $currency_symbol = html_entity_decode( get_woocommerce_currency_symbol() );
    216         } elseif ( class_exists( 'FluentCart\App\Helpers\Helper' ) ) {
     221            $currency_symbol = html_entity_decode(get_woocommerce_currency_symbol());
     222        } elseif (class_exists('FluentCart\App\Helpers\Helper')) {
    217223            // FluentCart.
    218224            try {
    219                 $fc_currency = \FluentCart\App\Helpers\Helper::shopConfig( 'currency' );
    220                 if ( ! empty( $fc_currency ) ) {
     225                $fc_currency = \FluentCart\App\Helpers\Helper::shopConfig('currency');
     226                if (! empty($fc_currency)) {
    221227                    $currency = $fc_currency;
    222228                    // FluentCart may provide symbol via shopConfig.
    223                     $fc_symbol = \FluentCart\App\Helpers\Helper::shopConfig( 'currency_sign' );
    224                     if ( ! empty( $fc_symbol ) ) {
    225                         $currency_symbol = html_entity_decode( $fc_symbol );
     229                    $fc_symbol = \FluentCart\App\Helpers\Helper::shopConfig('currency_sign');
     230                    if (! empty($fc_symbol)) {
     231                        $currency_symbol = html_entity_decode($fc_symbol);
    226232                    }
    227233                }
    228             } catch ( \Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
     234            } catch (\Exception $e) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
    229235                // Fallback to USD if FluentCart API fails.
    230236            }
    231         } elseif ( function_exists( 'edd_get_currency' ) ) {
     237        } elseif (function_exists('edd_get_currency')) {
    232238            // Easy Digital Downloads.
    233239            $currency = edd_get_currency();
    234             if ( function_exists( 'edd_currency_symbol' ) ) {
    235                 $currency_symbol = html_entity_decode( edd_currency_symbol( $currency ) );
    236             }
    237         } elseif ( function_exists( 'surecart' ) && class_exists( '\SureCart\Models\ApiToken' ) ) {
     240            if (function_exists('edd_currency_symbol')) {
     241                $currency_symbol = html_entity_decode(edd_currency_symbol($currency));
     242            }
     243        } elseif (function_exists('surecart') && class_exists('\SureCart\Models\ApiToken')) {
    238244            // SureCart — currency comes from store settings.
    239             $sc_currency = get_option( 'surecart_store_currency', 'USD' );
    240             if ( ! empty( $sc_currency ) ) {
    241                 $currency = strtoupper( $sc_currency );
     245            $sc_currency = get_option('surecart_store_currency', 'USD');
     246            if (! empty($sc_currency)) {
     247                $currency = strtoupper($sc_currency);
    242248            }
    243249        }
     
    252258         * @param string $currency_symbol Currency symbol.
    253259         */
    254         $currency = apply_filters( 'tracksure_admin_currency', $currency, $currency_symbol );
     260        $currency = apply_filters('tracksure_admin_currency', $currency, $currency_symbol);
    255261
    256262        $config = array(
    257             'apiUrl'         => rest_url( 'ts/v1' ),
    258             'nonce'          => wp_create_nonce( 'wp_rest' ),
     263            'apiUrl'         => rest_url('ts/v1'),
     264            'nonce'          => wp_create_nonce('wp_rest'),
    259265            'siteUrl'        => get_site_url(),
    260266            'timezone'       => wp_timezone_string(),
    261             'dateFormat'     => get_option( 'date_format' ),
     267            'dateFormat'     => get_option('date_format'),
    262268            'isEcommerce'    => $this->is_ecommerce_active(),
    263269            'currency'       => $currency,
     
    265271        );
    266272
    267         wp_localize_script( 'tracksure-admin', 'trackSureAdmin', $config );
     273        wp_localize_script('tracksure-admin', 'trackSureAdmin', $config);
    268274
    269275        // Trigger extension registration hook for UI organization.
     
    278284         * @param TrackSure_Admin_Extensions $extensions Extensions registry instance.
    279285         */
    280         do_action( 'tracksure_register_admin_extensions', $extensions_registry );
     286        do_action('tracksure_register_admin_extensions', $extensions_registry);
    281287
    282288        // Get registered extensions with enriched destination/integration metadata from Managers.
    283         $extensions_data = $this->get_extensions_with_manager_data( $extensions_registry );
    284 
    285         wp_localize_script( 'tracksure-admin', 'trackSureExtensions', $extensions_data );
     289        $extensions_data = $this->get_extensions_with_manager_data($extensions_registry);
     290
     291        wp_localize_script('tracksure-admin', 'trackSureExtensions', $extensions_data);
    286292
    287293        /**
     
    292298         * @param string $hook Current admin page hook.
    293299         */
    294         do_action( 'tracksure_admin_enqueue_scripts', $hook );
     300        do_action('tracksure_admin_enqueue_scripts', $hook);
    295301    }
    296302
     
    311317     * @return bool True if any e-commerce platform is active.
    312318     */
    313     private function is_ecommerce_active() {
    314         return class_exists( 'WooCommerce' ) ||
    315             class_exists( 'Easy_Digital_Downloads' ) ||
    316             class_exists( 'SureCart' ) ||
    317             class_exists( 'FluentCart\\App\\App' ) ||
    318             class_exists( 'Cartflows_Loader' );
     319    private function is_ecommerce_active()
     320    {
     321        return class_exists('WooCommerce') ||
     322            class_exists('Easy_Digital_Downloads') ||
     323            class_exists('SureCart') || defined('SURECART_PLUGIN_FILE') ||
     324            class_exists('FluentCart\\App\\App') ||
     325            class_exists('Cartflows_Loader') || class_exists('FunnelKit_Funnel_Builder_Loader');
    319326    }
    320327
     
    331338     * @return array Extensions data for React.
    332339     */
    333     private function get_extensions_with_manager_data( $registry ) {
     340    private function get_extensions_with_manager_data($registry)
     341    {
    334342        $core                 = TrackSure_Core::get_instance();
    335         $destinations_manager = $core->get_service( 'destinations_manager' );
    336         $integrations_manager = $core->get_service( 'integrations_manager' );
     343        $destinations_manager = $core->get_service('destinations_manager');
     344        $integrations_manager = $core->get_service('integrations_manager');
    337345
    338346        // Get base extensions (with settings groups).
     
    346354
    347355        // Enrich each extension with Manager data.
    348         foreach ( $extensions as &$extension ) {
     356        foreach ($extensions as &$extension) {
    349357            // Determine extension's enabled_key prefix.
    350358            $extension_prefix = '';
    351             if ( $extension['id'] === 'tracksure-free' ) {
     359            if ($extension['id'] === 'tracksure-free') {
    352360                $extension_prefix = 'tracksure_free_';
    353             } elseif ( $extension['id'] === 'tracksure-pro' ) {
     361            } elseif ($extension['id'] === 'tracksure-pro') {
    354362                // Pro destinations use 'tracksure_google_ads_enabled', 'tracksure_tiktok_enabled', etc.
    355363                // Pro integrations use 'tracksure_edd_enabled', etc.
     
    359367            // Auto-assign destinations to this extension by matching enabled_key prefix.
    360368            $extension['destinations'] = array();
    361             if ( $extension_prefix && $destinations_manager ) {
    362                 foreach ( $all_destinations as $dest ) {
     369            if ($extension_prefix && $destinations_manager) {
     370                foreach ($all_destinations as $dest) {
    363371                    // Match destinations to extension by enabled_key prefix.
    364372                    // Skip Free destinations (tracksure_free_*) when processing Pro.
    365                     if ( strpos( $dest['enabled_key'], $extension_prefix ) === 0 ) {
    366                         if ( $extension['id'] === 'tracksure-pro' && strpos( $dest['enabled_key'], 'tracksure_free_' ) === 0 ) {
     373                    if (strpos($dest['enabled_key'], $extension_prefix) === 0) {
     374                        if ($extension['id'] === 'tracksure-pro' && strpos($dest['enabled_key'], 'tracksure_free_') === 0) {
    367375                            continue; // Skip Free destinations in Pro.
    368376                        }
    369                         $extension['destinations'][] = $this->format_destination_for_react( $dest );
     377                        $extension['destinations'][] = $this->format_destination_for_react($dest);
    370378                    }
    371379                }
     
    374382            // Auto-assign integrations to this extension by matching enabled_key prefix.
    375383            $extension['integrations'] = array();
    376             if ( $extension_prefix && $integrations_manager ) {
    377                 foreach ( $all_integrations as $int ) {
     384            if ($extension_prefix && $integrations_manager) {
     385                foreach ($all_integrations as $int) {
    378386                    // Match integrations to extension by enabled_key prefix.
    379387                    // Skip Free integrations when processing Pro.
    380388                    // Special case: woo_integration_enabled and fluentcart_integration_enabled are Free
    381                     $is_free_integration = strpos( $int['enabled_key'], 'tracksure_free_' ) === 0
     389                    $is_free_integration = strpos($int['enabled_key'], 'tracksure_free_') === 0
    382390                        || $int['enabled_key'] === 'woo_integration_enabled'
    383391                        || $int['enabled_key'] === 'fluentcart_integration_enabled';
    384392
    385                     if ( $extension['id'] === 'tracksure-free' ) {
     393                    if ($extension['id'] === 'tracksure-free') {
    386394                        // Free: Only tracksure_free_* or old naming (woo_*, fluentcart_*)
    387                         if ( $is_free_integration ) {
    388                             $extension['integrations'][] = $this->format_integration_for_react( $int, $integrations_manager );
     395                        if ($is_free_integration) {
     396                            $extension['integrations'][] = $this->format_integration_for_react($int, $integrations_manager);
    389397                        }
    390                     } elseif ( $extension['id'] === 'tracksure-pro' ) {
     398                    } elseif ($extension['id'] === 'tracksure-pro') {
    391399                        // Pro: Only tracksure_* (but NOT tracksure_free_*)
    392                         if ( strpos( $int['enabled_key'], 'tracksure_' ) === 0 && ! $is_free_integration ) {
    393                             $extension['integrations'][] = $this->format_integration_for_react( $int, $integrations_manager );
     400                        if (strpos($int['enabled_key'], 'tracksure_') === 0 && ! $is_free_integration) {
     401                            $extension['integrations'][] = $this->format_integration_for_react($int, $integrations_manager);
    394402                        }
    395403                    }
     
    410418     * @return array Formatted for React.
    411419     */
    412     private function format_destination_for_react( $dest ) {
     420    private function format_destination_for_react($dest)
     421    {
    413422        return array(
    414423            'id'            => $dest['id'],
    415424            'name'          => $dest['name'],
    416             'description'   => isset( $dest['description'] ) ? $dest['description'] : '',
    417             'icon'          => isset( $dest['icon'] ) ? $dest['icon'] : 'Target',
    418             'order'         => isset( $dest['order'] ) ? $dest['order'] : 999,
     425            'description'   => isset($dest['description']) ? $dest['description'] : '',
     426            'icon'          => isset($dest['icon']) ? $dest['icon'] : 'Target',
     427            'order'         => isset($dest['order']) ? $dest['order'] : 999,
    419428            'enabledKey'    => $dest['enabled_key'],
    420             'custom_config' => isset( $dest['custom_config'] ) ? $dest['custom_config'] : null,
    421             'fields'        => $this->enrich_fields( isset( $dest['settings_fields'] ) ? $dest['settings_fields'] : array(), TrackSure_Settings_Schema::get_all_settings() ),
     429            'custom_config' => isset($dest['custom_config']) ? $dest['custom_config'] : null,
     430            'fields'        => $this->enrich_fields(isset($dest['settings_fields']) ? $dest['settings_fields'] : array(), TrackSure_Settings_Schema::get_all_settings()),
    422431        );
    423432    }
     
    434443     * @return array Formatted for React.
    435444     */
    436     private function format_integration_for_react( $int, $integrations_manager = null ) {
     445    private function format_integration_for_react($int, $integrations_manager = null)
     446    {
    437447        // Resolve auto_detect path to boolean — React only needs the result, not the file path.
    438448        $detected = false;
    439         if ( $integrations_manager && ! empty( $int['auto_detect'] ) ) {
    440             $detected = $integrations_manager->is_plugin_active( $int['auto_detect'] );
     449        if ($integrations_manager && ! empty($int['auto_detect'])) {
     450            $detected = $integrations_manager->is_plugin_active($int['auto_detect']);
    441451        }
    442452
     
    444454            'id'          => $int['id'],
    445455            'name'        => $int['name'],
    446             'description' => isset( $int['description'] ) ? $int['description'] : '',
    447             'icon'        => isset( $int['icon'] ) ? $int['icon'] : 'Puzzle',
    448             'order'       => isset( $int['order'] ) ? $int['order'] : 999,
     456            'description' => isset($int['description']) ? $int['description'] : '',
     457            'icon'        => isset($int['icon']) ? $int['icon'] : 'Puzzle',
     458            'order'       => isset($int['order']) ? $int['order'] : 999,
    449459            'enabledKey'  => $int['enabled_key'],
    450460            'detected'    => $detected,
    451             'events'      => isset( $int['tracked_events'] ) ? $int['tracked_events'] : array(),
    452             'fields'      => $this->enrich_fields( isset( $int['settings_fields'] ) ? $int['settings_fields'] : array(), TrackSure_Settings_Schema::get_all_settings() ),
     461            'events'      => isset($int['tracked_events']) ? $int['tracked_events'] : array(),
     462            'fields'      => $this->enrich_fields(isset($int['settings_fields']) ? $int['settings_fields'] : array(), TrackSure_Settings_Schema::get_all_settings()),
    453463        );
    454464    }
     
    461471     * @return array Enriched field objects.
    462472     */
    463     private function enrich_fields( $field_keys, $schema ) {
     473    private function enrich_fields($field_keys, $schema)
     474    {
    464475        $enriched = array();
    465476
    466         foreach ( $field_keys as $key ) {
    467             if ( ! isset( $schema[ $key ] ) ) {
     477        foreach ($field_keys as $key) {
     478            if (! isset($schema[$key])) {
    468479                continue;
    469480            }
    470481
    471             $field = $schema[ $key ];
    472             $type  = $this->map_field_type( $field['type'], $field );
     482            $field = $schema[$key];
     483            $type  = $this->map_field_type($field['type'], $field);
    473484
    474485            $enriched_field = array(
     
    480491            );
    481492
    482             if ( $type === 'select' && isset( $field['options'] ) ) {
    483                 $enriched_field['options'] = $this->format_options( $field['options'] );
    484             }
    485 
    486             if ( $type === 'number' ) {
    487                 if ( isset( $field['min'] ) ) {
     493            if ($type === 'select' && isset($field['options'])) {
     494                $enriched_field['options'] = $this->format_options($field['options']);
     495            }
     496
     497            if ($type === 'number') {
     498                if (isset($field['min'])) {
    488499                    $enriched_field['min'] = $field['min'];
    489500                }
    490                 if ( isset( $field['max'] ) ) {
     501                if (isset($field['max'])) {
    491502                    $enriched_field['max'] = $field['max'];
    492503                }
    493504            }
    494505
    495             if ( isset( $field['placeholder'] ) ) {
     506            if (isset($field['placeholder'])) {
    496507                $enriched_field['placeholder'] = $field['placeholder'];
    497508            }
    498509
    499             if ( isset( $field['sensitive'] ) && $field['sensitive'] ) {
     510            if (isset($field['sensitive']) && $field['sensitive']) {
    500511                $enriched_field['sensitive'] = true;
    501512            }
     
    514525     * @return string React input type.
    515526     */
    516     private function map_field_type( $type, $field = array() ) {
    517         if ( isset( $field['options'] ) ) {
     527    private function map_field_type($type, $field = array())
     528    {
     529        if (isset($field['options'])) {
    518530            return 'select';
    519531        }
    520         if ( isset( $field['sensitive'] ) && $field['sensitive'] ) {
     532        if (isset($field['sensitive']) && $field['sensitive']) {
    521533            return 'password';
    522534        }
     
    529541        );
    530542
    531         return $map[ $type ] ?? 'text';
     543        return $map[$type] ?? 'text';
    532544    }
    533545
     
    538550     * @return array Formatted options.
    539551     */
    540     private function format_options( $options ) {
     552    private function format_options($options)
     553    {
    541554        $formatted = array();
    542         foreach ( $options as $value => $label ) {
     555        foreach ($options as $value => $label) {
    543556            $formatted[] = array(
    544557                'value' => $value,
  • tracksure/trunk/includes/core/api/class-tracksure-rest-goals-controller.php

    r3472561 r3473414  
    5353
    5454// Exit if accessed directly.
    55 if ( ! defined( 'ABSPATH' ) ) {
     55if (! defined('ABSPATH')) {
    5656    exit;
    5757}
     
    6464 * @since 1.0.0
    6565 */
    66 class TrackSure_REST_Goals_Controller extends TrackSure_REST_Controller {
     66class TrackSure_REST_Goals_Controller extends TrackSure_REST_Controller
     67{
    6768
    6869
     
    8586     * @since 1.0.0
    8687     */
    87     public function __construct() {
     88    public function __construct()
     89    {
    8890        $core     = TrackSure_Core::get_instance();
    89         $this->db = $core->get_service( 'db' );
     91        $this->db = $core->get_service('db');
    9092    }
    9193
     
    101103     * @return void
    102104     */
    103     public function register_routes() {
     105    public function register_routes()
     106    {
    104107        // GET /goals - List all goals.
    105108        register_rest_route(
     
    108111            array(
    109112                'methods'             => WP_REST_Server::READABLE,
    110                 'callback'            => array( $this, 'get_goals' ),
    111                 'permission_callback' => array( $this, 'check_admin_permission' ),
     113                'callback'            => array($this, 'get_goals'),
     114                'permission_callback' => array($this, 'check_admin_permission'),
    112115            )
    113116        );
     
    119122            array(
    120123                'methods'             => WP_REST_Server::CREATABLE,
    121                 'callback'            => array( $this, 'create_goal' ),
    122                 'permission_callback' => array( $this, 'check_admin_permission' ),
     124                'callback'            => array($this, 'create_goal'),
     125                'permission_callback' => array($this, 'check_admin_permission'),
    123126                'args'                => $this->get_goal_schema(),
    124127            )
     
    131134            array(
    132135                'methods'             => WP_REST_Server::EDITABLE,
    133                 'callback'            => array( $this, 'update_goal' ),
    134                 'permission_callback' => array( $this, 'check_admin_permission' ),
    135                 'args'                => $this->get_goal_schema( true ),
     136                'callback'            => array($this, 'update_goal'),
     137                'permission_callback' => array($this, 'check_admin_permission'),
     138                'args'                => $this->get_goal_schema(true),
    136139            )
    137140        );
     
    143146            array(
    144147                'methods'             => WP_REST_Server::DELETABLE,
    145                 'callback'            => array( $this, 'delete_goal' ),
    146                 'permission_callback' => array( $this, 'check_admin_permission' ),
     148                'callback'            => array($this, 'delete_goal'),
     149                'permission_callback' => array($this, 'check_admin_permission'),
    147150            )
    148151        );
     
    154157            array(
    155158                'methods'             => WP_REST_Server::READABLE,
    156                 'callback'            => array( $this, 'get_goal_performance' ),
    157                 'permission_callback' => array( $this, 'check_admin_permission' ),
     159                'callback'            => array($this, 'get_goal_performance'),
     160                'permission_callback' => array($this, 'check_admin_permission'),
    158161                'args'                => array(
    159162                    'date_start' => array(
     
    177180            array(
    178181                'methods'             => WP_REST_Server::READABLE,
    179                 'callback'            => array( $this, 'get_batch_performance' ),
    180                 'permission_callback' => array( $this, 'check_admin_permission' ),
     182                'callback'            => array($this, 'get_batch_performance'),
     183                'permission_callback' => array($this, 'check_admin_permission'),
    181184                'args'                => array(
    182185                    'goal_ids'   => array(
     
    207210            array(
    208211                'methods'             => WP_REST_Server::READABLE,
    209                 'callback'            => array( $this, 'get_goal_timeline' ),
    210                 'permission_callback' => array( $this, 'check_admin_permission' ),
     212                'callback'            => array($this, 'get_goal_timeline'),
     213                'permission_callback' => array($this, 'check_admin_permission'),
    211214                'args'                => array(
    212215                    'page'       => array(
     
    241244            array(
    242245                'methods'             => WP_REST_Server::READABLE,
    243                 'callback'            => array( $this, 'get_goal_sources' ),
    244                 'permission_callback' => array( $this, 'check_admin_permission' ),
     246                'callback'            => array($this, 'get_goal_sources'),
     247                'permission_callback' => array($this, 'check_admin_permission'),
    245248                'args'                => array(
    246249                    'attribution_model' => array(
    247250                        'type'    => 'string',
    248                         'enum'    => array( 'first_touch', 'last_touch', 'linear', 'time_decay', 'position_based' ),
     251                        'enum'    => array('first_touch', 'last_touch', 'linear', 'time_decay', 'position_based'),
    249252                        'default' => 'last_touch',
    250253                    ),
     
    269272            array(
    270273                'methods'             => WP_REST_Server::READABLE,
    271                 'callback'            => array( $this, 'get_goal_devices' ),
    272                 'permission_callback' => array( $this, 'check_admin_permission' ),
     274                'callback'            => array($this, 'get_goal_devices'),
     275                'permission_callback' => array($this, 'check_admin_permission'),
    273276                'args'                => array(
    274277                    'date_start' => array(
     
    292295            array(
    293296                'methods'             => WP_REST_Server::READABLE,
    294                 'callback'            => array( $this, 'get_goals_overview' ),
    295                 'permission_callback' => array( $this, 'check_admin_permission' ),
     297                'callback'            => array($this, 'get_goals_overview'),
     298                'permission_callback' => array($this, 'check_admin_permission'),
    296299                'args'                => array(
    297300                    'start_date' => array(
     
    299302                        'format'      => 'date',
    300303                        'required'    => false,
    301                         'description' => __( 'Start date for the reporting period (YYYY-MM-DD)', 'tracksure' ),
     304                        'description' => __('Start date for the reporting period (YYYY-MM-DD)', 'tracksure'),
    302305                    ),
    303306                    'end_date'   => array(
     
    305308                        'format'      => 'date',
    306309                        'required'    => false,
    307                         'description' => __( 'End date for the reporting period (YYYY-MM-DD)', 'tracksure' ),
     310                        'description' => __('End date for the reporting period (YYYY-MM-DD)', 'tracksure'),
    308311                    ),
    309312                ),
     
    324327     * @return WP_REST_Response|WP_Error Response with goals array or error.
    325328     */
    326     public function get_goals( $request ) {
     329    public function get_goals($request)
     330    {
    327331        global $wpdb;
    328332
     
    353357
    354358        // Parse conditions JSON, trigger_config JSON, and type-cast values.
    355         foreach ( $goals as $goal ) {
    356             if ( ! empty( $goal->conditions ) ) {
    357                 $goal->conditions = json_decode( $goal->conditions, true );
     359        foreach ($goals as $goal) {
     360            if (! empty($goal->conditions)) {
     361                $goal->conditions = json_decode($goal->conditions, true);
    358362            } else {
    359363                $goal->conditions = array();
    360364            }
    361             if ( ! empty( $goal->trigger_config ) ) {
    362                 $decoded              = json_decode( $goal->trigger_config );
     365            if (! empty($goal->trigger_config)) {
     366                $decoded              = json_decode($goal->trigger_config);
    363367                $goal->trigger_config = $decoded !== null ? $decoded : null;
    364368            } else {
     
    366370            }
    367371            // match_logic is a plain string ('all' or 'any'), NOT JSON.
    368             if ( empty( $goal->match_logic ) || ! in_array( $goal->match_logic, array( 'all', 'any' ), true ) ) {
     372            if (empty($goal->match_logic) || ! in_array($goal->match_logic, array('all', 'any'), true)) {
    369373                $goal->match_logic = 'all';
    370374            }
    371             $goal->cooldown_minutes = (int) ( $goal->cooldown_minutes ?? 0 );
     375            $goal->cooldown_minutes = (int) ($goal->cooldown_minutes ?? 0);
    372376        }
    373377
     
    376380            array(
    377381                'goals' => $goals,
    378                 'total' => count( $goals ),
     382                'total' => count($goals),
    379383            )
    380384        );
     
    393397     * @return WP_REST_Response|WP_Error Success response with created goal or error.
    394398     */
    395     public function create_goal( $request ) {
     399    public function create_goal($request)
     400    {
    396401        global $wpdb;
    397402
     
    399404        $validator = new TrackSure_Goal_Validator();
    400405        $goal_data = array(
    401             'name'             => $request->get_param( 'name' ),
    402             'description'      => $request->get_param( 'description' ),
    403             'event_name'       => $request->get_param( 'event_name' ),
    404             'trigger_type'     => $request->get_param( 'trigger_type' ),
    405             'conditions'       => $request->get_param( 'conditions' ),
    406             'match_logic'      => $request->get_param( 'match_logic' ),
    407             'value_type'       => $request->get_param( 'value_type' ),
    408             'fixed_value'      => $request->get_param( 'fixed_value' ) ?? $request->get_param( 'value' ),
    409             'trigger_config'   => $request->get_param( 'trigger_config' ),
    410             'frequency'        => $request->get_param( 'frequency' ),
    411             'cooldown_minutes' => $request->get_param( 'cooldown_minutes' ),
    412             'is_active'        => $request->get_param( 'is_active' ),
    413         );
    414 
    415         $validation = $validator->validate_and_prepare( $goal_data );
    416 
    417         if ( ! $validation['valid'] ) {
     406            'name'             => $request->get_param('name'),
     407            'description'      => $request->get_param('description'),
     408            'event_name'       => $request->get_param('event_name'),
     409            'trigger_type'     => $request->get_param('trigger_type'),
     410            'conditions'       => $request->get_param('conditions'),
     411            'match_logic'      => $request->get_param('match_logic'),
     412            'value_type'       => $request->get_param('value_type'),
     413            'fixed_value'      => $request->get_param('fixed_value') ?? $request->get_param('value'),
     414            'trigger_config'   => $request->get_param('trigger_config'),
     415            'frequency'        => $request->get_param('frequency'),
     416            'cooldown_minutes' => $request->get_param('cooldown_minutes'),
     417            'is_active'        => $request->get_param('is_active'),
     418        );
     419
     420        $validation = $validator->validate_and_prepare($goal_data);
     421
     422        if (! $validation['valid']) {
    418423            return new WP_Error(
    419424                'invalid_goal_data',
    420                 implode( ' ', $validation['errors'] ),
    421                 array( 'status' => 400 )
     425                implode(' ', $validation['errors']),
     426                array('status' => 400)
    422427            );
    423428        }
     
    427432        // Use validated and sanitized data.
    428433        $data               = $validation['data'];
    429         $data['created_at'] = gmdate( 'Y-m-d H:i:s' );
    430         $data['updated_at'] = gmdate( 'Y-m-d H:i:s' );
     434        $data['created_at'] = gmdate('Y-m-d H:i:s');
     435        $data['updated_at'] = gmdate('Y-m-d H:i:s');
    431436
    432437        /**
     
    440445         * @param WP_REST_Request $request Original REST request object.
    441446         */
    442         $data = apply_filters( 'tracksure_before_create_goal', $data, $request );
     447        $data = apply_filters('tracksure_before_create_goal', $data, $request);
    443448
    444449        // Determine formats dynamically based on data keys.
    445450        $formats = array();
    446         foreach ( $data as $key => $value ) {
    447             if ( in_array( $key, array( 'is_active', 'cooldown_minutes' ), true ) ) {
     451        foreach ($data as $key => $value) {
     452            if (in_array($key, array('is_active', 'cooldown_minutes'), true)) {
    448453                $formats[] = '%d';
    449             } elseif ( $key === 'fixed_value' ) {
     454            } elseif ($key === 'fixed_value') {
    450455                $formats[] = '%f';
    451456            } else {
     
    454459        }
    455460
    456         $result = $wpdb->insert( $table, $data, $formats );
    457 
    458         if ( ! $result ) {
    459             if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    460 
    461                 error_log( '[TrackSure] Goal creation failed. Last error: ' . $wpdb->last_error );
     461        $result = $wpdb->insert($table, $data, $formats);
     462
     463        if (! $result) {
     464            if (defined('WP_DEBUG') && WP_DEBUG) {
     465
     466                error_log('[TrackSure] Goal creation failed. Last error: ' . $wpdb->last_error);
    462467            }
    463468
    464469            return new WP_Error(
    465470                'goal_create_failed',
    466                 $wpdb->last_error ? $wpdb->last_error : __( 'Failed to create goal.', 'tracksure' ),
    467                 array( 'status' => 500 )
     471                $wpdb->last_error ? $wpdb->last_error : __('Failed to create goal.', 'tracksure'),
     472                array('status' => 500)
    468473            );
    469474        }
     
    480485
    481486        // Decode JSON fields.
    482         $goal->conditions = json_decode( $goal->conditions, true );
    483         if ( ! empty( $goal->trigger_config ) ) {
    484             $goal->trigger_config = json_decode( $goal->trigger_config, true );
     487        $goal->conditions = json_decode($goal->conditions, true);
     488        if (! empty($goal->trigger_config)) {
     489            $goal->trigger_config = json_decode($goal->trigger_config, true);
    485490        }
    486491        $goal->is_active = (bool) $goal->is_active;
    487         if ( isset( $goal->fixed_value ) && $goal->fixed_value ) {
     492        if (isset($goal->fixed_value) && $goal->fixed_value) {
    488493            $goal->fixed_value = (float) $goal->fixed_value;
    489494        }
    490495
    491496        // Sanitize output.
    492         $goal->name        = esc_html( $goal->name );
    493         $goal->description = ! empty( $goal->description ) ? esc_html( $goal->description ) : '';
     497        $goal->name        = esc_html($goal->name);
     498        $goal->description = ! empty($goal->description) ? esc_html($goal->description) : '';
    494499
    495500        // Clear goal caches.
     
    505510         * @param WP_REST_Request $request Original REST request.
    506511         */
    507         do_action( 'tracksure_after_create_goal', $goal_id, $goal, $request );
    508 
    509         return $this->prepare_success( $goal, 201 );
     512        do_action('tracksure_after_create_goal', $goal_id, $goal, $request);
     513
     514        return $this->prepare_success($goal, 201);
    510515    }
    511516
     
    522527     * @return WP_REST_Response|WP_Error Success response with updated goal or error.
    523528     */
    524     public function update_goal( $request ) {
     529    public function update_goal($request)
     530    {
    525531        global $wpdb;
    526532
    527533        $table   = $wpdb->prefix . 'tracksure_goals';
    528         $goal_id = absint( $request->get_param( 'id' ) );
     534        $goal_id = absint($request->get_param('id'));
    529535
    530536        // Check if goal exists.
     
    538544        // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
    539545
    540         if ( ! $exists ) {
     546        if (! $exists) {
    541547            return new WP_Error(
    542548                'goal_not_found',
    543                 __( 'Goal not found.', 'tracksure' ),
    544                 array( 'status' => 404 )
     549                __('Goal not found.', 'tracksure'),
     550                array('status' => 404)
    545551            );
    546552        }
     
    549555        $validator = new TrackSure_Goal_Validator();
    550556        $goal_data = array(
    551             'name'             => $request->get_param( 'name' ),
    552             'description'      => $request->get_param( 'description' ),
    553             'event_name'       => $request->get_param( 'event_name' ),
    554             'trigger_type'     => $request->get_param( 'trigger_type' ),
    555             'conditions'       => $request->get_param( 'conditions' ),
    556             'match_logic'      => $request->get_param( 'match_logic' ),
    557             'value_type'       => $request->get_param( 'value_type' ),
    558             'fixed_value'      => $request->get_param( 'fixed_value' ) ?? $request->get_param( 'value' ),
    559             'trigger_config'   => $request->get_param( 'trigger_config' ),
    560             'frequency'        => $request->get_param( 'frequency' ),
    561             'cooldown_minutes' => $request->get_param( 'cooldown_minutes' ),
    562             'is_active'        => $request->get_param( 'is_active' ),
    563         );
    564 
    565         $validation = $validator->validate_and_prepare( $goal_data );
    566 
    567         if ( ! $validation['valid'] ) {
     557            'name'             => $request->get_param('name'),
     558            'description'      => $request->get_param('description'),
     559            'event_name'       => $request->get_param('event_name'),
     560            'trigger_type'     => $request->get_param('trigger_type'),
     561            'conditions'       => $request->get_param('conditions'),
     562            'match_logic'      => $request->get_param('match_logic'),
     563            'value_type'       => $request->get_param('value_type'),
     564            'fixed_value'      => $request->get_param('fixed_value') ?? $request->get_param('value'),
     565            'trigger_config'   => $request->get_param('trigger_config'),
     566            'frequency'        => $request->get_param('frequency'),
     567            'cooldown_minutes' => $request->get_param('cooldown_minutes'),
     568            'is_active'        => $request->get_param('is_active'),
     569        );
     570
     571        $validation = $validator->validate_and_prepare($goal_data);
     572
     573        if (! $validation['valid']) {
    568574            return new WP_Error(
    569575                'invalid_goal_data',
    570                 implode( ' ', $validation['errors'] ),
    571                 array( 'status' => 400 )
     576                implode(' ', $validation['errors']),
     577                array('status' => 400)
    572578            );
    573579        }
     
    575581        // Use validated and sanitized data.
    576582        $data               = $validation['data'];
    577         $data['updated_at'] = current_time( 'mysql', true );
     583        $data['updated_at'] = current_time('mysql', true);
    578584
    579585        /**
     
    586592         * @param WP_REST_Request $request Original REST request object.
    587593         */
    588         $data = apply_filters( 'tracksure_before_update_goal', $data, $goal_id, $request );
    589 
    590         $result = $wpdb->update( $table, $data, array( 'goal_id' => $goal_id ) );
    591 
    592         if ( $result === false ) {
     594        $data = apply_filters('tracksure_before_update_goal', $data, $goal_id, $request);
     595
     596        $result = $wpdb->update($table, $data, array('goal_id' => $goal_id));
     597
     598        if ($result === false) {
    593599            return new WP_Error(
    594600                'goal_update_failed',
    595                 __( 'Failed to update goal.', 'tracksure' ),
    596                 array( 'status' => 500 )
     601                __('Failed to update goal.', 'tracksure'),
     602                array('status' => 500)
    597603            );
    598604        }
     
    608614
    609615        // Decode JSON fields.
    610         $goal->conditions = json_decode( $goal->conditions, true );
    611         if ( ! empty( $goal->trigger_config ) ) {
    612             $goal->trigger_config = json_decode( $goal->trigger_config, true );
     616        $goal->conditions = json_decode($goal->conditions, true);
     617        if (! empty($goal->trigger_config)) {
     618            $goal->trigger_config = json_decode($goal->trigger_config, true);
    613619        }
    614620        $goal->is_active = (bool) $goal->is_active;
    615         if ( $goal->fixed_value ) {
     621        if ($goal->fixed_value) {
    616622            $goal->fixed_value = (float) $goal->fixed_value;
    617623        }
    618624
    619625        // Sanitize output.
    620         $goal->name        = esc_html( $goal->name );
    621         $goal->description = ! empty( $goal->description ) ? esc_html( $goal->description ) : '';
     626        $goal->name        = esc_html($goal->name);
     627        $goal->description = ! empty($goal->description) ? esc_html($goal->description) : '';
    622628
    623629        // Clear goal caches.
     
    633639         * @param WP_REST_Request $request Original REST request.
    634640         */
    635         do_action( 'tracksure_after_update_goal', $goal_id, $goal, $request );
     641        do_action('tracksure_after_update_goal', $goal_id, $goal, $request);
    636642
    637643        return $this->prepare_success(
    638644            array(
    639645                'goal'    => $goal,
    640                 'message' => __( 'Goal updated successfully.', 'tracksure' ),
     646                'message' => __('Goal updated successfully.', 'tracksure'),
    641647            )
    642648        );
     
    655661     * @return WP_REST_Response|WP_Error Success message or error.
    656662     */
    657     public function delete_goal( $request ) {
     663    public function delete_goal($request)
     664    {
    658665        global $wpdb;
    659666
    660667        $table   = $wpdb->prefix . 'tracksure_goals';
    661         $goal_id = absint( $request->get_param( 'id' ) );
     668        $goal_id = absint($request->get_param('id'));
    662669
    663670        /**
     
    670677         * @param int $goal_id Goal ID being deleted.
    671678         */
    672         do_action( 'tracksure_before_delete_goal', $goal_id );
    673 
    674         $result = $wpdb->delete( $table, array( 'goal_id' => $goal_id ), array( '%d' ) );
    675 
    676         if ( ! $result ) {
     679        do_action('tracksure_before_delete_goal', $goal_id);
     680
     681        $result = $wpdb->delete($table, array('goal_id' => $goal_id), array('%d'));
     682
     683        if (! $result) {
    677684            return new WP_Error(
    678685                'goal_delete_failed',
    679                 __( 'Failed to delete goal. Goal may not exist.', 'tracksure' ),
    680                 array( 'status' => 500 )
     686                __('Failed to delete goal. Goal may not exist.', 'tracksure'),
     687                array('status' => 500)
    681688            );
    682689        }
     
    692699         * @param int $goal_id Goal ID that was deleted.
    693700         */
    694         do_action( 'tracksure_after_delete_goal', $goal_id );
     701        do_action('tracksure_after_delete_goal', $goal_id);
    695702
    696703        return $this->prepare_success(
    697704            array(
    698                 'message' => __( 'Goal deleted successfully.', 'tracksure' ),
     705                'message' => __('Goal deleted successfully.', 'tracksure'),
    699706            )
    700707        );
     
    707714     * @return WP_REST_Response
    708715     */
    709     public function get_goal_performance( $request ) {
     716    public function get_goal_performance($request)
     717    {
    710718        global $wpdb;
    711719
    712         $goal_id = absint( $request->get_param( 'id' ) );
     720        $goal_id = absint($request->get_param('id'));
    713721
    714722        // Accept both parameter naming conventions for compatibility.
    715         $date_start = sanitize_text_field( $request->get_param( 'date_start' ) )
    716             ? sanitize_text_field( $request->get_param( 'date_start' ) )
    717             : sanitize_text_field( $request->get_param( 'start_date' ) );
    718         $date_end   = sanitize_text_field( $request->get_param( 'date_end' ) )
    719             ? sanitize_text_field( $request->get_param( 'date_end' ) )
    720             : sanitize_text_field( $request->get_param( 'end_date' ) );
    721 
    722         // Check cache first (5 minute TTL).
    723         $cache_key = 'tracksure_goal_perf_' . $goal_id . '_' . md5( $date_start . $date_end );
    724         $cached    = get_transient( $cache_key );
    725 
    726         if ( $cached !== false ) {
    727             return $this->prepare_success( $cached );
     723        $date_start = sanitize_text_field($request->get_param('date_start'))
     724            ? sanitize_text_field($request->get_param('date_start'))
     725            : sanitize_text_field($request->get_param('start_date'));
     726        $date_end   = sanitize_text_field($request->get_param('date_end'))
     727            ? sanitize_text_field($request->get_param('date_end'))
     728            : sanitize_text_field($request->get_param('end_date'));
     729
     730        // Check cache first (1 minute TTL).
     731        $cache_key = 'tracksure_goal_perf_' . $goal_id . '_' . md5($date_start . $date_end);
     732        $cached    = get_transient($cache_key);
     733
     734        if ($cached !== false) {
     735            return $this->prepare_success($cached);
    728736        }
    729737
     
    761769
    762770
    763         $conversion_rate = $total_sessions > 0 ? round( ( $performance->conversions / $total_sessions ) * 100, 2 ) : 0;
     771        $conversion_rate = $total_sessions > 0 ? round(($performance->conversions / $total_sessions) * 100, 2) : 0;
    764772
    765773        $result = array(
     
    770778        );
    771779
    772         // Cache for 5 minutes.
    773         set_transient( $cache_key, $result, 5 * MINUTE_IN_SECONDS );
    774 
    775         return $this->prepare_success( $result );
     780        // Cache for 1 minute.
     781        set_transient($cache_key, $result, MINUTE_IN_SECONDS);
     782
     783        return $this->prepare_success($result);
    776784    }
    777785
     
    785793     * @return WP_REST_Response
    786794     */
    787     public function get_batch_performance( $request ) {
     795    public function get_batch_performance($request)
     796    {
    788797        global $wpdb;
    789798
    790799        // Parse parameters (accept both naming conventions).
    791         $goal_ids_param = $request->get_param( 'goal_ids' );
    792         $date_start     = $request->get_param( 'date_start' ) ? $request->get_param( 'date_start' ) : $request->get_param( 'start_date' );
    793         $date_end       = $request->get_param( 'date_end' ) ? $request->get_param( 'date_end' ) : $request->get_param( 'end_date' );
     800        $goal_ids_param = $request->get_param('goal_ids');
     801        $date_start     = $request->get_param('date_start') ? $request->get_param('date_start') : $request->get_param('start_date');
     802        $date_end       = $request->get_param('date_end') ? $request->get_param('date_end') : $request->get_param('end_date');
    794803
    795804        // Validate goal_ids.
    796         if ( empty( $goal_ids_param ) ) {
     805        if (empty($goal_ids_param)) {
    797806            return new WP_Error(
    798807                'missing_goal_ids',
    799                 __( 'goal_ids parameter is required', 'tracksure' ),
    800                 array( 'status' => 400 )
     808                __('goal_ids parameter is required', 'tracksure'),
     809                array('status' => 400)
    801810            );
    802811        }
    803812
    804         // Check cache first (5 minute TTL).
    805         $cache_key = 'tracksure_goals_perf_' . md5( $goal_ids_param . $date_start . $date_end );
    806         $cached    = get_transient( $cache_key );
    807 
    808         if ( $cached !== false ) {
    809             return $this->prepare_success( $cached );
    810         }
    811 
    812         $goal_ids = array_map( 'intval', explode( ',', $goal_ids_param ) );
    813         $goal_ids = array_filter( $goal_ids ); // Remove zeros
    814 
    815         if ( empty( $goal_ids ) ) {
     813        // Check cache first (1 minute TTL).
     814        $cache_key = 'tracksure_goals_perf_' . md5($goal_ids_param . $date_start . $date_end);
     815        $cached    = get_transient($cache_key);
     816
     817        if ($cached !== false) {
     818            // Normalize: legacy caches stored just the performance map
     819            // without the 'performance' wrapper key.
     820            if (! isset($cached['performance'])) {
     821                $cached = array('performance' => $cached);
     822            }
     823            return $this->prepare_success($cached);
     824        }
     825
     826        $goal_ids = array_map('intval', explode(',', $goal_ids_param));
     827        $goal_ids = array_filter($goal_ids); // Remove zeros
     828
     829        if (empty($goal_ids)) {
    816830            return new WP_Error(
    817831                'invalid_goal_ids',
    818                 __( 'No valid goal IDs provided after parsing', 'tracksure' ),
    819                 array( 'status' => 400 )
     832                __('No valid goal IDs provided after parsing', 'tracksure'),
     833                array('status' => 400)
    820834            );
    821835        }
    822836
    823837        // Default to last 30 days if dates not provided.
    824         if ( empty( $date_start ) ) {
    825             $date_start = gmdate( 'Y-m-d', strtotime( '-30 days' ) );
    826         }
    827         if ( empty( $date_end ) ) {
    828             $date_end = gmdate( 'Y-m-d' );
     838        if (empty($date_start)) {
     839            $date_start = gmdate('Y-m-d', strtotime('-30 days'));
     840        }
     841        if (empty($date_end)) {
     842            $date_end = gmdate('Y-m-d');
    829843        }
    830844
    831845        // Build placeholders for IN clause.
    832         $placeholders = implode( ',', array_fill( 0, count( $goal_ids ), '%d' ) );
     846        $placeholders = implode(',', array_fill(0, count($goal_ids), '%d'));
    833847
    834848        // Prepare query parameters (datetime format for index usage).
    835849        $query_params = array_merge(
    836             array( $date_start . ' 00:00:00', $date_end . ' 23:59:59' ),
     850            array($date_start . ' 00:00:00', $date_end . ' 23:59:59'),
    837851            $goal_ids
    838852        );
     
    864878
    865879        // Check for database errors.
    866         if ( $wpdb->last_error ) {
    867             if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    868 
    869                 error_log( '[TrackSure] Goals batch performance query failed: ' . $wpdb->last_error );
     880        if ($wpdb->last_error) {
     881            if (defined('WP_DEBUG') && WP_DEBUG) {
     882
     883                error_log('[TrackSure] Goals batch performance query failed: ' . $wpdb->last_error);
    870884            }
    871885            return $this->prepare_error(
     
    894908        // Format response.
    895909        $performance = array();
    896         foreach ( $results as $row ) {
     910        foreach ($results as $row) {
    897911            $goal_id     = (int) $row['goal_id'];
    898912            $conversions = (int) $row['conversions'];
     
    902916            // Calculate conversion rate.
    903917            $conversion_rate = $total_sessions > 0
    904                 ? ( $conversions / $total_sessions ) * 100
     918                ? ($conversions / $total_sessions) * 100
    905919                : 0;
    906920
    907             $performance[ $goal_id ] = array(
     921            $performance[$goal_id] = array(
    908922                'conversions'     => $conversions,
    909                 'revenue'         => round( $revenue, 2 ),
    910                 'avg_value'       => round( $avg_value, 2 ),
    911                 'conversion_rate' => round( $conversion_rate, 2 ),
     923                'revenue'         => round($revenue, 2),
     924                'avg_value'       => round($avg_value, 2),
     925                'conversion_rate' => round($conversion_rate, 2),
    912926            );
    913927        }
    914928
    915929        // Fill in missing goals with zero data.
    916         foreach ( $goal_ids as $goal_id ) {
    917             if ( ! isset( $performance[ $goal_id ] ) ) {
    918                 $performance[ $goal_id ] = array(
     930        foreach ($goal_ids as $goal_id) {
     931            if (! isset($performance[$goal_id])) {
     932                $performance[$goal_id] = array(
    919933                    'conversions'     => 0,
    920934                    'revenue'         => 0,
     
    925939        }
    926940
    927         // Cache for 5 minutes.
    928         set_transient( $cache_key, $performance, 5 * MINUTE_IN_SECONDS );
    929 
    930         return $this->prepare_success( array( 'performance' => $performance ) );
     941        // Cache for 1 minute (shorter TTL so dashboard data stays fresh).
     942        $response_data = array('performance' => $performance);
     943        set_transient($cache_key, $response_data, MINUTE_IN_SECONDS);
     944
     945        return $this->prepare_success($response_data);
    931946    }
    932947
     
    937952     * @return WP_REST_Response
    938953     */
    939     public function get_goal_timeline( $request ) {
     954    public function get_goal_timeline($request)
     955    {
    940956        global $wpdb;
    941957
    942         $goal_id    = absint( $request->get_param( 'id' ) );
    943         $page       = absint( $request->get_param( 'page' ) ) ? absint( $request->get_param( 'page' ) ) : 1;
    944         $per_page   = absint( $request->get_param( 'per_page' ) ) ? absint( $request->get_param( 'per_page' ) ) : 20;
    945         $date_start = $request->get_param( 'date_start' ) ? $request->get_param( 'date_start' ) : gmdate( 'Y-m-d', strtotime( '-30 days' ) );
    946         $date_end   = $request->get_param( 'date_end' ) ? $request->get_param( 'date_end' ) : gmdate( 'Y-m-d' );
    947 
    948         $offset = ( $page - 1 ) * $per_page;
     958        $goal_id    = absint($request->get_param('id'));
     959        $page       = absint($request->get_param('page')) ? absint($request->get_param('page')) : 1;
     960        $per_page   = absint($request->get_param('per_page')) ? absint($request->get_param('per_page')) : 20;
     961        $date_start = $request->get_param('date_start') ? $request->get_param('date_start') : gmdate('Y-m-d', strtotime('-30 days'));
     962        $date_end   = $request->get_param('date_end') ? $request->get_param('date_end') : gmdate('Y-m-d');
     963
     964        $offset = ($page - 1) * $per_page;
    949965
    950966        // ========================================.
     
    959975        );
    960976
    961         $cached = get_transient( $cache_key );
    962         if ( $cached !== false && is_array( $cached ) ) {
    963             return $this->prepare_success( $cached );
     977        $cached = get_transient($cache_key);
     978        if ($cached !== false && is_array($cached)) {
     979            return $this->prepare_success($cached);
    964980        }
    965981
     
    10181034
    10191035        // Format conversions and extract context from event_params.
    1020         foreach ( $conversions as &$conversion ) {
     1036        foreach ($conversions as &$conversion) {
    10211037            $conversion['conversion_id'] = (int) $conversion['conversion_id'];
    10221038            $conversion['value']         = (float) $conversion['value'];
    10231039
    10241040            // Parse event_params to extract product/form/click context.
    1025             if ( ! empty( $conversion['event_params'] ) ) {
    1026                 $event_params = json_decode( $conversion['event_params'], true );
    1027                 if ( is_array( $event_params ) ) {
     1041            if (! empty($conversion['event_params'])) {
     1042                $event_params = json_decode($conversion['event_params'], true);
     1043                if (is_array($event_params)) {
    10281044                    // Product/Item data (WooCommerce standard).
    1029                     if ( isset( $event_params['item_id'] ) ) {
     1045                    if (isset($event_params['item_id'])) {
    10301046                        $conversion['product_id'] = $event_params['item_id'];
    10311047                    }
    1032                     if ( isset( $event_params['item_name'] ) ) {
     1048                    if (isset($event_params['item_name'])) {
    10331049                        $conversion['product_name'] = $event_params['item_name'];
    10341050                    }
    10351051
    10361052                    // Use item_url if page_url is missing (server-side WooCommerce events).
    1037                     if ( empty( $conversion['page_url'] ) && isset( $event_params['item_url'] ) ) {
     1053                    if (empty($conversion['page_url']) && isset($event_params['item_url'])) {
    10381054                        $conversion['page_url'] = $event_params['item_url'];
    10391055                    }
    10401056
    10411057                    // Form data
    1042                     if ( isset( $event_params['form_id'] ) ) {
     1058                    if (isset($event_params['form_id'])) {
    10431059                        $conversion['form_id'] = $event_params['form_id'];
    10441060                    }
    10451061
    10461062                    // Click data.
    1047                     if ( isset( $event_params['element_selector'] ) ) {
     1063                    if (isset($event_params['element_selector'])) {
    10481064                        $conversion['element_selector'] = $event_params['element_selector'];
    10491065                    }
    10501066                }
    10511067            }
    1052             unset( $conversion['event_params'] ); // Remove raw params from response
     1068            unset($conversion['event_params']); // Remove raw params from response
    10531069
    10541070            // Set defaults for null values.
    1055             $conversion['source']   = ! empty( $conversion['source'] ) ? $conversion['source'] : '(direct)';
    1056             $conversion['medium']   = ! empty( $conversion['medium'] ) ? $conversion['medium'] : '(none)';
    1057             $conversion['campaign'] = ! empty( $conversion['campaign'] ) ? $conversion['campaign'] : '';
    1058             $conversion['referrer'] = ! empty( $conversion['referrer'] ) ? $conversion['referrer'] : '';
    1059             $conversion['device']   = ! empty( $conversion['device'] ) ? $conversion['device'] : 'desktop';
    1060             $conversion['browser']  = ! empty( $conversion['browser'] ) ? $conversion['browser'] : 'unknown';
     1071            $conversion['source']   = ! empty($conversion['source']) ? $conversion['source'] : '(direct)';
     1072            $conversion['medium']   = ! empty($conversion['medium']) ? $conversion['medium'] : '(none)';
     1073            $conversion['campaign'] = ! empty($conversion['campaign']) ? $conversion['campaign'] : '';
     1074            $conversion['referrer'] = ! empty($conversion['referrer']) ? $conversion['referrer'] : '';
     1075            $conversion['device']   = ! empty($conversion['device']) ? $conversion['device'] : 'desktop';
     1076            $conversion['browser']  = ! empty($conversion['browser']) ? $conversion['browser'] : 'unknown';
    10611077        }
    10621078
     
    10721088        );
    10731089
    1074         set_transient( $cache_key, $result, 5 * MINUTE_IN_SECONDS );
    1075 
    1076         return $this->prepare_success( $result );
     1090        set_transient($cache_key, $result, 5 * MINUTE_IN_SECONDS);
     1091
     1092        return $this->prepare_success($result);
    10771093    }
    10781094
     
    10831099     * @return WP_REST_Response
    10841100     */
    1085     public function get_goal_sources( $request ) {
     1101    public function get_goal_sources($request)
     1102    {
    10861103        global $wpdb;
    10871104
    1088         $goal_id           = absint( $request->get_param( 'id' ) );
    1089         $attribution_model = sanitize_text_field( $request->get_param( 'attribution_model' ) ) ? sanitize_text_field( $request->get_param( 'attribution_model' ) ) : 'last_touch';
    1090         $date_start        = $request->get_param( 'date_start' ) ? $request->get_param( 'date_start' ) : gmdate( 'Y-m-d', strtotime( '-30 days' ) );
    1091         $date_end          = $request->get_param( 'date_end' ) ? $request->get_param( 'date_end' ) : gmdate( 'Y-m-d' );
     1105        $goal_id           = absint($request->get_param('id'));
     1106        $attribution_model = sanitize_text_field($request->get_param('attribution_model')) ? sanitize_text_field($request->get_param('attribution_model')) : 'last_touch';
     1107        $date_start        = $request->get_param('date_start') ? $request->get_param('date_start') : gmdate('Y-m-d', strtotime('-30 days'));
     1108        $date_end          = $request->get_param('date_end') ? $request->get_param('date_end') : gmdate('Y-m-d');
    10921109
    10931110        // ========================================.
     
    11021119        );
    11031120
    1104         $cached = get_transient( $cache_key );
    1105         if ( $cached !== false && is_array( $cached ) ) {
    1106             return $this->prepare_success( $cached );
     1121        $cached = get_transient($cache_key);
     1122        if ($cached !== false && is_array($cached)) {
     1123            return $this->prepare_success($cached);
    11071124        }
    11081125
    11091126
    11101127        // Multi-touch models use the conversion_attribution table.
    1111         $multi_touch_models = array( 'linear', 'time_decay', 'position_based' );
    1112 
    1113         if ( in_array( $attribution_model, $multi_touch_models, true ) ) {
     1128        $multi_touch_models = array('linear', 'time_decay', 'position_based');
     1129
     1130        if (in_array($attribution_model, $multi_touch_models, true)) {
    11141131            // Query conversion_attribution table for multi-touch models.
    11151132            // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
     
    11651182
    11661183        // Calculate total for percentages.
    1167         $total_conversions = array_sum( array_column( $sources, 'conversions' ) );
     1184        $total_conversions = array_sum(array_column($sources, 'conversions'));
    11681185
    11691186        // Format sources with percentages.
    1170         foreach ( $sources as &$source ) {
     1187        foreach ($sources as &$source) {
    11711188            $source['conversions'] = (int) $source['conversions'];
    11721189            $source['revenue']     = (float) $source['revenue'];
    11731190            $source['percentage']  = $total_conversions > 0
    1174                 ? round( ( $source['conversions'] / $total_conversions ) * 100, 1 )
     1191                ? round(($source['conversions'] / $total_conversions) * 100, 1)
    11751192                : 0;
    11761193        }
     
    11851202        );
    11861203
    1187         set_transient( $cache_key, $result, 5 * MINUTE_IN_SECONDS );
    1188 
    1189         return $this->prepare_success( $result );
     1204        set_transient($cache_key, $result, 5 * MINUTE_IN_SECONDS);
     1205
     1206        return $this->prepare_success($result);
    11901207    }
    11911208
     
    12111228     * @return WP_REST_Response Response object with overview data.
    12121229     */
    1213     public function get_goals_overview( $request ) {
     1230    public function get_goals_overview($request)
     1231    {
    12141232        global $wpdb;
    12151233
     
    12171235        // PHASE 1: PARSE & VALIDATE DATE RANGE.
    12181236        // ========================================.
    1219         $end_date   = $request->get_param( 'end_date' );
    1220         $start_date = $request->get_param( 'start_date' );
     1237        $end_date   = $request->get_param('end_date');
     1238        $start_date = $request->get_param('start_date');
    12211239
    12221240        // Default to last 30 days if not specified.
    1223         if ( empty( $end_date ) ) {
    1224             $end_date = gmdate( 'Y-m-d' );
    1225         }
    1226         if ( empty( $start_date ) ) {
    1227             $start_date = gmdate( 'Y-m-d', strtotime( $end_date . ' -30 days' ) );
     1241        if (empty($end_date)) {
     1242            $end_date = gmdate('Y-m-d');
     1243        }
     1244        if (empty($start_date)) {
     1245            $start_date = gmdate('Y-m-d', strtotime($end_date . ' -30 days'));
    12281246        }
    12291247
     
    12311249        // PHASE 2: CHECK CACHE.
    12321250        // ========================================.
    1233         $cache_key = 'tracksure_goals_overview_' . md5( $start_date . '_' . $end_date );
    1234         $cached    = get_transient( $cache_key );
    1235         if ( $cached !== false ) {
    1236             return $this->prepare_success( $cached );
     1251        $cache_key = 'tracksure_goals_overview_' . md5($start_date . '_' . $end_date);
     1252        $cached    = get_transient($cache_key);
     1253        if ($cached !== false) {
     1254            return $this->prepare_success($cached);
    12371255        }
    12381256
     
    12591277        // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
    12601278
    1261         $total_conversions = (int) ( $current_stats['total_conversions'] ?? 0 );
    1262         $total_value       = (float) ( $current_stats['total_value'] ?? 0 );
    1263         $unique_visitors   = (int) ( $current_stats['unique_visitors'] ?? 0 );
     1279        $total_conversions = (int) ($current_stats['total_conversions'] ?? 0);
     1280        $total_value       = (float) ($current_stats['total_value'] ?? 0);
     1281        $unique_visitors   = (int) ($current_stats['unique_visitors'] ?? 0);
    12641282
    12651283        // Calculate conversion rate (conversions / unique visitors).
    12661284        // Note: In production, you'd want to get total sessions instead
    12671285        $conversion_rate = $unique_visitors > 0
    1268             ? round( ( $total_conversions / $unique_visitors ) * 100, 2 )
     1286            ? round(($total_conversions / $unique_visitors) * 100, 2)
    12691287            : 0;
    12701288
     
    12731291        // ========================================.
    12741292        // Calculate date difference to determine previous period.
    1275         $period_length   = ( strtotime( $end_date ) - strtotime( $start_date ) ) / DAY_IN_SECONDS;
    1276         $prev_start_date = gmdate( 'Y-m-d', strtotime( $start_date . ' -' . ceil( $period_length ) . ' days' ) );
    1277         $prev_end_date   = gmdate( 'Y-m-d', strtotime( $end_date . ' -' . ceil( $period_length ) . ' days' ) );
     1293        $period_length   = (strtotime($end_date) - strtotime($start_date)) / DAY_IN_SECONDS;
     1294        $prev_start_date = gmdate('Y-m-d', strtotime($start_date . ' -' . ceil($period_length) . ' days'));
     1295        $prev_end_date   = gmdate('Y-m-d', strtotime($end_date . ' -' . ceil($period_length) . ' days'));
    12781296
    12791297        // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
     
    12941312        // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
    12951313
    1296         $prev_conversions = (int) ( $previous_stats['total_conversions'] ?? 0 );
    1297         $prev_value       = (float) ( $previous_stats['total_value'] ?? 0 );
    1298         $prev_visitors    = (int) ( $previous_stats['unique_visitors'] ?? 0 );
     1314        $prev_conversions = (int) ($previous_stats['total_conversions'] ?? 0);
     1315        $prev_value       = (float) ($previous_stats['total_value'] ?? 0);
     1316        $prev_visitors    = (int) ($previous_stats['unique_visitors'] ?? 0);
    12991317        $prev_rate        = $prev_visitors > 0
    1300             ? round( ( $prev_conversions / $prev_visitors ) * 100, 2 )
     1318            ? round(($prev_conversions / $prev_visitors) * 100, 2)
    13011319            : 0;
    13021320
     
    13341352        // Format daily data.
    13351353        $daily_conversions = array();
    1336         foreach ( $daily_data as $day ) {
     1354        foreach ($daily_data as $day) {
    13371355            $daily_conversions[] = array(
    13381356                'date'        => $day['date'],
     
    13731391        // Format top goals.
    13741392        $top_goals = array();
    1375         foreach ( $top_goals_data as $goal ) {
     1393        foreach ($top_goals_data as $goal) {
    13761394            $top_goals[] = array(
    13771395                'goal_id'      => (int) $goal['goal_id'],
    1378                 'name'         => esc_html( $goal['name'] ),
     1396                'name'         => esc_html($goal['name']),
    13791397                'trigger_type' => $goal['trigger_type'],
    13801398                'conversions'  => (int) $goal['conversions'],
     
    14071425        // PHASE 9: CACHE RESULT (5 min TTL).
    14081426        // ========================================.
    1409         set_transient( $cache_key, $result, 5 * MINUTE_IN_SECONDS );
    1410 
    1411         return $this->prepare_success( $result );
     1427        set_transient($cache_key, $result, 5 * MINUTE_IN_SECONDS);
     1428
     1429        return $this->prepare_success($result);
    14121430    }
    14131431
     
    14261444     * @return WP_REST_Response Response with devices array.
    14271445     */
    1428     public function get_goal_devices( $request ) {
     1446    public function get_goal_devices($request)
     1447    {
    14291448        global $wpdb;
    14301449
    1431         $goal_id    = absint( $request->get_param( 'id' ) );
    1432         $date_start = $request->get_param( 'date_start' ) ? $request->get_param( 'date_start' ) : gmdate( 'Y-m-d', strtotime( '-30 days' ) );
    1433         $date_end   = $request->get_param( 'date_end' ) ? $request->get_param( 'date_end' ) : gmdate( 'Y-m-d' );
     1450        $goal_id    = absint($request->get_param('id'));
     1451        $date_start = $request->get_param('date_start') ? $request->get_param('date_start') : gmdate('Y-m-d', strtotime('-30 days'));
     1452        $date_end   = $request->get_param('date_end') ? $request->get_param('date_end') : gmdate('Y-m-d');
    14341453
    14351454        // Check cache.
     
    14411460        );
    14421461
    1443         $cached = get_transient( $cache_key );
    1444         if ( $cached !== false && is_array( $cached ) ) {
    1445             return $this->prepare_success( $cached );
     1462        $cached = get_transient($cache_key);
     1463        if ($cached !== false && is_array($cached)) {
     1464            return $this->prepare_success($cached);
    14461465        }
    14471466
     
    14701489        // Calculate total for percentages.
    14711490        $total_conversions = 0;
    1472         foreach ( $devices as $row ) {
     1491        foreach ($devices as $row) {
    14731492            $total_conversions += (int) $row['conversions'];
    14741493        }
    14751494
    14761495        // Format response with percentages.
    1477         foreach ( $devices as &$row ) {
     1496        foreach ($devices as &$row) {
    14781497            $row['conversions'] = (int) $row['conversions'];
    14791498            $row['percentage']  = $total_conversions > 0
    1480                 ? round( ( $row['conversions'] / $total_conversions ) * 100, 1 )
     1499                ? round(($row['conversions'] / $total_conversions) * 100, 1)
    14811500                : 0;
    14821501        }
     
    14891508
    14901509        // Cache for 5 minutes.
    1491         set_transient( $cache_key, $result, 5 * MINUTE_IN_SECONDS );
    1492 
    1493         return $this->prepare_success( $result );
     1510        set_transient($cache_key, $result, 5 * MINUTE_IN_SECONDS);
     1511
     1512        return $this->prepare_success($result);
    14941513    }
    14951514
     
    15001519     * @return array Schema arguments.
    15011520     */
    1502     private function get_goal_schema( $update = false ) {
     1521    private function get_goal_schema($update = false)
     1522    {
    15031523        return array(
    15041524            'name'        => array(
     
    15321552     * server-side and client-side goal lists are refreshed.
    15331553     */
    1534     private function clear_goals_cache() {
     1554    private function clear_goals_cache()
     1555    {
    15351556        // Clear server-side cache (used by Goal Evaluator).
    1536         delete_transient( 'tracksure_active_goals_server' );
     1557        delete_transient('tracksure_active_goals_server');
    15371558
    15381559        // Clear client-side cache (used by front-end tracking).
    1539         delete_transient( 'tracksure_active_goals' );
     1560        delete_transient('tracksure_active_goals');
    15401561
    15411562        // Clear Goal Evaluator in-memory cache.
  • tracksure/trunk/includes/core/services/class-tracksure-goal-evaluator.php

    r3472561 r3473414  
    4444
    4545// Exit if accessed directly.
    46 if ( ! defined( 'ABSPATH' ) ) {
     46if (! defined('ABSPATH')) {
    4747    exit;
    4848}
     
    5656 * @since 1.0.0
    5757 */
    58 class TrackSure_Goal_Evaluator {
     58class TrackSure_Goal_Evaluator
     59{
    5960
    6061
     
    119120     * @return TrackSure_Goal_Evaluator Singleton instance.
    120121     */
    121     public static function get_instance(): self {
    122         if ( null === self::$instance ) {
     122    public static function get_instance(): self
     123    {
     124        if (null === self::$instance) {
    123125            self::$instance = new self();
    124126        }
     
    133135     * @since 1.0.0
    134136     */
    135     private function __construct() {
     137    private function __construct()
     138    {
    136139        $this->db = TrackSure_DB::get_instance();
    137140    }
     
    155158     * @return bool True if any goal was triggered, false otherwise.
    156159     */
    157     public function evaluate_event( string $event_id, array $event_data, array $session ): bool {
    158         $event_name = isset( $event_data['event_name'] ) ? sanitize_text_field( $event_data['event_name'] ) : '';
    159 
    160         if ( empty( $event_name ) ) {
     160    public function evaluate_event(string $event_id, array $event_data, array $session): bool
     161    {
     162        $event_name = isset($event_data['event_name']) ? sanitize_text_field($event_data['event_name']) : '';
     163
     164        if (empty($event_name)) {
    161165            return false;
    162166        }
    163167
    164168        // O(1) lookup: only get goals that match this event_name.
    165         $matching_goals = $this->get_goals_for_event( $event_name );
    166 
    167         if ( empty( $matching_goals ) ) {
     169        $matching_goals = $this->get_goals_for_event($event_name);
     170
     171        if (empty($matching_goals)) {
    168172            return false;
    169173        }
    170174
    171         $event_params = isset( $event_data['event_params'] ) ? $event_data['event_params'] : array();
     175        $event_params = isset($event_data['event_params']) ? $event_data['event_params'] : array();
    172176
    173177        // Decode JSON string if needed.
    174         if ( is_string( $event_params ) ) {
    175             $event_params = ! empty( $event_params ) ? json_decode( $event_params, true ) : array();
    176         }
    177 
    178         if ( ! is_array( $event_params ) ) {
     178        if (is_string($event_params)) {
     179            $event_params = ! empty($event_params) ? json_decode($event_params, true) : array();
     180        }
     181
     182        if (! is_array($event_params)) {
    179183            $event_params = array();
    180184        }
     
    183187        // can resolve page_url, page_path, page_title regardless of whether
    184188        // they were stored inside the event_params JSON or as separate columns.
    185         $page_fields = array( 'page_url', 'page_path', 'page_title' );
    186         foreach ( $page_fields as $field ) {
    187             if ( ! isset( $event_params[ $field ] ) && isset( $event_data[ $field ] ) ) {
    188                 $event_params[ $field ] = $event_data[ $field ];
    189             }
    190         }
    191 
    192         $session_id = isset( $session['session_id'] ) ? $session['session_id'] : '';
     189        $page_fields = array('page_url', 'page_path', 'page_title');
     190        foreach ($page_fields as $field) {
     191            if (! isset($event_params[$field]) && isset($event_data[$field])) {
     192                $event_params[$field] = $event_data[$field];
     193            }
     194        }
     195
     196        $session_id = isset($session['session_id']) ? $session['session_id'] : '';
    193197        $triggered  = false;
    194198
    195         foreach ( $matching_goals as $goal ) {
     199        foreach ($matching_goals as $goal) {
    196200            // Session-level dedup: skip if this goal+session already converted.
    197201            $dedup_key = $goal->goal_id . '_' . $session_id;
    198             if ( isset( $this->session_conversions[ $dedup_key ] ) ) {
     202            if (isset($this->session_conversions[$dedup_key])) {
    199203                continue;
    200204            }
    201205
    202206            // Evaluate trigger type match.
    203             if ( ! $this->evaluate_trigger_match( $goal, $event_data, $event_params ) ) {
     207            if (! $this->evaluate_trigger_match($goal, $event_data, $event_params)) {
    204208                continue;
    205209            }
    206210
    207211            // Evaluate conditions.
    208             if ( $this->evaluate_conditions( $goal, $event_params ) ) {
    209                 $this->trigger_conversion( $event_id, $goal, $event_data, $session );
    210                 $this->session_conversions[ $dedup_key ] = true;
     212            if ($this->evaluate_conditions($goal, $event_params)) {
     213                $this->trigger_conversion($event_id, $goal, $event_data, $session);
     214                $this->session_conversions[$dedup_key] = true;
    211215                $triggered                               = true;
    212216            }
     
    227231     * @return array Array of goal objects matching the event_name.
    228232     */
    229     private function get_goals_for_event( string $event_name ): array {
     233    private function get_goals_for_event(string $event_name): array
     234    {
    230235        // Build index if not yet done.
    231         if ( null === $this->goals_by_event ) {
     236        if (null === $this->goals_by_event) {
    232237            $all_goals            = $this->get_active_goals();
    233238            $this->goals_by_event = array();
    234239
    235             foreach ( $all_goals as $goal ) {
     240            // Trigger-type → event-name mapping (mirrors JS TRIGGER_EVENT_MAP).
     241            // Ensures goals are findable even if event_name doesn't exactly match.
     242            $trigger_event_map = array(
     243                'pageview'      => array('page_view'),
     244                'click'         => array('click'),
     245                'form_submit'   => array('form_submit', 'form_submission'),
     246                'scroll_depth'  => array('scroll'),
     247                'time_on_page'  => array('page_exit', 'time_on_page', 'time_on_page_threshold'),
     248                'engagement'    => array('engagement', 'page_exit'),
     249                'video_play'    => array('video_play', 'video_start', 'video_complete'),
     250                'download'      => array('file_download', 'download'),
     251                'outbound_link' => array('outbound_click', 'external_link'),
     252            );
     253
     254            foreach ($all_goals as $goal) {
     255                // Primary index: goal's own event_name.
    236256                $key = $goal->event_name;
    237                 if ( ! isset( $this->goals_by_event[ $key ] ) ) {
    238                     $this->goals_by_event[ $key ] = array();
    239                 }
    240                 $this->goals_by_event[ $key ][] = $goal;
    241             }
    242         }
    243 
    244         return isset( $this->goals_by_event[ $event_name ] ) ? $this->goals_by_event[ $event_name ] : array();
     257                if (! isset($this->goals_by_event[$key])) {
     258                    $this->goals_by_event[$key] = array();
     259                }
     260                $this->goals_by_event[$key][] = $goal;
     261
     262                // Secondary index: all event names for this trigger_type.
     263                // This ensures a 'scroll_depth' trigger goal is found when
     264                // a 'scroll' event arrives, even if event_name is mismatched.
     265                if (! empty($goal->trigger_type) && isset($trigger_event_map[$goal->trigger_type])) {
     266                    foreach ($trigger_event_map[$goal->trigger_type] as $mapped_event) {
     267                        if ($mapped_event !== $key) { // Avoid duplicate.
     268                            if (! isset($this->goals_by_event[$mapped_event])) {
     269                                $this->goals_by_event[$mapped_event] = array();
     270                            }
     271                            $this->goals_by_event[$mapped_event][] = $goal;
     272                        }
     273                    }
     274                }
     275
     276                // Custom events: also index by event_name directly (already done above).
     277            }
     278        }
     279
     280        return isset($this->goals_by_event[$event_name]) ? $this->goals_by_event[$event_name] : array();
    245281    }
    246282
     
    259295     * @return array Array of goal objects with decoded JSON fields.
    260296     */
    261     private function get_active_goals(): array {
     297    private function get_active_goals(): array
     298    {
    262299        // Check in-memory cache first (fastest).
    263         if ( null !== $this->active_goals ) {
     300        if (null !== $this->active_goals) {
    264301            return $this->active_goals;
    265302        }
     
    267304        // Check transient cache (5 minute TTL).
    268305        $cache_key = 'tracksure_active_goals_server';
    269         $cached    = get_transient( $cache_key );
    270 
    271         if ( $cached !== false && is_array( $cached ) ) {
     306        $cached    = get_transient($cache_key);
     307
     308        if ($cached !== false && is_array($cached)) {
    272309            $this->active_goals = $cached;
    273310            return $this->active_goals;
     
    306343         * @param string $query SQL query string (no user input).
    307344         */
    308         $query = apply_filters( 'tracksure_active_goals_query', $base_query );
     345        $query = apply_filters('tracksure_active_goals_query', $base_query);
    309346
    310347        // Query active goals (explicit columns for performance).
    311         $this->active_goals = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Static query; filter may modify.
    312 
    313         if ( ! is_array( $this->active_goals ) ) {
     348        $this->active_goals = $wpdb->get_results($query); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Static query; filter may modify.
     349
     350        if (! is_array($this->active_goals)) {
    314351            $this->active_goals = array();
    315352        }
    316353
    317354        // Parse JSON columns.
    318         foreach ( $this->active_goals as $goal ) {
    319             if ( ! empty( $goal->conditions ) ) {
    320                 $goal->conditions = json_decode( $goal->conditions, true );
     355        foreach ($this->active_goals as $goal) {
     356            if (! empty($goal->conditions)) {
     357                $goal->conditions = json_decode($goal->conditions, true);
    321358            } else {
    322359                $goal->conditions = array();
     
    324361
    325362            // match_logic is a plain string ('all' or 'any'), NOT JSON.
    326             if ( empty( $goal->match_logic ) || ! in_array( $goal->match_logic, array( 'all', 'any' ), true ) ) {
     363            if (empty($goal->match_logic) || ! in_array($goal->match_logic, array('all', 'any'), true)) {
    327364                $goal->match_logic = 'all';
    328365            }
    329366
    330367            // Decode trigger_config JSON.
    331             if ( ! empty( $goal->trigger_config ) ) {
    332                 $goal->trigger_config = json_decode( $goal->trigger_config );
     368            if (! empty($goal->trigger_config)) {
     369                $goal->trigger_config = json_decode($goal->trigger_config);
    333370            } else {
    334371                $goal->trigger_config = null;
     
    346383         * @param array $goals Array of goal objects.
    347384         */
    348         $this->active_goals = apply_filters( 'tracksure_active_goals', $this->active_goals );
     385        $this->active_goals = apply_filters('tracksure_active_goals', $this->active_goals);
    349386
    350387        // Cache for 5 minutes.
    351         set_transient( $cache_key, $this->active_goals, 5 * MINUTE_IN_SECONDS );
     388        set_transient($cache_key, $this->active_goals, 5 * MINUTE_IN_SECONDS);
    352389
    353390        return $this->active_goals;
     
    379416     * @return bool True if trigger conditions are met, false otherwise.
    380417     */
    381     private function evaluate_trigger_match( object $goal, array $event_data, array $event_params ): bool {
     418    private function evaluate_trigger_match(object $goal, array $event_data, array $event_params): bool
     419    {
    382420        /**
    383421         * Filter for custom trigger type evaluation.
     
    401439        );
    402440
    403         if ( $custom_match !== null ) {
     441        if ($custom_match !== null) {
    404442            return (bool) $custom_match;
    405443        }
    406444
    407445        // If no trigger_type set, default behavior (always match).
    408         if ( empty( $goal->trigger_type ) || $goal->trigger_type === 'pageview' ) {
     446        if (empty($goal->trigger_type) || $goal->trigger_type === 'pageview') {
    409447            return true;
    410448        }
     
    413451        $trigger_config = $goal->trigger_config;
    414452
    415         $page_url  = isset( $event_params['page_url'] ) ? sanitize_url( $event_params['page_url'] ) : '';
    416         $page_path = isset( $event_params['page_path'] ) ? sanitize_text_field( $event_params['page_path'] ) : '';
     453        $page_url  = isset($event_params['page_url']) ? sanitize_url($event_params['page_url']) : '';
     454        $page_path = isset($event_params['page_path']) ? sanitize_text_field($event_params['page_path']) : '';
    417455
    418456        // Evaluate based on trigger type.
    419         switch ( $goal->trigger_type ) {
     457        switch ($goal->trigger_type) {
    420458            case 'click':
    421                 $css_selector = isset( $trigger_config->css_selector )
     459                $css_selector = isset($trigger_config->css_selector)
    422460                    ? $trigger_config->css_selector
    423461                    : null;
    424462
    425                 if ( $css_selector && ! empty( $event_params['element_selector'] ) ) {
    426                     return $this->match_css_selector( $event_params['element_selector'], $css_selector );
    427                 }
    428 
    429                 $element_id = isset( $trigger_config->element_id )
     463                if ($css_selector && ! empty($event_params['element_selector'])) {
     464                    return $this->match_css_selector($event_params['element_selector'], $css_selector);
     465                }
     466
     467                $element_id = isset($trigger_config->element_id)
    430468                    ? $trigger_config->element_id
    431469                    : null;
    432470
    433                 if ( $element_id && ! empty( $event_params['element_id'] ) ) {
     471                if ($element_id && ! empty($event_params['element_id'])) {
    434472                    return $event_params['element_id'] === $element_id;
    435473                }
     
    437475
    438476            case 'form_submit':
    439                 $form_id = isset( $trigger_config->form_id )
     477                $form_id = isset($trigger_config->form_id)
    440478                    ? $trigger_config->form_id
    441479                    : null;
    442480
    443                 if ( $form_id && ! empty( $event_params['form_id'] ) ) {
     481                if ($form_id && ! empty($event_params['form_id'])) {
    444482                    return $event_params['form_id'] === $form_id;
    445483                }
     
    448486            case 'scroll_depth':
    449487            case 'scroll': // Backward compatibility
    450                 $depth_threshold = isset( $trigger_config->scroll_depth )
     488                $depth_threshold = isset($trigger_config->scroll_depth)
    451489                    ? (int) $trigger_config->scroll_depth
    452490                    : 75;
    453491
    454                 if ( ! empty( $event_params['scroll_depth'] ) ) {
     492                if (! empty($event_params['scroll_depth'])) {
    455493                    return (int) $event_params['scroll_depth'] >= $depth_threshold;
    456494                }
     
    458496
    459497            case 'time_on_page':
    460                 $time_threshold = isset( $trigger_config->time_seconds )
     498                $time_threshold = isset($trigger_config->time_seconds)
    461499                    ? (int) $trigger_config->time_seconds
    462500                    : 30;
    463501
    464                 if ( ! empty( $event_params['time_on_page'] ) ) {
     502                if (! empty($event_params['time_on_page'])) {
    465503                    return (int) $event_params['time_on_page'] >= $time_threshold;
    466504                }
     
    469507            case 'engagement':
    470508                // Requires both scroll and time thresholds to be met.
    471                 $scroll_threshold = isset( $trigger_config->scroll_depth )
     509                $scroll_threshold = isset($trigger_config->scroll_depth)
    472510                    ? (int) $trigger_config->scroll_depth
    473511                    : 50; // Default 50% scroll
    474                 $time_threshold   = isset( $trigger_config->time_seconds )
     512                $time_threshold   = isset($trigger_config->time_seconds)
    475513                    ? (int) $trigger_config->time_seconds
    476514                    : 30; // Default 30 seconds
    477515
    478                 $scroll_met = ! empty( $event_params['scroll_depth'] ) &&
     516                $scroll_met = ! empty($event_params['scroll_depth']) &&
    479517                    (int) $event_params['scroll_depth'] >= $scroll_threshold;
    480                 $time_met   = ! empty( $event_params['time_on_page'] ) &&
     518                $time_met   = ! empty($event_params['time_on_page']) &&
    481519                    (int) $event_params['time_on_page'] >= $time_threshold;
    482520
     
    489527            case 'video_play':
    490528                // Match video URL or title from trigger_config against event params.
    491                 if ( ! empty( $trigger_config->video_url ) && ! empty( $event_params['video_url'] ) ) {
    492                     if ( stripos( $event_params['video_url'], $trigger_config->video_url ) === false ) {
     529                if (! empty($trigger_config->video_url) && ! empty($event_params['video_url'])) {
     530                    if (stripos($event_params['video_url'], $trigger_config->video_url) === false) {
    493531                        return false;
    494532                    }
    495533                }
    496                 if ( ! empty( $trigger_config->video_title ) && ! empty( $event_params['video_title'] ) ) {
    497                     if ( stripos( $event_params['video_title'], $trigger_config->video_title ) === false ) {
     534                if (! empty($trigger_config->video_title) && ! empty($event_params['video_title'])) {
     535                    if (stripos($event_params['video_title'], $trigger_config->video_title) === false) {
    498536                        return false;
    499537                    }
    500538                }
    501                 if ( ! empty( $trigger_config->video_type ) && ! empty( $event_params['video_type'] ) ) {
    502                     if ( strtolower( $event_params['video_type'] ) !== strtolower( $trigger_config->video_type ) ) {
     539                if (! empty($trigger_config->video_type) && ! empty($event_params['video_type'])) {
     540                    if (strtolower($event_params['video_type']) !== strtolower($trigger_config->video_type)) {
    503541                        return false;
    504542                    }
     
    508546            case 'download':
    509547                // Match file type or file name from trigger_config against event params.
    510                 if ( ! empty( $trigger_config->file_type ) && ! empty( $event_params['file_type'] ) ) {
    511                     if ( strtolower( $event_params['file_type'] ) !== strtolower( $trigger_config->file_type ) ) {
     548                if (! empty($trigger_config->file_type) && ! empty($event_params['file_type'])) {
     549                    if (strtolower($event_params['file_type']) !== strtolower($trigger_config->file_type)) {
    512550                        return false;
    513551                    }
    514552                }
    515                 if ( ! empty( $trigger_config->file_name ) && ! empty( $event_params['file_name'] ) ) {
    516                     if ( stripos( $event_params['file_name'], $trigger_config->file_name ) === false ) {
     553                if (! empty($trigger_config->file_name) && ! empty($event_params['file_name'])) {
     554                    if (stripos($event_params['file_name'], $trigger_config->file_name) === false) {
    517555                        return false;
    518556                    }
    519557                }
    520                 if ( ! empty( $trigger_config->link_url ) && ! empty( $event_params['link_url'] ) ) {
    521                     if ( stripos( $event_params['link_url'], $trigger_config->link_url ) === false ) {
     558                if (! empty($trigger_config->link_url) && ! empty($event_params['link_url'])) {
     559                    if (stripos($event_params['link_url'], $trigger_config->link_url) === false) {
    522560                        return false;
    523561                    }
     
    527565            case 'outbound_link':
    528566                // Match link domain or URL from trigger_config against event params.
    529                 if ( ! empty( $trigger_config->link_domain ) && ! empty( $event_params['link_domain'] ) ) {
    530                     if ( stripos( $event_params['link_domain'], $trigger_config->link_domain ) === false ) {
     567                if (! empty($trigger_config->link_domain) && ! empty($event_params['link_domain'])) {
     568                    if (stripos($event_params['link_domain'], $trigger_config->link_domain) === false) {
    531569                        return false;
    532570                    }
    533571                }
    534                 if ( ! empty( $trigger_config->link_url ) && ! empty( $event_params['link_url'] ) ) {
    535                     if ( stripos( $event_params['link_url'], $trigger_config->link_url ) === false ) {
     572                if (! empty($trigger_config->link_url) && ! empty($event_params['link_url'])) {
     573                    if (stripos($event_params['link_url'], $trigger_config->link_url) === false) {
    536574                        return false;
    537575                    }
     
    550588                 * @param array     $event_params   Event parameters.
    551589                 */
    552                 $custom_result = apply_filters( 'tracksure_goal_custom_trigger_eval', null, $goal, $event_data, $event_params );
    553                 if ( $custom_result !== null ) {
     590                $custom_result = apply_filters('tracksure_goal_custom_trigger_eval', null, $goal, $event_data, $event_params);
     591                if ($custom_result !== null) {
    554592                    return (bool) $custom_result;
    555593                }
     
    565603     * @return bool True if matches.
    566604     */
    567     private function match_css_selector( $actual_selector, $pattern ) {
    568         if ( empty( $actual_selector ) || empty( $pattern ) ) {
     605    private function match_css_selector($actual_selector, $pattern)
     606    {
     607        if (empty($actual_selector) || empty($pattern)) {
    569608            return false;
    570609        }
    571610
    572611        // Exact match.
    573         if ( $actual_selector === $pattern ) {
     612        if ($actual_selector === $pattern) {
    574613            return true;
    575614        }
    576615
    577616        // ID selector: #contact-form.
    578         if ( strpos( $pattern, '#' ) === 0 ) {
    579             $pattern_id = substr( $pattern, 1 );
     617        if (strpos($pattern, '#') === 0) {
     618            $pattern_id = substr($pattern, 1);
    580619            // Check if actual selector contains this ID.
    581             return strpos( $actual_selector, '#' . $pattern_id ) !== false;
     620            return strpos($actual_selector, '#' . $pattern_id) !== false;
    582621        }
    583622
    584623        // Class selector: .btn or .btn.primary.
    585         if ( strpos( $pattern, '.' ) === 0 ) {
     624        if (strpos($pattern, '.') === 0) {
    586625            // Extract all classes from pattern.
    587             $pattern_classes = array_filter( explode( '.', $pattern ) );
    588             foreach ( $pattern_classes as $class ) {
    589                 if ( ! empty( $class ) && strpos( $actual_selector, '.' . $class ) === false ) {
     626            $pattern_classes = array_filter(explode('.', $pattern));
     627            foreach ($pattern_classes as $class) {
     628                if (! empty($class) && strpos($actual_selector, '.' . $class) === false) {
    590629                    return false; // All classes must match
    591630                }
     
    595634
    596635        // Attribute selector: a[href^="tel:"], button[type="submit"].
    597         if ( preg_match( '/^([a-z]+)\[([^\]]+)\]$/i', $pattern, $matches ) ) {
     636        if (preg_match('/^([a-z]+)\[([^\]]+)\]$/i', $pattern, $matches)) {
    598637            $tag  = $matches[1]; // e.g., 'a'
    599638            $attr = $matches[2]; // e.g., 'href^="tel:"'
    600639
    601640            // Check if actual selector starts with this tag.
    602             if ( strpos( $actual_selector, $tag ) !== 0 ) {
     641            if (strpos($actual_selector, $tag) !== 0) {
    603642                return false;
    604643            }
    605644
    606645            // Parse attribute condition.
    607             if ( preg_match( '/^([a-z-]+)([\^\$\*]?)="([^"]+)"$/i', $attr, $attr_matches ) ) {
     646            if (preg_match('/^([a-z-]+)([\^\$\*]?)="([^"]+)"$/i', $attr, $attr_matches)) {
    608647                // We can't check actual attributes from CSS selector alone,.
    609648                // but we can match against event params if provided separately.
     
    614653
    615654        // Tag selector with classes: a.phone-link, button.cta.
    616         if ( preg_match( '/^([a-z]+)(\.[\w.-]+)?$/i', $pattern ) ) {
    617             $pattern_parts = explode( '.', $pattern );
     655        if (preg_match('/^([a-z]+)(\.[\w.-]+)?$/i', $pattern)) {
     656            $pattern_parts = explode('.', $pattern);
    618657            $pattern_tag   = $pattern_parts[0];
    619658
    620659            // Check tag
    621             if ( strpos( $actual_selector, $pattern_tag ) !== 0 ) {
     660            if (strpos($actual_selector, $pattern_tag) !== 0) {
    622661                return false;
    623662            }
    624663
    625664            // Check classes if present.
    626             $pattern_parts_count = count( $pattern_parts );
    627             for ( $i = 1; $i < $pattern_parts_count; $i++ ) {
    628                 if ( strpos( $actual_selector, '.' . $pattern_parts[ $i ] ) === false ) {
     665            $pattern_parts_count = count($pattern_parts);
     666            for ($i = 1; $i < $pattern_parts_count; $i++) {
     667                if (strpos($actual_selector, '.' . $pattern_parts[$i]) === false) {
    629668                    return false;
    630669                }
     
    634673
    635674        // Fallback: simple contains matching (backwards compatibility).
    636         return strpos( $actual_selector, $pattern ) !== false;
     675        return strpos($actual_selector, $pattern) !== false;
    637676    }
    638677
     
    644683     * @return bool True if all conditions met.
    645684     */
    646     private function evaluate_conditions( $goal, $event_params ) {
     685    private function evaluate_conditions($goal, $event_params)
     686    {
    647687        // No conditions = always match.
    648         if ( empty( $goal->conditions ) || ! is_array( $goal->conditions ) ) {
     688        if (empty($goal->conditions) || ! is_array($goal->conditions)) {
    649689            return true;
    650690        }
    651691
    652         $match_logic = isset( $goal->match_logic ) && $goal->match_logic === 'any' ? 'any' : 'all';
    653 
    654         foreach ( $goal->conditions as $condition ) {
    655             $param_key = isset( $condition['param'] ) ? $condition['param'] : '';
    656             $operator  = isset( $condition['operator'] ) ? $condition['operator'] : 'equals';
    657             $value     = isset( $condition['value'] ) ? $condition['value'] : '';
     692        $match_logic = isset($goal->match_logic) && $goal->match_logic === 'any' ? 'any' : 'all';
     693
     694        foreach ($goal->conditions as $condition) {
     695            $param_key = isset($condition['param']) ? $condition['param'] : '';
     696            $operator  = isset($condition['operator']) ? $condition['operator'] : 'equals';
     697            $value     = isset($condition['value']) ? $condition['value'] : '';
    658698
    659699            // Get actual value from event params.
    660             $actual_value = isset( $event_params[ $param_key ] ) ? $event_params[ $param_key ] : null;
     700            $actual_value = isset($event_params[$param_key]) ? $event_params[$param_key] : null;
    661701
    662702            // Evaluate condition.
    663             $result = $this->evaluate_condition_operator( $actual_value, $operator, $value );
    664 
    665             if ( $match_logic === 'any' && $result ) {
     703            $result = $this->evaluate_condition_operator($actual_value, $operator, $value);
     704
     705            if ($match_logic === 'any' && $result) {
    666706                return true; // At least one condition passed.
    667707            }
    668708
    669             if ( $match_logic === 'all' && ! $result ) {
     709            if ($match_logic === 'all' && ! $result) {
    670710                return false; // All conditions must pass.
    671711            }
     
    695735     * @return bool True if condition is satisfied.
    696736     */
    697     private function evaluate_condition_operator( $actual_value, $operator, $expected_value ) {
    698         switch ( $operator ) {
     737    private function evaluate_condition_operator($actual_value, $operator, $expected_value)
     738    {
     739        switch ($operator) {
    699740            case 'equals':
    700741                // Use string comparison for consistency with JS strict ===.
     
    720761
    721762            case 'contains':
    722                 return strpos( (string) $actual_value, (string) $expected_value ) !== false;
     763                return strpos((string) $actual_value, (string) $expected_value) !== false;
    723764
    724765            case 'not_contains':
    725                 return strpos( (string) $actual_value, (string) $expected_value ) === false;
     766                return strpos((string) $actual_value, (string) $expected_value) === false;
    726767
    727768            case 'starts_with':
    728                 return strpos( (string) $actual_value, (string) $expected_value ) === 0;
     769                return strpos((string) $actual_value, (string) $expected_value) === 0;
    729770
    730771            case 'ends_with':
    731                 $expected_len = strlen( (string) $expected_value );
    732                 return $expected_len > 0 && substr( (string) $actual_value, -$expected_len ) === (string) $expected_value;
     772                $expected_len = strlen((string) $expected_value);
     773                return $expected_len > 0 && substr((string) $actual_value, -$expected_len) === (string) $expected_value;
    733774
    734775            case 'matches_regex':
     
    736777                $pattern = (string) $expected_value;
    737778                // Auto-add delimiters if missing (JS sends bare patterns like "^foo.*$").
    738                 if ( ! empty( $pattern ) && $pattern[0] !== '/' && $pattern[0] !== '#' && $pattern[0] !== '~' ) {
    739                     $pattern = '/' . str_replace( '/', '\\/', $pattern ) . '/';
     779                if (! empty($pattern) && $pattern[0] !== '/' && $pattern[0] !== '#' && $pattern[0] !== '~') {
     780                    $pattern = '/' . str_replace('/', '\\/', $pattern) . '/';
    740781                }
    741782                // Suppress warnings for invalid regex.
    742                 return @preg_match( $pattern, (string) $actual_value ) === 1;
     783                return @preg_match($pattern, (string) $actual_value) === 1;
    743784
    744785            default:
     
    755796                 * @param mixed     $expected_value Expected value from condition.
    756797                 */
    757                 $result = apply_filters( 'tracksure_goal_custom_operator', null, $operator, $actual_value, $expected_value );
    758                 if ( $result !== null ) {
     798                $result = apply_filters('tracksure_goal_custom_operator', null, $operator, $actual_value, $expected_value);
     799                if ($result !== null) {
    759800                    return $result;
    760801                }
     
    779820     * @return void
    780821     */
    781     private function trigger_conversion( $event_id, $goal, $event_data, $session ) {
     822    private function trigger_conversion($event_id, $goal, $event_data, $session)
     823    {
    782824        global $wpdb;
    783825
     
    788830        // Prevents duplicate conversions from browser + server tracking!
    789831
    790         $existing_conversion = $this->db->get_conversion_by_event_and_goal( $event_id, $goal->goal_id );
    791 
    792         if ( $existing_conversion ) {
    793             if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
     832        $existing_conversion = $this->db->get_conversion_by_event_and_goal($event_id, $goal->goal_id);
     833
     834        if ($existing_conversion) {
     835            if (defined('WP_DEBUG') && WP_DEBUG) {
    794836                error_log(
    795837                    '[TrackSure] Goal Evaluator: Duplicate conversion prevented - event_id=' .
     
    802844        // Extract conversion value based on value_type.
    803845        $conversion_value = 0;
    804         $value_type       = isset( $goal->value_type ) ? $goal->value_type : 'none';
    805 
    806         switch ( $value_type ) {
     846        $value_type       = isset($goal->value_type) ? $goal->value_type : 'none';
     847
     848        switch ($value_type) {
    807849            case 'fixed':
    808850                // Use fixed_value from goal definition.
    809                 $conversion_value = isset( $goal->fixed_value ) ? (float) $goal->fixed_value : 0;
     851                $conversion_value = isset($goal->fixed_value) ? (float) $goal->fixed_value : 0;
    810852                break;
    811853
    812854            case 'dynamic':
    813855                // Extract from event data (ecommerce, form, etc.).
    814                 if ( isset( $event_data['value'] ) ) {
     856                if (isset($event_data['value'])) {
    815857                    $conversion_value = (float) $event_data['value'];
    816                 } elseif ( isset( $event_data['order_total'] ) ) {
     858                } elseif (isset($event_data['order_total'])) {
    817859                    $conversion_value = (float) $event_data['order_total'];
    818                 } elseif ( isset( $event_data['conversion_value'] ) ) {
     860                } elseif (isset($event_data['conversion_value'])) {
    819861                    $conversion_value = (float) $event_data['conversion_value'];
    820862                }
     
    845887            'goal_id'          => $goal->goal_id,
    846888            'conversion_value' => $conversion_value,
    847             'currency'         => isset( $event_data['currency'] ) ? $event_data['currency'] : 'USD',
    848             'converted_at'     => current_time( 'mysql', 1 ),
     889            'currency'         => isset($event_data['currency']) ? $event_data['currency'] : 'USD',
     890            'converted_at'     => current_time('mysql', 1),
    849891        );
    850892
     
    861903         * @param array  $session         Session data.
    862904         */
    863         $conversion_data = apply_filters( 'tracksure_goal_conversion_data', $conversion_data, $goal, $event_data, $session );
     905        $conversion_data = apply_filters('tracksure_goal_conversion_data', $conversion_data, $goal, $event_data, $session);
    864906
    865907        // Use Conversion Recorder for the single source of truth.
     
    867909        $conversion_id = 0;
    868910
    869         if ( class_exists( 'TrackSure_Conversion_Recorder' ) ) {
     911        if (class_exists('TrackSure_Conversion_Recorder')) {
    870912            $conversion_recorder = TrackSure_Conversion_Recorder::get_instance();
    871             $conversion_id       = $conversion_recorder->record_conversion( $conversion_data );
    872 
    873             if ( $conversion_id && defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    874                 error_log( '[TrackSure] Goal Evaluator: Conversion + attribution recorded for goal conversion ' . $conversion_id );
     913            $conversion_id       = $conversion_recorder->record_conversion($conversion_data);
     914
     915            if ($conversion_id && defined('WP_DEBUG') && WP_DEBUG) {
     916                error_log('[TrackSure] Goal Evaluator: Conversion + attribution recorded for goal conversion ' . $conversion_id);
    875917            }
    876918        }
     
    886928         * @param array  $session Session data.
    887929         */
    888         do_action( 'tracksure_goal_conversion', $conversion_id, $goal, $event_id, $session );
     930        do_action('tracksure_goal_conversion', $conversion_id, $goal, $event_id, $session);
    889931    }
    890932
     
    903945     * @return void
    904946     */
    905     public function clear_cache(): void {
     947    public function clear_cache(): void
     948    {
    906949        $this->active_goals   = null;
    907950        $this->goals_by_event = null;
    908         delete_transient( 'tracksure_active_goals_server' );
     951        delete_transient('tracksure_active_goals_server');
    909952    }
    910953}
  • tracksure/trunk/includes/core/tracking/class-tracksure-tracker-assets.php

    r3472561 r3473414  
    2020
    2121// Exit if accessed directly.
    22 if ( ! defined( 'ABSPATH' ) ) {
     22if (! defined('ABSPATH')) {
    2323    exit;
    2424}
     
    2727 * Tracker assets class.
    2828 */
    29 class TrackSure_Tracker_Assets {
     29class TrackSure_Tracker_Assets
     30{
    3031
    3132
     
    4647     * @return TrackSure_Tracker_Assets
    4748     */
    48     public static function get_instance() {
    49         if ( null === self::$instance ) {
     49    public static function get_instance()
     50    {
     51        if (null === self::$instance) {
    5052            self::$instance = new self();
    5153        }
     
    5658     * Constructor.
    5759     */
    58     private function __construct() {
    59         add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_tracking_script' ) );
     60    private function __construct()
     61    {
     62        add_action('wp_enqueue_scripts', array($this, 'enqueue_tracking_script'));
    6063    }
    6164
     
    6366     * Enqueue tracking script.
    6467     */
    65     public function enqueue_tracking_script() {
     68    public function enqueue_tracking_script()
     69    {
    6670        // Don't track if user opted out.
    67         if ( ! $this->should_enqueue() ) {
     71        if (! $this->should_enqueue()) {
    6872            return;
    6973        }
    7074
    71         // 1. Enqueue currency handler (no dependencies - pure utility).
    72         wp_enqueue_script(
    73             'ts-currency',
    74             TRACKSURE_PLUGIN_URL . 'assets/js/ts-currency.js',
    75             array(),
    76             TRACKSURE_VERSION,
    77             true
    78         );
    79 
    80         // 2. Enqueue goal constants (shared constants for JS/React/PHP).
    81         wp_enqueue_script(
    82             'ts-goal-constants',
    83             TRACKSURE_PLUGIN_URL . 'admin/tracksure-goal-constants.js',
    84             array(),
    85             TRACKSURE_VERSION,
    86             true
    87         );
    88 
    89         // 3. Enqueue main tracking script (neutral name avoids ad-blocker keyword matching).
     75        // 1. Enqueue main tracking script (neutral name avoids ad-blocker keyword matching).
    9076        // Uses 'defer' strategy (WP 6.3+) so the script doesn't block HTML parsing.
    9177        // Falls back to footer loading on older WP versions.
     
    10995        );
    11096
    111         // 4. Enqueue Universal MiniCart tracking (depends on ts-web + ts-currency).
    112         wp_enqueue_script(
    113             'ts-minicart',
    114             TRACKSURE_PLUGIN_URL . 'assets/js/ts-minicart.js',
    115             array( 'ts-web', 'ts-currency' ),
    116             TRACKSURE_VERSION,
    117             true
    118         );
    119 
    120         // 5. Enqueue consent change listeners (depends on ts-web for config).
     97        // 2. Enqueue currency handler + minicart only when ecommerce is active.
     98        // No need to load 33 KB of JS on non-ecommerce sites.
     99        if ($this->is_ecommerce_active()) {
     100            wp_enqueue_script(
     101                'ts-currency',
     102                TRACKSURE_PLUGIN_URL . 'assets/js/ts-currency.js',
     103                array(),
     104                TRACKSURE_VERSION,
     105                array(
     106                    'strategy'  => 'defer',
     107                    'in_footer' => true,
     108                )
     109            );
     110
     111            wp_enqueue_script(
     112                'ts-minicart',
     113                TRACKSURE_PLUGIN_URL . 'assets/js/ts-minicart.js',
     114                array('ts-web', 'ts-currency'),
     115                TRACKSURE_VERSION,
     116                array(
     117                    'strategy'  => 'defer',
     118                    'in_footer' => true,
     119                )
     120            );
     121        }
     122
     123        // 3. Enqueue consent change listeners (depends on ts-web for config).
    121124        wp_enqueue_script(
    122125            'ts-consent-listeners',
    123126            TRACKSURE_PLUGIN_URL . 'assets/js/consent-listeners.js',
    124             array( 'ts-web' ),
     127            array('ts-web'),
    125128            TRACKSURE_VERSION,
    126             true
    127         );
    128 
    129         // 6. Enqueue goals tracking script (depends on constants + main tracker).
    130         wp_enqueue_script(
    131             'ts-goals',
    132             TRACKSURE_PLUGIN_URL . 'admin/tracking-goals.js',
    133             array( 'ts-goal-constants', 'ts-web' ), // Depends on both
    134             TRACKSURE_VERSION,
    135             true
    136         );
    137 
    138         // Pass active goals to script.
    139         wp_localize_script(
    140             'ts-goals',
    141             'tracksure_goals',
    142             $this->get_active_goals()
    143         );
     129            array(
     130                'strategy'  => 'defer',
     131                'in_footer' => true,
     132            )
     133        );
     134
     135        // 4. Enqueue goals tracking only when active goals exist.
     136        $active_goals = $this->get_active_goals();
     137        if (! empty($active_goals)) {
     138            wp_enqueue_script(
     139                'ts-goal-constants',
     140                TRACKSURE_PLUGIN_URL . 'admin/tracksure-goal-constants.js',
     141                array(),
     142                TRACKSURE_VERSION,
     143                array(
     144                    'strategy'  => 'defer',
     145                    'in_footer' => true,
     146                )
     147            );
     148
     149            wp_enqueue_script(
     150                'ts-goals',
     151                TRACKSURE_PLUGIN_URL . 'admin/tracking-goals.js',
     152                array('ts-goal-constants', 'ts-web'),
     153                TRACKSURE_VERSION,
     154                array(
     155                    'strategy'  => 'defer',
     156                    'in_footer' => true,
     157                )
     158            );
     159
     160            wp_localize_script(
     161                'ts-goals',
     162                'tracksure_goals',
     163                $active_goals
     164            );
     165        }
    144166    }
    145167
     
    149171     * @return array
    150172     */
    151     private function get_active_goals() {
     173    private function get_active_goals()
     174    {
    152175        global $wpdb;
    153176
     
    155178        // Check cache first (5 minute TTL).
    156179        $cache_key = 'tracksure_active_goals';
    157         $cached    = get_transient( $cache_key );
    158 
    159         if ( $cached !== false ) {
     180        $cached    = get_transient($cache_key);
     181
     182        if ($cached !== false) {
    160183            return $cached;
    161184        }
     
    182205        );
    183206
    184         if ( $wpdb->last_error ) {
    185             if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    186 
    187                 error_log( '[TrackSure] Failed to fetch active goals: ' . $wpdb->last_error );
     207        if ($wpdb->last_error) {
     208            if (defined('WP_DEBUG') && WP_DEBUG) {
     209
     210                error_log('[TrackSure] Failed to fetch active goals: ' . $wpdb->last_error);
    188211            }
    189212            return array();
     
    192215        // Parse JSON fields.
    193216        $goals = array_map(
    194             function ( $goal ) {
    195                 if ( isset( $goal['conditions'] ) && is_string( $goal['conditions'] ) ) {
    196                     $decoded_conditions = json_decode( $goal['conditions'], true );
    197                     $goal['conditions'] = ! empty( $decoded_conditions ) ? $decoded_conditions : array();
     217            function ($goal) {
     218                if (isset($goal['conditions']) && is_string($goal['conditions'])) {
     219                    $decoded_conditions = json_decode($goal['conditions'], true);
     220                    $goal['conditions'] = ! empty($decoded_conditions) ? $decoded_conditions : array();
    198221                }
    199                 if ( isset( $goal['match_logic'] ) && is_string( $goal['match_logic'] ) ) {
    200                     $goal['match_logic'] = json_decode( $goal['match_logic'], true );
     222                if (isset($goal['match_logic']) && is_string($goal['match_logic'])) {
     223                    $goal['match_logic'] = json_decode($goal['match_logic'], true);
    201224                }
    202225                return $goal;
     
    206229
    207230        // Cache for 5 minutes.
    208         set_transient( $cache_key, $goals, 5 * MINUTE_IN_SECONDS );
     231        set_transient($cache_key, $goals, 5 * MINUTE_IN_SECONDS);
    209232
    210233        return $goals;
     
    212235
    213236    /**
     237     * Check if any supported ecommerce plugin is active.
     238     *
     239     * Prevents loading ~33 KB of minicart + currency JS on non-ecommerce sites.
     240     *
     241     * @return bool
     242     */
     243    private function is_ecommerce_active()
     244    {
     245        return class_exists('WooCommerce') ||
     246            class_exists('Easy_Digital_Downloads') ||
     247            class_exists('SureCart') || defined('SURECART_PLUGIN_FILE') ||
     248            class_exists('FluentCart\\App\\App') ||
     249            class_exists('Cartflows_Loader') || class_exists('FunnelKit_Funnel_Builder_Loader');
     250    }
     251
     252    /**
    214253     * Check if script should be enqueued.
    215254     *
    216255     * @return bool
    217256     */
    218     private function should_enqueue() {
     257    private function should_enqueue()
     258    {
    219259        // Master switch - tracking enabled?
    220         $tracking_enabled = get_option( 'tracksure_tracking_enabled', false );
    221         if ( ! $tracking_enabled ) {
     260        $tracking_enabled = get_option('tracksure_tracking_enabled', false);
     261        if (! $tracking_enabled) {
    222262            return false;
    223263        }
    224264
    225265        // Don't track admins if disabled.
    226         $track_admins = get_option( 'tracksure_track_admins', false );
    227         $is_admin     = current_user_can( 'manage_options' );
    228         if ( ! $track_admins && $is_admin ) {
     266        $track_admins = get_option('tracksure_track_admins', false);
     267        $is_admin     = current_user_can('manage_options');
     268        if (! $track_admins && $is_admin) {
    229269            return false;
    230270        }
    231271
    232272        // Check excluded IPs.
    233         $excluded_ips = get_option( 'tracksure_exclude_ips', '' );
    234         if ( $excluded_ips ) {
    235             $excluded_ips = array_map( 'trim', explode( ',', $excluded_ips ) );
     273        $excluded_ips = get_option('tracksure_exclude_ips', '');
     274        if ($excluded_ips) {
     275            $excluded_ips = array_map('trim', explode(',', $excluded_ips));
    236276            $client_ip    = TrackSure_Utilities::get_client_ip();
    237277
    238             if ( in_array( $client_ip, $excluded_ips, true ) ) {
     278            if (in_array($client_ip, $excluded_ips, true)) {
    239279                return false;
    240280            }
     
    248288         * @param bool $should_enqueue Whether to enqueue script.
    249289         */
    250         return apply_filters( 'tracksure_should_enqueue_tracker', true );
     290        return apply_filters('tracksure_should_enqueue_tracker', true);
    251291    }
    252292
     
    256296     * @return bool
    257297     */
    258     private function is_auto_track_enabled() {
     298    private function is_auto_track_enabled()
     299    {
    259300        /**
    260301         * Filter whether auto-tracking is enabled.
     
    264305         * @param bool $auto_track Whether auto-tracking is enabled.
    265306         */
    266         return apply_filters( 'tracksure_auto_track', true );
     307        return apply_filters('tracksure_auto_track', true);
    267308    }
    268309}
  • tracksure/trunk/readme.txt

    r3472561 r3473414  
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable tag: 1.0.0
     7Stable tag: 1.0.1
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    822822== Changelog ==
    823823
     824= 1.0.1 - 2026-03-03 =
     825* Fix: Goal cards now correctly display performance data (conversions, revenue, conversion rate) — batch performance cache was returning data without the expected wrapper key
     826* Fix: 3 broken goal templates (scroll_depth, time_on_page, video_complete) now fire correctly
     827* Fix: Goal condition evaluator type coercion — wp_localize_script sends numbers as strings, causing operator comparisons to fail
     828* Fix: Ecommerce platform detection now recognizes SureCart and FunnelKit
     829* Improvement: All 6 frontend scripts now use defer loading strategy for better page speed
     830* Improvement: Conditional script loading — minicart/currency scripts only load when ecommerce is active, goal scripts only when goals exist
     831* Improvement: Added loading skeleton placeholders on goal cards while performance data loads
     832* Improvement: PHP goal evaluator uses secondary trigger_type index for faster lookups
     833* Improvement: Reduced goal cache TTL from 5 minutes to 1 minute for fresher dashboard data
     834* Improvement: Added auto-refresh (5 min) for performance queries
     835
    824836= 1.0.0 - 2026-02-05 =
    825837- Initial release
     
    835847== Upgrade Notice ==
    836848
     849= 1.0.1 =
     850Bug fix release: Fixes goal performance data not displaying on cards, broken goal templates, and type coercion issues. Adds deferred script loading for better page speed.
     851
    837852= 1.0.0 =
    838853Initial release of TrackSure - Complete first-party analytics and attribution platform for WordPress.
  • tracksure/trunk/tracksure.php

    r3472561 r3473414  
    55 * Plugin URI: https://tracksure.cloud
    66 * Description: Server-side tracking, analytics and pixel manager for WordPress. Boost ROAS with Conversion API (CAPI), recover lost conversions from ad blockers, and run first-party analytics.
    7  * Version: 1.0.0
     7 * Version: 1.0.1
    88 * Author: TrackSure Team
    99 * Author URI: https://profiles.wordpress.org/tracksure/
     
    1919
    2020// Exit if accessed directly.
    21 if ( ! defined( 'ABSPATH' ) ) {
     21if (! defined('ABSPATH')) {
    2222    exit;
    2323}
    2424
    2525// Define plugin constants.
    26 define( 'TRACKSURE_VERSION', '1.0.0' );
    27 define( 'TRACKSURE_DB_VERSION', '1.0.0' );
    28 define( 'TRACKSURE_PLUGIN_FILE', __FILE__ );
    29 define( 'TRACKSURE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    30 define( 'TRACKSURE_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
    31 define( 'TRACKSURE_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
     26define('TRACKSURE_VERSION', '1.0.1');
     27define('TRACKSURE_DB_VERSION', '1.0.0');
     28define('TRACKSURE_PLUGIN_FILE', __FILE__);
     29define('TRACKSURE_PLUGIN_DIR', plugin_dir_path(__FILE__));
     30define('TRACKSURE_PLUGIN_URL', plugin_dir_url(__FILE__));
     31define('TRACKSURE_PLUGIN_BASENAME', plugin_basename(__FILE__));
    3232
    3333// Core paths (bundled inside free plugin).
    34 define( 'TRACKSURE_CORE_DIR', TRACKSURE_PLUGIN_DIR . 'includes/core/' );
    35 define( 'TRACKSURE_CORE_URL', TRACKSURE_PLUGIN_URL . 'includes/core/' );
    36 define( 'TRACKSURE_FREE_DIR', TRACKSURE_PLUGIN_DIR . 'includes/free/' );
    37 define( 'TRACKSURE_REGISTRY_DIR', TRACKSURE_PLUGIN_DIR . 'registry/' );
    38 define( 'TRACKSURE_ADMIN_DIR', TRACKSURE_PLUGIN_DIR . 'admin/' );
     34define('TRACKSURE_CORE_DIR', TRACKSURE_PLUGIN_DIR . 'includes/core/');
     35define('TRACKSURE_CORE_URL', TRACKSURE_PLUGIN_URL . 'includes/core/');
     36define('TRACKSURE_FREE_DIR', TRACKSURE_PLUGIN_DIR . 'includes/free/');
     37define('TRACKSURE_REGISTRY_DIR', TRACKSURE_PLUGIN_DIR . 'registry/');
     38define('TRACKSURE_ADMIN_DIR', TRACKSURE_PLUGIN_DIR . 'admin/');
    3939
    4040/**
     
    4646 * @since 1.0.0
    4747 */
    48 final class TrackSure {
     48final class TrackSure
     49{
    4950
    5051
     
    8081     * @return TrackSure
    8182     */
    82     public static function instance() {
    83         if ( is_null( self::$instance ) ) {
     83    public static function instance()
     84    {
     85        if (is_null(self::$instance)) {
    8486            self::$instance = new self();
    8587        }
     
    9294     * @since 1.0.0
    9395     */
    94     private function __construct() {
    95         add_action( 'plugins_loaded', array( $this, 'init' ), 10 );
     96    private function __construct()
     97    {
     98        add_action('plugins_loaded', array($this, 'init'), 10);
    9699    }
    97100
     
    102105     * @return void
    103106     */
    104     public function init() {
     107    public function init()
     108    {
    105109        // 1. Load Core engine (bundled inside).
    106         if ( ! file_exists( TRACKSURE_CORE_DIR . 'class-tracksure-core.php' ) ) {
     110        if (! file_exists(TRACKSURE_CORE_DIR . 'class-tracksure-core.php')) {
    107111            add_action(
    108112                'admin_notices',
     
    110114                    printf(
    111115                        '<div class="notice notice-error"><p>%s</p></div>',
    112                         esc_html__( 'TrackSure Error: Core engine file not found. Please reinstall the plugin.', 'tracksure' )
     116                        esc_html__('TrackSure Error: Core engine file not found. Please reinstall the plugin.', 'tracksure')
    113117                    );
    114118                }
     
    121125
    122126        // 2. Load Free module pack.
    123         if ( ! file_exists( TRACKSURE_FREE_DIR . 'class-tracksure-free.php' ) ) {
     127        if (! file_exists(TRACKSURE_FREE_DIR . 'class-tracksure-free.php')) {
    124128            add_action(
    125129                'admin_notices',
     
    127131                    printf(
    128132                        '<div class="notice notice-error"><p>%s</p></div>',
    129                         esc_html__( 'TrackSure Error: Free module file not found. Please reinstall the plugin.', 'tracksure' )
     133                        esc_html__('TrackSure Error: Free module file not found. Please reinstall the plugin.', 'tracksure')
    130134                    );
    131135                }
     
    135139
    136140        require_once TRACKSURE_FREE_DIR . 'class-tracksure-free.php';
    137         $this->free = new TrackSure_Free( $this->core );
     141        $this->free = new TrackSure_Free($this->core);
    138142
    139143        // 3. Fire extension hook (Pro/3rd-party can register features).
    140         do_action( 'tracksure_loaded', $this->core );
     144        do_action('tracksure_loaded', $this->core);
    141145    }
    142146
     
    147151     * @return void
    148152     */
    149     public static function activate() {
     153    public static function activate()
     154    {
    150155        // Load required core files.
    151156        require_once TRACKSURE_CORE_DIR . 'class-tracksure-db.php';
     
    158163        // Set flag to flush permalinks on next admin load.
    159164        // Can't flush here because TrackSure_Core isn't loaded yet.
    160         update_option( 'tracksure_needs_permalink_flush', '1' );
     165        update_option('tracksure_needs_permalink_flush', '1');
    161166
    162167        // Set flag to redirect to settings page on first admin load.
    163         set_transient( 'tracksure_activation_redirect', true, 60 );
     168        set_transient('tracksure_activation_redirect', true, 60);
    164169
    165170        // Clear all scheduled cron jobs to prevent duplicates.
    166         wp_clear_scheduled_hook( 'tracksure_aggregate_hourly' );
    167         wp_clear_scheduled_hook( 'tracksure_aggregate_daily' );
    168         wp_clear_scheduled_hook( 'tracksure_delivery_worker' );
    169         wp_clear_scheduled_hook( 'tracksure_cleanup_data' );
    170         wp_clear_scheduled_hook( 'tracksure_cleanup_logs' );
     171        wp_clear_scheduled_hook('tracksure_aggregate_hourly');
     172        wp_clear_scheduled_hook('tracksure_aggregate_daily');
     173        wp_clear_scheduled_hook('tracksure_delivery_worker');
     174        wp_clear_scheduled_hook('tracksure_cleanup_data');
     175        wp_clear_scheduled_hook('tracksure_cleanup_logs');
    171176
    172177        // Clear Action Scheduler delivery tasks (prevents duplicates on reactivation).
    173         wp_clear_scheduled_hook( 'tracksure_deliver_events' );
    174         if ( function_exists( 'as_unschedule_all_actions' ) ) {
    175             as_unschedule_all_actions( 'tracksure_deliver_events', array(), 'tracksure' );
     178        wp_clear_scheduled_hook('tracksure_deliver_events');
     179        if (function_exists('as_unschedule_all_actions')) {
     180            as_unschedule_all_actions('tracksure_deliver_events', array(), 'tracksure');
    176181        }
    177182
     
    186191     * @return void
    187192     */
    188     public static function deactivate() {
     193    public static function deactivate()
     194    {
    189195        // Clear all WP-Cron scheduled hooks.
    190         wp_clear_scheduled_hook( 'tracksure_aggregate_hourly' );
    191         wp_clear_scheduled_hook( 'tracksure_aggregate_daily' );
    192         wp_clear_scheduled_hook( 'tracksure_delivery_worker' );
    193         wp_clear_scheduled_hook( 'tracksure_cleanup_data' );
    194         wp_clear_scheduled_hook( 'tracksure_cleanup_logs' );
     196        wp_clear_scheduled_hook('tracksure_aggregate_hourly');
     197        wp_clear_scheduled_hook('tracksure_aggregate_daily');
     198        wp_clear_scheduled_hook('tracksure_delivery_worker');
     199        wp_clear_scheduled_hook('tracksure_cleanup_data');
     200        wp_clear_scheduled_hook('tracksure_cleanup_logs');
    195201
    196202        // Clean up Action Scheduler tasks (if AS is available).
     
    213219 * @return TrackSure
    214220 */
    215 function tracksure() {
     221function tracksure()
     222{
    216223    return TrackSure::instance();
    217224}
     
    226233 * @return void
    227234 */
    228 function tracksure_activation_redirect() {
     235function tracksure_activation_redirect()
     236{
    229237    // Check if we need to redirect.
    230     if ( ! get_transient( 'tracksure_activation_redirect' ) ) {
     238    if (! get_transient('tracksure_activation_redirect')) {
    231239        return;
    232240    }
    233241
    234242    // Delete the transient so this only runs once.
    235     delete_transient( 'tracksure_activation_redirect' );
     243    delete_transient('tracksure_activation_redirect');
    236244
    237245    // Don't redirect during bulk activation (activating multiple plugins at once).
    238246    // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only check, no data processed.
    239     if ( isset( $_GET['activate-multi'] ) ) {
     247    if (isset($_GET['activate-multi'])) {
    240248        return;
    241249    }
    242250
    243251    // Don't redirect during AJAX, WP-CLI, or REST API requests.
    244     if ( wp_doing_ajax() || ( defined( 'WP_CLI' ) && constant( 'WP_CLI' ) ) || defined( 'REST_REQUEST' ) ) {
     252    if (wp_doing_ajax() || (defined('WP_CLI') && constant('WP_CLI')) || defined('REST_REQUEST')) {
    245253        return;
    246254    }
    247255
    248256    // Only redirect if user has permission to access TrackSure.
    249     if ( ! current_user_can( 'manage_options' ) ) {
     257    if (! current_user_can('manage_options')) {
    250258        return;
    251259    }
    252260
    253261    // Redirect to TrackSure settings page (React app #/settings route).
    254     wp_safe_redirect( admin_url( 'admin.php?page=tracksure#/settings' ) );
     262    wp_safe_redirect(admin_url('admin.php?page=tracksure#/settings'));
    255263    exit;
    256264}
    257265
    258266// Register activation/deactivation hooks BEFORE initializing plugin.
    259 register_activation_hook( TRACKSURE_PLUGIN_FILE, array( 'TrackSure', 'activate' ) );
    260 register_deactivation_hook( TRACKSURE_PLUGIN_FILE, array( 'TrackSure', 'deactivate' ) );
     267register_activation_hook(TRACKSURE_PLUGIN_FILE, array('TrackSure', 'activate'));
     268register_deactivation_hook(TRACKSURE_PLUGIN_FILE, array('TrackSure', 'deactivate'));
    261269
    262270// Redirect to settings page after first activation.
    263 add_action( 'admin_init', 'tracksure_activation_redirect' );
     271add_action('admin_init', 'tracksure_activation_redirect');
    264272
    265273// Initialize plugin.
Note: See TracChangeset for help on using the changeset viewer.