@archerjessop/utilities 3.6.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,53 +1,56 @@
1
- # @archerjessop/utilities
2
-
3
- Comprehensive set of DOM manipulation, data extraction utilities, and various calculations (financial and otherwise) for our web applications.
4
-
5
- ## Updating the package
6
-
7
- Make your changes then:
8
-
9
- ```bash
10
- npm run build
11
- npm test
12
- ```
13
-
14
- and then, depending on the changes:
15
-
16
- For bug fixes (backward compatible):
17
-
18
- ```bash
19
- npm run release:patch
20
- ```
21
- bumps 1.0.0 → 1.0.1
22
-
23
- For new features (still backward compatible):
24
- ```bash
25
- npm run release:minor
26
- ```
27
- bumps 1.0.0 → 1.1.0
28
-
29
- For breaking changes:
30
- ```bash
31
- npm run release:major
32
- ```
33
- bumps 1.0.0 → 2.0.0
34
-
35
- Each script will:
36
- - Update package.json version
37
- - Commit the version bump + create a git tag
38
- - Push commit + tag to your repo
39
- - Publish the new version to npm
40
-
41
- ## Installation
42
-
43
- ```bash
44
- npm install @archerjessop/utilities
45
- ```
46
-
47
- ## Browser Support
48
-
49
- Works in both Node.js and browser environments. In browser environments, functions can extract data directly from the DOM when no text parameter is provided.
50
-
51
- ## License
52
-
1
+ # @archerjessop/utilities
2
+
3
+ Comprehensive set of DOM manipulation, data extraction utilities, and various calculations (financial and otherwise) for our web applications.
4
+
5
+ ## Updating the package
6
+
7
+ Make your changes then:
8
+
9
+ ```bash
10
+ npm run build
11
+ npm test
12
+ git commit
13
+ git push origin
14
+ ```
15
+
16
+ and then, depending on the changes:
17
+
18
+ For bug fixes (backward compatible):
19
+
20
+ ```bash
21
+ bash deploy.sh patch
22
+ ```
23
+ bumps 1.0.0 1.0.1
24
+
25
+ For new features (still backward compatible):
26
+ ```bash
27
+ bash deploy.sh minor
28
+ ```
29
+ bumps 1.0.0 → 1.1.0
30
+
31
+ For breaking changes:
32
+ ```bash
33
+ bash deploy.sh major
34
+ ```
35
+ bumps 1.0.0 → 2.0.0
36
+
37
+ deploy.sh script will:
38
+ - Run any pre-build scripts/processes
39
+ - Update package.json version
40
+ - Commit the version bump + create a git tag
41
+ - Push commit + tag to your repo
42
+ - Publish the new version to npm
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ npm install @archerjessop/utilities
48
+ ```
49
+
50
+ ## Browser Support
51
+
52
+ Works in both Node.js and browser environments. In browser environments, functions can extract data directly from the DOM when no text parameter is provided.
53
+
54
+ ## License
55
+
53
56
  MIT
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{calculateAppreciatedValue,calculateAssignmentFee,calculateBalloonBalance,calculateCOCR30,calculateCOCRAtPercent,calculateCashFlow,calculateCashFlowYield,calculateCashOutAfterRefi,calculateDscrPayment,calculateNOIByType,calculateNetToBuyer,calculatePMT,calculatePriceForCOCR,calculateSfPayment}from"./financial/calculations.js";export{formatCurrency,formatPercentage,formatPriceValue}from"./financial/formatters.js";export{extractBedrooms,extractPhoneNumber}from"./data/extractors.js";export{calculateDOM}from"./date/utilities.js";export{calculateCursorPosition,extractNumericValue,filterNumericInput,formatInputDisplay,formatLiveInput,formatLiveNumber,parseNumericInput}from"./formatting/financial-formatting.js";export{CALCULATION_TOLERANCE,DEFAULT_CAP_RATE,DEFAULT_DOWN_PAYMENT,DEFAULT_DSCR_PERCENTAGE,DSCR_AMORTIZATION,DSCR_INTEREST_RATE,FINANCIAL_CONSTANTS,MAX_ITERATIONS,SELLER_FI_AMORTIZATION,SELLER_FI_CARRY,SELLER_FI_DOWN_PAYMENT,SELLER_FI_INTEREST_RATE}from"./config/financial.js";export{ASSISTED_LIVING,MULTIFAMILY,PROPERTY_TYPES,PROPERTY_TYPE_CONSTANTS,STR}from"./config/property-types.js";export{ASSIGNMENT_FEE_PERCENTAGE,BUSINESS_CONSTANTS,BUYER_AGENT_COMMISSION,CLOSING_COSTS_PERCENTAGE,CONSERVATIVE_COCR15_PRICE_MULTIPLIER,FINANCING_FEE_PERCENTAGE,MAX_COCR15_PRICE_MULTIPLIER,MINIMUM_COCR15_PRICE,NET_TO_BUYER_PERCENTAGE,SELLER_AGENT_COMMISSION}from"./config/business.js";export{injectDashboardStyles,injectFooterStyles,styles}from"./styles/browser.js";
1
+ export{calculateAppreciatedValue,calculateAssignmentFee,calculateBalloonBalance,calculateCOCR30,calculateCOCRAtPercent,calculateCashFlow,calculateCashFlowYield,calculateCashOutAfterRefi,calculateDscrPayment,calculateNOIByType,calculateNetToBuyer,calculatePMT,calculatePriceForCOCR,calculateSfPayment}from"./financial/calculations.js";export{formatCurrency,formatPercentage,formatPriceValue}from"./financial/formatters.js";export{extractBedrooms,extractPhoneNumber}from"./data/extractors.js";export{calculateDOM}from"./date/utilities.js";export{calculateCursorPosition,extractNumericValue,filterNumericInput,formatInputDisplay,formatLiveInput,formatLiveNumber,parseNumericInput}from"./formatting/financial-formatting.js";export{CALCULATION_TOLERANCE,DEFAULT_CAP_RATE,DEFAULT_DOWN_PAYMENT,DEFAULT_DSCR_PERCENTAGE,DSCR_AMORTIZATION,DSCR_INTEREST_RATE,FINANCIAL_CONSTANTS,MAX_ITERATIONS,SELLER_FI_AMORTIZATION,SELLER_FI_CARRY,SELLER_FI_DOWN_PAYMENT,SELLER_FI_INTEREST_RATE}from"./config/financial.js";export{ASSISTED_LIVING,MULTIFAMILY,PROPERTY_TYPES,PROPERTY_TYPE_CONSTANTS,STR}from"./config/property-types.js";export{ASSIGNMENT_FEE_PERCENTAGE,BUSINESS_CONSTANTS,BUYER_AGENT_COMMISSION,CLOSING_COSTS_PERCENTAGE,CONSERVATIVE_COCR15_PRICE_MULTIPLIER,FINANCING_FEE_PERCENTAGE,MAX_COCR15_PRICE_MULTIPLIER,MINIMUM_COCR15_PRICE,NET_TO_BUYER_PERCENTAGE,SELLER_AGENT_COMMISSION}from"./config/business.js";
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@archerjessop/utilities",
3
- "version": "3.6.0",
3
+ "version": "4.0.0",
4
4
  "description": "Shared utilities for ArcherJessop property analysis tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,7 +9,6 @@
9
9
  },
10
10
  "files": [
11
11
  "dist",
12
- "src/styles",
13
12
  "README.md"
14
13
  ],
15
14
  "sideEffects": false,
@@ -17,8 +16,7 @@
17
16
  "node": ">=16"
18
17
  },
19
18
  "scripts": {
20
- "build": "node build-styles.js && rollup -c",
21
- "prebuild": "node build-styles.js",
19
+ "build": "rollup -c",
22
20
  "dev": "rollup -c -w",
23
21
  "test": "vitest run",
24
22
  "test:watch": "vitest",
@@ -1,2 +0,0 @@
1
- const r={variables:"/* Shared CSS custom properties - extracted from your existing styles */\r\n:root {\r\n /* Colors */\r\n --color-primary: #007bff;\r\n --color-primary-hover: #0056b3;\r\n --color-secondary: #6c757d;\r\n --color-success: #28a745;\r\n --color-warning: #ffc107;\r\n --color-danger: #dc3545;\r\n --color-info: #17a2b8;\r\n \r\n /* Backgrounds */\r\n --bg-primary: #ffffff;\r\n --bg-secondary: #f8f9fa;\r\n --bg-light: #ededed;\r\n --bg-dark: #343a40;\r\n \r\n /* Text Colors */\r\n --text-primary: #212529;\r\n --text-secondary: #6c757d;\r\n --text-muted: #495057;\r\n --text-white: #ffffff;\r\n \r\n /* Borders */\r\n --border-color: #ddd;\r\n --border-color-light: #e9ecef;\r\n --border-color-dark: #919090ff;\r\n \r\n /* Spacing */\r\n --spacing-xs: 4px;\r\n --spacing-sm: 8px;\r\n --spacing-md: 12px;\r\n --spacing-lg: 16px;\r\n --spacing-xl: 20px;\r\n --spacing-2xl: 24px;\r\n --spacing-3xl: 32px;\r\n \r\n /* Typography */\r\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\r\n --font-size-xs: 11px;\r\n --font-size-sm: 12px;\r\n --font-size-base: 14px;\r\n --font-size-md: 16px;\r\n --font-size-lg: 18px;\r\n --font-size-xl: 20px;\r\n --font-weight-normal: 400;\r\n --font-weight-medium: 500;\r\n --font-weight-semibold: 600;\r\n --font-weight-bold: 700;\r\n \r\n /* Border Radius */\r\n --border-radius-sm: 4px;\r\n --border-radius-md: 6px;\r\n --border-radius-lg: 8px;\r\n --border-radius-xl: 12px;\r\n \r\n /* Shadows */\r\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\r\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\r\n \r\n /* Z-index */\r\n --z-extension: 999999999;\r\n --z-modal: 1050;\r\n --z-dropdown: 1000;\r\n \r\n /* Transitions */\r\n --transition-fast: 150ms ease;\r\n --transition-base: 250ms ease;\r\n --transition-slow: 350ms ease;\r\n}",footer:"/* LoopNet Extension Footer - Extracted from content.js AS-IS */\r\n.ln-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background: var(--bg-light, #ededed);\r\n border-top: 1px solid var(--border-color-dark, #919090ff);\r\n box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));\r\n z-index: var(--z-extension, 999999999);\r\n padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n font-size: var(--font-size-md, 16px);\r\n color: var(--text-primary, #212529);\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.ln-footer-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n max-width: 1600px;\r\n margin: 0 auto;\r\n gap: var(--spacing-xl, 20px);\r\n}\r\n\r\n.ln-footer-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.ln-footer-right {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-lg, 16px);\r\n flex-shrink: 0;\r\n}\r\n\r\n.ln-metrics-grid {\r\n display: grid;\r\n grid-template-columns: repeat(9, 1fr);\r\n gap: var(--spacing-lg, 16px);\r\n align-items: start;\r\n}\r\n\r\n.ln-metric-column {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-metric {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n min-width: 0;\r\n}\r\n\r\n.ln-metric-label {\r\n font-size: var(--font-size-xs, 11px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n line-height: 1;\r\n}\r\n\r\n.ln-metric-value {\r\n font-weight: var(--font-weight-semibold, 600);\r\n font-size: var(--font-size-md, 16px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 1.2;\r\n}\r\n\r\n.ln-price {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\n.ln-cashflow.negative {\r\n color: var(--color-danger, #dc3545);\r\n}\r\n\r\n.ln-cashflow.positive {\r\n color: var(--color-success, #28a745);\r\n}\r\n\r\n.ln-phone {\r\n color: var(--color-info, #17a2b8);\r\n cursor: pointer;\r\n text-decoration: underline;\r\n}\r\n\r\n.ln-phone:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-property-type-dropdown {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n background: var(--bg-primary, #ffffff);\r\n color: var(--text-primary, #212529);\r\n cursor: pointer;\r\n min-width: 120px;\r\n}\r\n\r\n.ln-property-type-dropdown:focus {\r\n outline: none;\r\n border-color: var(--color-primary, #007bff);\r\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.ln-export-button {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n font-weight: var(--font-weight-medium, 500);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-export-button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.ln-export-icon {\r\n width: 16px;\r\n height: 16px;\r\n fill: currentColor;\r\n}\r\n\r\n.ln-discount-controls {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-discount-input {\r\n width: 60px;\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-sm, 12px);\r\n text-align: center;\r\n}\r\n\r\n.ln-discount-button {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n background: var(--color-secondary, #6c757d);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-xs, 11px);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-discount-button:hover {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-discount-button.active {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n@media (max-width: 1400px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(6, 1fr);\r\n }\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n .ln-footer {\r\n padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);\r\n }\r\n \r\n .ln-footer-container {\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n \r\n .ln-footer-right {\r\n width: 100%;\r\n justify-content: flex-end;\r\n }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metric-value {\r\n font-size: var(--font-size-base, 14px);\r\n }\r\n}",dashboard:"/* Dashboard styles - extracted from existing dashboard CSS AS-IS */\r\n\r\n/* Base dashboard styles */\r\n.dashboard-container {\r\n min-height: 100vh;\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n color: var(--text-primary, #212529);\r\n}\r\n\r\n.header {\r\n background: var(--bg-primary, white);\r\n padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));\r\n}\r\n\r\n.header h1 {\r\n color: var(--color-primary, #007bff);\r\n margin-bottom: var(--spacing-xl, 20px);\r\n}\r\n\r\n.filters {\r\n display: flex;\r\n gap: var(--spacing-lg, 15px);\r\n flex-wrap: wrap;\r\n align-items: end;\r\n}\r\n\r\n.filter-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-xs, 5px);\r\n}\r\n\r\n.filter-group label {\r\n font-size: var(--font-size-sm, 12px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.filter-group input, .filter-group select {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n min-width: 120px;\r\n}\r\n\r\n.filter-group button {\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n cursor: pointer;\r\n}\r\n\r\n.filter-group button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.stats {\r\n display: flex;\r\n gap: var(--spacing-xl, 20px);\r\n margin-top: var(--spacing-xl, 20px);\r\n font-size: var(--font-size-base, 14px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.table-container {\r\n background: var(--bg-primary, white);\r\n border-radius: var(--border-radius-lg, 8px);\r\n box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));\r\n overflow: hidden;\r\n}\r\n\r\ntable {\r\n width: 100%;\r\n border-collapse: collapse;\r\n}\r\n\r\nth, td {\r\n padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);\r\n text-align: left;\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n}\r\n\r\nth {\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-weight: var(--font-weight-semibold, 600);\r\n color: var(--text-muted, #495057);\r\n font-size: var(--font-size-sm, 12px);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\nth a {\r\n color: var(--text-muted, #495057);\r\n text-decoration: none;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-xs, 4px);\r\n}\r\n\r\nth a:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\nth a.sort-active {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\ntr:hover {\r\n background: var(--bg-secondary, #f8f9fa);\r\n}\r\n\r\n.property-link {\r\n color: var(--color-primary, #007bff);\r\n text-decoration: none;\r\n font-weight: var(--font-weight-medium, 500);\r\n}\r\n\r\n.property-link:hover {\r\n text-decoration: underline;\r\n}\r\n\r\n.contract-state {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border-radius: var(--border-radius-xl, 12px);\r\n font-size: var(--font-size-xs, 11px);\r\n font-weight: var(--font-weight-semibold, 600);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.contract-none { \r\n background: var(--border-color-light, #e9ecef); \r\n color: var(--text-muted, #495057); \r\n}\r\n\r\n.contract-loi_sent { \r\n background: #fff3cd; \r\n color: #856404; \r\n}\r\n\r\n.contract-loi_agreed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-loi_rejected { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.contract-contract_signed { \r\n background: #d1ecf1; \r\n color: #0c5460; \r\n}\r\n\r\n.contract-closed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-not_interested { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.date-cell {\r\n font-size: var(--font-size-sm, 13px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.pagination {\r\n display: flex;\r\n justify-content: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-xl, 20px);\r\n padding: var(--spacing-xl, 20px);\r\n}\r\n\r\n.page-link {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n background: var(--bg-primary, white);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n color: var(--text-primary, #212529);\r\n text-decoration: none;\r\n transition: all var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.page-link:hover {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}\r\n\r\n.page-link.active {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}",extension:"/* Shared CSS custom properties - extracted from your existing styles */\r\n:root {\r\n /* Colors */\r\n --color-primary: #007bff;\r\n --color-primary-hover: #0056b3;\r\n --color-secondary: #6c757d;\r\n --color-success: #28a745;\r\n --color-warning: #ffc107;\r\n --color-danger: #dc3545;\r\n --color-info: #17a2b8;\r\n \r\n /* Backgrounds */\r\n --bg-primary: #ffffff;\r\n --bg-secondary: #f8f9fa;\r\n --bg-light: #ededed;\r\n --bg-dark: #343a40;\r\n \r\n /* Text Colors */\r\n --text-primary: #212529;\r\n --text-secondary: #6c757d;\r\n --text-muted: #495057;\r\n --text-white: #ffffff;\r\n \r\n /* Borders */\r\n --border-color: #ddd;\r\n --border-color-light: #e9ecef;\r\n --border-color-dark: #919090ff;\r\n \r\n /* Spacing */\r\n --spacing-xs: 4px;\r\n --spacing-sm: 8px;\r\n --spacing-md: 12px;\r\n --spacing-lg: 16px;\r\n --spacing-xl: 20px;\r\n --spacing-2xl: 24px;\r\n --spacing-3xl: 32px;\r\n \r\n /* Typography */\r\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\r\n --font-size-xs: 11px;\r\n --font-size-sm: 12px;\r\n --font-size-base: 14px;\r\n --font-size-md: 16px;\r\n --font-size-lg: 18px;\r\n --font-size-xl: 20px;\r\n --font-weight-normal: 400;\r\n --font-weight-medium: 500;\r\n --font-weight-semibold: 600;\r\n --font-weight-bold: 700;\r\n \r\n /* Border Radius */\r\n --border-radius-sm: 4px;\r\n --border-radius-md: 6px;\r\n --border-radius-lg: 8px;\r\n --border-radius-xl: 12px;\r\n \r\n /* Shadows */\r\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\r\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\r\n \r\n /* Z-index */\r\n --z-extension: 999999999;\r\n --z-modal: 1050;\r\n --z-dropdown: 1000;\r\n \r\n /* Transitions */\r\n --transition-fast: 150ms ease;\r\n --transition-base: 250ms ease;\r\n --transition-slow: 350ms ease;\r\n}/* LoopNet Extension Footer - Extracted from content.js AS-IS */\r\n.ln-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background: var(--bg-light, #ededed);\r\n border-top: 1px solid var(--border-color-dark, #919090ff);\r\n box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));\r\n z-index: var(--z-extension, 999999999);\r\n padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n font-size: var(--font-size-md, 16px);\r\n color: var(--text-primary, #212529);\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.ln-footer-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n max-width: 1600px;\r\n margin: 0 auto;\r\n gap: var(--spacing-xl, 20px);\r\n}\r\n\r\n.ln-footer-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.ln-footer-right {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-lg, 16px);\r\n flex-shrink: 0;\r\n}\r\n\r\n.ln-metrics-grid {\r\n display: grid;\r\n grid-template-columns: repeat(9, 1fr);\r\n gap: var(--spacing-lg, 16px);\r\n align-items: start;\r\n}\r\n\r\n.ln-metric-column {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-metric {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n min-width: 0;\r\n}\r\n\r\n.ln-metric-label {\r\n font-size: var(--font-size-xs, 11px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n line-height: 1;\r\n}\r\n\r\n.ln-metric-value {\r\n font-weight: var(--font-weight-semibold, 600);\r\n font-size: var(--font-size-md, 16px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 1.2;\r\n}\r\n\r\n.ln-price {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\n.ln-cashflow.negative {\r\n color: var(--color-danger, #dc3545);\r\n}\r\n\r\n.ln-cashflow.positive {\r\n color: var(--color-success, #28a745);\r\n}\r\n\r\n.ln-phone {\r\n color: var(--color-info, #17a2b8);\r\n cursor: pointer;\r\n text-decoration: underline;\r\n}\r\n\r\n.ln-phone:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-property-type-dropdown {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n background: var(--bg-primary, #ffffff);\r\n color: var(--text-primary, #212529);\r\n cursor: pointer;\r\n min-width: 120px;\r\n}\r\n\r\n.ln-property-type-dropdown:focus {\r\n outline: none;\r\n border-color: var(--color-primary, #007bff);\r\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.ln-export-button {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n font-weight: var(--font-weight-medium, 500);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-export-button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.ln-export-icon {\r\n width: 16px;\r\n height: 16px;\r\n fill: currentColor;\r\n}\r\n\r\n.ln-discount-controls {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-discount-input {\r\n width: 60px;\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-sm, 12px);\r\n text-align: center;\r\n}\r\n\r\n.ln-discount-button {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n background: var(--color-secondary, #6c757d);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-xs, 11px);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-discount-button:hover {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-discount-button.active {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n@media (max-width: 1400px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(6, 1fr);\r\n }\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n .ln-footer {\r\n padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);\r\n }\r\n \r\n .ln-footer-container {\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n \r\n .ln-footer-right {\r\n width: 100%;\r\n justify-content: flex-end;\r\n }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metric-value {\r\n font-size: var(--font-size-base, 14px);\r\n }\r\n}",dashboardApp:"/* Shared CSS custom properties - extracted from your existing styles */\r\n:root {\r\n /* Colors */\r\n --color-primary: #007bff;\r\n --color-primary-hover: #0056b3;\r\n --color-secondary: #6c757d;\r\n --color-success: #28a745;\r\n --color-warning: #ffc107;\r\n --color-danger: #dc3545;\r\n --color-info: #17a2b8;\r\n \r\n /* Backgrounds */\r\n --bg-primary: #ffffff;\r\n --bg-secondary: #f8f9fa;\r\n --bg-light: #ededed;\r\n --bg-dark: #343a40;\r\n \r\n /* Text Colors */\r\n --text-primary: #212529;\r\n --text-secondary: #6c757d;\r\n --text-muted: #495057;\r\n --text-white: #ffffff;\r\n \r\n /* Borders */\r\n --border-color: #ddd;\r\n --border-color-light: #e9ecef;\r\n --border-color-dark: #919090ff;\r\n \r\n /* Spacing */\r\n --spacing-xs: 4px;\r\n --spacing-sm: 8px;\r\n --spacing-md: 12px;\r\n --spacing-lg: 16px;\r\n --spacing-xl: 20px;\r\n --spacing-2xl: 24px;\r\n --spacing-3xl: 32px;\r\n \r\n /* Typography */\r\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\r\n --font-size-xs: 11px;\r\n --font-size-sm: 12px;\r\n --font-size-base: 14px;\r\n --font-size-md: 16px;\r\n --font-size-lg: 18px;\r\n --font-size-xl: 20px;\r\n --font-weight-normal: 400;\r\n --font-weight-medium: 500;\r\n --font-weight-semibold: 600;\r\n --font-weight-bold: 700;\r\n \r\n /* Border Radius */\r\n --border-radius-sm: 4px;\r\n --border-radius-md: 6px;\r\n --border-radius-lg: 8px;\r\n --border-radius-xl: 12px;\r\n \r\n /* Shadows */\r\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\r\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\r\n \r\n /* Z-index */\r\n --z-extension: 999999999;\r\n --z-modal: 1050;\r\n --z-dropdown: 1000;\r\n \r\n /* Transitions */\r\n --transition-fast: 150ms ease;\r\n --transition-base: 250ms ease;\r\n --transition-slow: 350ms ease;\r\n}/* Dashboard styles - extracted from existing dashboard CSS AS-IS */\r\n\r\n/* Base dashboard styles */\r\n.dashboard-container {\r\n min-height: 100vh;\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n color: var(--text-primary, #212529);\r\n}\r\n\r\n.header {\r\n background: var(--bg-primary, white);\r\n padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));\r\n}\r\n\r\n.header h1 {\r\n color: var(--color-primary, #007bff);\r\n margin-bottom: var(--spacing-xl, 20px);\r\n}\r\n\r\n.filters {\r\n display: flex;\r\n gap: var(--spacing-lg, 15px);\r\n flex-wrap: wrap;\r\n align-items: end;\r\n}\r\n\r\n.filter-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-xs, 5px);\r\n}\r\n\r\n.filter-group label {\r\n font-size: var(--font-size-sm, 12px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.filter-group input, .filter-group select {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n min-width: 120px;\r\n}\r\n\r\n.filter-group button {\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n cursor: pointer;\r\n}\r\n\r\n.filter-group button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.stats {\r\n display: flex;\r\n gap: var(--spacing-xl, 20px);\r\n margin-top: var(--spacing-xl, 20px);\r\n font-size: var(--font-size-base, 14px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.table-container {\r\n background: var(--bg-primary, white);\r\n border-radius: var(--border-radius-lg, 8px);\r\n box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));\r\n overflow: hidden;\r\n}\r\n\r\ntable {\r\n width: 100%;\r\n border-collapse: collapse;\r\n}\r\n\r\nth, td {\r\n padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);\r\n text-align: left;\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n}\r\n\r\nth {\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-weight: var(--font-weight-semibold, 600);\r\n color: var(--text-muted, #495057);\r\n font-size: var(--font-size-sm, 12px);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\nth a {\r\n color: var(--text-muted, #495057);\r\n text-decoration: none;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-xs, 4px);\r\n}\r\n\r\nth a:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\nth a.sort-active {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\ntr:hover {\r\n background: var(--bg-secondary, #f8f9fa);\r\n}\r\n\r\n.property-link {\r\n color: var(--color-primary, #007bff);\r\n text-decoration: none;\r\n font-weight: var(--font-weight-medium, 500);\r\n}\r\n\r\n.property-link:hover {\r\n text-decoration: underline;\r\n}\r\n\r\n.contract-state {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border-radius: var(--border-radius-xl, 12px);\r\n font-size: var(--font-size-xs, 11px);\r\n font-weight: var(--font-weight-semibold, 600);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.contract-none { \r\n background: var(--border-color-light, #e9ecef); \r\n color: var(--text-muted, #495057); \r\n}\r\n\r\n.contract-loi_sent { \r\n background: #fff3cd; \r\n color: #856404; \r\n}\r\n\r\n.contract-loi_agreed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-loi_rejected { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.contract-contract_signed { \r\n background: #d1ecf1; \r\n color: #0c5460; \r\n}\r\n\r\n.contract-closed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-not_interested { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.date-cell {\r\n font-size: var(--font-size-sm, 13px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.pagination {\r\n display: flex;\r\n justify-content: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-xl, 20px);\r\n padding: var(--spacing-xl, 20px);\r\n}\r\n\r\n.page-link {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n background: var(--bg-primary, white);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n color: var(--text-primary, #212529);\r\n text-decoration: none;\r\n transition: all var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.page-link:hover {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}\r\n\r\n.page-link.active {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}"};function injectStyles(r,n="injected-styles"){if("undefined"==typeof document)return null;const o=document.getElementById(n);o&&o.remove();const a=document.createElement("style");return a.id=n,a.textContent=r,document.head.appendChild(a),a}function injectFooterStyles(){return injectStyles(r.extension,"ln-footer-styles")}function injectDashboardStyles(){return injectStyles(r.dashboardApp,"dashboard-styles")}export{injectDashboardStyles,injectFooterStyles,injectStyles,r as styles};
2
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.js","sources":["../../src/styles/browser.js"],"sourcesContent":["// Auto-generated browser styles - DO NOT EDIT\n// Generated from CSS files by build-styles.js\n\nexport const styles = {\n variables: \"/* Shared CSS custom properties - extracted from your existing styles */\\r\\n:root {\\r\\n /* Colors */\\r\\n --color-primary: #007bff;\\r\\n --color-primary-hover: #0056b3;\\r\\n --color-secondary: #6c757d;\\r\\n --color-success: #28a745;\\r\\n --color-warning: #ffc107;\\r\\n --color-danger: #dc3545;\\r\\n --color-info: #17a2b8;\\r\\n \\r\\n /* Backgrounds */\\r\\n --bg-primary: #ffffff;\\r\\n --bg-secondary: #f8f9fa;\\r\\n --bg-light: #ededed;\\r\\n --bg-dark: #343a40;\\r\\n \\r\\n /* Text Colors */\\r\\n --text-primary: #212529;\\r\\n --text-secondary: #6c757d;\\r\\n --text-muted: #495057;\\r\\n --text-white: #ffffff;\\r\\n \\r\\n /* Borders */\\r\\n --border-color: #ddd;\\r\\n --border-color-light: #e9ecef;\\r\\n --border-color-dark: #919090ff;\\r\\n \\r\\n /* Spacing */\\r\\n --spacing-xs: 4px;\\r\\n --spacing-sm: 8px;\\r\\n --spacing-md: 12px;\\r\\n --spacing-lg: 16px;\\r\\n --spacing-xl: 20px;\\r\\n --spacing-2xl: 24px;\\r\\n --spacing-3xl: 32px;\\r\\n \\r\\n /* Typography */\\r\\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\\r\\n --font-size-xs: 11px;\\r\\n --font-size-sm: 12px;\\r\\n --font-size-base: 14px;\\r\\n --font-size-md: 16px;\\r\\n --font-size-lg: 18px;\\r\\n --font-size-xl: 20px;\\r\\n --font-weight-normal: 400;\\r\\n --font-weight-medium: 500;\\r\\n --font-weight-semibold: 600;\\r\\n --font-weight-bold: 700;\\r\\n \\r\\n /* Border Radius */\\r\\n --border-radius-sm: 4px;\\r\\n --border-radius-md: 6px;\\r\\n --border-radius-lg: 8px;\\r\\n --border-radius-xl: 12px;\\r\\n \\r\\n /* Shadows */\\r\\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\\r\\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\\r\\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\\r\\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\\r\\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\\r\\n \\r\\n /* Z-index */\\r\\n --z-extension: 999999999;\\r\\n --z-modal: 1050;\\r\\n --z-dropdown: 1000;\\r\\n \\r\\n /* Transitions */\\r\\n --transition-fast: 150ms ease;\\r\\n --transition-base: 250ms ease;\\r\\n --transition-slow: 350ms ease;\\r\\n}\",\n footer: \"/* LoopNet Extension Footer - Extracted from content.js AS-IS */\\r\\n.ln-footer {\\r\\n position: fixed;\\r\\n bottom: 0;\\r\\n left: 0;\\r\\n right: 0;\\r\\n background: var(--bg-light, #ededed);\\r\\n border-top: 1px solid var(--border-color-dark, #919090ff);\\r\\n box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));\\r\\n z-index: var(--z-extension, 999999999);\\r\\n padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);\\r\\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\\r\\n font-size: var(--font-size-md, 16px);\\r\\n color: var(--text-primary, #212529);\\r\\n width: 100%;\\r\\n box-sizing: border-box;\\r\\n}\\r\\n\\r\\n.ln-footer-container {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n max-width: 1600px;\\r\\n margin: 0 auto;\\r\\n gap: var(--spacing-xl, 20px);\\r\\n}\\r\\n\\r\\n.ln-footer-content {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-md, 12px);\\r\\n flex: 1;\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.ln-footer-right {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-lg, 16px);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.ln-metrics-grid {\\r\\n display: grid;\\r\\n grid-template-columns: repeat(9, 1fr);\\r\\n gap: var(--spacing-lg, 16px);\\r\\n align-items: start;\\r\\n}\\r\\n\\r\\n.ln-metric-column {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n}\\r\\n\\r\\n.ln-metric {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 2px;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.ln-metric-label {\\r\\n font-size: var(--font-size-xs, 11px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n line-height: 1;\\r\\n}\\r\\n\\r\\n.ln-metric-value {\\r\\n font-weight: var(--font-weight-semibold, 600);\\r\\n font-size: var(--font-size-md, 16px);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n line-height: 1.2;\\r\\n}\\r\\n\\r\\n.ln-price {\\r\\n color: var(--color-primary, #007bff);\\r\\n font-weight: var(--font-weight-bold, 700);\\r\\n}\\r\\n\\r\\n.ln-cashflow.negative {\\r\\n color: var(--color-danger, #dc3545);\\r\\n}\\r\\n\\r\\n.ln-cashflow.positive {\\r\\n color: var(--color-success, #28a745);\\r\\n}\\r\\n\\r\\n.ln-phone {\\r\\n color: var(--color-info, #17a2b8);\\r\\n cursor: pointer;\\r\\n text-decoration: underline;\\r\\n}\\r\\n\\r\\n.ln-phone:hover {\\r\\n color: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n.ln-property-type-dropdown {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n background: var(--bg-primary, #ffffff);\\r\\n color: var(--text-primary, #212529);\\r\\n cursor: pointer;\\r\\n min-width: 120px;\\r\\n}\\r\\n\\r\\n.ln-property-type-dropdown:focus {\\r\\n outline: none;\\r\\n border-color: var(--color-primary, #007bff);\\r\\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\\r\\n}\\r\\n\\r\\n.ln-export-button {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, #ffffff);\\r\\n border: none;\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n cursor: pointer;\\r\\n transition: background-color var(--transition-fast, 150ms ease);\\r\\n}\\r\\n\\r\\n.ln-export-button:hover {\\r\\n background: var(--color-primary-hover, #0056b3);\\r\\n}\\r\\n\\r\\n.ln-export-icon {\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n fill: currentColor;\\r\\n}\\r\\n\\r\\n.ln-discount-controls {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n margin-top: var(--spacing-sm, 8px);\\r\\n}\\r\\n\\r\\n.ln-discount-input {\\r\\n width: 60px;\\r\\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-sm, 12px);\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n.ln-discount-button {\\r\\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\\r\\n background: var(--color-secondary, #6c757d);\\r\\n color: var(--text-white, #ffffff);\\r\\n border: none;\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-xs, 11px);\\r\\n cursor: pointer;\\r\\n transition: background-color var(--transition-fast, 150ms ease);\\r\\n}\\r\\n\\r\\n.ln-discount-button:hover {\\r\\n background: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n.ln-discount-button.active {\\r\\n background: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n@media (max-width: 1400px) {\\r\\n .ln-metrics-grid {\\r\\n grid-template-columns: repeat(6, 1fr);\\r\\n }\\r\\n}\\r\\n\\r\\n@media (max-width: 1024px) {\\r\\n .ln-footer {\\r\\n padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);\\r\\n }\\r\\n \\r\\n .ln-footer-container {\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-md, 12px);\\r\\n }\\r\\n \\r\\n .ln-metrics-grid {\\r\\n grid-template-columns: repeat(4, 1fr);\\r\\n }\\r\\n \\r\\n .ln-footer-right {\\r\\n width: 100%;\\r\\n justify-content: flex-end;\\r\\n }\\r\\n}\\r\\n\\r\\n@media (max-width: 768px) {\\r\\n .ln-metrics-grid {\\r\\n grid-template-columns: repeat(3, 1fr);\\r\\n gap: var(--spacing-md, 12px);\\r\\n }\\r\\n \\r\\n .ln-metric-value {\\r\\n font-size: var(--font-size-base, 14px);\\r\\n }\\r\\n}\",\n dashboard: \"/* Dashboard styles - extracted from existing dashboard CSS AS-IS */\\r\\n\\r\\n/* Base dashboard styles */\\r\\n.dashboard-container {\\r\\n min-height: 100vh;\\r\\n background: var(--bg-secondary, #f8f9fa);\\r\\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\\r\\n color: var(--text-primary, #212529);\\r\\n}\\r\\n\\r\\n.header {\\r\\n background: var(--bg-primary, white);\\r\\n padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);\\r\\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\\r\\n box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));\\r\\n}\\r\\n\\r\\n.header h1 {\\r\\n color: var(--color-primary, #007bff);\\r\\n margin-bottom: var(--spacing-xl, 20px);\\r\\n}\\r\\n\\r\\n.filters {\\r\\n display: flex;\\r\\n gap: var(--spacing-lg, 15px);\\r\\n flex-wrap: wrap;\\r\\n align-items: end;\\r\\n}\\r\\n\\r\\n.filter-group {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-xs, 5px);\\r\\n}\\r\\n\\r\\n.filter-group label {\\r\\n font-size: var(--font-size-sm, 12px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n}\\r\\n\\r\\n.filter-group input, .filter-group select {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n min-width: 120px;\\r\\n}\\r\\n\\r\\n.filter-group button {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, white);\\r\\n border: none;\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.filter-group button:hover {\\r\\n background: var(--color-primary-hover, #0056b3);\\r\\n}\\r\\n\\r\\n.stats {\\r\\n display: flex;\\r\\n gap: var(--spacing-xl, 20px);\\r\\n margin-top: var(--spacing-xl, 20px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n}\\r\\n\\r\\n.table-container {\\r\\n background: var(--bg-primary, white);\\r\\n border-radius: var(--border-radius-lg, 8px);\\r\\n box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\ntable {\\r\\n width: 100%;\\r\\n border-collapse: collapse;\\r\\n}\\r\\n\\r\\nth, td {\\r\\n padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);\\r\\n text-align: left;\\r\\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\\r\\n}\\r\\n\\r\\nth {\\r\\n background: var(--bg-secondary, #f8f9fa);\\r\\n font-weight: var(--font-weight-semibold, 600);\\r\\n color: var(--text-muted, #495057);\\r\\n font-size: var(--font-size-sm, 12px);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n}\\r\\n\\r\\nth a {\\r\\n color: var(--text-muted, #495057);\\r\\n text-decoration: none;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-xs, 4px);\\r\\n}\\r\\n\\r\\nth a:hover {\\r\\n color: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\nth a.sort-active {\\r\\n color: var(--color-primary, #007bff);\\r\\n font-weight: var(--font-weight-bold, 700);\\r\\n}\\r\\n\\r\\ntr:hover {\\r\\n background: var(--bg-secondary, #f8f9fa);\\r\\n}\\r\\n\\r\\n.property-link {\\r\\n color: var(--color-primary, #007bff);\\r\\n text-decoration: none;\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n}\\r\\n\\r\\n.property-link:hover {\\r\\n text-decoration: underline;\\r\\n}\\r\\n\\r\\n.contract-state {\\r\\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\\r\\n border-radius: var(--border-radius-xl, 12px);\\r\\n font-size: var(--font-size-xs, 11px);\\r\\n font-weight: var(--font-weight-semibold, 600);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n}\\r\\n\\r\\n.contract-none { \\r\\n background: var(--border-color-light, #e9ecef); \\r\\n color: var(--text-muted, #495057); \\r\\n}\\r\\n\\r\\n.contract-loi_sent { \\r\\n background: #fff3cd; \\r\\n color: #856404; \\r\\n}\\r\\n\\r\\n.contract-loi_agreed { \\r\\n background: #d4edda; \\r\\n color: #155724; \\r\\n}\\r\\n\\r\\n.contract-loi_rejected { \\r\\n background: #f8d7da; \\r\\n color: #721c24; \\r\\n}\\r\\n\\r\\n.contract-contract_signed { \\r\\n background: #d1ecf1; \\r\\n color: #0c5460; \\r\\n}\\r\\n\\r\\n.contract-closed { \\r\\n background: #d4edda; \\r\\n color: #155724; \\r\\n}\\r\\n\\r\\n.contract-not_interested { \\r\\n background: #f8d7da; \\r\\n color: #721c24; \\r\\n}\\r\\n\\r\\n.date-cell {\\r\\n font-size: var(--font-size-sm, 13px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n}\\r\\n\\r\\n.pagination {\\r\\n display: flex;\\r\\n justify-content: center;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n margin-top: var(--spacing-xl, 20px);\\r\\n padding: var(--spacing-xl, 20px);\\r\\n}\\r\\n\\r\\n.page-link {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\\r\\n background: var(--bg-primary, white);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n color: var(--text-primary, #212529);\\r\\n text-decoration: none;\\r\\n transition: all var(--transition-fast, 150ms ease);\\r\\n}\\r\\n\\r\\n.page-link:hover {\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, white);\\r\\n border-color: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n.page-link.active {\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, white);\\r\\n border-color: var(--color-primary, #007bff);\\r\\n}\",\n \n // Combined styles\n extension: \"/* Shared CSS custom properties - extracted from your existing styles */\\r\\n:root {\\r\\n /* Colors */\\r\\n --color-primary: #007bff;\\r\\n --color-primary-hover: #0056b3;\\r\\n --color-secondary: #6c757d;\\r\\n --color-success: #28a745;\\r\\n --color-warning: #ffc107;\\r\\n --color-danger: #dc3545;\\r\\n --color-info: #17a2b8;\\r\\n \\r\\n /* Backgrounds */\\r\\n --bg-primary: #ffffff;\\r\\n --bg-secondary: #f8f9fa;\\r\\n --bg-light: #ededed;\\r\\n --bg-dark: #343a40;\\r\\n \\r\\n /* Text Colors */\\r\\n --text-primary: #212529;\\r\\n --text-secondary: #6c757d;\\r\\n --text-muted: #495057;\\r\\n --text-white: #ffffff;\\r\\n \\r\\n /* Borders */\\r\\n --border-color: #ddd;\\r\\n --border-color-light: #e9ecef;\\r\\n --border-color-dark: #919090ff;\\r\\n \\r\\n /* Spacing */\\r\\n --spacing-xs: 4px;\\r\\n --spacing-sm: 8px;\\r\\n --spacing-md: 12px;\\r\\n --spacing-lg: 16px;\\r\\n --spacing-xl: 20px;\\r\\n --spacing-2xl: 24px;\\r\\n --spacing-3xl: 32px;\\r\\n \\r\\n /* Typography */\\r\\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\\r\\n --font-size-xs: 11px;\\r\\n --font-size-sm: 12px;\\r\\n --font-size-base: 14px;\\r\\n --font-size-md: 16px;\\r\\n --font-size-lg: 18px;\\r\\n --font-size-xl: 20px;\\r\\n --font-weight-normal: 400;\\r\\n --font-weight-medium: 500;\\r\\n --font-weight-semibold: 600;\\r\\n --font-weight-bold: 700;\\r\\n \\r\\n /* Border Radius */\\r\\n --border-radius-sm: 4px;\\r\\n --border-radius-md: 6px;\\r\\n --border-radius-lg: 8px;\\r\\n --border-radius-xl: 12px;\\r\\n \\r\\n /* Shadows */\\r\\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\\r\\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\\r\\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\\r\\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\\r\\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\\r\\n \\r\\n /* Z-index */\\r\\n --z-extension: 999999999;\\r\\n --z-modal: 1050;\\r\\n --z-dropdown: 1000;\\r\\n \\r\\n /* Transitions */\\r\\n --transition-fast: 150ms ease;\\r\\n --transition-base: 250ms ease;\\r\\n --transition-slow: 350ms ease;\\r\\n}/* LoopNet Extension Footer - Extracted from content.js AS-IS */\\r\\n.ln-footer {\\r\\n position: fixed;\\r\\n bottom: 0;\\r\\n left: 0;\\r\\n right: 0;\\r\\n background: var(--bg-light, #ededed);\\r\\n border-top: 1px solid var(--border-color-dark, #919090ff);\\r\\n box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));\\r\\n z-index: var(--z-extension, 999999999);\\r\\n padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);\\r\\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\\r\\n font-size: var(--font-size-md, 16px);\\r\\n color: var(--text-primary, #212529);\\r\\n width: 100%;\\r\\n box-sizing: border-box;\\r\\n}\\r\\n\\r\\n.ln-footer-container {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n max-width: 1600px;\\r\\n margin: 0 auto;\\r\\n gap: var(--spacing-xl, 20px);\\r\\n}\\r\\n\\r\\n.ln-footer-content {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-md, 12px);\\r\\n flex: 1;\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.ln-footer-right {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-lg, 16px);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.ln-metrics-grid {\\r\\n display: grid;\\r\\n grid-template-columns: repeat(9, 1fr);\\r\\n gap: var(--spacing-lg, 16px);\\r\\n align-items: start;\\r\\n}\\r\\n\\r\\n.ln-metric-column {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n}\\r\\n\\r\\n.ln-metric {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 2px;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.ln-metric-label {\\r\\n font-size: var(--font-size-xs, 11px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n line-height: 1;\\r\\n}\\r\\n\\r\\n.ln-metric-value {\\r\\n font-weight: var(--font-weight-semibold, 600);\\r\\n font-size: var(--font-size-md, 16px);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n line-height: 1.2;\\r\\n}\\r\\n\\r\\n.ln-price {\\r\\n color: var(--color-primary, #007bff);\\r\\n font-weight: var(--font-weight-bold, 700);\\r\\n}\\r\\n\\r\\n.ln-cashflow.negative {\\r\\n color: var(--color-danger, #dc3545);\\r\\n}\\r\\n\\r\\n.ln-cashflow.positive {\\r\\n color: var(--color-success, #28a745);\\r\\n}\\r\\n\\r\\n.ln-phone {\\r\\n color: var(--color-info, #17a2b8);\\r\\n cursor: pointer;\\r\\n text-decoration: underline;\\r\\n}\\r\\n\\r\\n.ln-phone:hover {\\r\\n color: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n.ln-property-type-dropdown {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n background: var(--bg-primary, #ffffff);\\r\\n color: var(--text-primary, #212529);\\r\\n cursor: pointer;\\r\\n min-width: 120px;\\r\\n}\\r\\n\\r\\n.ln-property-type-dropdown:focus {\\r\\n outline: none;\\r\\n border-color: var(--color-primary, #007bff);\\r\\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\\r\\n}\\r\\n\\r\\n.ln-export-button {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, #ffffff);\\r\\n border: none;\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n cursor: pointer;\\r\\n transition: background-color var(--transition-fast, 150ms ease);\\r\\n}\\r\\n\\r\\n.ln-export-button:hover {\\r\\n background: var(--color-primary-hover, #0056b3);\\r\\n}\\r\\n\\r\\n.ln-export-icon {\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n fill: currentColor;\\r\\n}\\r\\n\\r\\n.ln-discount-controls {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n margin-top: var(--spacing-sm, 8px);\\r\\n}\\r\\n\\r\\n.ln-discount-input {\\r\\n width: 60px;\\r\\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-sm, 12px);\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n.ln-discount-button {\\r\\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\\r\\n background: var(--color-secondary, #6c757d);\\r\\n color: var(--text-white, #ffffff);\\r\\n border: none;\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-xs, 11px);\\r\\n cursor: pointer;\\r\\n transition: background-color var(--transition-fast, 150ms ease);\\r\\n}\\r\\n\\r\\n.ln-discount-button:hover {\\r\\n background: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n.ln-discount-button.active {\\r\\n background: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n@media (max-width: 1400px) {\\r\\n .ln-metrics-grid {\\r\\n grid-template-columns: repeat(6, 1fr);\\r\\n }\\r\\n}\\r\\n\\r\\n@media (max-width: 1024px) {\\r\\n .ln-footer {\\r\\n padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);\\r\\n }\\r\\n \\r\\n .ln-footer-container {\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-md, 12px);\\r\\n }\\r\\n \\r\\n .ln-metrics-grid {\\r\\n grid-template-columns: repeat(4, 1fr);\\r\\n }\\r\\n \\r\\n .ln-footer-right {\\r\\n width: 100%;\\r\\n justify-content: flex-end;\\r\\n }\\r\\n}\\r\\n\\r\\n@media (max-width: 768px) {\\r\\n .ln-metrics-grid {\\r\\n grid-template-columns: repeat(3, 1fr);\\r\\n gap: var(--spacing-md, 12px);\\r\\n }\\r\\n \\r\\n .ln-metric-value {\\r\\n font-size: var(--font-size-base, 14px);\\r\\n }\\r\\n}\",\n dashboardApp: \"/* Shared CSS custom properties - extracted from your existing styles */\\r\\n:root {\\r\\n /* Colors */\\r\\n --color-primary: #007bff;\\r\\n --color-primary-hover: #0056b3;\\r\\n --color-secondary: #6c757d;\\r\\n --color-success: #28a745;\\r\\n --color-warning: #ffc107;\\r\\n --color-danger: #dc3545;\\r\\n --color-info: #17a2b8;\\r\\n \\r\\n /* Backgrounds */\\r\\n --bg-primary: #ffffff;\\r\\n --bg-secondary: #f8f9fa;\\r\\n --bg-light: #ededed;\\r\\n --bg-dark: #343a40;\\r\\n \\r\\n /* Text Colors */\\r\\n --text-primary: #212529;\\r\\n --text-secondary: #6c757d;\\r\\n --text-muted: #495057;\\r\\n --text-white: #ffffff;\\r\\n \\r\\n /* Borders */\\r\\n --border-color: #ddd;\\r\\n --border-color-light: #e9ecef;\\r\\n --border-color-dark: #919090ff;\\r\\n \\r\\n /* Spacing */\\r\\n --spacing-xs: 4px;\\r\\n --spacing-sm: 8px;\\r\\n --spacing-md: 12px;\\r\\n --spacing-lg: 16px;\\r\\n --spacing-xl: 20px;\\r\\n --spacing-2xl: 24px;\\r\\n --spacing-3xl: 32px;\\r\\n \\r\\n /* Typography */\\r\\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\\r\\n --font-size-xs: 11px;\\r\\n --font-size-sm: 12px;\\r\\n --font-size-base: 14px;\\r\\n --font-size-md: 16px;\\r\\n --font-size-lg: 18px;\\r\\n --font-size-xl: 20px;\\r\\n --font-weight-normal: 400;\\r\\n --font-weight-medium: 500;\\r\\n --font-weight-semibold: 600;\\r\\n --font-weight-bold: 700;\\r\\n \\r\\n /* Border Radius */\\r\\n --border-radius-sm: 4px;\\r\\n --border-radius-md: 6px;\\r\\n --border-radius-lg: 8px;\\r\\n --border-radius-xl: 12px;\\r\\n \\r\\n /* Shadows */\\r\\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\\r\\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\\r\\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\\r\\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\\r\\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\\r\\n \\r\\n /* Z-index */\\r\\n --z-extension: 999999999;\\r\\n --z-modal: 1050;\\r\\n --z-dropdown: 1000;\\r\\n \\r\\n /* Transitions */\\r\\n --transition-fast: 150ms ease;\\r\\n --transition-base: 250ms ease;\\r\\n --transition-slow: 350ms ease;\\r\\n}/* Dashboard styles - extracted from existing dashboard CSS AS-IS */\\r\\n\\r\\n/* Base dashboard styles */\\r\\n.dashboard-container {\\r\\n min-height: 100vh;\\r\\n background: var(--bg-secondary, #f8f9fa);\\r\\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\\r\\n color: var(--text-primary, #212529);\\r\\n}\\r\\n\\r\\n.header {\\r\\n background: var(--bg-primary, white);\\r\\n padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);\\r\\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\\r\\n box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));\\r\\n}\\r\\n\\r\\n.header h1 {\\r\\n color: var(--color-primary, #007bff);\\r\\n margin-bottom: var(--spacing-xl, 20px);\\r\\n}\\r\\n\\r\\n.filters {\\r\\n display: flex;\\r\\n gap: var(--spacing-lg, 15px);\\r\\n flex-wrap: wrap;\\r\\n align-items: end;\\r\\n}\\r\\n\\r\\n.filter-group {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--spacing-xs, 5px);\\r\\n}\\r\\n\\r\\n.filter-group label {\\r\\n font-size: var(--font-size-sm, 12px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n}\\r\\n\\r\\n.filter-group input, .filter-group select {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n min-width: 120px;\\r\\n}\\r\\n\\r\\n.filter-group button {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, white);\\r\\n border: none;\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.filter-group button:hover {\\r\\n background: var(--color-primary-hover, #0056b3);\\r\\n}\\r\\n\\r\\n.stats {\\r\\n display: flex;\\r\\n gap: var(--spacing-xl, 20px);\\r\\n margin-top: var(--spacing-xl, 20px);\\r\\n font-size: var(--font-size-base, 14px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n}\\r\\n\\r\\n.table-container {\\r\\n background: var(--bg-primary, white);\\r\\n border-radius: var(--border-radius-lg, 8px);\\r\\n box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\ntable {\\r\\n width: 100%;\\r\\n border-collapse: collapse;\\r\\n}\\r\\n\\r\\nth, td {\\r\\n padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);\\r\\n text-align: left;\\r\\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\\r\\n}\\r\\n\\r\\nth {\\r\\n background: var(--bg-secondary, #f8f9fa);\\r\\n font-weight: var(--font-weight-semibold, 600);\\r\\n color: var(--text-muted, #495057);\\r\\n font-size: var(--font-size-sm, 12px);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n}\\r\\n\\r\\nth a {\\r\\n color: var(--text-muted, #495057);\\r\\n text-decoration: none;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-xs, 4px);\\r\\n}\\r\\n\\r\\nth a:hover {\\r\\n color: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\nth a.sort-active {\\r\\n color: var(--color-primary, #007bff);\\r\\n font-weight: var(--font-weight-bold, 700);\\r\\n}\\r\\n\\r\\ntr:hover {\\r\\n background: var(--bg-secondary, #f8f9fa);\\r\\n}\\r\\n\\r\\n.property-link {\\r\\n color: var(--color-primary, #007bff);\\r\\n text-decoration: none;\\r\\n font-weight: var(--font-weight-medium, 500);\\r\\n}\\r\\n\\r\\n.property-link:hover {\\r\\n text-decoration: underline;\\r\\n}\\r\\n\\r\\n.contract-state {\\r\\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\\r\\n border-radius: var(--border-radius-xl, 12px);\\r\\n font-size: var(--font-size-xs, 11px);\\r\\n font-weight: var(--font-weight-semibold, 600);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n}\\r\\n\\r\\n.contract-none { \\r\\n background: var(--border-color-light, #e9ecef); \\r\\n color: var(--text-muted, #495057); \\r\\n}\\r\\n\\r\\n.contract-loi_sent { \\r\\n background: #fff3cd; \\r\\n color: #856404; \\r\\n}\\r\\n\\r\\n.contract-loi_agreed { \\r\\n background: #d4edda; \\r\\n color: #155724; \\r\\n}\\r\\n\\r\\n.contract-loi_rejected { \\r\\n background: #f8d7da; \\r\\n color: #721c24; \\r\\n}\\r\\n\\r\\n.contract-contract_signed { \\r\\n background: #d1ecf1; \\r\\n color: #0c5460; \\r\\n}\\r\\n\\r\\n.contract-closed { \\r\\n background: #d4edda; \\r\\n color: #155724; \\r\\n}\\r\\n\\r\\n.contract-not_interested { \\r\\n background: #f8d7da; \\r\\n color: #721c24; \\r\\n}\\r\\n\\r\\n.date-cell {\\r\\n font-size: var(--font-size-sm, 13px);\\r\\n color: var(--text-secondary, #6c757d);\\r\\n}\\r\\n\\r\\n.pagination {\\r\\n display: flex;\\r\\n justify-content: center;\\r\\n gap: var(--spacing-sm, 8px);\\r\\n margin-top: var(--spacing-xl, 20px);\\r\\n padding: var(--spacing-xl, 20px);\\r\\n}\\r\\n\\r\\n.page-link {\\r\\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\\r\\n background: var(--bg-primary, white);\\r\\n border: 1px solid var(--border-color, #ddd);\\r\\n border-radius: var(--border-radius-sm, 4px);\\r\\n color: var(--text-primary, #212529);\\r\\n text-decoration: none;\\r\\n transition: all var(--transition-fast, 150ms ease);\\r\\n}\\r\\n\\r\\n.page-link:hover {\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, white);\\r\\n border-color: var(--color-primary, #007bff);\\r\\n}\\r\\n\\r\\n.page-link.active {\\r\\n background: var(--color-primary, #007bff);\\r\\n color: var(--text-white, white);\\r\\n border-color: var(--color-primary, #007bff);\\r\\n}\"\n};\n\nexport function injectStyles(cssString, id = \"injected-styles\") {\n if (typeof document === 'undefined') return null;\n \n const existing = document.getElementById(id);\n if (existing) existing.remove();\n \n const style = document.createElement(\"style\");\n style.id = id;\n style.textContent = cssString;\n document.head.appendChild(style);\n \n return style;\n}\n\nexport function injectFooterStyles() {\n return injectStyles(styles.extension, \"ln-footer-styles\");\n}\n\nexport function injectDashboardStyles() {\n return injectStyles(styles.dashboardApp, \"dashboard-styles\");\n}\n"],"names":["styles","variables","footer","dashboard","extension","dashboardApp","injectStyles","cssString","id","document","existing","getElementById","remove","style","createElement","textContent","head","appendChild","injectFooterStyles","injectDashboardStyles"],"mappings":"AAGY,MAACA,EAAS,CACpBC,UAAW,w+DACXC,OAAQ,u4KACRC,UAAW,2xKAGXC,UAAW,42OACXC,aAAc,iwOAGT,SAASC,aAAaC,EAAWC,EAAK,mBAC3C,GAAwB,oBAAbC,SAA0B,OAAO,KAE5C,MAAMC,EAAWD,SAASE,eAAeH,GACrCE,GAAUA,EAASE,SAEvB,MAAMC,EAAQJ,SAASK,cAAc,SAKrC,OAJAD,EAAML,GAAKA,EACXK,EAAME,YAAcR,EACpBE,SAASO,KAAKC,YAAYJ,GAEnBA,CACT,CAEO,SAASK,qBACd,OAAOZ,aAAaN,EAAOI,UAAW,mBACxC,CAEO,SAASe,wBACd,OAAOb,aAAaN,EAAOK,aAAc,mBAC3C"}
@@ -1,34 +0,0 @@
1
- // Auto-generated browser styles - DO NOT EDIT
2
- // Generated from CSS files by build-styles.js
3
-
4
- export const styles = {
5
- variables: "/* Shared CSS custom properties - extracted from your existing styles */\r\n:root {\r\n /* Colors */\r\n --color-primary: #007bff;\r\n --color-primary-hover: #0056b3;\r\n --color-secondary: #6c757d;\r\n --color-success: #28a745;\r\n --color-warning: #ffc107;\r\n --color-danger: #dc3545;\r\n --color-info: #17a2b8;\r\n \r\n /* Backgrounds */\r\n --bg-primary: #ffffff;\r\n --bg-secondary: #f8f9fa;\r\n --bg-light: #ededed;\r\n --bg-dark: #343a40;\r\n \r\n /* Text Colors */\r\n --text-primary: #212529;\r\n --text-secondary: #6c757d;\r\n --text-muted: #495057;\r\n --text-white: #ffffff;\r\n \r\n /* Borders */\r\n --border-color: #ddd;\r\n --border-color-light: #e9ecef;\r\n --border-color-dark: #919090ff;\r\n \r\n /* Spacing */\r\n --spacing-xs: 4px;\r\n --spacing-sm: 8px;\r\n --spacing-md: 12px;\r\n --spacing-lg: 16px;\r\n --spacing-xl: 20px;\r\n --spacing-2xl: 24px;\r\n --spacing-3xl: 32px;\r\n \r\n /* Typography */\r\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\r\n --font-size-xs: 11px;\r\n --font-size-sm: 12px;\r\n --font-size-base: 14px;\r\n --font-size-md: 16px;\r\n --font-size-lg: 18px;\r\n --font-size-xl: 20px;\r\n --font-weight-normal: 400;\r\n --font-weight-medium: 500;\r\n --font-weight-semibold: 600;\r\n --font-weight-bold: 700;\r\n \r\n /* Border Radius */\r\n --border-radius-sm: 4px;\r\n --border-radius-md: 6px;\r\n --border-radius-lg: 8px;\r\n --border-radius-xl: 12px;\r\n \r\n /* Shadows */\r\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\r\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\r\n \r\n /* Z-index */\r\n --z-extension: 999999999;\r\n --z-modal: 1050;\r\n --z-dropdown: 1000;\r\n \r\n /* Transitions */\r\n --transition-fast: 150ms ease;\r\n --transition-base: 250ms ease;\r\n --transition-slow: 350ms ease;\r\n}",
6
- footer: "/* LoopNet Extension Footer - Extracted from content.js AS-IS */\r\n.ln-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background: var(--bg-light, #ededed);\r\n border-top: 1px solid var(--border-color-dark, #919090ff);\r\n box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));\r\n z-index: var(--z-extension, 999999999);\r\n padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n font-size: var(--font-size-md, 16px);\r\n color: var(--text-primary, #212529);\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.ln-footer-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n max-width: 1600px;\r\n margin: 0 auto;\r\n gap: var(--spacing-xl, 20px);\r\n}\r\n\r\n.ln-footer-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.ln-footer-right {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-lg, 16px);\r\n flex-shrink: 0;\r\n}\r\n\r\n.ln-metrics-grid {\r\n display: grid;\r\n grid-template-columns: repeat(9, 1fr);\r\n gap: var(--spacing-lg, 16px);\r\n align-items: start;\r\n}\r\n\r\n.ln-metric-column {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-metric {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n min-width: 0;\r\n}\r\n\r\n.ln-metric-label {\r\n font-size: var(--font-size-xs, 11px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n line-height: 1;\r\n}\r\n\r\n.ln-metric-value {\r\n font-weight: var(--font-weight-semibold, 600);\r\n font-size: var(--font-size-md, 16px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 1.2;\r\n}\r\n\r\n.ln-price {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\n.ln-cashflow.negative {\r\n color: var(--color-danger, #dc3545);\r\n}\r\n\r\n.ln-cashflow.positive {\r\n color: var(--color-success, #28a745);\r\n}\r\n\r\n.ln-phone {\r\n color: var(--color-info, #17a2b8);\r\n cursor: pointer;\r\n text-decoration: underline;\r\n}\r\n\r\n.ln-phone:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-property-type-dropdown {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n background: var(--bg-primary, #ffffff);\r\n color: var(--text-primary, #212529);\r\n cursor: pointer;\r\n min-width: 120px;\r\n}\r\n\r\n.ln-property-type-dropdown:focus {\r\n outline: none;\r\n border-color: var(--color-primary, #007bff);\r\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.ln-export-button {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n font-weight: var(--font-weight-medium, 500);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-export-button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.ln-export-icon {\r\n width: 16px;\r\n height: 16px;\r\n fill: currentColor;\r\n}\r\n\r\n.ln-discount-controls {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-discount-input {\r\n width: 60px;\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-sm, 12px);\r\n text-align: center;\r\n}\r\n\r\n.ln-discount-button {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n background: var(--color-secondary, #6c757d);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-xs, 11px);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-discount-button:hover {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-discount-button.active {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n@media (max-width: 1400px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(6, 1fr);\r\n }\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n .ln-footer {\r\n padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);\r\n }\r\n \r\n .ln-footer-container {\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n \r\n .ln-footer-right {\r\n width: 100%;\r\n justify-content: flex-end;\r\n }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metric-value {\r\n font-size: var(--font-size-base, 14px);\r\n }\r\n}",
7
- dashboard: "/* Dashboard styles - extracted from existing dashboard CSS AS-IS */\r\n\r\n/* Base dashboard styles */\r\n.dashboard-container {\r\n min-height: 100vh;\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n color: var(--text-primary, #212529);\r\n}\r\n\r\n.header {\r\n background: var(--bg-primary, white);\r\n padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));\r\n}\r\n\r\n.header h1 {\r\n color: var(--color-primary, #007bff);\r\n margin-bottom: var(--spacing-xl, 20px);\r\n}\r\n\r\n.filters {\r\n display: flex;\r\n gap: var(--spacing-lg, 15px);\r\n flex-wrap: wrap;\r\n align-items: end;\r\n}\r\n\r\n.filter-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-xs, 5px);\r\n}\r\n\r\n.filter-group label {\r\n font-size: var(--font-size-sm, 12px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.filter-group input, .filter-group select {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n min-width: 120px;\r\n}\r\n\r\n.filter-group button {\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n cursor: pointer;\r\n}\r\n\r\n.filter-group button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.stats {\r\n display: flex;\r\n gap: var(--spacing-xl, 20px);\r\n margin-top: var(--spacing-xl, 20px);\r\n font-size: var(--font-size-base, 14px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.table-container {\r\n background: var(--bg-primary, white);\r\n border-radius: var(--border-radius-lg, 8px);\r\n box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));\r\n overflow: hidden;\r\n}\r\n\r\ntable {\r\n width: 100%;\r\n border-collapse: collapse;\r\n}\r\n\r\nth, td {\r\n padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);\r\n text-align: left;\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n}\r\n\r\nth {\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-weight: var(--font-weight-semibold, 600);\r\n color: var(--text-muted, #495057);\r\n font-size: var(--font-size-sm, 12px);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\nth a {\r\n color: var(--text-muted, #495057);\r\n text-decoration: none;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-xs, 4px);\r\n}\r\n\r\nth a:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\nth a.sort-active {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\ntr:hover {\r\n background: var(--bg-secondary, #f8f9fa);\r\n}\r\n\r\n.property-link {\r\n color: var(--color-primary, #007bff);\r\n text-decoration: none;\r\n font-weight: var(--font-weight-medium, 500);\r\n}\r\n\r\n.property-link:hover {\r\n text-decoration: underline;\r\n}\r\n\r\n.contract-state {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border-radius: var(--border-radius-xl, 12px);\r\n font-size: var(--font-size-xs, 11px);\r\n font-weight: var(--font-weight-semibold, 600);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.contract-none { \r\n background: var(--border-color-light, #e9ecef); \r\n color: var(--text-muted, #495057); \r\n}\r\n\r\n.contract-loi_sent { \r\n background: #fff3cd; \r\n color: #856404; \r\n}\r\n\r\n.contract-loi_agreed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-loi_rejected { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.contract-contract_signed { \r\n background: #d1ecf1; \r\n color: #0c5460; \r\n}\r\n\r\n.contract-closed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-not_interested { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.date-cell {\r\n font-size: var(--font-size-sm, 13px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.pagination {\r\n display: flex;\r\n justify-content: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-xl, 20px);\r\n padding: var(--spacing-xl, 20px);\r\n}\r\n\r\n.page-link {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n background: var(--bg-primary, white);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n color: var(--text-primary, #212529);\r\n text-decoration: none;\r\n transition: all var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.page-link:hover {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}\r\n\r\n.page-link.active {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}",
8
-
9
- // Combined styles
10
- extension: "/* Shared CSS custom properties - extracted from your existing styles */\r\n:root {\r\n /* Colors */\r\n --color-primary: #007bff;\r\n --color-primary-hover: #0056b3;\r\n --color-secondary: #6c757d;\r\n --color-success: #28a745;\r\n --color-warning: #ffc107;\r\n --color-danger: #dc3545;\r\n --color-info: #17a2b8;\r\n \r\n /* Backgrounds */\r\n --bg-primary: #ffffff;\r\n --bg-secondary: #f8f9fa;\r\n --bg-light: #ededed;\r\n --bg-dark: #343a40;\r\n \r\n /* Text Colors */\r\n --text-primary: #212529;\r\n --text-secondary: #6c757d;\r\n --text-muted: #495057;\r\n --text-white: #ffffff;\r\n \r\n /* Borders */\r\n --border-color: #ddd;\r\n --border-color-light: #e9ecef;\r\n --border-color-dark: #919090ff;\r\n \r\n /* Spacing */\r\n --spacing-xs: 4px;\r\n --spacing-sm: 8px;\r\n --spacing-md: 12px;\r\n --spacing-lg: 16px;\r\n --spacing-xl: 20px;\r\n --spacing-2xl: 24px;\r\n --spacing-3xl: 32px;\r\n \r\n /* Typography */\r\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\r\n --font-size-xs: 11px;\r\n --font-size-sm: 12px;\r\n --font-size-base: 14px;\r\n --font-size-md: 16px;\r\n --font-size-lg: 18px;\r\n --font-size-xl: 20px;\r\n --font-weight-normal: 400;\r\n --font-weight-medium: 500;\r\n --font-weight-semibold: 600;\r\n --font-weight-bold: 700;\r\n \r\n /* Border Radius */\r\n --border-radius-sm: 4px;\r\n --border-radius-md: 6px;\r\n --border-radius-lg: 8px;\r\n --border-radius-xl: 12px;\r\n \r\n /* Shadows */\r\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\r\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\r\n \r\n /* Z-index */\r\n --z-extension: 999999999;\r\n --z-modal: 1050;\r\n --z-dropdown: 1000;\r\n \r\n /* Transitions */\r\n --transition-fast: 150ms ease;\r\n --transition-base: 250ms ease;\r\n --transition-slow: 350ms ease;\r\n}/* LoopNet Extension Footer - Extracted from content.js AS-IS */\r\n.ln-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background: var(--bg-light, #ededed);\r\n border-top: 1px solid var(--border-color-dark, #919090ff);\r\n box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));\r\n z-index: var(--z-extension, 999999999);\r\n padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n font-size: var(--font-size-md, 16px);\r\n color: var(--text-primary, #212529);\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.ln-footer-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n max-width: 1600px;\r\n margin: 0 auto;\r\n gap: var(--spacing-xl, 20px);\r\n}\r\n\r\n.ln-footer-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.ln-footer-right {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-lg, 16px);\r\n flex-shrink: 0;\r\n}\r\n\r\n.ln-metrics-grid {\r\n display: grid;\r\n grid-template-columns: repeat(9, 1fr);\r\n gap: var(--spacing-lg, 16px);\r\n align-items: start;\r\n}\r\n\r\n.ln-metric-column {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-metric {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n min-width: 0;\r\n}\r\n\r\n.ln-metric-label {\r\n font-size: var(--font-size-xs, 11px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n line-height: 1;\r\n}\r\n\r\n.ln-metric-value {\r\n font-weight: var(--font-weight-semibold, 600);\r\n font-size: var(--font-size-md, 16px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n line-height: 1.2;\r\n}\r\n\r\n.ln-price {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\n.ln-cashflow.negative {\r\n color: var(--color-danger, #dc3545);\r\n}\r\n\r\n.ln-cashflow.positive {\r\n color: var(--color-success, #28a745);\r\n}\r\n\r\n.ln-phone {\r\n color: var(--color-info, #17a2b8);\r\n cursor: pointer;\r\n text-decoration: underline;\r\n}\r\n\r\n.ln-phone:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-property-type-dropdown {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n background: var(--bg-primary, #ffffff);\r\n color: var(--text-primary, #212529);\r\n cursor: pointer;\r\n min-width: 120px;\r\n}\r\n\r\n.ln-property-type-dropdown:focus {\r\n outline: none;\r\n border-color: var(--color-primary, #007bff);\r\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\r\n}\r\n\r\n.ln-export-button {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n font-weight: var(--font-weight-medium, 500);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-export-button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.ln-export-icon {\r\n width: 16px;\r\n height: 16px;\r\n fill: currentColor;\r\n}\r\n\r\n.ln-discount-controls {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-sm, 8px);\r\n}\r\n\r\n.ln-discount-input {\r\n width: 60px;\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-sm, 12px);\r\n text-align: center;\r\n}\r\n\r\n.ln-discount-button {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n background: var(--color-secondary, #6c757d);\r\n color: var(--text-white, #ffffff);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-xs, 11px);\r\n cursor: pointer;\r\n transition: background-color var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.ln-discount-button:hover {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n.ln-discount-button.active {\r\n background: var(--color-primary, #007bff);\r\n}\r\n\r\n@media (max-width: 1400px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(6, 1fr);\r\n }\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n .ln-footer {\r\n padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);\r\n }\r\n \r\n .ln-footer-container {\r\n flex-direction: column;\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n \r\n .ln-footer-right {\r\n width: 100%;\r\n justify-content: flex-end;\r\n }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n .ln-metrics-grid {\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: var(--spacing-md, 12px);\r\n }\r\n \r\n .ln-metric-value {\r\n font-size: var(--font-size-base, 14px);\r\n }\r\n}",
11
- dashboardApp: "/* Shared CSS custom properties - extracted from your existing styles */\r\n:root {\r\n /* Colors */\r\n --color-primary: #007bff;\r\n --color-primary-hover: #0056b3;\r\n --color-secondary: #6c757d;\r\n --color-success: #28a745;\r\n --color-warning: #ffc107;\r\n --color-danger: #dc3545;\r\n --color-info: #17a2b8;\r\n \r\n /* Backgrounds */\r\n --bg-primary: #ffffff;\r\n --bg-secondary: #f8f9fa;\r\n --bg-light: #ededed;\r\n --bg-dark: #343a40;\r\n \r\n /* Text Colors */\r\n --text-primary: #212529;\r\n --text-secondary: #6c757d;\r\n --text-muted: #495057;\r\n --text-white: #ffffff;\r\n \r\n /* Borders */\r\n --border-color: #ddd;\r\n --border-color-light: #e9ecef;\r\n --border-color-dark: #919090ff;\r\n \r\n /* Spacing */\r\n --spacing-xs: 4px;\r\n --spacing-sm: 8px;\r\n --spacing-md: 12px;\r\n --spacing-lg: 16px;\r\n --spacing-xl: 20px;\r\n --spacing-2xl: 24px;\r\n --spacing-3xl: 32px;\r\n \r\n /* Typography */\r\n --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\r\n --font-size-xs: 11px;\r\n --font-size-sm: 12px;\r\n --font-size-base: 14px;\r\n --font-size-md: 16px;\r\n --font-size-lg: 18px;\r\n --font-size-xl: 20px;\r\n --font-weight-normal: 400;\r\n --font-weight-medium: 500;\r\n --font-weight-semibold: 600;\r\n --font-weight-bold: 700;\r\n \r\n /* Border Radius */\r\n --border-radius-sm: 4px;\r\n --border-radius-md: 6px;\r\n --border-radius-lg: 8px;\r\n --border-radius-xl: 12px;\r\n \r\n /* Shadows */\r\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\r\n --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);\r\n --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\r\n \r\n /* Z-index */\r\n --z-extension: 999999999;\r\n --z-modal: 1050;\r\n --z-dropdown: 1000;\r\n \r\n /* Transitions */\r\n --transition-fast: 150ms ease;\r\n --transition-base: 250ms ease;\r\n --transition-slow: 350ms ease;\r\n}/* Dashboard styles - extracted from existing dashboard CSS AS-IS */\r\n\r\n/* Base dashboard styles */\r\n.dashboard-container {\r\n min-height: 100vh;\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);\r\n color: var(--text-primary, #212529);\r\n}\r\n\r\n.header {\r\n background: var(--bg-primary, white);\r\n padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));\r\n}\r\n\r\n.header h1 {\r\n color: var(--color-primary, #007bff);\r\n margin-bottom: var(--spacing-xl, 20px);\r\n}\r\n\r\n.filters {\r\n display: flex;\r\n gap: var(--spacing-lg, 15px);\r\n flex-wrap: wrap;\r\n align-items: end;\r\n}\r\n\r\n.filter-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--spacing-xs, 5px);\r\n}\r\n\r\n.filter-group label {\r\n font-size: var(--font-size-sm, 12px);\r\n color: var(--text-secondary, #6c757d);\r\n font-weight: var(--font-weight-medium, 500);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.filter-group input, .filter-group select {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n min-width: 120px;\r\n}\r\n\r\n.filter-group button {\r\n padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border: none;\r\n border-radius: var(--border-radius-sm, 4px);\r\n font-size: var(--font-size-base, 14px);\r\n cursor: pointer;\r\n}\r\n\r\n.filter-group button:hover {\r\n background: var(--color-primary-hover, #0056b3);\r\n}\r\n\r\n.stats {\r\n display: flex;\r\n gap: var(--spacing-xl, 20px);\r\n margin-top: var(--spacing-xl, 20px);\r\n font-size: var(--font-size-base, 14px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.table-container {\r\n background: var(--bg-primary, white);\r\n border-radius: var(--border-radius-lg, 8px);\r\n box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));\r\n overflow: hidden;\r\n}\r\n\r\ntable {\r\n width: 100%;\r\n border-collapse: collapse;\r\n}\r\n\r\nth, td {\r\n padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);\r\n text-align: left;\r\n border-bottom: 1px solid var(--border-color-light, #e9ecef);\r\n}\r\n\r\nth {\r\n background: var(--bg-secondary, #f8f9fa);\r\n font-weight: var(--font-weight-semibold, 600);\r\n color: var(--text-muted, #495057);\r\n font-size: var(--font-size-sm, 12px);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\nth a {\r\n color: var(--text-muted, #495057);\r\n text-decoration: none;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--spacing-xs, 4px);\r\n}\r\n\r\nth a:hover {\r\n color: var(--color-primary, #007bff);\r\n}\r\n\r\nth a.sort-active {\r\n color: var(--color-primary, #007bff);\r\n font-weight: var(--font-weight-bold, 700);\r\n}\r\n\r\ntr:hover {\r\n background: var(--bg-secondary, #f8f9fa);\r\n}\r\n\r\n.property-link {\r\n color: var(--color-primary, #007bff);\r\n text-decoration: none;\r\n font-weight: var(--font-weight-medium, 500);\r\n}\r\n\r\n.property-link:hover {\r\n text-decoration: underline;\r\n}\r\n\r\n.contract-state {\r\n padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);\r\n border-radius: var(--border-radius-xl, 12px);\r\n font-size: var(--font-size-xs, 11px);\r\n font-weight: var(--font-weight-semibold, 600);\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n}\r\n\r\n.contract-none { \r\n background: var(--border-color-light, #e9ecef); \r\n color: var(--text-muted, #495057); \r\n}\r\n\r\n.contract-loi_sent { \r\n background: #fff3cd; \r\n color: #856404; \r\n}\r\n\r\n.contract-loi_agreed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-loi_rejected { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.contract-contract_signed { \r\n background: #d1ecf1; \r\n color: #0c5460; \r\n}\r\n\r\n.contract-closed { \r\n background: #d4edda; \r\n color: #155724; \r\n}\r\n\r\n.contract-not_interested { \r\n background: #f8d7da; \r\n color: #721c24; \r\n}\r\n\r\n.date-cell {\r\n font-size: var(--font-size-sm, 13px);\r\n color: var(--text-secondary, #6c757d);\r\n}\r\n\r\n.pagination {\r\n display: flex;\r\n justify-content: center;\r\n gap: var(--spacing-sm, 8px);\r\n margin-top: var(--spacing-xl, 20px);\r\n padding: var(--spacing-xl, 20px);\r\n}\r\n\r\n.page-link {\r\n padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);\r\n background: var(--bg-primary, white);\r\n border: 1px solid var(--border-color, #ddd);\r\n border-radius: var(--border-radius-sm, 4px);\r\n color: var(--text-primary, #212529);\r\n text-decoration: none;\r\n transition: all var(--transition-fast, 150ms ease);\r\n}\r\n\r\n.page-link:hover {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}\r\n\r\n.page-link.active {\r\n background: var(--color-primary, #007bff);\r\n color: var(--text-white, white);\r\n border-color: var(--color-primary, #007bff);\r\n}"
12
- };
13
-
14
- export function injectStyles(cssString, id = "injected-styles") {
15
- if (typeof document === 'undefined') return null;
16
-
17
- const existing = document.getElementById(id);
18
- if (existing) existing.remove();
19
-
20
- const style = document.createElement("style");
21
- style.id = id;
22
- style.textContent = cssString;
23
- document.head.appendChild(style);
24
-
25
- return style;
26
- }
27
-
28
- export function injectFooterStyles() {
29
- return injectStyles(styles.extension, "ln-footer-styles");
30
- }
31
-
32
- export function injectDashboardStyles() {
33
- return injectStyles(styles.dashboardApp, "dashboard-styles");
34
- }
@@ -1,209 +0,0 @@
1
- /* Dashboard styles - extracted from existing dashboard CSS AS-IS */
2
-
3
- /* Base dashboard styles */
4
- .dashboard-container {
5
- min-height: 100vh;
6
- background: var(--bg-secondary, #f8f9fa);
7
- font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);
8
- color: var(--text-primary, #212529);
9
- }
10
-
11
- .header {
12
- background: var(--bg-primary, white);
13
- padding: var(--spacing-xl, 20px) var(--spacing-2xl, 24px);
14
- border-bottom: 1px solid var(--border-color-light, #e9ecef);
15
- box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));
16
- }
17
-
18
- .header h1 {
19
- color: var(--color-primary, #007bff);
20
- margin-bottom: var(--spacing-xl, 20px);
21
- }
22
-
23
- .filters {
24
- display: flex;
25
- gap: var(--spacing-lg, 15px);
26
- flex-wrap: wrap;
27
- align-items: end;
28
- }
29
-
30
- .filter-group {
31
- display: flex;
32
- flex-direction: column;
33
- gap: var(--spacing-xs, 5px);
34
- }
35
-
36
- .filter-group label {
37
- font-size: var(--font-size-sm, 12px);
38
- color: var(--text-secondary, #6c757d);
39
- font-weight: var(--font-weight-medium, 500);
40
- text-transform: uppercase;
41
- letter-spacing: 0.5px;
42
- }
43
-
44
- .filter-group input, .filter-group select {
45
- padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);
46
- border: 1px solid var(--border-color, #ddd);
47
- border-radius: var(--border-radius-sm, 4px);
48
- font-size: var(--font-size-base, 14px);
49
- min-width: 120px;
50
- }
51
-
52
- .filter-group button {
53
- padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);
54
- background: var(--color-primary, #007bff);
55
- color: var(--text-white, white);
56
- border: none;
57
- border-radius: var(--border-radius-sm, 4px);
58
- font-size: var(--font-size-base, 14px);
59
- cursor: pointer;
60
- }
61
-
62
- .filter-group button:hover {
63
- background: var(--color-primary-hover, #0056b3);
64
- }
65
-
66
- .stats {
67
- display: flex;
68
- gap: var(--spacing-xl, 20px);
69
- margin-top: var(--spacing-xl, 20px);
70
- font-size: var(--font-size-base, 14px);
71
- color: var(--text-secondary, #6c757d);
72
- }
73
-
74
- .table-container {
75
- background: var(--bg-primary, white);
76
- border-radius: var(--border-radius-lg, 8px);
77
- box-shadow: var(--shadow-base, 0 2px 4px rgba(0,0,0,0.1));
78
- overflow: hidden;
79
- }
80
-
81
- table {
82
- width: 100%;
83
- border-collapse: collapse;
84
- }
85
-
86
- th, td {
87
- padding: var(--spacing-lg, 15px) var(--spacing-md, 12px);
88
- text-align: left;
89
- border-bottom: 1px solid var(--border-color-light, #e9ecef);
90
- }
91
-
92
- th {
93
- background: var(--bg-secondary, #f8f9fa);
94
- font-weight: var(--font-weight-semibold, 600);
95
- color: var(--text-muted, #495057);
96
- font-size: var(--font-size-sm, 12px);
97
- text-transform: uppercase;
98
- letter-spacing: 0.5px;
99
- }
100
-
101
- th a {
102
- color: var(--text-muted, #495057);
103
- text-decoration: none;
104
- display: flex;
105
- align-items: center;
106
- gap: var(--spacing-xs, 4px);
107
- }
108
-
109
- th a:hover {
110
- color: var(--color-primary, #007bff);
111
- }
112
-
113
- th a.sort-active {
114
- color: var(--color-primary, #007bff);
115
- font-weight: var(--font-weight-bold, 700);
116
- }
117
-
118
- tr:hover {
119
- background: var(--bg-secondary, #f8f9fa);
120
- }
121
-
122
- .property-link {
123
- color: var(--color-primary, #007bff);
124
- text-decoration: none;
125
- font-weight: var(--font-weight-medium, 500);
126
- }
127
-
128
- .property-link:hover {
129
- text-decoration: underline;
130
- }
131
-
132
- .contract-state {
133
- padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);
134
- border-radius: var(--border-radius-xl, 12px);
135
- font-size: var(--font-size-xs, 11px);
136
- font-weight: var(--font-weight-semibold, 600);
137
- text-transform: uppercase;
138
- letter-spacing: 0.5px;
139
- }
140
-
141
- .contract-none {
142
- background: var(--border-color-light, #e9ecef);
143
- color: var(--text-muted, #495057);
144
- }
145
-
146
- .contract-loi_sent {
147
- background: #fff3cd;
148
- color: #856404;
149
- }
150
-
151
- .contract-loi_agreed {
152
- background: #d4edda;
153
- color: #155724;
154
- }
155
-
156
- .contract-loi_rejected {
157
- background: #f8d7da;
158
- color: #721c24;
159
- }
160
-
161
- .contract-contract_signed {
162
- background: #d1ecf1;
163
- color: #0c5460;
164
- }
165
-
166
- .contract-closed {
167
- background: #d4edda;
168
- color: #155724;
169
- }
170
-
171
- .contract-not_interested {
172
- background: #f8d7da;
173
- color: #721c24;
174
- }
175
-
176
- .date-cell {
177
- font-size: var(--font-size-sm, 13px);
178
- color: var(--text-secondary, #6c757d);
179
- }
180
-
181
- .pagination {
182
- display: flex;
183
- justify-content: center;
184
- gap: var(--spacing-sm, 8px);
185
- margin-top: var(--spacing-xl, 20px);
186
- padding: var(--spacing-xl, 20px);
187
- }
188
-
189
- .page-link {
190
- padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);
191
- background: var(--bg-primary, white);
192
- border: 1px solid var(--border-color, #ddd);
193
- border-radius: var(--border-radius-sm, 4px);
194
- color: var(--text-primary, #212529);
195
- text-decoration: none;
196
- transition: all var(--transition-fast, 150ms ease);
197
- }
198
-
199
- .page-link:hover {
200
- background: var(--color-primary, #007bff);
201
- color: var(--text-white, white);
202
- border-color: var(--color-primary, #007bff);
203
- }
204
-
205
- .page-link.active {
206
- background: var(--color-primary, #007bff);
207
- color: var(--text-white, white);
208
- border-color: var(--color-primary, #007bff);
209
- }
@@ -1,216 +0,0 @@
1
- /* LoopNet Extension Footer - Extracted from content.js AS-IS */
2
- .ln-footer {
3
- position: fixed;
4
- bottom: 0;
5
- left: 0;
6
- right: 0;
7
- background: var(--bg-light, #ededed);
8
- border-top: 1px solid var(--border-color-dark, #919090ff);
9
- box-shadow: var(--shadow-lg, 0 -8px 32px rgba(0, 0, 0, 0.08));
10
- z-index: var(--z-extension, 999999999);
11
- padding: var(--spacing-lg, 16px) var(--spacing-2xl, 24px);
12
- font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);
13
- font-size: var(--font-size-md, 16px);
14
- color: var(--text-primary, #212529);
15
- width: 100%;
16
- box-sizing: border-box;
17
- }
18
-
19
- .ln-footer-container {
20
- display: flex;
21
- align-items: center;
22
- justify-content: space-between;
23
- max-width: 1600px;
24
- margin: 0 auto;
25
- gap: var(--spacing-xl, 20px);
26
- }
27
-
28
- .ln-footer-content {
29
- display: flex;
30
- flex-direction: column;
31
- gap: var(--spacing-md, 12px);
32
- flex: 1;
33
- width: 100%;
34
- }
35
-
36
- .ln-footer-right {
37
- display: flex;
38
- align-items: center;
39
- gap: var(--spacing-lg, 16px);
40
- flex-shrink: 0;
41
- }
42
-
43
- .ln-metrics-grid {
44
- display: grid;
45
- grid-template-columns: repeat(9, 1fr);
46
- gap: var(--spacing-lg, 16px);
47
- align-items: start;
48
- }
49
-
50
- .ln-metric-column {
51
- display: flex;
52
- flex-direction: column;
53
- gap: var(--spacing-sm, 8px);
54
- }
55
-
56
- .ln-metric {
57
- display: flex;
58
- flex-direction: column;
59
- gap: 2px;
60
- min-width: 0;
61
- }
62
-
63
- .ln-metric-label {
64
- font-size: var(--font-size-xs, 11px);
65
- color: var(--text-secondary, #6c757d);
66
- font-weight: var(--font-weight-medium, 500);
67
- text-transform: uppercase;
68
- letter-spacing: 0.5px;
69
- line-height: 1;
70
- }
71
-
72
- .ln-metric-value {
73
- font-weight: var(--font-weight-semibold, 600);
74
- font-size: var(--font-size-md, 16px);
75
- white-space: nowrap;
76
- overflow: hidden;
77
- text-overflow: ellipsis;
78
- line-height: 1.2;
79
- }
80
-
81
- .ln-price {
82
- color: var(--color-primary, #007bff);
83
- font-weight: var(--font-weight-bold, 700);
84
- }
85
-
86
- .ln-cashflow.negative {
87
- color: var(--color-danger, #dc3545);
88
- }
89
-
90
- .ln-cashflow.positive {
91
- color: var(--color-success, #28a745);
92
- }
93
-
94
- .ln-phone {
95
- color: var(--color-info, #17a2b8);
96
- cursor: pointer;
97
- text-decoration: underline;
98
- }
99
-
100
- .ln-phone:hover {
101
- color: var(--color-primary, #007bff);
102
- }
103
-
104
- .ln-property-type-dropdown {
105
- padding: var(--spacing-sm, 8px) var(--spacing-md, 12px);
106
- border: 1px solid var(--border-color, #ddd);
107
- border-radius: var(--border-radius-sm, 4px);
108
- font-size: var(--font-size-base, 14px);
109
- background: var(--bg-primary, #ffffff);
110
- color: var(--text-primary, #212529);
111
- cursor: pointer;
112
- min-width: 120px;
113
- }
114
-
115
- .ln-property-type-dropdown:focus {
116
- outline: none;
117
- border-color: var(--color-primary, #007bff);
118
- box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
119
- }
120
-
121
- .ln-export-button {
122
- display: flex;
123
- align-items: center;
124
- gap: var(--spacing-sm, 8px);
125
- padding: var(--spacing-sm, 8px) var(--spacing-lg, 16px);
126
- background: var(--color-primary, #007bff);
127
- color: var(--text-white, #ffffff);
128
- border: none;
129
- border-radius: var(--border-radius-sm, 4px);
130
- font-size: var(--font-size-base, 14px);
131
- font-weight: var(--font-weight-medium, 500);
132
- cursor: pointer;
133
- transition: background-color var(--transition-fast, 150ms ease);
134
- }
135
-
136
- .ln-export-button:hover {
137
- background: var(--color-primary-hover, #0056b3);
138
- }
139
-
140
- .ln-export-icon {
141
- width: 16px;
142
- height: 16px;
143
- fill: currentColor;
144
- }
145
-
146
- .ln-discount-controls {
147
- display: flex;
148
- align-items: center;
149
- gap: var(--spacing-sm, 8px);
150
- margin-top: var(--spacing-sm, 8px);
151
- }
152
-
153
- .ln-discount-input {
154
- width: 60px;
155
- padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);
156
- border: 1px solid var(--border-color, #ddd);
157
- border-radius: var(--border-radius-sm, 4px);
158
- font-size: var(--font-size-sm, 12px);
159
- text-align: center;
160
- }
161
-
162
- .ln-discount-button {
163
- padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);
164
- background: var(--color-secondary, #6c757d);
165
- color: var(--text-white, #ffffff);
166
- border: none;
167
- border-radius: var(--border-radius-sm, 4px);
168
- font-size: var(--font-size-xs, 11px);
169
- cursor: pointer;
170
- transition: background-color var(--transition-fast, 150ms ease);
171
- }
172
-
173
- .ln-discount-button:hover {
174
- background: var(--color-primary, #007bff);
175
- }
176
-
177
- .ln-discount-button.active {
178
- background: var(--color-primary, #007bff);
179
- }
180
-
181
- @media (max-width: 1400px) {
182
- .ln-metrics-grid {
183
- grid-template-columns: repeat(6, 1fr);
184
- }
185
- }
186
-
187
- @media (max-width: 1024px) {
188
- .ln-footer {
189
- padding: var(--spacing-md, 12px) var(--spacing-lg, 16px);
190
- }
191
-
192
- .ln-footer-container {
193
- flex-direction: column;
194
- gap: var(--spacing-md, 12px);
195
- }
196
-
197
- .ln-metrics-grid {
198
- grid-template-columns: repeat(4, 1fr);
199
- }
200
-
201
- .ln-footer-right {
202
- width: 100%;
203
- justify-content: flex-end;
204
- }
205
- }
206
-
207
- @media (max-width: 768px) {
208
- .ln-metrics-grid {
209
- grid-template-columns: repeat(3, 1fr);
210
- gap: var(--spacing-md, 12px);
211
- }
212
-
213
- .ln-metric-value {
214
- font-size: var(--font-size-base, 14px);
215
- }
216
- }
@@ -1,41 +0,0 @@
1
- // Simple CSS injection utilities - no duplication, just read CSS files and inject
2
-
3
- // Import CSS files as strings (will be handled by build process)
4
- import variablesCSS from "./variables.css?raw";
5
- import footerCSS from "./footer.css?raw";
6
- import dashboardCSS from "./dashboard.css?raw";
7
-
8
- // Combined CSS strings
9
- export const styles = {
10
- variables: variablesCSS,
11
- footer: footerCSS,
12
- dashboard: dashboardCSS,
13
-
14
- // Combined styles for different contexts
15
- extension: variablesCSS + footerCSS,
16
- dashboardApp: variablesCSS + dashboardCSS
17
- };
18
-
19
- // Simple injection function
20
- export function injectStyles(cssString, id = "injected-styles") {
21
- if (typeof document === 'undefined') return null;
22
-
23
- const existing = document.getElementById(id);
24
- if (existing) existing.remove();
25
-
26
- const style = document.createElement("style");
27
- style.id = id;
28
- style.textContent = cssString;
29
- document.head.appendChild(style);
30
-
31
- return style;
32
- }
33
-
34
- // Specific injection functions for each project
35
- export function injectFooterStyles() {
36
- return injectStyles(styles.extension, "ln-footer-styles");
37
- }
38
-
39
- export function injectDashboardStyles() {
40
- return injectStyles(styles.dashboardApp, "dashboard-styles");
41
- }
@@ -1,73 +0,0 @@
1
- /* Shared CSS custom properties - extracted from your existing styles */
2
- :root {
3
- /* Colors */
4
- --color-primary: #007bff;
5
- --color-primary-hover: #0056b3;
6
- --color-secondary: #6c757d;
7
- --color-success: #28a745;
8
- --color-warning: #ffc107;
9
- --color-danger: #dc3545;
10
- --color-info: #17a2b8;
11
-
12
- /* Backgrounds */
13
- --bg-primary: #ffffff;
14
- --bg-secondary: #f8f9fa;
15
- --bg-light: #ededed;
16
- --bg-dark: #343a40;
17
-
18
- /* Text Colors */
19
- --text-primary: #212529;
20
- --text-secondary: #6c757d;
21
- --text-muted: #495057;
22
- --text-white: #ffffff;
23
-
24
- /* Borders */
25
- --border-color: #ddd;
26
- --border-color-light: #e9ecef;
27
- --border-color-dark: #919090ff;
28
-
29
- /* Spacing */
30
- --spacing-xs: 4px;
31
- --spacing-sm: 8px;
32
- --spacing-md: 12px;
33
- --spacing-lg: 16px;
34
- --spacing-xl: 20px;
35
- --spacing-2xl: 24px;
36
- --spacing-3xl: 32px;
37
-
38
- /* Typography */
39
- --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
40
- --font-size-xs: 11px;
41
- --font-size-sm: 12px;
42
- --font-size-base: 14px;
43
- --font-size-md: 16px;
44
- --font-size-lg: 18px;
45
- --font-size-xl: 20px;
46
- --font-weight-normal: 400;
47
- --font-weight-medium: 500;
48
- --font-weight-semibold: 600;
49
- --font-weight-bold: 700;
50
-
51
- /* Border Radius */
52
- --border-radius-sm: 4px;
53
- --border-radius-md: 6px;
54
- --border-radius-lg: 8px;
55
- --border-radius-xl: 12px;
56
-
57
- /* Shadows */
58
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
59
- --shadow-base: 0 2px 4px rgba(0, 0, 0, 0.1);
60
- --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
61
- --shadow-lg: 0 -8px 32px rgba(0, 0, 0, 0.08);
62
- --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);
63
-
64
- /* Z-index */
65
- --z-extension: 999999999;
66
- --z-modal: 1050;
67
- --z-dropdown: 1000;
68
-
69
- /* Transitions */
70
- --transition-fast: 150ms ease;
71
- --transition-base: 250ms ease;
72
- --transition-slow: 350ms ease;
73
- }