From 5afb3a8c5a29cf8852b20e3f9727b47f92c6cc8e Mon Sep 17 00:00:00 2001 From: Dayowe Date: Sun, 8 Jun 2025 20:31:11 +0200 Subject: [PATCH] Update --- calculator.js | 495 +++++++++++++++++++++ dog-food-calculator-widget.js | 695 ++++++++++++++++++++++++++++++ iframe.html | 179 ++++++++ styles.css | 787 ++++++++++++++++++++++++++++++++++ 4 files changed, 2156 insertions(+) create mode 100644 calculator.js create mode 100644 dog-food-calculator-widget.js create mode 100644 iframe.html create mode 100644 styles.css diff --git a/calculator.js b/calculator.js new file mode 100644 index 0000000..8281482 --- /dev/null +++ b/calculator.js @@ -0,0 +1,495 @@ +/** + * Dog Calorie Calculator + * Calculates dog's daily calorie requirements and food amounts + * by Canine Nutrition and Wellness + */ + +class DogCalorieCalculator { + constructor() { + this.currentMER = 0; + this.isImperial = false; + this.init(); + } + + init() { + this.bindEvents(); + this.updateUnitLabels(); + } + + bindEvents() { + const weightInput = document.getElementById('weight'); + const dogTypeSelect = document.getElementById('dogType'); + const foodEnergyInput = document.getElementById('foodEnergy'); + const daysInput = document.getElementById('days'); + const unitSelect = document.getElementById('unit'); + const unitToggle = document.getElementById('unitToggle'); + + if (weightInput) weightInput.addEventListener('input', () => this.updateCalorieCalculations()); + if (weightInput) weightInput.addEventListener('blur', () => this.validateWeight()); + + if (dogTypeSelect) dogTypeSelect.addEventListener('change', () => this.updateCalorieCalculations()); + + if (foodEnergyInput) foodEnergyInput.addEventListener('input', () => this.updateFoodCalculations()); + if (foodEnergyInput) foodEnergyInput.addEventListener('blur', () => this.validateFoodEnergy()); + + if (daysInput) daysInput.addEventListener('input', () => this.updateFoodCalculations()); + if (daysInput) daysInput.addEventListener('blur', () => this.validateDays()); + + if (unitSelect) unitSelect.addEventListener('change', () => this.updateFoodCalculations()); + + if (unitToggle) unitToggle.addEventListener('change', () => this.toggleUnits()); + } + + calculateRER(weightKg) { + return 70 * Math.pow(weightKg, 0.75); + } + + calculateMER(rer, factor) { + return rer * factor; + } + + validateInput(value, min = 0, isInteger = false) { + const num = parseFloat(value); + if (isNaN(num) || num < min) return false; + if (isInteger && !Number.isInteger(num)) return false; + return true; + } + + showError(elementId, show = true) { + const errorElement = document.getElementById(elementId); + if (errorElement) { + if (show) { + errorElement.classList.remove('dog-calculator-hidden'); + } else { + errorElement.classList.add('dog-calculator-hidden'); + } + } + } + + convertUnits(grams, unit) { + switch (unit) { + case 'kg': + return grams / 1000; + case 'oz': + return grams / 28.3495; + case 'lb': + return grams / 453.592; + default: + return grams; + } + } + + formatNumber(num, decimals = 0) { + return num.toFixed(decimals).replace(/\.?0+$/, ''); + } + + toggleUnits() { + const toggle = document.getElementById('unitToggle'); + this.isImperial = toggle.checked; + + this.updateUnitLabels(); + this.convertExistingValues(); + this.updateCalorieCalculations(); + } + + updateUnitLabels() { + const metricLabel = document.getElementById('metricLabel'); + const imperialLabel = document.getElementById('imperialLabel'); + const weightLabel = document.getElementById('weightLabel'); + const foodEnergyLabel = document.getElementById('foodEnergyLabel'); + const weightInput = document.getElementById('weight'); + const foodEnergyInput = document.getElementById('foodEnergy'); + const unitSelect = document.getElementById('unit'); + + if (metricLabel && imperialLabel) { + metricLabel.classList.toggle('active', !this.isImperial); + imperialLabel.classList.toggle('active', this.isImperial); + } + + if (this.isImperial) { + if (weightLabel) weightLabel.textContent = "Dog's Weight (lbs):"; + if (weightInput) { + weightInput.placeholder = "Enter weight in lbs"; + weightInput.min = "0.2"; // ~0.1kg in lbs + weightInput.step = "0.1"; + } + if (foodEnergyLabel) foodEnergyLabel.textContent = "Food Energy Content (kcal/oz):"; + if (foodEnergyInput) { + foodEnergyInput.placeholder = "Enter kcal per oz"; + foodEnergyInput.min = "0.03"; // ~1 kcal/100g in kcal/oz + foodEnergyInput.step = "0.01"; + } + if (unitSelect) { + unitSelect.innerHTML = ` + + + + + `; + } + } else { + if (weightLabel) weightLabel.textContent = "Dog's Weight (kg):"; + if (weightInput) { + weightInput.placeholder = "Enter weight in kg"; + weightInput.min = "0.1"; + weightInput.step = "0.1"; + } + if (foodEnergyLabel) foodEnergyLabel.textContent = "Food Energy Content (kcal/100g):"; + if (foodEnergyInput) { + foodEnergyInput.placeholder = "Enter kcal per 100g"; + foodEnergyInput.min = "1"; + foodEnergyInput.step = "1"; + } + if (unitSelect) { + unitSelect.innerHTML = ` + + + + + `; + } + } + } + + convertExistingValues() { + const weightInput = document.getElementById('weight'); + const foodEnergyInput = document.getElementById('foodEnergy'); + + if (weightInput && weightInput.value) { + const currentWeight = parseFloat(weightInput.value); + if (!isNaN(currentWeight)) { + if (this.isImperial) { + // Convert kg to lbs + weightInput.value = this.formatNumber(currentWeight * 2.20462, 1); + } else { + // Convert lbs to kg + weightInput.value = this.formatNumber(currentWeight / 2.20462, 1); + } + } + } + + if (foodEnergyInput && foodEnergyInput.value) { + const currentEnergy = parseFloat(foodEnergyInput.value); + if (!isNaN(currentEnergy)) { + if (this.isImperial) { + // Convert kcal/100g to kcal/oz + foodEnergyInput.value = this.formatNumber(currentEnergy / 3.52739, 2); + } else { + // Convert kcal/oz to kcal/100g + foodEnergyInput.value = this.formatNumber(currentEnergy * 3.52739, 0); + } + } + } + } + + getWeightInKg() { + const weightInput = document.getElementById('weight'); + if (!weightInput || !weightInput.value) return null; + + const weight = parseFloat(weightInput.value); + if (isNaN(weight)) return null; + + return this.isImperial ? weight / 2.20462 : weight; + } + + getFoodEnergyPer100g() { + const foodEnergyInput = document.getElementById('foodEnergy'); + if (!foodEnergyInput || !foodEnergyInput.value) return null; + + const energy = parseFloat(foodEnergyInput.value); + if (isNaN(energy)) return null; + + return this.isImperial ? energy * 3.52739 : energy; + } + + validateWeight() { + const weight = document.getElementById('weight')?.value; + if (weight && !this.validateInput(weight, 0.1)) { + this.showError('weightError', true); + } else { + this.showError('weightError', false); + } + } + + validateFoodEnergy() { + const energy = document.getElementById('foodEnergy')?.value; + if (energy && !this.validateInput(energy, 1)) { + this.showError('foodEnergyError', true); + } else { + this.showError('foodEnergyError', false); + } + } + + validateDays() { + const days = document.getElementById('days')?.value; + if (days && !this.validateInput(days, 1, true)) { + this.showError('daysError', true); + } else { + this.showError('daysError', false); + } + } + + updateCalorieCalculations() { + const dogTypeSelect = document.getElementById('dogType'); + const calorieResults = document.getElementById('calorieResults'); + const rerValue = document.getElementById('rerValue'); + const merValue = document.getElementById('merValue'); + + if (!dogTypeSelect || !calorieResults || !rerValue || !merValue) { + return; + } + + const weightKg = this.getWeightInKg(); + const dogTypeFactor = dogTypeSelect.value; + + this.showError('weightError', false); + + if (!weightKg || weightKg < 0.1) { + if (weightKg !== null) this.showError('weightError', true); + calorieResults.style.display = 'none'; + return; + } + + if (!dogTypeFactor) { + calorieResults.style.display = 'none'; + return; + } + + const factor = parseFloat(dogTypeFactor); + + const rer = this.calculateRER(weightKg); + const mer = this.calculateMER(rer, factor); + + this.currentMER = mer; + + rerValue.textContent = this.formatNumber(rer, 0) + ' cal/day'; + merValue.textContent = this.formatNumber(mer, 0) + ' cal/day'; + calorieResults.style.display = 'block'; + + this.updateFoodCalculations(); + } + + updateFoodCalculations() { + if (this.currentMER === 0) return; + + const daysInput = document.getElementById('days'); + const unitSelect = document.getElementById('unit'); + const dailyFoodResults = document.getElementById('dailyFoodResults'); + const dailyFoodValue = document.getElementById('dailyFoodValue'); + const totalFoodDisplay = document.getElementById('totalFoodDisplay'); + + if (!daysInput || !unitSelect || !dailyFoodResults || !dailyFoodValue || !totalFoodDisplay) { + return; + } + + const energyPer100g = this.getFoodEnergyPer100g(); + const days = daysInput.value; + const unit = unitSelect.value; + + this.showError('foodEnergyError', false); + this.showError('daysError', false); + + const minEnergy = this.isImperial ? 0.03 : 1; + if (!energyPer100g || energyPer100g < minEnergy) { + if (energyPer100g !== null) this.showError('foodEnergyError', true); + dailyFoodResults.style.display = 'none'; + totalFoodDisplay.value = ''; + return; + } + + if (!days || !this.validateInput(days, 1, true)) { + if (days) this.showError('daysError', true); + totalFoodDisplay.value = ''; + return; + } + + const numDays = parseInt(days); + + const dailyFoodGrams = (this.currentMER / energyPer100g) * 100; + const totalFoodGrams = dailyFoodGrams * numDays; + + dailyFoodValue.textContent = this.formatNumber(dailyFoodGrams, 1) + ' g/day'; + dailyFoodResults.style.display = 'block'; + + const convertedAmount = this.convertUnits(totalFoodGrams, unit); + const unitLabel = unit === 'g' ? 'g' : unit === 'kg' ? 'kg' : unit === 'oz' ? 'oz' : 'lb'; + const decimals = unit === 'g' ? 0 : unit === 'kg' ? 2 : 1; + + totalFoodDisplay.value = this.formatNumber(convertedAmount, decimals) + ' ' + unitLabel; + } +} + +// Global function for collapsible functionality (no longer used) +function toggleCollapsible(id) { + // Food section is now always expanded +} + +// Initialize calculator when DOM is ready +document.addEventListener('DOMContentLoaded', function() { + new DogCalorieCalculator(); + + // Initialize share URL + const shareUrlInput = document.getElementById('shareUrl'); + if (shareUrlInput) { + shareUrlInput.value = window.location.href; + } + + // Update embed codes with current domain + updateEmbedCodes(); +}); + +// Share and Embed Functions +function showShareOptions() { + const modal = document.getElementById('shareModal'); + if (modal) { + modal.style.display = 'block'; + document.body.style.overflow = 'hidden'; + } +} + +function closeShareModal() { + const modal = document.getElementById('shareModal'); + if (modal) { + modal.style.display = 'none'; + document.body.style.overflow = 'auto'; + } +} + +function showEmbedModal() { + const modal = document.getElementById('embedModal'); + if (modal) { + modal.style.display = 'block'; + document.body.style.overflow = 'hidden'; + } +} + +function closeEmbedModal() { + const modal = document.getElementById('embedModal'); + if (modal) { + modal.style.display = 'none'; + document.body.style.overflow = 'auto'; + } +} + +// Share functions +function shareToFacebook() { + const url = encodeURIComponent(window.location.href); + const text = encodeURIComponent('Check out this Dog Calorie Calculator!'); + window.open(`https://www.facebook.com/sharer/sharer.php?u=${url}"e=${text}`, '_blank'); +} + +function shareToTwitter() { + const url = encodeURIComponent(window.location.href); + const text = encodeURIComponent('Calculate your dog\'s daily calorie needs with this helpful tool!'); + window.open(`https://twitter.com/intent/tweet?url=${url}&text=${text}`, '_blank'); +} + +function shareToLinkedIn() { + const url = encodeURIComponent(window.location.href); + window.open(`https://www.linkedin.com/sharing/share-offsite/?url=${url}`, '_blank'); +} + +function shareViaEmail() { + const subject = encodeURIComponent('Dog Calorie Calculator'); + const body = encodeURIComponent(`Check out this helpful Dog Calorie Calculator:\n\n${window.location.href}\n\nIt helps calculate your dog's daily calorie needs based on their weight and activity level.`); + window.location.href = `mailto:?subject=${subject}&body=${body}`; +} + +function copyShareLink() { + const shareUrlInput = document.getElementById('shareUrl'); + if (shareUrlInput) { + shareUrlInput.select(); + shareUrlInput.setSelectionRange(0, 99999); // For mobile devices + + try { + document.execCommand('copy'); + + // Update button to show success + const copyBtn = document.querySelector('.dog-calculator-share-copy'); + if (copyBtn) { + const originalHTML = copyBtn.innerHTML; + copyBtn.innerHTML = ' Copied!'; + copyBtn.style.background = '#7fa464'; + + setTimeout(() => { + copyBtn.innerHTML = originalHTML; + copyBtn.style.background = ''; + }, 2000); + } + } catch (err) { + console.error('Failed to copy text: ', err); + } + } +} + +// Embed functions +function updateEmbedCodes() { + const currentDomain = window.location.origin; + const currentPath = window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')); + const baseUrl = currentDomain + currentPath; + + const widgetCode = document.getElementById('widgetCode'); + const iframeCode = document.getElementById('iframeCode'); + + if (widgetCode) { + widgetCode.textContent = `\n
`; + } + + if (iframeCode) { + iframeCode.textContent = ``; + } +} + +function copyEmbedCode(type) { + const codeElement = type === 'widget' ? document.getElementById('widgetCode') : document.getElementById('iframeCode'); + const button = event.target.closest('.dog-calculator-copy-btn'); + + if (codeElement && button) { + const textArea = document.createElement('textarea'); + textArea.value = codeElement.textContent; + textArea.style.position = 'fixed'; + textArea.style.left = '-999999px'; + textArea.style.top = '-999999px'; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + + try { + document.execCommand('copy'); + textArea.remove(); + + // Update button to show success + const originalHTML = button.innerHTML; + button.innerHTML = ' Copied'; + button.classList.add('copied'); + + setTimeout(() => { + button.innerHTML = originalHTML; + button.classList.remove('copied'); + }, 2000); + } catch (err) { + console.error('Failed to copy text: ', err); + textArea.remove(); + } + } +} + +// Close modals when clicking outside +window.addEventListener('click', function(event) { + const shareModal = document.getElementById('shareModal'); + const embedModal = document.getElementById('embedModal'); + + if (event.target === shareModal) { + closeShareModal(); + } else if (event.target === embedModal) { + closeEmbedModal(); + } +}); + +// Close modals with Escape key +window.addEventListener('keydown', function(event) { + if (event.key === 'Escape') { + closeShareModal(); + closeEmbedModal(); + } +}); \ No newline at end of file diff --git a/dog-food-calculator-widget.js b/dog-food-calculator-widget.js new file mode 100644 index 0000000..e6c94f5 --- /dev/null +++ b/dog-food-calculator-widget.js @@ -0,0 +1,695 @@ +/** + * Dog Calorie Calculator Widget + * Embeddable JavaScript widget for calculating dog's daily calorie requirements + * by Canine Nutrition and Wellness - https://caninenutritionandwellness.com + * + * Usage: + * + *
+ */ + +(function() { + 'use strict'; + + // Widget styles - Using Shadow DOM for better isolation where supported + const widgetStyles = ` + .dog-calc-widget { + max-width: 600px; + margin: 0 auto; + padding: 24px; + font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + line-height: 1.5; + color: #6f3f6d; + box-sizing: border-box; + } + + .dog-calc-widget *, + .dog-calc-widget *::before, + .dog-calc-widget *::after { + box-sizing: border-box; + } + + .dog-calc-section { + background: #fdfcfe; + border: 1px solid #e8e3ed; + border-radius: 8px; + padding: 24px; + margin-bottom: 24px; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08); + } + + .dog-calc-section h2 { + margin-top: 0; + margin-bottom: 24px; + color: #6f3f6d; + font-size: 1.5rem; + font-weight: 600; + } + + .dog-calc-form-group { + margin-bottom: 20px; + } + + .dog-calc-form-group label { + display: block; + margin-bottom: 8px; + font-weight: 500; + color: #6f3f6d; + font-size: 1rem; + } + + .dog-calc-form-group select, + .dog-calc-form-group input[type="number"], + .dog-calc-form-group input[type="text"] { + width: 100%; + padding: 12px 16px; + border: 1px solid #e8e3ed; + border-radius: 6px; + font-size: 1rem; + font-family: inherit; + background-color: #ffffff; + color: #6f3f6d; + transition: all 0.2s ease; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236f3f6d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 12px center; + background-size: 20px; + padding-right: 40px; + } + + .dog-calc-form-group select option { + background-color: #ffffff; + color: #6f3f6d; + } + + .dog-calc-form-group input[type="number"], + .dog-calc-form-group input[type="text"] { + background-image: none; + padding-right: 16px; + } + + .dog-calc-form-group select:focus, + .dog-calc-form-group input[type="number"]:focus, + .dog-calc-form-group input[type="text"]:focus { + outline: none; + border-color: #f19a5f; + background-color: #ffffff; + box-shadow: 0 0 0 3px rgba(241, 154, 95, 0.1); + } + + .dog-calc-form-group input[readonly] { + background-color: #f8f5fa; + cursor: not-allowed; + color: #635870; + } + + .dog-calc-results { + background: linear-gradient(135deg, rgba(241, 154, 95, 0.08) 0%, rgba(241, 154, 95, 0.04) 100%); + border: 1px solid rgba(241, 154, 95, 0.2); + border-radius: 6px; + padding: 20px; + margin-top: 24px; + } + + .dog-calc-result-item { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + } + + .dog-calc-result-item:last-child { + margin-bottom: 0; + } + + .dog-calc-result-label { + font-weight: 500; + color: #6f3f6d; + font-size: 0.95rem; + } + + .dog-calc-result-value { + font-weight: 600; + color: #6f3f6d; + font-size: 1.1rem; + padding: 4px 12px; + background: rgba(241, 154, 95, 0.15); + border-radius: 4px; + } + + .dog-calc-collapsible { + background: #ffffff; + border: 1px solid #e8e3ed; + border-radius: 8px; + margin-bottom: 24px; + overflow: hidden; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08); + } + + .dog-calc-collapsible-header { + background: #f8f5fa; + padding: 20px 24px; + cursor: pointer; + user-select: none; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #e8e3ed; + transition: background-color 0.2s ease; + } + + .dog-calc-collapsible-header:hover { + background: #f5f1f6; + } + + .dog-calc-collapsible-header h3 { + margin: 0; + font-size: 1.25rem; + color: #6f3f6d; + font-weight: 600; + } + + .dog-calc-collapsible-arrow { + transition: transform 0.2s ease; + font-size: 1.2rem; + color: #9f5999; + } + + .dog-calc-collapsible.active .dog-calc-collapsible-arrow { + transform: rotate(180deg); + } + + .dog-calc-collapsible-content { + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + } + + .dog-calc-collapsible.active .dog-calc-collapsible-content { + max-height: 1000px; + } + + .dog-calc-collapsible-inner { + padding: 24px; + } + + .dog-calc-input-group { + display: flex; + gap: 16px; + align-items: flex-end; + } + + .dog-calc-input-group .dog-calc-form-group { + flex: 1; + margin-bottom: 0; + } + + .dog-calc-unit-select { + min-width: 120px; + } + + .dog-calc-error { + color: #e87159; + font-size: 0.875rem; + margin-top: 6px; + font-weight: 500; + } + + .dog-calc-hidden { + display: none !important; + } + + .dog-calc-footer { + text-align: center; + padding: 16px 0; + border-top: 1px solid #e8e3ed; + margin-top: 24px; + } + + .dog-calc-footer a { + color: #9f5999; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + transition: color 0.2s ease; + } + + .dog-calc-footer a:hover { + color: #f19a5f; + text-decoration: underline; + } + + @media (max-width: 576px) { + .dog-calc-widget { + padding: 16px; + } + + .dog-calc-section, + .dog-calc-collapsible-inner { + padding: 20px; + } + + .dog-calc-section h2, + .dog-calc-collapsible-header h3 { + font-size: 1.3rem; + } + + .dog-calc-input-group { + flex-direction: column; + gap: 20px; + } + + .dog-calc-input-group .dog-calc-form-group { + margin-bottom: 20px; + } + + .dog-calc-result-item { + flex-direction: column; + align-items: flex-start; + gap: 8px; + } + + .dog-calc-result-value { + align-self: stretch; + text-align: center; + } + + .dog-calc-collapsible-header { + padding: 16px 20px; + } + } + + @media (prefers-color-scheme: dark) { + .dog-calc-widget { + color: #f5f3f7; + } + + .dog-calc-section, + .dog-calc-collapsible { + background: #24202d; + border-color: #433c4f; + } + + .dog-calc-collapsible-header { + background: #312b3b; + border-color: #433c4f; + } + + .dog-calc-collapsible-header:hover { + background: #3a3446; + } + + .dog-calc-section h2, + .dog-calc-collapsible-header h3, + .dog-calc-form-group label, + .dog-calc-result-label { + color: #f5f3f7; + } + + .dog-calc-form-group select, + .dog-calc-form-group input[type="number"], + .dog-calc-form-group input[type="text"] { + background-color: #312b3b; + border-color: #433c4f; + color: #f5f3f7; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5f3f7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + } + + .dog-calc-form-group select option { + background-color: #312b3b; + color: #f5f3f7; + } + + .dog-calc-form-group select:focus, + .dog-calc-form-group input[type="number"]:focus, + .dog-calc-form-group input[type="text"]:focus { + background-color: #312b3b; + border-color: #f19a5f; + } + + .dog-calc-form-group input[readonly] { + background-color: #433c4f; + color: #b8b0c2; + } + + .dog-calc-results { + background: linear-gradient(135deg, rgba(241, 154, 95, 0.15) 0%, rgba(241, 154, 95, 0.08) 100%); + border-color: rgba(241, 154, 95, 0.3); + } + + .dog-calc-result-value { + color: #f5f3f7; + background: rgba(241, 154, 95, 0.2); + } + + .dog-calc-footer { + border-color: #433c4f; + } + } + `; + + // Widget HTML template + const widgetTemplate = ` +
+
+

Dog's Characteristics

+ +
+ + +
+ +
+ + +
Please enter a valid weight (minimum 0.1 kg)
+
+ + +
+ +
+
+

How much food is that?

+ +
+
+
+
+ + +
Please enter a valid energy content (minimum 1 kcal/100g)
+
+ + + +
+ + +
Please enter a valid number of days (minimum 1)
+
+ +
+
+ + +
+
+ + +
+
+
+
+
+ + +
+ `; + + // Calculator class + class DogCalorieCalculatorWidget { + constructor(container) { + this.container = container; + this.currentMER = 0; + this.init(); + } + + init() { + this.injectStyles(); + this.injectHTML(); + this.bindEvents(); + } + + injectStyles() { + if (!document.getElementById('dog-calc-widget-styles')) { + const style = document.createElement('style'); + style.id = 'dog-calc-widget-styles'; + style.textContent = widgetStyles; + document.head.appendChild(style); + } + } + + injectHTML() { + this.container.innerHTML = widgetTemplate; + } + + bindEvents() { + const weightInput = this.container.querySelector('#weight'); + const dogTypeSelect = this.container.querySelector('#dogType'); + const foodEnergyInput = this.container.querySelector('#foodEnergy'); + const daysInput = this.container.querySelector('#days'); + const unitSelect = this.container.querySelector('#unit'); + const collapsibleHeader = this.container.querySelector('.dog-calc-collapsible-header'); + + if (weightInput) { + weightInput.addEventListener('input', () => this.updateCalorieCalculations()); + weightInput.addEventListener('blur', () => this.validateWeight()); + } + + if (dogTypeSelect) dogTypeSelect.addEventListener('change', () => this.updateCalorieCalculations()); + + if (foodEnergyInput) { + foodEnergyInput.addEventListener('input', () => this.updateFoodCalculations()); + foodEnergyInput.addEventListener('blur', () => this.validateFoodEnergy()); + } + + if (daysInput) { + daysInput.addEventListener('input', () => this.updateFoodCalculations()); + daysInput.addEventListener('blur', () => this.validateDays()); + } + + if (unitSelect) unitSelect.addEventListener('change', () => this.updateFoodCalculations()); + + if (collapsibleHeader) { + collapsibleHeader.addEventListener('click', () => this.toggleCollapsible()); + } + } + + toggleCollapsible() { + const collapsible = this.container.querySelector('.dog-calc-collapsible'); + if (collapsible) { + collapsible.classList.toggle('active'); + } + } + + calculateRER(weightKg) { + return 70 * Math.pow(weightKg, 0.75); + } + + calculateMER(rer, factor) { + return rer * factor; + } + + validateInput(value, min = 0, isInteger = false) { + const num = parseFloat(value); + if (isNaN(num) || num < min) return false; + if (isInteger && !Number.isInteger(num)) return false; + return true; + } + + showError(elementId, show = true) { + const errorElement = this.container.querySelector('#' + elementId); + if (errorElement) { + if (show) { + errorElement.classList.remove('dog-calc-hidden'); + } else { + errorElement.classList.add('dog-calc-hidden'); + } + } + } + + convertUnits(grams, unit) { + switch (unit) { + case 'kg': return grams / 1000; + case 'oz': return grams / 28.3495; + case 'lb': return grams / 453.592; + default: return grams; + } + } + + formatNumber(num, decimals = 0) { + return num.toFixed(decimals).replace(/\.?0+$/, ''); + } + + validateWeight() { + const weight = this.container.querySelector('#weight')?.value; + if (weight && !this.validateInput(weight, 0.1)) { + this.showError('weightError', true); + } else { + this.showError('weightError', false); + } + } + + validateFoodEnergy() { + const energy = this.container.querySelector('#foodEnergy')?.value; + if (energy && !this.validateInput(energy, 1)) { + this.showError('foodEnergyError', true); + } else { + this.showError('foodEnergyError', false); + } + } + + validateDays() { + const days = this.container.querySelector('#days')?.value; + if (days && !this.validateInput(days, 1, true)) { + this.showError('daysError', true); + } else { + this.showError('daysError', false); + } + } + + updateCalorieCalculations() { + const weightInput = this.container.querySelector('#weight'); + const dogTypeSelect = this.container.querySelector('#dogType'); + const calorieResults = this.container.querySelector('#calorieResults'); + const rerValue = this.container.querySelector('#rerValue'); + const merValue = this.container.querySelector('#merValue'); + + if (!weightInput || !dogTypeSelect || !calorieResults || !rerValue || !merValue) { + return; + } + + const weight = weightInput.value; + const dogTypeFactor = dogTypeSelect.value; + + this.showError('weightError', false); + + if (!weight || !this.validateInput(weight, 0.1)) { + if (weight) this.showError('weightError', true); + calorieResults.style.display = 'none'; + return; + } + + if (!dogTypeFactor) { + calorieResults.style.display = 'none'; + return; + } + + const weightKg = parseFloat(weight); + const factor = parseFloat(dogTypeFactor); + + const rer = this.calculateRER(weightKg); + const mer = this.calculateMER(rer, factor); + + this.currentMER = mer; + + rerValue.textContent = this.formatNumber(rer, 0) + ' cal/day'; + merValue.textContent = this.formatNumber(mer, 0) + ' cal/day'; + calorieResults.style.display = 'block'; + + this.updateFoodCalculations(); + } + + updateFoodCalculations() { + if (this.currentMER === 0) return; + + const foodEnergyInput = this.container.querySelector('#foodEnergy'); + const daysInput = this.container.querySelector('#days'); + const unitSelect = this.container.querySelector('#unit'); + const dailyFoodResults = this.container.querySelector('#dailyFoodResults'); + const dailyFoodValue = this.container.querySelector('#dailyFoodValue'); + const totalFoodDisplay = this.container.querySelector('#totalFoodDisplay'); + + if (!foodEnergyInput || !daysInput || !unitSelect || !dailyFoodResults || !dailyFoodValue || !totalFoodDisplay) { + return; + } + + const foodEnergy = foodEnergyInput.value; + const days = daysInput.value; + const unit = unitSelect.value; + + this.showError('foodEnergyError', false); + this.showError('daysError', false); + + if (!foodEnergy || !this.validateInput(foodEnergy, 1)) { + if (foodEnergy) this.showError('foodEnergyError', true); + dailyFoodResults.style.display = 'none'; + totalFoodDisplay.value = ''; + return; + } + + if (!days || !this.validateInput(days, 1, true)) { + if (days) this.showError('daysError', true); + totalFoodDisplay.value = ''; + return; + } + + const energyPer100g = parseFloat(foodEnergy); + const numDays = parseInt(days); + + const dailyFoodGrams = (this.currentMER / energyPer100g) * 100; + const totalFoodGrams = dailyFoodGrams * numDays; + + dailyFoodValue.textContent = this.formatNumber(dailyFoodGrams, 1) + ' g/day'; + dailyFoodResults.style.display = 'block'; + + const convertedAmount = this.convertUnits(totalFoodGrams, unit); + const unitLabel = unit === 'g' ? 'g' : unit === 'kg' ? 'kg' : unit === 'oz' ? 'oz' : 'lb'; + const decimals = unit === 'g' ? 0 : unit === 'kg' ? 2 : 1; + + totalFoodDisplay.value = this.formatNumber(convertedAmount, decimals) + ' ' + unitLabel; + } + } + + // Auto-initialize widget + function initDogCalorieCalculator() { + const containers = document.querySelectorAll('#dog-calorie-calculator, .dog-calorie-calculator'); + containers.forEach(container => { + if (!container.dataset.initialized) { + new DogCalorieCalculatorWidget(container); + container.dataset.initialized = 'true'; + } + }); + } + + // Initialize when DOM is ready + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initDogCalorieCalculator); + } else { + initDogCalorieCalculator(); + } + + // Expose for manual initialization + window.DogCalorieCalculatorWidget = DogCalorieCalculatorWidget; + +})(); \ No newline at end of file diff --git a/iframe.html b/iframe.html new file mode 100644 index 0000000..a0d1703 --- /dev/null +++ b/iframe.html @@ -0,0 +1,179 @@ + + + + + + Dog Calorie Calculator - Canine Nutrition and Wellness + + + + +
+
+

Dog's Characteristics

+ +
+ + +
+ +
+ + +
Please enter a valid weight (minimum 0.1 kg)
+
+ + +
+ +
+
+

How much food is that?

+ +
+
+
+
+ + +
Please enter a valid energy content (minimum 1 kcal/100g)
+
+ + + +
+ + +
Please enter a valid number of days (minimum 1)
+
+ +
+
+ + +
+
+ + +
+
+
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..a5e20c6 --- /dev/null +++ b/styles.css @@ -0,0 +1,787 @@ +/* Dog Calorie Calculator Styles */ +/* Using Canine Nutrition and Wellness brand colors and design system */ + +.dog-calculator-container { + max-width: 600px; + margin: 0 auto; + padding: 24px; + font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + line-height: 1.5; + color: #6f3f6d; + box-sizing: border-box; +} + +.dog-calculator-container *, +.dog-calculator-container *::before, +.dog-calculator-container *::after { + box-sizing: border-box; +} + +.dog-calculator-section { + background: #fdfcfe; + border: 1px solid #e8e3ed; + border-radius: 8px 8px 0 0; + padding: 24px; + margin-bottom: 0; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08); +} + +.dog-calculator-section-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24px; + flex-wrap: wrap; + gap: 16px; +} + +.dog-calculator-section h2 { + margin: 0; + color: #6f3f6d; + font-size: 1.5rem; + font-weight: 600; +} + +/* Unit Switch */ +.dog-calculator-unit-switch { + display: flex; + align-items: center; + gap: 12px; +} + +.dog-calculator-unit-label { + font-size: 0.9rem; + font-weight: 500; + color: #635870; + transition: color 0.2s ease; +} + +.dog-calculator-unit-label.active { + color: #6f3f6d; + font-weight: 600; +} + +.dog-calculator-switch { + position: relative; + display: inline-block; + width: 48px; + height: 24px; +} + +.dog-calculator-switch input { + opacity: 0; + width: 0; + height: 0; +} + +.dog-calculator-slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #e8e3ed; + transition: 0.3s; + border-radius: 24px; +} + +.dog-calculator-slider:before { + position: absolute; + content: ""; + height: 18px; + width: 18px; + left: 3px; + bottom: 3px; + background-color: white; + transition: 0.3s; + border-radius: 50%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.dog-calculator-switch input:checked + .dog-calculator-slider { + background-color: #f19a5f; +} + +.dog-calculator-switch input:checked + .dog-calculator-slider:before { + transform: translateX(24px); +} + +.dog-calculator-form-group { + margin-bottom: 20px; +} + +.dog-calculator-form-group label { + display: block; + margin-bottom: 8px; + font-weight: 500; + color: #6f3f6d; + font-size: 1rem; +} + +.dog-calculator-form-group select, +.dog-calculator-form-group input[type="number"], +.dog-calculator-form-group input[type="text"] { + width: 100%; + padding: 12px 16px; + border: 1px solid #e8e3ed; + border-radius: 6px; + font-size: 1rem; + font-family: inherit; + background-color: #ffffff; + color: #6f3f6d; + transition: all 0.2s ease; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236f3f6d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 12px center; + background-size: 20px; + padding-right: 40px; +} + +.dog-calculator-form-group select option { + background-color: #ffffff; + color: #6f3f6d; +} + +.dog-calculator-form-group input[type="number"], +.dog-calculator-form-group input[type="text"] { + background-image: none; + padding-right: 16px; +} + +.dog-calculator-form-group select:focus, +.dog-calculator-form-group input[type="number"]:focus, +.dog-calculator-form-group input[type="text"]:focus { + outline: none; + border-color: #f19a5f; + background-color: #ffffff; + box-shadow: 0 0 0 3px rgba(241, 154, 95, 0.1); +} + +.dog-calculator-form-group input[readonly] { + background-color: #f8f5fa; + cursor: not-allowed; + color: #635870; +} + +.dog-calculator-results { + background: linear-gradient(135deg, rgba(241, 154, 95, 0.08) 0%, rgba(241, 154, 95, 0.04) 100%); + border: 1px solid rgba(241, 154, 95, 0.2); + border-radius: 6px; + padding: 20px; + margin-top: 24px; +} + +.dog-calculator-result-item { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; +} + +.dog-calculator-result-item:last-child { + margin-bottom: 0; +} + +.dog-calculator-result-label { + font-weight: 500; + color: #6f3f6d; + font-size: 0.95rem; +} + +.dog-calculator-result-value { + font-weight: 600; + color: #6f3f6d; + font-size: 1.1rem; + padding: 4px 12px; + background: rgba(241, 154, 95, 0.15); + border-radius: 4px; +} + +.dog-calculator-collapsible { + background: #ffffff; + border: 1px solid #e8e3ed; + border-top: none; + margin-bottom: 0; + overflow: hidden; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08); +} + +.dog-calculator-collapsible-header { + background: #f8f5fa; + padding: 20px 24px; + border-bottom: 1px solid #e8e3ed; +} + +.dog-calculator-collapsible-header h3 { + margin: 0; + font-size: 1.25rem; + color: #6f3f6d; + font-weight: 600; +} + +.dog-calculator-collapsible-content { + display: block; +} + +.dog-calculator-collapsible-inner { + padding: 24px; +} + +.dog-calculator-input-group { + display: flex; + gap: 16px; + align-items: flex-end; +} + +.dog-calculator-input-group .dog-calculator-form-group { + flex: 1; + margin-bottom: 0; +} + +.dog-calculator-unit-select { + min-width: 120px; +} + +.dog-calculator-error { + color: #e87159; + font-size: 0.875rem; + margin-top: 6px; + font-weight: 500; +} + +.dog-calculator-hidden { + display: none; +} + +.dog-calculator-footer { + text-align: center; + padding: 20px; + background: #fdfcfe; + border: 1px solid #e8e3ed; + border-radius: 0 0 8px 8px; + border-top: none; + margin-top: -1px; +} + +.dog-calculator-footer a { + color: #9f5999; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + transition: color 0.2s ease; +} + +.dog-calculator-footer a:hover { + color: #f19a5f; + text-decoration: underline; +} + +/* Action Buttons */ +.dog-calculator-action-buttons { + display: flex; + justify-content: center; + gap: 16px; + padding: 20px; + background: #f8f5fa; + border-left: 1px solid #e8e3ed; + border-right: 1px solid #e8e3ed; + margin-top: -1px; +} + +.dog-calculator-btn { + padding: 8px 16px; + border: 1px solid #e8e3ed; + border-radius: 6px; + font-size: 0.9rem; + font-weight: 500; + font-family: inherit; + cursor: pointer; + transition: all 0.2s ease; + display: inline-flex; + align-items: center; + gap: 6px; + background: white; + color: #6f3f6d; +} + +.dog-calculator-btn:hover { + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.dog-calculator-btn-share:hover { + border-color: #9f5999; + color: #9f5999; +} + +.dog-calculator-btn-embed:hover { + border-color: #7fa464; + color: #7fa464; +} + +/* Modal Styles */ +.dog-calculator-modal { + display: none; + position: fixed; + z-index: 10000; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + animation: fadeIn 0.3s ease; +} + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +.dog-calculator-modal-content { + position: relative; + background-color: #ffffff; + margin: 5% auto; + padding: 30px; + border: 1px solid #e8e3ed; + border-radius: 12px; + width: 90%; + max-width: 500px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); + animation: slideIn 0.3s ease; +} + +.dog-calculator-modal-embed { + max-width: 700px; +} + +@keyframes slideIn { + from { + opacity: 0; + transform: translateY(-20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.dog-calculator-modal-close { + position: absolute; + right: 20px; + top: 20px; + font-size: 28px; + font-weight: 300; + color: #6f3f6d; + cursor: pointer; + transition: color 0.2s ease; +} + +.dog-calculator-modal-close:hover { + color: #f19a5f; +} + +.dog-calculator-modal h3 { + margin: 0 0 24px 0; + color: #6f3f6d; + font-size: 1.5rem; + display: flex; + align-items: center; + gap: 12px; +} + +/* Share Modal */ +.dog-calculator-share-buttons { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); + gap: 12px; + margin-bottom: 20px; +} + +.dog-calculator-share-btn { + padding: 12px 16px; + border: none; + border-radius: 6px; + font-size: 0.9rem; + font-weight: 500; + color: white; + cursor: pointer; + transition: all 0.2s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + font-family: inherit; +} + +.dog-calculator-share-facebook { + background: #1877f2; +} + +.dog-calculator-share-facebook:hover { + background: #1664d1; + transform: translateY(-1px); +} + +.dog-calculator-share-twitter { + background: #1da1f2; +} + +.dog-calculator-share-twitter:hover { + background: #1991da; + transform: translateY(-1px); +} + +.dog-calculator-share-linkedin { + background: #0a66c2; +} + +.dog-calculator-share-linkedin:hover { + background: #084d95; + transform: translateY(-1px); +} + +.dog-calculator-share-email { + background: #6f3f6d; +} + +.dog-calculator-share-email:hover { + background: #5a3357; + transform: translateY(-1px); +} + +.dog-calculator-share-copy { + background: #f19a5f; +} + +.dog-calculator-share-copy:hover { + background: #e87741; + transform: translateY(-1px); +} + +.dog-calculator-share-url { + display: flex; + gap: 12px; +} + +.dog-calculator-share-url input { + flex: 1; + padding: 10px 16px; + border: 1px solid #e8e3ed; + border-radius: 6px; + font-size: 0.9rem; + font-family: monospace; + background: #f8f5fa; + color: #6f3f6d; +} + +/* Embed Modal */ +.dog-calculator-embed-options { + display: flex; + flex-direction: column; + gap: 24px; +} + +.dog-calculator-embed-option { + border: 1px solid #e8e3ed; + border-radius: 8px; + padding: 20px; + background: #fcfafd; +} + +.dog-calculator-embed-option h4 { + margin: 0 0 8px 0; + color: #6f3f6d; + font-size: 1.1rem; + display: flex; + align-items: center; + gap: 8px; +} + +.dog-calculator-embed-option p { + margin: 0 0 16px 0; + color: #635870; + font-size: 0.9rem; +} + +.dog-calculator-code-container { + position: relative; + background: #312b3b; + border-radius: 6px; + overflow: hidden; +} + +.dog-calculator-code-container pre { + margin: 0; + padding: 16px; + overflow-x: auto; +} + +.dog-calculator-code-container code { + color: #f5f3f7; + font-family: 'Consolas', 'Monaco', 'Courier New', monospace; + font-size: 0.85rem; + line-height: 1.4; +} + +.dog-calculator-copy-btn { + position: absolute; + top: 10px; + right: 10px; + padding: 6px 12px; + background: #f19a5f; + color: white; + border: none; + border-radius: 4px; + font-size: 0.85rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + display: flex; + align-items: center; + gap: 6px; + font-family: inherit; +} + +.dog-calculator-copy-btn:hover { + background: #e87741; +} + +.dog-calculator-copy-btn.copied { + background: #7fa464; +} + +.dog-calculator-copy-btn.copied:hover { + background: #7fa464; +} + +/* Mobile Responsive Design */ +@media (max-width: 576px) { + .dog-calculator-container { + padding: 16px; + } + + .dog-calculator-section, + .dog-calculator-collapsible-inner { + padding: 20px; + } + + .dog-calculator-section h2, + .dog-calculator-collapsible-header h3 { + font-size: 1.3rem; + } + + .dog-calculator-section-header { + flex-direction: column; + align-items: stretch; + gap: 12px; + } + + .dog-calculator-section h2 { + text-align: center; + } + + .dog-calculator-unit-switch { + justify-content: center; + } + + .dog-calculator-action-buttons { + flex-direction: column; + padding: 16px; + } + + .dog-calculator-btn { + width: 100%; + justify-content: center; + } + + .dog-calculator-input-group { + flex-direction: column; + gap: 20px; + } + + .dog-calculator-input-group .dog-calculator-form-group { + margin-bottom: 20px; + } + + .dog-calculator-result-item { + flex-direction: column; + align-items: flex-start; + gap: 8px; + } + + .dog-calculator-result-value { + align-self: stretch; + text-align: center; + } + + .dog-calculator-collapsible-header { + padding: 16px 20px; + } + + .dog-calculator-modal-content { + margin: 10% auto; + padding: 20px; + width: 95%; + } + + .dog-calculator-share-buttons { + grid-template-columns: 1fr; + } + + .dog-calculator-embed-option { + padding: 16px; + } + + .dog-calculator-code-container pre { + padding: 12px; + font-size: 0.75rem; + } +} + +/* Dark theme support */ +@media (prefers-color-scheme: dark) { + .dog-calculator-container { + color: #f5f3f7; + } + + .dog-calculator-section, + .dog-calculator-collapsible { + background: #24202d; + border-color: #433c4f; + } + + .dog-calculator-collapsible-header { + background: #312b3b; + border-color: #433c4f; + } + + .dog-calculator-collapsible-header:hover { + background: #3a3446; + } + + .dog-calculator-section h2, + .dog-calculator-collapsible-header h3, + .dog-calculator-form-group label, + .dog-calculator-result-label { + color: #f5f3f7; + } + + .dog-calculator-unit-label { + color: #b8b0c2; + } + + .dog-calculator-unit-label.active { + color: #f5f3f7; + } + + .dog-calculator-slider { + background-color: #433c4f; + } + + .dog-calculator-form-group select, + .dog-calculator-form-group input[type="number"], + .dog-calculator-form-group input[type="text"] { + background-color: #312b3b; + border-color: #433c4f; + color: #f5f3f7; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5f3f7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + } + + .dog-calculator-form-group select option { + background-color: #312b3b; + color: #f5f3f7; + } + + .dog-calculator-form-group select:focus, + .dog-calculator-form-group input[type="number"]:focus, + .dog-calculator-form-group input[type="text"]:focus { + background-color: #312b3b; + border-color: #f19a5f; + } + + .dog-calculator-form-group input[readonly] { + background-color: #433c4f; + color: #b8b0c2; + } + + .dog-calculator-results { + background: linear-gradient(135deg, rgba(241, 154, 95, 0.15) 0%, rgba(241, 154, 95, 0.08) 100%); + border-color: rgba(241, 154, 95, 0.3); + } + + .dog-calculator-result-value { + color: #f5f3f7; + background: rgba(241, 154, 95, 0.2); + } + + .dog-calculator-footer { + background: #24202d; + border-color: #433c4f; + } + + .dog-calculator-action-buttons { + background: #312b3b; + border-color: #433c4f; + } + + .dog-calculator-btn { + background: #433c4f; + border-color: #433c4f; + color: #f5f3f7; + } + + .dog-calculator-btn:hover { + background: #524a5f; + border-color: #524a5f; + } + + .dog-calculator-btn-share:hover { + border-color: #9f5999; + color: #f19a5f; + } + + .dog-calculator-btn-embed:hover { + border-color: #7fa464; + color: #7fa464; + } + + .dog-calculator-modal-content { + background-color: #24202d; + border-color: #433c4f; + } + + .dog-calculator-modal h3 { + color: #f5f3f7; + } + + .dog-calculator-modal-close { + color: #f5f3f7; + } + + .dog-calculator-modal-close:hover { + color: #f19a5f; + } + + .dog-calculator-share-url input { + background: #312b3b; + border-color: #433c4f; + color: #f5f3f7; + } + + .dog-calculator-embed-option { + background: #312b3b; + border-color: #433c4f; + } + + .dog-calculator-embed-option h4 { + color: #f5f3f7; + } + + .dog-calculator-embed-option p { + color: #b8b0c2; + } +} \ No newline at end of file