/* =============================================================================
EZ HOROSCOPE - MOON PHASE WIDGET
MYSTICAL THEME - Inspired by Soul Spot aesthetic
=============================================================================
A dreamy, spiritual color scheme featuring dusty blue-purples, soft lavenders,
deep navy tones, and warm gold accents. Perfect for tarot, astrology, and
spiritual wellness websites.
TABLE OF CONTENTS:
------------------
1. CSS Custom Properties (Variables)
2. Widget Container
3. Moon Phase Display
4. Zodiac Dropdown
5. Content Area
6. Loading & Progress States
7. Error State
8. CTA Section
9. RTL (Right-to-Left) Support
10. Responsive Design
11. Print Styles
============================================================================= */
/* =============================================================================
1. CSS CUSTOM PROPERTIES (VARIABLES)
============================================================================= */
.ez-moon-phase-widget {
/* -------------------------------------------------------------------------
COLORS - MYSTICAL PALETTE
------------------------------------------------------------------------- */
/* Primary - Deep mystical purple-blue */
--ezhp-color-primary: #5D6B8A;
/* Secondary - Warm gold accent */
--ezhp-color-secondary: #C9A962;
/* Tertiary - Soft lavender */
--ezhp-color-tertiary: #9BA4C4;
/* Quaternary - Deep navy */
--ezhp-color-quaternary: #2D3142;
/* Background colors */
--ezhp-bg-primary: transparent;
--ezhp-bg-secondary: rgba(93, 107, 138, 0.04);
--ezhp-bg-accent: rgba(201, 169, 98, 0.06);
--ezhp-bg-mystical: linear-gradient(135deg, rgba(93, 107, 138, 0.03) 0%, rgba(155, 164, 196, 0.05) 100%);
--ezhp-bg-card: rgba(255, 255, 255, 0.5);
/* Text colors */
--ezhp-text-primary: #2D3142;
--ezhp-text-secondary: #4F5D75;
--ezhp-text-muted: rgba(45, 49, 66, 0.6);
--ezhp-text-accent: #5D6B8A;
--ezhp-text-light: #FFFFFF;
/* Input/Form colors */
--ezhp-input-bg: rgba(255, 255, 255, 0.8);
--ezhp-input-border: var(--ezhp-color-tertiary);
--ezhp-input-text: var(--ezhp-text-primary);
--ezhp-input-focus-shadow: rgba(93, 107, 138, 0.25);
/* Button colors */
--ezhp-button-text: var(--ezhp-color-primary);
--ezhp-button-border: var(--ezhp-color-primary);
--ezhp-button-hover-bg: var(--ezhp-color-primary);
--ezhp-button-hover-text: var(--ezhp-text-light);
/* Progress bar colors */
--ezhp-progress-track: rgba(155, 164, 196, 0.2);
--ezhp-progress-fill: var(--ezhp-color-secondary);
/* -------------------------------------------------------------------------
TYPOGRAPHY
------------------------------------------------------------------------- */
--ezhp-font-family-base: inherit;
--ezhp-font-family-accent: "Cormorant Garamond", Georgia, "Times New Roman", serif;
--ezhp-font-size-xs: 0.75rem;
--ezhp-font-size-sm: 0.875rem;
--ezhp-font-size-base: 1rem;
--ezhp-font-size-lg: 1.125rem;
--ezhp-font-size-xl: 1.25rem;
--ezhp-font-size-2xl: 1.5rem;
--ezhp-font-size-3xl: 1.75rem;
--ezhp-font-size-4xl: 2rem;
--ezhp-font-size-emoji: 4rem;
--ezhp-font-weight-light: 300;
--ezhp-font-weight-normal: 400;
--ezhp-font-weight-medium: 500;
--ezhp-font-weight-semibold: 600;
--ezhp-font-weight-bold: 700;
--ezhp-line-height-tight: 1.2;
--ezhp-line-height-normal: 1.5;
--ezhp-line-height-relaxed: 1.7;
--ezhp-letter-spacing-wide: 0.025em;
--ezhp-letter-spacing-wider: 0.05em;
--ezhp-letter-spacing-widest: 0.1em;
/* -------------------------------------------------------------------------
SPACING
------------------------------------------------------------------------- */
--ezhp-spacing-xs: 0.25rem;
--ezhp-spacing-sm: 0.5rem;
--ezhp-spacing-md: 1rem;
--ezhp-spacing-lg: 1.5rem;
--ezhp-spacing-xl: 2rem;
--ezhp-spacing-2xl: 3rem;
/* -------------------------------------------------------------------------
BORDERS & SHADOWS
------------------------------------------------------------------------- */
--ezhp-radius-sm: 4px;
--ezhp-radius-md: 8px;
--ezhp-radius-lg: 12px;
--ezhp-radius-xl: 16px;
--ezhp-radius-full: 9999px;
--ezhp-border-width-thin: 1px;
--ezhp-border-width-medium: 2px;
--ezhp-shadow-sm: 0 1px 3px rgba(93, 107, 138, 0.06);
--ezhp-shadow-md: 0 4px 12px rgba(93, 107, 138, 0.08);
--ezhp-shadow-lg: 0 8px 24px rgba(93, 107, 138, 0.1);
--ezhp-shadow-glow: 0 0 20px rgba(201, 169, 98, 0.2);
--ezhp-shadow-moon: 0 0 30px rgba(201, 169, 98, 0.3);
/* -------------------------------------------------------------------------
TRANSITIONS
------------------------------------------------------------------------- */
--ezhp-transition-fast: 150ms ease;
--ezhp-transition-normal: 250ms ease;
--ezhp-transition-slow: 400ms ease;
}
/* =============================================================================
2. WIDGET CONTAINER
============================================================================= */
.ez-moon-phase-widget {
font-family: var(--ezhp-font-family-base);
font-size: var(--ezhp-font-size-base);
line-height: var(--ezhp-line-height-relaxed);
color: var(--ezhp-text-primary);
background: var(--ezhp-bg-mystical);
padding: var(--ezhp-spacing-lg);
border-radius: var(--ezhp-radius-lg);
box-shadow: var(--ezhp-shadow-md);
text-align: center;
border: var(--ezhp-border-width-thin) solid rgba(155, 164, 196, 0.2);
}
/* =============================================================================
3. MOON PHASE DISPLAY
============================================================================= */
.ez-moon-phase-display {
margin-bottom: var(--ezhp-spacing-lg);
position: relative;
}
/* Decorative stars around moon */
.ez-moon-phase-display::before {
content: "✦";
position: absolute;
top: 0;
left: 20%;
font-size: var(--ezhp-font-size-sm);
color: var(--ezhp-color-secondary);
opacity: 0.5;
animation: ezhp-twinkle 3s ease-in-out infinite;
}
.ez-moon-phase-display::after {
content: "✧";
position: absolute;
top: 10%;
right: 20%;
font-size: var(--ezhp-font-size-xs);
color: var(--ezhp-color-tertiary);
opacity: 0.4;
animation: ezhp-twinkle 3s ease-in-out infinite 1.5s;
}
@keyframes ezhp-twinkle {
0%, 100% { opacity: 0.3; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.2); }
}
/* Moon image */
.ez-moon-phase-image {
display: block;
margin: 0 auto var(--ezhp-spacing-md) auto;
border-radius: var(--ezhp-radius-full);
object-fit: cover;
box-shadow: var(--ezhp-shadow-moon);
transition: box-shadow var(--ezhp-transition-slow);
}
.ez-moon-phase-image:hover {
box-shadow: 0 0 40px rgba(201, 169, 98, 0.4);
}
/* Moon emoji fallback */
.ez-moon-phase-emoji {
display: block;
font-size: var(--ezhp-font-size-emoji);
line-height: 1;
margin-bottom: var(--ezhp-spacing-md);
text-shadow: var(--ezhp-shadow-moon);
}
/* Moon phase name */
.ez-moon-phase-text {
font-family: var(--ezhp-font-family-accent);
font-size: var(--ezhp-font-size-lg);
font-weight: var(--ezhp-font-weight-light);
font-style: italic;
margin: 0;
color: var(--ezhp-color-primary);
letter-spacing: var(--ezhp-letter-spacing-wide);
}
/* =============================================================================
4. ZODIAC DROPDOWN
============================================================================= */
.ez-moon-phase-zodiac-select {
margin-bottom: var(--ezhp-spacing-lg);
}
.ez-moon-zodiac-dropdown {
width: 100%;
max-width: 280px;
padding: var(--ezhp-spacing-sm) var(--ezhp-spacing-md);
padding-right: 2.5rem;
font-family: var(--ezhp-font-family-base);
font-size: var(--ezhp-font-size-base);
color: var(--ezhp-input-text);
background-color: var(--ezhp-input-bg);
border: var(--ezhp-border-width-medium) solid var(--ezhp-input-border);
border-radius: var(--ezhp-radius-md);
cursor: pointer;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%235D6B8A' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 1rem center;
transition: border-color var(--ezhp-transition-fast),
box-shadow var(--ezhp-transition-fast);
}
.ez-moon-zodiac-dropdown:hover {
border-color: var(--ezhp-color-primary);
}
.ez-moon-zodiac-dropdown:focus {
outline: none;
border-color: var(--ezhp-color-secondary);
box-shadow: 0 0 0 3px var(--ezhp-input-focus-shadow);
}
/* Dropdown option styling */
.ez-moon-zodiac-dropdown option {
padding: var(--ezhp-spacing-sm);
}
/* =============================================================================
5. CONTENT AREA
============================================================================= */
.ez-moon-content-container {
text-align: left;
}
.ez-moon-content-result {
line-height: var(--ezhp-line-height-relaxed);
color: var(--ezhp-text-secondary);
}
.ez-moon-content-result p {
margin-bottom: var(--ezhp-spacing-md);
}
.ez-moon-content-result p:last-child {
margin-bottom: 0;
}
/* H5 headings in content (moon phase title) */
.ez-moon-content-result h5 {
font-family: var(--ezhp-font-family-accent);
font-size: var(--ezhp-font-size-xl);
font-weight: var(--ezhp-font-weight-normal);
font-style: italic;
color: var(--ezhp-color-primary);
margin: 0 0 var(--ezhp-spacing-md) 0;
display: inline;
}
/* First paragraph with emoji and heading */
.ez-moon-content-result > p:first-child {
font-size: var(--ezhp-font-size-lg);
color: var(--ezhp-text-primary);
margin-bottom: var(--ezhp-spacing-lg);
padding-bottom: var(--ezhp-spacing-md);
border-bottom: var(--ezhp-border-width-thin) solid rgba(155, 164, 196, 0.3);
}
/* =============================================================================
6. LOADING & PROGRESS STATES
============================================================================= */
.ez-moon-content-loading {
text-align: center;
padding: var(--ezhp-spacing-md);
color: var(--ezhp-text-muted);
font-family: var(--ezhp-font-family-accent);
font-style: italic;
}
/* Progress bar container */
.ezhp-progress-container {
width: 100%;
height: 4px;
background: var(--ezhp-progress-track);
border-radius: var(--ezhp-radius-full);
overflow: hidden;
margin: var(--ezhp-spacing-md) 0;
}
/* Progress bar fill */
.ezhp-progress-bar {
height: 100%;
width: 30%;
background: linear-gradient(90deg, var(--ezhp-color-tertiary), var(--ezhp-color-secondary));
border-radius: var(--ezhp-radius-full);
animation: ezhp-progress-slide 1.5s ease-in-out infinite;
}
@keyframes ezhp-progress-slide {
0% { transform: translateX(-100%); }
100% { transform: translateX(400%); }
}
/* =============================================================================
7. ERROR STATE
============================================================================= */
.ez-moon-phase-error {
padding: var(--ezhp-spacing-md);
background: rgba(199, 91, 91, 0.08);
border: var(--ezhp-border-width-thin) solid rgba(199, 91, 91, 0.3);
border-radius: var(--ezhp-radius-md);
color: #C75B5B;
text-align: center;
font-family: var(--ezhp-font-family-base);
}
/* =============================================================================
8. CTA SECTION
============================================================================= */
.ez-moon-cta {
margin: var(--ezhp-spacing-lg) 0;
padding: var(--ezhp-spacing-lg);
background: var(--ezhp-bg-accent);
border-radius: var(--ezhp-radius-lg);
text-align: center;
border: var(--ezhp-border-width-thin) solid rgba(201, 169, 98, 0.2);
}
/* CTA intro text */
.ez-moon-cta-text {
font-family: var(--ezhp-font-family-accent);
font-size: var(--ezhp-font-size-lg);
font-style: italic;
color: var(--ezhp-text-primary);
margin: 0 0 var(--ezhp-spacing-md) 0;
line-height: var(--ezhp-line-height-relaxed);
}
/* CTA image */
.ez-moon-cta-image {
display: block;
max-width: 100%;
height: auto;
margin: 0 auto var(--ezhp-spacing-md) auto;
border-radius: var(--ezhp-radius-md);
box-shadow: var(--ezhp-shadow-sm);
}
/* CTA image link wrapper */
.ez-moon-cta-image-link {
display: block;
margin-bottom: var(--ezhp-spacing-md);
transition: transform var(--ezhp-transition-normal);
}
.ez-moon-cta-image-link:hover {
transform: scale(1.02);
}
.ez-moon-cta-image-link img {
transition: box-shadow var(--ezhp-transition-normal);
}
.ez-moon-cta-image-link:hover img {
box-shadow: var(--ezhp-shadow-lg);
}
/* CTA button - outlined style matching mystical theme */
.ez-moon-cta-button {
display: inline-block;
font-family: var(--ezhp-font-family-base);
font-size: var(--ezhp-font-size-sm);
font-weight: var(--ezhp-font-weight-medium);
text-transform: uppercase;
letter-spacing: var(--ezhp-letter-spacing-wider);
color: var(--ezhp-button-text);
background: transparent;
border: var(--ezhp-border-width-medium) solid var(--ezhp-button-border);
padding: var(--ezhp-spacing-sm) var(--ezhp-spacing-lg);
border-radius: var(--ezhp-radius-sm);
text-decoration: none;
cursor: pointer;
transition: all var(--ezhp-transition-normal);
}
.ez-moon-cta-button:hover {
background: var(--ezhp-button-hover-bg);
color: var(--ezhp-button-hover-text);
transform: translateY(-2px);
box-shadow: var(--ezhp-shadow-md);
}
.ez-moon-cta-button:focus {
outline: none;
box-shadow: 0 0 0 3px var(--ezhp-input-focus-shadow);
}
/* CTA text link */
.ez-moon-cta-link {
font-family: var(--ezhp-font-family-base);
font-size: var(--ezhp-font-size-base);
font-weight: var(--ezhp-font-weight-medium);
color: var(--ezhp-color-primary);
text-decoration: underline;
text-underline-offset: 3px;
transition: color var(--ezhp-transition-fast);
}
.ez-moon-cta-link:hover {
color: var(--ezhp-color-secondary);
text-decoration: none;
}
/* =============================================================================
9. RTL (RIGHT-TO-LEFT) SUPPORT
============================================================================= */
.ez-moon-phase-widget[dir="rtl"] {
direction: rtl;
text-align: center;
}
/* Dropdown RTL */
.ez-moon-phase-widget[dir="rtl"] .ez-moon-zodiac-dropdown {
background-position: left 1rem center;
padding-right: var(--ezhp-spacing-md);
padding-left: 2.5rem;
text-align: right;
}
/* Content container RTL */
.ez-moon-phase-widget[dir="rtl"] .ez-moon-content-container {
text-align: right;
}
.ez-moon-phase-widget[dir="rtl"] .ez-moon-content-result {
direction: rtl;
text-align: right;
}
/* Moon phase text RTL */
.ez-moon-phase-widget[dir="rtl"] .ez-moon-phase-text {
direction: rtl;
}
/* Decorative stars flip for RTL */
.ez-moon-phase-widget[dir="rtl"] .ez-moon-phase-display::before {
left: auto;
right: 20%;
}
.ez-moon-phase-widget[dir="rtl"] .ez-moon-phase-display::after {
right: auto;
left: 20%;
}
/* CTA RTL support */
.ez-moon-phase-widget[dir="rtl"] .ez-moon-cta {
direction: rtl;
text-align: center;
}
.ez-moon-phase-widget[dir="rtl"] .ez-moon-cta-text {
direction: rtl;
}
/* Error state RTL */
.ez-moon-phase-widget[dir="rtl"] .ez-moon-phase-error {
direction: rtl;
text-align: center;
}
/* Progress bar RTL - animate from right to left */
.ez-moon-phase-widget[dir="rtl"] .ezhp-progress-bar {
animation-direction: reverse;
}
/* =============================================================================
10. RESPONSIVE DESIGN
============================================================================= */
@media (max-width: 768px) {
.ez-moon-phase-widget {
--ezhp-font-size-lg: 1rem;
--ezhp-font-size-xl: 1.125rem;
--ezhp-spacing-lg: 1.25rem;
}
.ez-moon-phase-display::before,
.ez-moon-phase-display::after {
display: none;
}
}
@media (max-width: 480px) {
.ez-moon-phase-widget {
padding: var(--ezhp-spacing-md);
--ezhp-font-size-emoji: 3rem;
}
.ez-moon-zodiac-dropdown {
max-width: 100%;
}
.ez-moon-phase-text {
font-size: var(--ezhp-font-size-base);
}
.ez-moon-cta {
padding: var(--ezhp-spacing-md);
}
.ez-moon-cta-button {
display: block;
width: 100%;
text-align: center;
}
}
/* =============================================================================
11. PRINT STYLES
============================================================================= */
@media print {
.ez-moon-phase-widget {
font-size: 10pt;
color: #000;
background: #fff;
box-shadow: none;
border: 1px solid #ccc;
padding: 1rem;
}
.ez-moon-phase-display::before,
.ez-moon-phase-display::after {
display: none;
}
.ez-moon-phase-image {
box-shadow: none;
border: 1px solid #ccc;
}
.ez-moon-phase-text {
color: #000;
font-style: normal;
}
.ez-moon-zodiac-dropdown {
border-color: #000;
}
.ez-moon-content-result h5 {
color: #000;
font-style: normal;
}
.ezhp-progress-container {
display: none;
}
.ez-moon-cta {
background: none;
border: 1px solid #ccc;
}
.ez-moon-cta-button {
color: #000;
border-color: #000;
}
}
/* =============================================================================
END OF MOON PHASE WIDGET MYSTICAL THEME STYLESHEET
COLOR REFERENCE:
----------------
Primary (dusty blue-purple): #5D6B8A
Secondary (warm gold): #C9A962
Tertiary (soft lavender): #9BA4C4
GOOGLE FONT SUGGESTION:
-----------------------
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;1,300;1,400&display=swap" rel="stylesheet">
============================================================================= */