diff --git a/css/estimates.css b/css/estimates.css new file mode 100644 index 0000000..997df00 --- /dev/null +++ b/css/estimates.css @@ -0,0 +1,519 @@ +/* ---- Pricing page specific styles ---- */ + +/* Mini hero */ +.pricing-hero { + background: linear-gradient(145deg, var(--purple-deep) 0%, var(--purple-mid) 55%, #5B21B6 100%); + position: relative; + overflow: hidden; + padding: 140px 0 100px; + text-align: center; +} +.pricing-hero-content { + position: relative; + z-index: 2; + max-width: 680px; + margin: 0 auto; + padding: 0 24px; +} +.pricing-hero-content .hero-eyebrow { margin-bottom: 16px; } +.pricing-hero-title { + font-family: var(--font-head); + font-size: clamp(2.4rem, 5vw, 3.8rem); + font-weight: 800; + color: var(--white); + line-height: 1.1; + margin-bottom: 20px; +} +.pricing-hero-title span { + background: linear-gradient(135deg, var(--orange), var(--gold)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} +.pricing-hero-lead { + color: rgba(255,255,255,0.7); + font-size: 1.05rem; + line-height: 1.75; +} +.pricing-hero-wave { + position: absolute; + bottom: -1px; left: 0; right: 0; + z-index: 3; + line-height: 0; +} +.pricing-hero-wave svg { display: block; width: 100%; height: 80px; } + +/* Section backgrounds */ +.section-bg-deep { background: #251D70; } +.section-bg-mid { background: #3B2DA8; } + +/* Nav active state */ +.nav-links a.nav-active { + background: rgba(251,191,36,0.15) !important; + border-color: rgba(251,191,36,0.3) !important; + color: var(--gold) !important; +} + +/* Pricing card grid */ +.pricing-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 28px; +} +.pricing-grid--2col { + grid-template-columns: repeat(2, 1fr); + max-width: 800px; + margin: 28px auto 0; +} + +/* Base pricing card */ +.pricing-card { + background: rgba(255,255,255,0.07); + border: 1px solid rgba(255,255,255,0.12); + border-radius: var(--radius); + padding: 36px 32px; + position: relative; + overflow: hidden; + transition: box-shadow var(--transition), border-color var(--transition), background var(--transition); + display: flex; + flex-direction: column; +} +.pricing-card::after { + content: ''; + position: absolute; + bottom: 0; left: 0; right: 0; + height: 3px; + background: linear-gradient(90deg, var(--gold), var(--orange)); + transform: scaleX(0); + transition: transform var(--transition); + transform-origin: left; +} +.pricing-card:hover { + background: rgba(255,255,255,0.11); + border-color: rgba(255,255,255,0.22); + box-shadow: 0 8px 32px rgba(0,0,0,0.25); +} +.pricing-card:hover::after { transform: scaleX(1); } + +/* Popular highlight */ +.pricing-card--popular { + border-color: var(--gold); + background: rgba(251,191,36,0.07); +} +.pricing-card--popular::before { + content: '\2736 Most Popular'; + position: absolute; + top: 16px; right: 16px; + background: linear-gradient(135deg, var(--gold), var(--orange)); + color: var(--white); + font-family: var(--font-head); + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + padding: 5px 12px; + border-radius: 50px; +} +.pricing-card--popular:hover { + border-color: var(--gold); + box-shadow: 0 8px 40px rgba(251,191,36,0.18); +} + +/* Card elements */ +.pricing-emoji { + font-size: 2.2rem; + margin-bottom: 14px; + line-height: 1; +} +.pricing-name { + font-family: var(--font-head); + font-size: 1.1rem; + font-weight: 800; + color: var(--white); + margin-bottom: 8px; +} +.pricing-price { + font-family: var(--font-head); + font-size: 1.55rem; + font-weight: 800; + color: var(--gold); + margin-bottom: 16px; +} +.pricing-price span { + font-size: 0.85rem; + font-weight: 500; + color: rgba(255,255,255,0.45); +} +.pricing-divider { + border: none; + border-top: 1px solid rgba(255,255,255,0.12); + margin: 16px 0; +} +.pricing-includes-label { + font-family: var(--font-head); + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.15em; + text-transform: uppercase; + color: rgba(255,255,255,0.4); + margin-bottom: 12px; +} +.pricing-includes { + display: flex; + flex-direction: column; + gap: 9px; + margin-bottom: 20px; + flex-grow: 1; +} +.pricing-includes li { + display: flex; + align-items: flex-start; + gap: 10px; + font-size: 0.88rem; + color: rgba(255,255,255,0.75); + line-height: 1.4; +} +.pricing-includes li::before { + content: '\2736'; + color: var(--gold); + font-size: 0.6rem; + flex-shrink: 0; + margin-top: 4px; +} +.pricing-tagline { + font-size: 0.83rem; + color: rgba(255,255,255,0.4); + font-style: italic; + line-height: 1.55; + margin-top: auto; + padding-top: 14px; + border-top: 1px solid rgba(255,255,255,0.08); +} + +/* Wizard's Bench - wide card */ +.bench-card { + background: rgba(255,255,255,0.07); + border: 1px solid rgba(255,255,255,0.12); + border-radius: var(--radius); + padding: 48px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 48px; + align-items: start; + position: relative; + overflow: hidden; + transition: box-shadow var(--transition), background var(--transition); +} +.bench-card::after { + content: ''; + position: absolute; + bottom: 0; left: 0; right: 0; + height: 3px; + background: linear-gradient(90deg, var(--teal), var(--purple-bright)); +} +.bench-card:hover { + background: rgba(255,255,255,0.1); + box-shadow: 0 8px 32px rgba(0,0,0,0.25); +} +.bench-emoji { font-size: 3rem; margin-bottom: 16px; line-height: 1; } +.bench-name { + font-family: var(--font-head); + font-size: 1.5rem; + font-weight: 800; + color: var(--white); + margin-bottom: 10px; +} +.bench-rate { + font-family: var(--font-head); + font-size: 2.8rem; + font-weight: 800; + color: var(--gold); + line-height: 1; + margin-bottom: 8px; +} +.bench-rate span { + font-size: 1rem; + font-weight: 500; + color: rgba(255,255,255,0.45); +} +.bench-desc { + color: rgba(255,255,255,0.6); + font-size: 0.93rem; + line-height: 1.75; + margin-top: 16px; +} + +/* Protection Charms / ward cards */ +.ward-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 28px; +} +.ward-card { + background: rgba(255,255,255,0.07); + border: 1px solid rgba(255,255,255,0.12); + border-radius: var(--radius); + padding: 36px 32px; + position: relative; + overflow: hidden; + transition: box-shadow var(--transition), border-color var(--transition), background var(--transition); +} +.ward-card::after { + content: ''; + position: absolute; + bottom: 0; left: 0; right: 0; + height: 3px; + background: linear-gradient(90deg, var(--gold), var(--orange)); + transform: scaleX(0); + transition: transform var(--transition); + transform-origin: left; +} +.ward-card:hover { + background: rgba(255,255,255,0.11); + box-shadow: 0 8px 32px rgba(0,0,0,0.25); +} +.ward-card:hover::after { transform: scaleX(1); } +.ward-card--mid { + border-color: rgba(124,58,237,0.55); + background: rgba(124,58,237,0.09); +} +.ward-card--top { + border-color: var(--gold); + background: rgba(251,191,36,0.06); +} +.ward-card--top:hover { border-color: var(--gold); } +.ward-tier { + font-family: var(--font-head); + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--gold); + margin-bottom: 6px; +} +.ward-name { + font-family: var(--font-head); + font-size: 1.3rem; + font-weight: 800; + color: var(--white); + margin-bottom: 4px; +} +.ward-price { + font-family: var(--font-head); + font-size: 2rem; + font-weight: 800; + color: var(--gold); + line-height: 1.15; + margin-bottom: 20px; +} +.ward-price span { + font-size: 0.85rem; + font-weight: 500; + color: rgba(255,255,255,0.4); +} + +/* Enquire button on each package */ +.pricing-enquire { + margin-top: 18px; + width: 100%; + justify-content: center; + font-size: 0.85rem; + padding: 12px 18px; +} +.bench-enquire { margin-top: 22px; } +.ward-enquire { margin-top: 20px; } + +/* "See full details" trigger */ +.pkg-details-btn { + background: none; + border: none; + cursor: pointer; + color: var(--gold); + font-family: var(--font-head); + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.03em; + display: inline-flex; + align-items: center; + gap: 7px; + margin-top: 16px; + padding: 6px 0; + transition: gap var(--transition), color var(--transition); +} +.pkg-details-btn:hover { gap: 11px; color: var(--white); } +.pricing-card, .ward-card, .bench-card { cursor: pointer; } + +/* Package detail modal */ +.pkg-modal-overlay { + position: fixed; + inset: 0; + background: rgba(10,6,30,0.78); + -webkit-backdrop-filter: blur(4px); + backdrop-filter: blur(4px); + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + z-index: 1000; + opacity: 0; + visibility: hidden; + transition: opacity 0.25s ease, visibility 0.25s ease; +} +.pkg-modal-overlay.open { opacity: 1; visibility: visible; } +.pkg-modal { + background: linear-gradient(160deg, #2D1F6E 0%, #1E1550 100%); + border: 1px solid rgba(251,191,36,0.25); + border-radius: var(--radius); + max-width: 560px; + width: 100%; + max-height: 88vh; + overflow-y: auto; + padding: 40px; + position: relative; + box-shadow: 0 24px 70px rgba(0,0,0,0.5); + transform-origin: 50% 50%; + will-change: transform; +} +@media (prefers-reduced-motion: reduce) { + .pkg-modal { transform: none !important; transition: none !important; } +} +.pkg-sparkle { + position: fixed; + z-index: 1100; + pointer-events: none; + line-height: 1; + transform: translate(-50%, -50%); + text-shadow: 0 0 6px rgba(255,255,255,0.4); + will-change: transform, opacity; +} +.pkg-modal-close { + position: absolute; + top: 18px; right: 18px; + width: 38px; height: 38px; + border-radius: 50%; + border: 1px solid rgba(255,255,255,0.18); + background: rgba(255,255,255,0.06); + color: rgba(255,255,255,0.8); + font-size: 1.3rem; + line-height: 1; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background 0.2s, color 0.2s; +} +.pkg-modal-close:hover { background: rgba(255,255,255,0.14); color: var(--white); } +.pkg-modal-emoji { font-size: 2.4rem; line-height: 1; margin-bottom: 10px; } +.pkg-modal-name { + font-family: var(--font-head); + font-size: 1.6rem; + font-weight: 800; + color: var(--white); + margin-bottom: 4px; + padding-right: 36px; +} +.pkg-modal-price { + font-family: var(--font-head); + font-size: 1.3rem; + font-weight: 800; + color: var(--gold); + margin-bottom: 12px; +} +.pkg-modal-price span { font-size: 0.85rem; font-weight: 500; color: rgba(255,255,255,0.45); } +.pkg-modal-lead { + color: rgba(255,255,255,0.62); + font-size: 0.93rem; + line-height: 1.65; + margin-bottom: 4px; +} +.pkg-modal-divider { + border: none; + border-top: 1px solid rgba(255,255,255,0.12); + margin: 22px 0; +} +.pkg-range { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; +} +.pkg-range-col { + background: rgba(255,255,255,0.05); + border: 1px solid rgba(255,255,255,0.1); + border-radius: 14px; + padding: 16px 18px; +} +.pkg-range-col h4 { + font-family: var(--font-head); + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--gold); + margin-bottom: 6px; +} +.pkg-range-col .amt { + font-family: var(--font-head); + font-size: 1.15rem; + font-weight: 800; + color: var(--white); + margin-bottom: 10px; +} +.pkg-range-col p { font-size: 0.84rem; color: rgba(255,255,255,0.72); line-height: 1.5; } +.pkg-specs { display: flex; flex-direction: column; } +.pkg-spec { + display: flex; + justify-content: space-between; + gap: 16px; + font-size: 0.9rem; + padding: 11px 0; + border-bottom: 1px solid rgba(255,255,255,0.08); +} +.pkg-spec:last-child { border-bottom: none; } +.pkg-spec .k { color: rgba(255,255,255,0.5); display: flex; align-items: center; gap: 9px; } +.pkg-spec .k i { color: var(--gold); width: 16px; text-align: center; } +.pkg-spec .v { color: var(--white); font-weight: 600; text-align: right; } +.pkg-modal-enquire { margin-top: 26px; } +html.modal-open { overflow: hidden; } +@media (max-width: 520px) { + .pkg-range { grid-template-columns: 1fr; } + .pkg-modal { padding: 30px 22px; } +} + +/* CTA strip */ +.pricing-cta { + background: linear-gradient(145deg, var(--purple-deep) 0%, #2D1860 100%); + padding: 90px 0; + text-align: center; + position: relative; + overflow: hidden; +} +.pricing-cta::before { + content: ''; + position: absolute; + width: 500px; height: 500px; + background: radial-gradient(circle, rgba(124,58,237,0.2) 0%, transparent 70%); + top: -200px; left: 50%; + transform: translateX(-50%); + pointer-events: none; +} +.pricing-cta-inner { + position: relative; + z-index: 1; + max-width: 600px; + margin: 0 auto; + padding: 0 24px; +} +.pricing-cta .section-lead { margin-bottom: 36px; } + +/* Responsive */ +@media (max-width: 900px) { + .pricing-grid { grid-template-columns: 1fr 1fr; } + .pricing-grid--2col { grid-template-columns: 1fr 1fr; max-width: 100%; margin-top: 28px; } + .bench-card { grid-template-columns: 1fr; gap: 28px; padding: 32px; } + .ward-grid { grid-template-columns: 1fr; } +} +@media (max-width: 600px) { + .pricing-grid { grid-template-columns: 1fr; } + .pricing-grid--2col { grid-template-columns: 1fr; } + .bench-rate { font-size: 2rem; } +} diff --git a/css/noscript.css b/css/noscript.css new file mode 100644 index 0000000..6847bfa --- /dev/null +++ b/css/noscript.css @@ -0,0 +1 @@ +.mascot-teleport { opacity: 1; } diff --git a/css/style.css b/css/style.css index 075fe43..563d91e 100644 --- a/css/style.css +++ b/css/style.css @@ -588,6 +588,7 @@ ul { list-style: none; } .service-wide-plants i:nth-child(3n+1) { color: #5EEAD4; } @media (prefers-reduced-motion: reduce) { .service-wide-plants i { transition: opacity 0.25s ease; transform: none; } + .pricing-teaser-astro img { animation: none; } } /* ================================================ @@ -794,9 +795,55 @@ ul { list-style: none; } /* ================================================ PRICING TEASER ================================================ */ -.pricing-teaser { background: #3B2DA8; } -.pricing-teaser .section-header { margin-bottom: 0; } +.pricing-teaser { + background: #3B2DA8; + position: relative; + overflow: hidden; +} +.pricing-teaser::before { + content: ''; + position: absolute; + width: 420px; + height: 420px; + right: 12%; + top: 50%; + transform: translateY(-50%); + background: radial-gradient(circle, rgba(251,191,36,0.16) 0%, transparent 68%); + pointer-events: none; +} +.pricing-teaser-inner { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(180px, 300px); + gap: 48px; + align-items: center; + position: relative; + z-index: 1; +} +.pricing-teaser-copy { + text-align: left; + max-width: 650px; +} +.pricing-teaser-copy .section-lead { + margin: 0; + max-width: 620px; +} .pricing-teaser-btn { margin-top: 32px; } +.pricing-teaser-astro { + display: flex; + justify-content: center; + pointer-events: none; +} +.pricing-teaser-astro img { + width: min(100%, 280px); + height: auto; + filter: drop-shadow(0 18px 30px rgba(0,0,0,0.3)); + transform: rotate(8deg); + animation: astroFloat 5.8s ease-in-out infinite; +} +@keyframes astroFloat { + 0%, 100% { transform: translateY(0) rotate(8deg); } + 50% { transform: translateY(-16px) rotate(11deg); } +} /* ================================================ CONTACT @@ -1007,6 +1054,18 @@ ul { list-style: none; } grid-template-columns: 1fr; gap: 48px; } + .pricing-teaser-inner { + grid-template-columns: 1fr; + gap: 28px; + text-align: center; + } + .pricing-teaser-copy { + text-align: center; + max-width: 700px; + margin: 0 auto; + } + .pricing-teaser-copy .section-lead { margin: 0 auto; } + .pricing-teaser-astro img { width: 210px; } } /* Medium tablets */ @@ -1052,6 +1111,14 @@ ul { list-style: none; } .services-grid { grid-template-columns: 1fr; } .service-wide { flex-direction: column; text-align: center; gap: 20px; padding: 32px 24px; } .service-wide-text p { max-width: none; } + .pricing-teaser::before { + right: 50%; + transform: translate(50%, -50%); + width: 300px; + height: 300px; + } + .pricing-teaser-inner { gap: 22px; } + .pricing-teaser-astro img { width: 150px; } .project-row { grid-template-columns: 110px 1fr auto; gap: 18px; padding: 20px 0; } .project-row-img { height: 80px; } .project-img-placeholder { font-size: 1.8rem; } diff --git a/css/terms.css b/css/terms.css new file mode 100644 index 0000000..40be84d --- /dev/null +++ b/css/terms.css @@ -0,0 +1,106 @@ +/* ---- Terms page specific styles ---- */ +.terms-hero { + background: linear-gradient(145deg, var(--purple-deep) 0%, var(--purple-mid) 55%, #5B21B6 100%); + position: relative; + overflow: hidden; + padding: 140px 0 100px; + text-align: center; +} +.terms-hero-content { + position: relative; + z-index: 2; + max-width: 680px; + margin: 0 auto; + padding: 0 24px; +} +.terms-hero-content .hero-eyebrow { margin-bottom: 16px; } +.terms-hero-title { + font-family: var(--font-head); + font-size: clamp(2.4rem, 5vw, 3.8rem); + font-weight: 800; + color: var(--white); + line-height: 1.1; + margin-bottom: 20px; +} +.terms-hero-title span { + background: linear-gradient(135deg, var(--orange), var(--gold)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} +.terms-hero-lead { + color: rgba(255,255,255,0.7); + font-size: 1.05rem; + line-height: 1.75; +} +.terms-hero-wave { + position: absolute; + bottom: -1px; left: 0; right: 0; + z-index: 3; + line-height: 0; +} +.terms-hero-wave svg { display: block; width: 100%; height: 80px; } + +.terms-body { + max-width: 800px; + margin: 0 auto; + padding: 0 24px; +} +.terms-updated { + display: inline-block; + font-size: 0.82rem; + font-weight: 600; + color: var(--purple-bright); + background: var(--purple-light); + padding: 6px 14px; + border-radius: 999px; + margin-bottom: 40px; +} +.terms-section { margin-bottom: 40px; } +.terms-section h2 { + font-family: var(--font-head); + font-size: 1.45rem; + font-weight: 700; + color: var(--purple-deep); + margin-bottom: 14px; + display: flex; + align-items: baseline; + gap: 12px; +} +.terms-section h2 .terms-num { + font-size: 1rem; + color: var(--orange); + font-weight: 800; +} +.terms-section p { margin-bottom: 14px; line-height: 1.8; color: var(--text); } +.terms-section ul { + list-style: none; + margin: 0 0 14px; + padding: 0; +} +.terms-section ul li { + position: relative; + padding-left: 28px; + margin-bottom: 10px; + line-height: 1.7; +} +.terms-section ul li::before { + content: "\2728"; + position: absolute; + left: 0; + top: 1px; + font-size: 0.85rem; +} +.terms-section a { color: var(--purple-bright); text-decoration: underline; } +.terms-section a:hover { color: var(--orange); } +.terms-note { + background: var(--gray-50); + border: 1px solid var(--gray-200); + border-left: 4px solid var(--orange); + border-radius: var(--radius-sm); + padding: 18px 22px; + margin-top: 50px; + font-size: 0.92rem; + color: var(--gray-600); + line-height: 1.7; +} diff --git a/estimates.php b/estimates.php index bef5290..cde6c68 100644 --- a/estimates.php +++ b/estimates.php @@ -13,525 +13,7 @@ - +
@@ -575,7 +57,7 @@ -Website Design
@@ -695,7 +177,7 @@ -Custom Builds
@@ -745,7 +227,7 @@ -Creative Services
@@ -830,7 +312,7 @@ -Ad-hoc Support
@@ -863,7 +345,7 @@ -Ongoing Care
@@ -948,400 +430,6 @@ - + -