diff --git a/.github/workflows/launchdarkly-code-refs.yml b/.github/workflows/launchdarkly-code-refs.yml
index c9f90b4..437da16 100644
--- a/.github/workflows/launchdarkly-code-refs.yml
+++ b/.github/workflows/launchdarkly-code-refs.yml
@@ -5,6 +5,11 @@ on:
types: [opened, synchronize, reopened]
branches: [main]
+permissions:
+ contents: read
+ pull-requests: write
+ issues: write
+
jobs:
find-feature-flags:
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index 7bd8769..51e2c44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -207,4 +207,9 @@ marimo/_lsp/
__marimo__/
# Mac stuff
-.DS_Store
\ No newline at end of file
+.DS_Store
+
+# swisseph stuff
+swisseph/sepl_18.se1.*
+swisseph/semo_18.se1.*
+swisseph/seas_18.se1.*
\ No newline at end of file
diff --git a/config.py b/config.py
index 5d4fd7f..b764bd9 100644
--- a/config.py
+++ b/config.py
@@ -40,4 +40,4 @@
10: "10th House (Career/Reputation) 🏆",
11: "11th House (Friends/Hopes) 👥",
12: "12th House (Spirituality/Subconscious) 🔮"
-}
+}
\ No newline at end of file
diff --git a/static/css/style.css b/static/css/style.css
index 80b0968..e18afdd 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -110,10 +110,10 @@ input:focus, select:focus {
button {
font-family: 'Space Mono', monospace;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: white;
+ background: transparent;
+ color: #667eea;
padding: 15px 30px;
- border: none;
+ border: 2px solid #667eea;
border-radius: 25px;
font-size: 18px;
font-weight: bold;
@@ -121,13 +121,14 @@ button {
width: 100%;
margin-top: 10px;
transition: all 0.3s ease;
- box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
+ box-shadow: none;
}
button:hover {
transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
- background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);
+ background: rgba(102, 126, 234, 0.1);
+ border-color: #5a67d8;
+ color: #5a67d8;
}
button:disabled,
@@ -140,7 +141,7 @@ button.loading {
button:disabled:hover,
button.loading:hover {
transform: none;
- box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
+ background: transparent;
}
/* Spinner Animation */
@@ -386,10 +387,10 @@ button.loading:hover {
.location-search button {
font-family: 'Space Mono', monospace;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: white;
+ background: transparent;
+ color: #667eea;
padding: 12px 24px;
- border: none;
+ border: 2px solid #667eea;
border-radius: 25px;
font-size: 16px;
font-weight: bold;
@@ -398,14 +399,15 @@ button.loading:hover {
width: auto;
min-width: auto;
transition: all 0.3s ease;
- box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
+ box-shadow: none;
margin-top: 0;
}
.location-search button:hover {
transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
- background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);
+ background: rgba(102, 126, 234, 0.1);
+ border-color: #5a67d8;
+ color: #5a67d8;
}
.location-search button:disabled {
@@ -416,7 +418,7 @@ button.loading:hover {
.location-search button:disabled:hover {
transform: none;
- box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
+ background: transparent;
}
#locationMap {
@@ -458,6 +460,51 @@ input[readonly] {
min-width: 180px;
}
+/* Main CTA Button - Experiment Variant */
+.button-group button.main-cta {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: #ffffff;
+ font-size: 1.1em;
+ font-weight: 700;
+ padding: 18px 32px;
+ border: 2px solid transparent;
+ box-shadow: 0 8px 20px rgba(102, 126, 234, 0.4);
+ transform: scale(1);
+ transition: all 0.3s ease;
+}
+
+.button-group button.main-cta:hover {
+ transform: scale(1.05);
+ box-shadow: 0 12px 28px rgba(102, 126, 234, 0.5);
+ background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
+}
+
+.button-group button.main-cta:active {
+ transform: scale(0.98);
+}
+
+.dark-mode .button-group button.main-cta {
+ background: linear-gradient(135deg, #7c3aed 0%, #a855f7 100%);
+ box-shadow: 0 8px 20px rgba(124, 58, 237, 0.4);
+}
+
+.dark-mode .button-group button.main-cta:hover {
+ background: linear-gradient(135deg, #a855f7 0%, #7c3aed 100%);
+ box-shadow: 0 12px 28px rgba(124, 58, 237, 0.5);
+}
+
+/* Dark mode outline buttons */
+.dark-mode button:not(.main-cta) {
+ color: #a78bfa;
+ border-color: #a78bfa;
+}
+
+.dark-mode button:not(.main-cta):hover {
+ background: rgba(167, 139, 250, 0.1);
+ border-color: #c4b5fd;
+ color: #c4b5fd;
+}
+
/* Responsive design for location search */
@media (max-width: 600px) {
.location-search {
diff --git a/static/js/ld-experiment.js b/static/js/ld-experiment.js
new file mode 100644
index 0000000..fe139fd
--- /dev/null
+++ b/static/js/ld-experiment.js
@@ -0,0 +1,44 @@
+// LaunchDarkly Experiment - Main CTA Button
+(function() {
+ const ldClientId = "692742d0a95e1a0ac789ca56";
+
+ // Wait for LaunchDarkly SDK to be available
+ if (typeof window.LDClient === 'undefined') {
+ console.warn('LaunchDarkly SDK not loaded');
+ return;
+ }
+
+ const context = {
+ kind: 'user',
+ key: 'anonymous-' + Math.random().toString(36).substring(7),
+ anonymous: true
+ };
+
+ const ldClient = window.LDClient.initialize(ldClientId, context);
+
+
+
+
+
+ ldClient.on('ready', () => {
+ const showMainCta = ldClient.variation('get-horoscope-main-button-experiment', false);
+
+ if (showMainCta) {
+ const horoscopeButton = document.querySelector('button[formaction="/chart"]');
+ if (horoscopeButton) {
+ horoscopeButton.classList.add('main-cta');
+ }
+ }
+ });
+
+ ldClient.on('change:get-horoscope-main-button-experiment', (value) => {
+ const horoscopeButton = document.querySelector('button[formaction="/chart"]');
+ if (horoscopeButton) {
+ if (value) {
+ horoscopeButton.classList.add('main-cta');
+ } else {
+ horoscopeButton.classList.remove('main-cta');
+ }
+ }
+ });
+})();
diff --git a/templates/index.html b/templates/index.html
index 1dbde44..0ae5303 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -9,6 +9,10 @@
+
+
+
+
{% endblock %}
{% block content %}