@archerjessop/utilities 3.5.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/styles/browser.js +2 -0
- package/dist/styles/browser.js.map +1 -0
- package/package.json +47 -45
- package/src/styles/browser.js +34 -0
- package/src/styles/dashboard.css +209 -0
- package/src/styles/footer.css +216 -0
- package/src/styles/index.js +41 -0
- package/src/styles/variables.css +73 -0
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";
|
|
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";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,45 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@archerjessop/utilities",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "Shared utilities for ArcherJessop property analysis tools",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": "./dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"dist",
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"test
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"release:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"rollup": "^4.
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@archerjessop/utilities",
|
|
3
|
+
"version": "3.6.0",
|
|
4
|
+
"description": "Shared utilities for ArcherJessop property analysis tools",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"src/styles",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=16"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "node build-styles.js && rollup -c",
|
|
21
|
+
"prebuild": "node build-styles.js",
|
|
22
|
+
"dev": "rollup -c -w",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest",
|
|
25
|
+
"test:coverage": "vitest --coverage",
|
|
26
|
+
"clean": "rm -rf dist",
|
|
27
|
+
"prepublishOnly": "npm run clean && npm run build && npm run test",
|
|
28
|
+
"lint": "eslint src tests",
|
|
29
|
+
"lint:fix": "eslint src tests --fix",
|
|
30
|
+
"release:patch": "npm version patch && git push && git push --tags && npm publish --access public",
|
|
31
|
+
"release:minor": "npm version minor && git push && git push --tags && npm publish --access public",
|
|
32
|
+
"release:major": "npm version major && git push && git push --tags && npm publish --access public"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://gitlab.com/archerjessop/utilities.git"
|
|
37
|
+
},
|
|
38
|
+
"author": "ArcherJessop",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
42
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
43
|
+
"eslint": "^8.57.0",
|
|
44
|
+
"rollup": "^4.9.6",
|
|
45
|
+
"vitest": "^3.2.4"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,216 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
}
|