diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..2fc648f Binary files /dev/null and b/.DS_Store differ diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..ffb0c5d --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "scj-site", + "runtimeExecutable": "python3", + "runtimeArgs": ["-m", "http.server", "8123", "--directory", "scj"], + "port": 8123 + } + ] +} diff --git a/Gmail - Available spoods.pdf b/Gmail - Available spoods.pdf new file mode 100755 index 0000000..59d791e Binary files /dev/null and b/Gmail - Available spoods.pdf differ diff --git a/IMG_1760.jpeg b/IMG_1760.jpeg new file mode 100644 index 0000000..428bce7 Binary files /dev/null and b/IMG_1760.jpeg differ diff --git a/Note from Mom.rtf b/Note from Mom.rtf new file mode 100644 index 0000000..abe6844 --- /dev/null +++ b/Note from Mom.rtf @@ -0,0 +1,51 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2870 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 HelveticaNeue-Bold;\f1\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\margl1440\margr1440\vieww11520\viewh8400\viewkind0 +\deftab560 +\pard\pardeftab560\pardirnatural\partightenfactor0 + +\f0\b\fs40 \cf0 Website for Spoods\ +\pard\pardeftab560\slleading20\partightenfactor0 + +\f1\b0\fs26 \cf0 Did a small EDIT \ +\ +Baby spiders are called slings in the hobby (even tarantulas) \ +\ +No health check- maybe \'91healthy body shape\'92 it\'92s all about the shape of the abdomen \ +\ +Use \'91captive raised\'92 b/c I\'92m not breeding them- my mamas are WC\ +They breed one time and have babies for the rest of their short lives \ +\ +Can you make a QR code for the care sheet part or website in general? I\'92m going to type one up when I get the cord that runs from my phone to the printer. Edit- I\'92ve got the cord and I think I can do a google search- that\'92s not copyrighted - right??\ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 I\'92m also adding a starter kit- includes misting bottle, paintbrush, notes on molting/instar (can\'92t think of good way to word it). \ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 Overnight to hub (morph market covers live arrival) or 2 day to your door which isn\'92t covered in LG\ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 Mine are Northern canopy (otiosus) \ +b/c there is a difference from the fla Oti\'92s & $35+ on them. Most breeders are in the $60 range but I\'92ll undercut them all lol. Also change \'91calm\'92 maybe active cuz they a little crazy lol ** they do well with a playground** your dragon lair for instance. \ +\ +I\'92ll probably never have a mustached jumper (way too small for my bad hands) but hopefully I\'92ll have fartillis in the future probably the same price\ +\ +Guaranteed alive if overnight (hub to hub) is chosen. I\'92m going to offer 2 day shipping for a lower rate also for spring/fall delivery \ +\ +Fed Ex is the only legal option\ +\ +I like the Mon-Wed part just can\'92t be UPS or USPS. \ +\ +Slings (i3-6 ish) can be in 3 x 3 cubes also. Mention soft sphagnum moss or other reptile safe moss as floor incase they fall. \ +\ +You can add peanut beetle larvae- PBL as food- it\'92s a newer- great choice. \ +\ +Molting is pretty critical at i5 & i7 so a little more humidity is essential. Only feed after a few days- when they come out of hammock \ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +} \ No newline at end of file diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..21f0a54 --- /dev/null +++ b/PLAN.md @@ -0,0 +1,86 @@ +# Storm Cloud Jumpers — Website Build Plan + +**Domain:** jumpers.stormcloudhills.com +**Type:** Static, responsive storefront-style showcase + care hub. **All sales & inquiries run through the website directly** (email) — **NOT** MorphMarket. +**Contact:** stormcloudjumpers@gmail.com +**Facebook:** https://www.facebook.com/61591317309985/ +**Build location:** `scj/` + +--- + +## 1. What this site is (and isn't) + +A branded **showcase + inquiry hub** that IS her sales channel. No cart/payment processor and no accounts — buyers **reserve/inquire via the site** (form + email to stormcloudjumpers@gmail.com), and Mom arranges payment + shipping directly. She is **not** setting up a MorphMarket shop (she only reuses MorphMarket-branded shipping boxes, which carry the live-arrival program). So: **no MorphMarket links anywhere.** +Every "Available" spider gets a **"Reserve / Inquire"** button that opens a pre-filled inquiry (form anchor or `mailto:` with the spider's name in the subject). + +## 2. Brand & design direction + +Reuse the locked look from the existing assets: +- **Palette:** near-black storm background (`#0a0a0a`), **red `#e02828`** accent, brushed-silver text on headings. +- **Type:** Oswald (display/headlines) + Inter (body) — already in the placeholder. +- **Mascot:** **Nimbus** (the crest logo) featured in the hero and as the site logo/favicon. +- **Vibe:** bold "esports crest" energy softened with clean, readable content — professional, not gimmicky. Keep subtle motion (reveal-on-scroll, light parallax) from the placeholder; trim anything that hurts readability or mobile. + +## 3. Structure — single page + one print page + +**`index.html`** (anchor nav: Available · Mamas · Care · Shipping · About · Contact) + +1. **Hero** — Nimbus mascot on storm background, tagline "Small size. Big personality.", CTAs → *View Available* + *Care Guide*. +2. **Available Now** — the real for-sale inventory as cards, each with photo, species, instar/age, sex status, "healthy body shape", temperament, price, and a **Reserve / Inquire** button: + - *Otiosus slings* — Northern Canopy (Fern's line), i5–6, unsexed, **$25** ea. Note: Northern otiosus differ from FL; typically $35+. + - *Regius males* — current boys **Gully, Noble, Hexx & Magick**, adults, **$25** ea. (⚠️ **Nashville has passed away** — remove. Ivan's status TBD — see §7. New boys need photos.) + - *Regius females* — **Iris** (subadult, young enough to work with) & **Mango** (subadult, handles well), **$50** ea. + - **Free Starter Kit** — comes **free with every spider purchase** (misting bottle, paintbrush, molting/instar notes). Present as a value-add banner/badge, NOT a purchasable product. +3. **Meet the Mamas** — showcase gallery (NOT for sale) of her wild-caught breeding females: Fern (otiosus), Cleo (audax), and the regius girls (Colette, Demure, Devine, Delight, Dove, Inca, Latte, Lush). Builds trust + shows lineage. +4. **Care Guide** — accurate husbandry (see §4). Includes a **QR code** linking to the printable care sheet. +5. **Shipping & Live Arrival** — FedEx-only rules (see §4). +6. **About** — small hands-on keeper; wild-caught mamas that breed once → **captive-raised** babies; Storm Cloud Hills. +7. **Contact** — inquiry form (routes to Gmail) + stormcloudjumpers@gmail.com + **Facebook** link/share button. +8. **Footer** — logo, nav, Facebook, © year. + +**`care-sheet.html`** — print-friendly, single-column version of the care guide. This is the QR code target so buyers can print/save it. (Mom is also typing up her own; this gives her a branded template.) + +## 4. Content accuracy — corrections from Mom's note (MUST honor) + +- ✅ **"Captive raised"** everywhere — never "captive bred." Mamas are wild-caught (WC), breed once, produce babies through their short lives. +- ✅ Babies = **"slings"** (hobby term). +- ✅ No health-check claims → **"healthy body shape"** (abdomen shape). +- ✅ **Live arrival guaranteed only on overnight hub-to-hub** (MorphMarket covers it). 2-day to-your-door = lower rate, **not** covered, offered spring/fall. +- ✅ **FedEx only** (only legal option) — **no UPS, no USPS**. Ships **Mon–Wed**. +- ✅ otiosus temperament = **Active** ("a little crazy"); enjoy a **playground / enrichment ("dragon lair")** setup. +- ✅ Housing: slings (i3–6) fine in **3×3 cubes**; floor with **soft sphagnum / reptile-safe moss** in case of falls. +- ✅ Feeding: hydei fruit flies for slings; **PBL (peanut beetle larvae)** as a newer great option; crickets/BSFL for larger. +- ✅ Molting: critical at **i5 & i7** — raise humidity; **don't feed until a few days after** they leave the hammock. +- ✅ Remove all fabricated stats/reviews and the placeholder phone/email. +- Future species (not yet available): mustached jumper unlikely; hoped-for **_Paraphidippus fartilis_** (≈ same price). + +## 5. Assets pipeline + +- Create `scj/assets/` → `brand/` (Nimbus logo variants, hero cards), `spiders/available/`, `spiders/mamas/`, `care/` (QR + diagrams). +- **Resize/optimize** the large iPhone JPEGs (many are 2–4 MB) to web sizes with `sips` (max ~1600px, ~80% quality) so the site loads fast on mobile. +- **Map photos → individuals** using each folder's `names.txt` ordering (e.g., "first 6 = Iris"). Filenames aren't in order, so I'll view them during build to assign the best shot per spider and per gallery. +- Generate a **QR code** PNG pointing to the care sheet URL. +- Pull the 3 otiosus sling photos out of the "Available spoods" PDF for the slings card. + +## 6. Tech + +- Plain **HTML + CSS + vanilla JS**, no build step — trivial to host on the subdomain and easy to hand off. +- Adapt the existing `SCJ.src/styles.css` as the base (it already nails the palette/type), fixing content and extending for the new sections. +- Fully **responsive** (mobile-first), accessible (alt text, semantic landmarks, keyboard nav), SEO basics (title/description/OG tags using a Nimbus social card), favicon from the logo. +- Lighthouse pass for performance/a11y before done. + +## 7. Open items to confirm with Mom + +1. **Male roster + photos.** Nashville passed; current boys are **Gully, Noble, Hexx & Magick** but we have **no photos** for them yet — only Nashville (deceased) and Ivan. Need: is **Ivan** still available? Send photos for the new boys. Until then I'll show the males as one "Regius Males — $25" group using available/placeholder imagery and a "more boys coming" note. +2. ~~Inquiry form delivery~~ **RESOLVED:** ship with a **`mailto:` form** now, but build the form so it can POST to a **Google Apps Script web app** bound to her own Gmail (`GmailApp.sendEmail`) — sends from her account, no external service. Ship `form-handler.gs` (ready to deploy) + progressive-enhancement JS that POSTs to the endpoint when configured, else falls back to `mailto:`. + +**Resolved:** No MorphMarket · Starter kit free w/ purchase · Species = _Paraphidippus fartilis_ · Facebook = facebook.com/61591317309985 · Contact = stormcloudjumpers@gmail.com + +## 8. Build order + +1. Scaffold `scj/` (index.html, care-sheet.html, styles.css, script.js, assets/). +2. Assets pipeline: sort/resize photos, extract sling pics, generate QR + favicon/OG. +3. Build hero + nav + Available section (core). +4. Mamas gallery, Care guide, Shipping, About, Contact. +5. care-sheet.html print page. +6. Responsive/a11y/perf polish + final review against Mom's note. diff --git a/SCJ.src/index.html b/SCJ.src/index.html new file mode 100755 index 0000000..875269c --- /dev/null +++ b/SCJ.src/index.html @@ -0,0 +1,310 @@ + + + + + + + Storm Cloud Jumpers — Jumping Spiders + + + + + + + + + + + +
+
+
+ +

+ STORM/CLOUD + — JUMPERS — +

+

SMALL SIZE. BIG PERSONALITY.

+ +
+ +
+ + +
+
+
+

About Us

+

Captive-bred jumpers, raised with obsessive care.

+

+ Storm Cloud Jumpers is a small, hands-on breeder specializing in healthy, + well-socialized jumping spiders. Every spiderling we ship is hand-fed, + health-checked, and packed for a stress-free journey to its new home. +

+
    +
  • 100% captive-bred — never wild-caught.
  • +
  • Health guarantee on every live arrival.
  • +
  • Care sheet included — tailored to species & age.
  • +
  • Hobbyist-first — real answers, real photos.
  • +
+
+
+
+
+
+
100%

Captive Bred

+
50+

Slings Hatched / mo

+
24h

Live Arrival Window

+
★ 4.9

Hobbyist Rated

+
+
+
+
+
+ + + + + +
+
+
+

Available Now

+

Meet the jumpers.

+

A rotating selection of our healthiest slings, juveniles, and adults.

+
+ +
+
+
+
+

Phidippus regius

+

Regal Jumper · Florida lineage

+
    +
  • Size: 10–22mm
  • +
  • Lifespan: ~1.5 yrs
  • +
  • Temperament: Bold, curious
  • +
+
+ $35+ + Inquire +
+
+
+ +
+
+
+

Phidippus audax

+

Bold Jumper · classic North American

+
    +
  • Size: 8–18mm
  • +
  • Lifespan: ~1 yr
  • +
  • Temperament: Active, alert
  • +
+
+ $20+ + Inquire +
+
+
+ +
+
+
+

Phidippus otiosus

+

Canopy Jumper · arboreal beauty

+
    +
  • Size: 10–20mm
  • +
  • Lifespan: ~1 yr
  • +
  • Temperament: Calm, climby
  • +
+
+ $30+ + Inquire +
+
+
+ +
+
+
+

Phidippus mystaceus

+

Mustached Jumper · fluffy & rare

+
    +
  • Size: 9–17mm
  • +
  • Lifespan: ~1 yr
  • +
  • Temperament: Gentle, shy
  • +
+
+ $45+ + Inquire +
+
+
+
+
+
+ + +
+
+
+

Husbandry

+

Care made simple.

+

Jumpers are some of the easiest invertebrates to keep — here's the short version.

+
+ +
+
+
01
+

Enclosure

+

Vertical, well-ventilated. ~4×4×6" for slings, ~6×6×10" for adults. Cork bark, fake leaves, a cozy hammock at the top.

+
+
+
02
+

Temperature

+

72–82°F is the sweet spot. Avoid direct sun and drafts. Room temp works for most homes year-round.

+
+
+
03
+

Humidity

+

40–60%. Mist one side of the enclosure a few times per week — never soak. Cross-ventilation is essential.

+
+
+
04
+

Feeding

+

Slings: flightless fruit flies, 2–3×/week. Adults: small crickets, mealworms, BSFL — every 4–6 days.

+
+
+
05
+

Handling

+

Optional, but jumpers are famously personable. Low, slow, over a soft surface. Always let them come to you.

+
+
+
06
+

Molting

+

Expect a few day fast before each molt — they hide in their hammock. Don't disturb. Feed 24h after they emerge.

+
+
+
+
+ + +
+
+
+
+

Shipping & Guarantee

+

Packed warm. Tracked the whole way. Guaranteed alive.

+
+

Live Arrival

Every order ships with weather-appropriate packing and a 24-hour live arrival guarantee.

+

USPS Priority & Express

Ships Mon–Wed only. Heat or cool packs included free when temps demand.

+

Hold For Pickup

We default to HFP at your local post office for the safest delivery.

+
+
+
+
+ + +
+
+
+

Get In Touch

+

Ready to bring home a jumper?

+

Tell us a bit about what you're looking for and we'll match you with a healthy, well-socialized spider.

+
    +
  • Storm Cloud Jumpers
  • +
  • (555) 010-0420
  • +
  • hello@stormcloudjumpers.com
  • +
+
+ +
+ + + + + + +
+
+
+ + + + + + + diff --git a/SCJ.src/script.js b/SCJ.src/script.js new file mode 100755 index 0000000..d5fa637 --- /dev/null +++ b/SCJ.src/script.js @@ -0,0 +1,100 @@ +(() => { + 'use strict'; + + const nav = document.getElementById('nav'); + const burger = document.getElementById('burger'); + const navLinks = document.querySelector('.nav__links'); + const yearEl = document.getElementById('year'); + const parallaxEls = Array.from(document.querySelectorAll('[data-parallax]')); + const revealEls = Array.from(document.querySelectorAll('.reveal')); + + if (yearEl) yearEl.textContent = new Date().getFullYear(); + + /* ---- Sticky / scrolled nav ---- */ + const onScroll = () => { + if (window.scrollY > 30) nav.classList.add('is-scrolled'); + else nav.classList.remove('is-scrolled'); + updateParallax(); + }; + + /* ---- Mobile menu toggle ---- */ + if (burger && navLinks) { + burger.addEventListener('click', () => { + const open = navLinks.classList.toggle('is-open'); + burger.classList.toggle('is-open', open); + burger.setAttribute('aria-expanded', String(open)); + }); + navLinks.querySelectorAll('a').forEach((a) => + a.addEventListener('click', () => { + navLinks.classList.remove('is-open'); + burger.classList.remove('is-open'); + burger.setAttribute('aria-expanded', 'false'); + }) + ); + } + + /* ---- Parallax (rAF-throttled) ---- */ + let ticking = false; + const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + + function updateParallax() { + if (reduced) return; + if (ticking) return; + ticking = true; + requestAnimationFrame(() => { + const vh = window.innerHeight; + const vw = window.innerWidth; + parallaxEls.forEach((el) => { + const rect = el.getBoundingClientRect(); + // Only process elements roughly in / near the viewport + if (rect.bottom < -vh || rect.top > vh * 2) return; + const speed = parseFloat(el.dataset.parallax) || 0.2; + // Distance of element center from viewport center + const center = rect.top + rect.height / 2 - vh / 2; + const offset = -center * speed; + // Use translate3d for GPU acceleration + el.style.transform = `translate3d(0, ${offset.toFixed(1)}px, 0)`; + }); + ticking = false; + }); + } + + /* ---- Scroll reveal via IntersectionObserver ---- */ + if ('IntersectionObserver' in window) { + const io = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + entry.target.classList.add('is-visible'); + io.unobserve(entry.target); + } + }); + }, + { threshold: 0.15, rootMargin: '0px 0px -60px 0px' } + ); + revealEls.forEach((el) => io.observe(el)); + } else { + revealEls.forEach((el) => el.classList.add('is-visible')); + } + + /* ---- Smooth-scroll offset for fixed nav ---- */ + document.querySelectorAll('a[href^="#"]').forEach((a) => { + a.addEventListener('click', (e) => { + const id = a.getAttribute('href'); + if (id.length < 2) return; + const target = document.querySelector(id); + if (!target) return; + e.preventDefault(); + const navH = nav.offsetHeight; + const top = target.getBoundingClientRect().top + window.scrollY - navH + 4; + window.scrollTo({ top, behavior: 'smooth' }); + }); + }); + + /* ---- Listeners ---- */ + window.addEventListener('scroll', onScroll, { passive: true }); + window.addEventListener('resize', updateParallax); + // initial paint + onScroll(); + updateParallax(); +})(); diff --git a/SCJ.src/styles.css b/SCJ.src/styles.css new file mode 100755 index 0000000..042dd27 --- /dev/null +++ b/SCJ.src/styles.css @@ -0,0 +1,834 @@ +/* ============================================================ + Storm Cloud Jumpers — single-page parallax site + ============================================================ */ + +:root { + --red: #e02828; + --red-deep: #b81d1d; + --red-soft: #ff5a5a; + + /* Dark palette */ + --bg: #0a0a0a; /* page background */ + --bg-2: #111111; /* alt section */ + --bg-3: #161616; /* card surface */ + --bg-4: #1e1e1e; /* raised surface */ + --ink: #050505; /* deepest */ + + --txt: #f2f2f2; + --txt-soft: #b3b3b3; + --txt-mute: #7a7a7a; + + --line: rgba(255, 255, 255, 0.08); + --line-2: rgba(255, 255, 255, 0.14); + + --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.4); + --shadow-md: 0 14px 36px rgba(0, 0, 0, 0.55); + --shadow-lg: 0 28px 70px rgba(0, 0, 0, 0.7); + --glow-red: 0 0 28px rgba(224, 40, 40, 0.35); + + --radius: 14px; + --radius-lg: 22px; + + --container: 1200px; + + --ease: cubic-bezier(0.22, 0.61, 0.36, 1); +} + +* { box-sizing: border-box; } +html { scroll-behavior: smooth; } +body { + margin: 0; + font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, sans-serif; + color: var(--txt); + background: var(--bg); + line-height: 1.6; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; +} +img { max-width: 100%; display: block; } + +a { color: inherit; text-decoration: none; } + +h1, h2, h3, h4 { + font-family: 'Oswald', 'Inter', sans-serif; + font-weight: 700; + letter-spacing: 0.02em; + line-height: 1.1; + margin: 0 0 0.6em; + color: #fff; +} +h2 { font-size: clamp(1.8rem, 3.4vw, 2.8rem); } +h3 { font-size: 1.25rem; letter-spacing: 0.04em; text-transform: uppercase; } + +p { margin: 0 0 1em; } + +.container { + width: 100%; + max-width: var(--container); + margin: 0 auto; + padding: 0 24px; +} + +.accent { color: var(--red); } + +/* ----- Buttons ----- */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 14px 28px; + border-radius: 999px; + font-weight: 600; + font-size: 0.92rem; + letter-spacing: 0.08em; + text-transform: uppercase; + border: 2px solid transparent; + cursor: pointer; + transition: all 0.25s var(--ease); + white-space: nowrap; +} +.btn--primary { + background: var(--red); + color: #fff; + border-color: var(--red); + box-shadow: 0 8px 22px rgba(224, 40, 40, 0.35); +} +.btn--primary:hover { background: var(--red-deep); border-color: var(--red-deep); transform: translateY(-2px); } +.btn--ghost { + background: transparent; + color: #fff; + border-color: rgba(255, 255, 255, 0.6); +} +.btn--ghost:hover { background: #fff; color: var(--ink); border-color: #fff; transform: translateY(-2px); } +.btn--small { padding: 10px 18px; font-size: 0.78rem; } +.btn--block { width: 100%; } + +/* ----- Eyebrow / shared heads ----- */ +.eyebrow { + display: inline-flex; + align-items: center; + gap: 12px; + margin: 0 0 14px; + font-size: 0.78rem; + font-weight: 600; + letter-spacing: 0.22em; + text-transform: uppercase; + color: var(--red); +} +.eyebrow--light { color: var(--red-soft); } +.eyebrow .dash { + width: 28px; height: 2px; background: var(--red); display: inline-block; +} +.lede { font-size: 1.05rem; color: var(--txt-soft); max-width: 60ch; } + +.section { padding: 110px 0; position: relative; } +.section__head { text-align: center; margin-bottom: 60px; } +.section__head .lede { margin: 0 auto; } +.section__head .eyebrow { justify-content: center; } + +/* ============================================================ + NAV + ============================================================ */ +.nav { + position: fixed; + top: 0; left: 0; right: 0; + z-index: 50; + padding: 18px 0; + transition: background 0.3s var(--ease), padding 0.3s var(--ease), box-shadow 0.3s var(--ease); +} +.nav.is-scrolled { + background: rgba(10, 10, 10, 0.85); + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); + border-bottom: 1px solid var(--line); + padding: 10px 0; + box-shadow: var(--shadow-md); +} +.nav__inner { + max-width: var(--container); + margin: 0 auto; + padding: 0 24px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; +} +.nav__brand { + display: flex; + align-items: center; + gap: 12px; + color: #fff; + font-family: 'Oswald', sans-serif; + font-weight: 700; + letter-spacing: 0.06em; + font-size: 1.1rem; +} +.nav__logo { + width: 36px; height: 36px; + background: url("data:image/svg+xml;utf8,") center/contain no-repeat; + flex-shrink: 0; +} +.nav__name .accent { color: var(--red); margin: 0 1px; } +.nav__links { + display: flex; gap: 28px; align-items: center; +} +.nav__links a { + color: rgba(255, 255, 255, 0.85); + font-size: 0.9rem; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + position: relative; + padding: 6px 0; + transition: color 0.2s var(--ease); +} +.nav__links a:hover { color: #fff; } +.nav__links a:not(.nav__cta)::after { + content: ""; position: absolute; left: 0; bottom: 0; + width: 0; height: 2px; background: var(--red); + transition: width 0.25s var(--ease); +} +.nav__links a:not(.nav__cta):hover::after { width: 100%; } +.nav__cta { + background: var(--red); + color: #fff !important; + padding: 10px 22px !important; + border-radius: 999px; + transition: background 0.2s var(--ease), transform 0.2s var(--ease); +} +.nav__cta:hover { background: var(--red-deep); transform: translateY(-1px); } +.nav__burger { + display: none; + background: none; border: 0; cursor: pointer; + width: 40px; height: 40px; + flex-direction: column; justify-content: center; gap: 5px; + padding: 0; +} +.nav__burger span { + display: block; height: 2px; width: 24px; background: #fff; margin: 0 auto; + transition: transform 0.25s var(--ease), opacity 0.25s var(--ease); +} +.nav__burger.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); } +.nav__burger.is-open span:nth-child(2) { opacity: 0; } +.nav__burger.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } + +/* ============================================================ + HERO + ============================================================ */ +.hero { + position: relative; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + background: #1a1a1a; + color: #fff; + isolation: isolate; +} +.hero__clouds { + position: absolute; + inset: -10% -5% -10% -5%; + background: + radial-gradient(ellipse at 30% 30%, rgba(255,255,255,0.15), transparent 55%), + radial-gradient(ellipse at 75% 70%, rgba(255,255,255,0.1), transparent 60%), + linear-gradient(180deg, #2a2a2a 0%, #0d0d0d 100%); + z-index: -2; + will-change: transform; +} +.hero__clouds::before, +.hero__clouds::after { + content: ""; position: absolute; border-radius: 50%; + filter: blur(60px); + opacity: 0.5; +} +.hero__clouds::before { + width: 60%; height: 60%; top: -10%; left: -10%; + background: radial-gradient(circle, rgba(255,255,255,0.55), transparent 70%); +} +.hero__clouds::after { + width: 70%; height: 70%; bottom: -20%; right: -15%; + background: radial-gradient(circle, rgba(180,180,180,0.4), transparent 70%); +} +.hero__content { + position: relative; + z-index: 2; + text-align: center; + padding: 140px 24px 80px; + max-width: 900px; + width: 100%; +} +.hero__logo { + width: clamp(110px, 16vw, 170px); + margin: 0 auto 24px; + filter: drop-shadow(0 12px 32px rgba(224, 40, 40, 0.35)); + animation: float 6s ease-in-out infinite; +} +@keyframes float { + 0%,100% { transform: translateY(0); } + 50% { transform: translateY(-10px); } +} +.hero__title { + margin: 0 0 18px; + font-family: 'Oswald', sans-serif; + text-transform: uppercase; +} +.hero__title .t1 { + display: block; + font-size: clamp(2.4rem, 7vw, 5.2rem); + font-weight: 700; + letter-spacing: 0.04em; + color: #fff; + text-shadow: 0 4px 30px rgba(0,0,0,0.4); +} +.hero__title .t2 { + display: block; + font-size: clamp(1rem, 2.4vw, 1.5rem); + letter-spacing: 0.6em; + color: var(--red); + font-weight: 500; + margin-top: 4px; +} +.hero__title .accent { color: var(--red); margin: 0 4px; } +.hero__tag { + font-size: clamp(0.85rem, 1.5vw, 1.05rem); + letter-spacing: 0.4em; + text-transform: uppercase; + color: rgba(255,255,255,0.75); + margin: 0 0 36px; +} +.hero__cta { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; } +.hero__cta .btn--ghost { color: #fff; border-color: rgba(255,255,255,0.6); } +.hero__cta .btn--ghost:hover { background: #fff; color: var(--ink); border-color: #fff; } + +.hero__scroll { + position: absolute; bottom: 30px; left: 50%; transform: translateX(-50%); + display: flex; flex-direction: column; align-items: center; gap: 8px; + color: rgba(255,255,255,0.55); + font-size: 0.7rem; letter-spacing: 0.4em; +} +.hero__scroll span { + width: 1px; height: 40px; + background: linear-gradient(180deg, transparent, rgba(255,255,255,0.6)); + position: relative; overflow: hidden; +} +.hero__scroll span::after { + content: ""; position: absolute; top: -40px; left: 0; right: 0; height: 12px; + background: var(--red); + animation: scrollDot 2.2s ease-in-out infinite; +} +@keyframes scrollDot { + 0% { top: -12px; } 100% { top: 100%; } +} + +/* ============================================================ + ABOUT + ============================================================ */ +.about { background: var(--bg); } +.about::before { + content: ""; position: absolute; inset: 0; + background: + radial-gradient(ellipse at 20% 0%, rgba(224, 40, 40, 0.08), transparent 50%), + radial-gradient(ellipse at 80% 100%, rgba(255, 255, 255, 0.03), transparent 60%); + pointer-events: none; + z-index: 0; +} +.about > .container { position: relative; z-index: 1; } +.about__grid { + display: grid; + grid-template-columns: 1.1fr 0.9fr; + gap: 64px; + align-items: center; +} +.bullets { + list-style: none; padding: 0; margin: 24px 0 0; +} +.bullets li { + position: relative; + padding: 12px 0 12px 28px; + border-bottom: 1px solid var(--line); + color: var(--txt-soft); + font-size: 0.98rem; +} +.bullets li::before { + content: ""; + position: absolute; left: 0; top: 18px; + width: 14px; height: 2px; background: var(--red); +} +.bullets li strong { color: #fff; font-weight: 600; } + +.card-stack { + position: relative; + aspect-ratio: 1; + max-width: 460px; + margin: 0 auto; +} +.card-stack__bg { + position: absolute; inset: 12% -6% -6% 12%; + background: linear-gradient(135deg, rgba(224, 40, 40, 0.18), rgba(224, 40, 40, 0.04)); + border: 1px solid rgba(224, 40, 40, 0.25); + border-radius: var(--radius-lg); + z-index: 1; +} +.card-stack__bg::after { + content: ""; position: absolute; left: 0; right: 0; top: 50%; + height: 1px; + background: linear-gradient(90deg, transparent, var(--red), transparent); +} +.card-stack__fg { + position: absolute; inset: -4% 12% 12% -6%; + background: var(--bg-3); + border: 1px solid var(--line); + border-radius: var(--radius-lg); + z-index: 2; + padding: 28px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 18px; + box-shadow: var(--shadow-lg); + border-top: 4px solid var(--red); +} +.stat { text-align: left; } +.stat span { + display: block; + font-family: 'Oswald', sans-serif; + font-weight: 700; + font-size: clamp(1.6rem, 3vw, 2rem); + color: #fff; + letter-spacing: 0.02em; +} +.stat p { margin: 4px 0 0; font-size: 0.78rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--txt-mute); } + +/* ============================================================ + PARALLAX BREAK + ============================================================ */ +.parallax-break { + position: relative; + min-height: 70vh; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + isolation: isolate; + color: #fff; + text-align: center; + padding: 80px 24px; +} +.parallax-break { + border-top: 1px solid var(--line); + border-bottom: 1px solid var(--line); +} +.parallax-break__bg { + position: absolute; + inset: -20% 0; + z-index: -1; + will-change: transform; + background: + radial-gradient(ellipse at center, rgba(224,40,40,0.22), transparent 60%), + linear-gradient(180deg, #050505 0%, #000 50%, #050505 100%); +} +.parallax-break__bg::before { + content: ""; position: absolute; inset: 0; + background: + radial-gradient(circle at 20% 30%, rgba(255,255,255,0.08), transparent 40%), + radial-gradient(circle at 80% 70%, rgba(255,255,255,0.06), transparent 40%); +} +.parallax-break__quote p { + font-family: 'Oswald', sans-serif; + font-size: clamp(1.6rem, 4vw, 2.6rem); + font-weight: 500; + letter-spacing: 0.08em; + margin: 0 0 12px; + text-transform: uppercase; +} +.parallax-break__quote span { letter-spacing: 0.4em; font-size: 0.75rem; color: rgba(255,255,255,0.6); text-transform: uppercase; } + +.parallax-break--alt { min-height: auto; padding: 100px 0; text-align: left; } +.parallax-break__bg--alt { + background: + linear-gradient(135deg, rgba(224,40,40,0.2) 0%, transparent 55%), + linear-gradient(180deg, #050505 0%, #141414 100%); +} +.parallax-break__content { position: relative; z-index: 1; } +.parallax-break__content h2.light { color: #fff; max-width: 22ch; } +.guarantee { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 36px; + margin-top: 40px; +} +.guarantee h4 { + margin: 0 0 8px; + color: var(--red); + font-size: 0.92rem; + letter-spacing: 0.16em; + text-transform: uppercase; +} +.guarantee p { color: rgba(255,255,255,0.78); font-size: 0.95rem; margin: 0; } + +/* ============================================================ + SPIDERS + ============================================================ */ +.spiders { background: linear-gradient(180deg, var(--bg) 0%, var(--bg-2) 100%); } +.grid { display: grid; gap: 28px; } +.spiders__grid { + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); +} +.spider { + background: var(--bg-3); + border: 1px solid var(--line); + border-radius: var(--radius); + overflow: hidden; + box-shadow: var(--shadow-sm); + transition: transform 0.35s var(--ease), box-shadow 0.35s var(--ease), border-color 0.35s var(--ease); + display: flex; flex-direction: column; +} +.spider:hover { + transform: translateY(-8px); + box-shadow: var(--shadow-lg), var(--glow-red); + border-color: rgba(224, 40, 40, 0.4); +} +.spider__img { + aspect-ratio: 4 / 3; + background-size: cover; + background-position: center; + position: relative; + overflow: hidden; +} +.spider__img::after { + content: ""; position: absolute; inset: 0; + background: linear-gradient(180deg, transparent 50%, rgba(0,0,0,0.4) 100%); +} +/* Generated illustrative gradient backgrounds (no external images) */ +.spider__img--regius { + background: + radial-gradient(circle at 50% 60%, #2a1a1a 0%, #0d0d0d 70%), + linear-gradient(135deg, #3a2222 0%, #0d0d0d 100%); + background-blend-mode: screen; +} +.spider__img--regius::before { + content: ""; position: absolute; inset: 0; + background: + radial-gradient(circle at 50% 55%, #b85040 0%, transparent 25%), + radial-gradient(circle at 42% 50%, #1a1a1a 0%, transparent 6%), + radial-gradient(circle at 58% 50%, #1a1a1a 0%, transparent 6%); +} +.spider__img--audax { + background: + radial-gradient(circle at 50% 60%, #1a1a1a 0%, #000 70%); +} +.spider__img--audax::before { + content: ""; position: absolute; inset: 0; + background: + radial-gradient(circle at 50% 70%, #ffffff 0%, transparent 8%), + radial-gradient(circle at 50% 75%, #ffffff 0%, transparent 5%), + radial-gradient(circle at 50% 80%, #ffffff 0%, transparent 4%), + radial-gradient(circle at 42% 52%, #ffffff 0%, transparent 4%), + radial-gradient(circle at 58% 52%, #ffffff 0%, transparent 4%); +} +.spider__img--otiosus { + background: + radial-gradient(circle at 50% 55%, #4a3a2a 0%, #1a1410 70%); +} +.spider__img--otiosus::before { + content: ""; position: absolute; inset: 0; + background: + radial-gradient(circle at 45% 48%, #1a1a1a 0%, transparent 5%), + radial-gradient(circle at 55% 48%, #1a1a1a 0%, transparent 5%), + radial-gradient(circle at 50% 65%, #d8a878 0%, transparent 18%); +} +.spider__img--mystaceus { + background: + radial-gradient(circle at 50% 55%, #5a4a3a 0%, #2a201a 70%); +} +.spider__img--mystaceus::before { + content: ""; position: absolute; inset: 0; + background: + radial-gradient(circle at 50% 60%, #e0d0b0 0%, transparent 25%), + radial-gradient(circle at 44% 50%, #1a1a1a 0%, transparent 5%), + radial-gradient(circle at 56% 50%, #1a1a1a 0%, transparent 5%); +} +.spider__body { padding: 22px 24px 24px; display: flex; flex-direction: column; flex: 1; } +.spider__body h3 { + font-family: 'Oswald', sans-serif; + font-size: 1.2rem; + font-style: italic; + text-transform: none; + letter-spacing: 0.01em; + margin: 0 0 4px; +} +.spider__tag { color: var(--red); font-size: 0.78rem; letter-spacing: 0.12em; text-transform: uppercase; margin: 0 0 16px; } +.spider__meta { list-style: none; padding: 0; margin: 0 0 18px; font-size: 0.88rem; color: var(--txt-soft); } +.spider__meta li { padding: 4px 0; border-bottom: 1px dashed var(--line); } +.spider__meta li:last-child { border-bottom: 0; } +.spider__foot { + margin-top: auto; + display: flex; align-items: center; justify-content: space-between; gap: 12px; + padding-top: 14px; + border-top: 1px solid var(--line); +} +.price { font-family: 'Oswald', sans-serif; font-size: 1.4rem; font-weight: 700; color: #fff; } +.price::before { content: ""; display: inline-block; width: 10px; height: 2px; background: var(--red); vertical-align: middle; margin-right: 8px; } + +/* ============================================================ + CARE + ============================================================ */ +.care { background: var(--bg); } +.care__grid { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); } +.care__card { + background: var(--bg-3); + border: 1px solid var(--line); + border-radius: var(--radius); + padding: 32px 28px 30px; + position: relative; + overflow: hidden; + box-shadow: var(--shadow-sm); + transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), border-color 0.3s var(--ease), background 0.3s var(--ease); + border-left: 3px solid transparent; +} +.care__card:hover { + transform: translateY(-6px); + box-shadow: var(--shadow-md); + border-left-color: var(--red); + border-top-color: var(--line-2); + border-right-color: var(--line-2); + border-bottom-color: var(--line-2); + background: var(--bg-4); +} +.care__num { + font-family: 'Oswald', sans-serif; + font-weight: 700; + font-size: 3rem; + color: rgba(224, 40, 40, 0.22); + position: absolute; + top: 8px; right: 18px; + line-height: 1; +} +.care__card h3 { margin: 0 0 10px; font-size: 1rem; } +.care__card p { color: var(--txt-soft); font-size: 0.95rem; margin: 0; } + +/* ============================================================ + CONTACT + ============================================================ */ +.contact { background: var(--bg-2); position: relative; overflow: hidden; } +.contact::before { + content: ""; position: absolute; inset: 0; + background: radial-gradient(ellipse at 80% 50%, rgba(224, 40, 40, 0.08), transparent 50%); + pointer-events: none; +} +.contact > .container { position: relative; z-index: 1; } +.contact__grid { + display: grid; + grid-template-columns: 0.9fr 1.1fr; + gap: 56px; + align-items: start; +} +.contact__list { + list-style: none; padding: 0; margin: 28px 0 0; + font-size: 0.95rem; +} +.contact__list li { + display: flex; align-items: center; gap: 14px; + padding: 14px 0; + border-bottom: 1px solid var(--line); + color: var(--txt-soft); +} +.contact__list li:last-child { border-bottom: 0; } +.ico { + width: 32px; height: 32px; + border-radius: 50%; + border: 2px solid var(--red); + display: inline-flex; align-items: center; justify-content: center; + flex-shrink: 0; + position: relative; +} +.ico--user::after { + content: ""; width: 14px; height: 14px; + background: + radial-gradient(circle at 50% 35%, var(--red) 0 4px, transparent 5px), + radial-gradient(ellipse at 50% 100%, var(--red) 0 5px, transparent 6px); +} +.ico--phone::after { + content: ""; width: 14px; height: 14px; + background: var(--red); + -webkit-mask: url("data:image/svg+xml;utf8,") center/contain no-repeat; + mask: url("data:image/svg+xml;utf8,") center/contain no-repeat; +} +.ico--mail::after { + content: ""; width: 14px; height: 10px; + border: 2px solid var(--red); + border-radius: 1px; + position: relative; +} +.ico--mail::before { + content: ""; position: absolute; width: 10px; height: 1px; + background: var(--red); + transform: rotate(0); + top: 50%; left: 50%; + transform: translate(-50%, -3px) rotate(0); +} + +.contact__form { + background: var(--bg-3); + border: 1px solid var(--line); + border-radius: var(--radius-lg); + padding: 36px; + box-shadow: var(--shadow-md); + border-top: 4px solid var(--red); +} +.contact__form label { + display: block; + margin-bottom: 18px; +} +.contact__form span { + display: block; + font-size: 0.78rem; + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--txt-mute); + margin-bottom: 6px; +} +.contact__form input, +.contact__form textarea { + width: 100%; + padding: 14px 16px; + border: 1.5px solid var(--line-2); + border-radius: 10px; + background: var(--bg); + font: inherit; + color: #fff; + transition: border-color 0.2s var(--ease), background 0.2s var(--ease), box-shadow 0.2s var(--ease); +} +.contact__form input::placeholder, +.contact__form textarea::placeholder { color: var(--txt-mute); } +.contact__form input:focus, +.contact__form textarea:focus { + outline: none; + border-color: var(--red); + background: var(--ink); + box-shadow: 0 0 0 3px rgba(224, 40, 40, 0.18); +} +.contact__form textarea { resize: vertical; } +.form__success { + margin-top: 14px; + padding: 12px 14px; + background: rgba(40, 180, 100, 0.12); + border-left: 3px solid #34d77a; + color: #6fe5a3; + font-size: 0.9rem; + border-radius: 6px; +} + +/* ============================================================ + FOOTER + ============================================================ */ +.footer { + background: var(--ink); + color: rgba(255,255,255,0.7); + padding: 60px 0 30px; + border-top: 1px solid var(--line); +} +.footer__inner { + display: grid; + grid-template-columns: 1.4fr 1fr; + gap: 40px; + align-items: center; +} +.footer__brand { display: flex; align-items: center; gap: 16px; } +.footer__brand .nav__logo { width: 48px; height: 48px; } +.footer__name { + font-family: 'Oswald', sans-serif; + font-size: 1.3rem; + letter-spacing: 0.06em; + color: #fff; + margin: 0; +} +.footer__name .accent { color: var(--red); } +.footer__sub { color: var(--red); font-size: 0.85rem; margin-left: 4px; } +.footer__tag { font-size: 0.72rem; letter-spacing: 0.36em; color: rgba(255,255,255,0.5); margin: 4px 0 0; text-transform: uppercase; } +.footer__links { display: flex; gap: 24px; justify-content: flex-end; flex-wrap: wrap; } +.footer__links a { + color: rgba(255,255,255,0.7); + font-size: 0.85rem; + letter-spacing: 0.14em; + text-transform: uppercase; + transition: color 0.2s var(--ease); +} +.footer__links a:hover { color: var(--red); } +.footer__copy { + grid-column: 1 / -1; + margin: 30px 0 0; + padding-top: 24px; + border-top: 1px solid rgba(255,255,255,0.08); + font-size: 0.8rem; + text-align: center; + color: rgba(255,255,255,0.4); +} + +/* ============================================================ + REVEAL + ============================================================ */ +.reveal { + opacity: 0; + transform: translateY(30px); + transition: opacity 0.8s var(--ease), transform 0.8s var(--ease); +} +.reveal.is-visible { + opacity: 1; + transform: translateY(0); +} + +/* ============================================================ + RESPONSIVE + ============================================================ */ +@media (max-width: 960px) { + .section { padding: 80px 0; } + .about__grid, + .contact__grid { grid-template-columns: 1fr; gap: 40px; } + .guarantee { grid-template-columns: 1fr; gap: 24px; } + .footer__inner { grid-template-columns: 1fr; text-align: center; } + .footer__brand { justify-content: center; } + .footer__links { justify-content: center; } +} + +@media (max-width: 720px) { + .nav__links { + position: fixed; + top: 0; right: 0; + height: 100vh; + width: min(80%, 320px); + background: rgba(13, 13, 13, 0.98); + backdrop-filter: blur(10px); + flex-direction: column; + justify-content: center; + align-items: flex-start; + padding: 80px 36px; + gap: 28px; + transform: translateX(100%); + transition: transform 0.35s var(--ease); + box-shadow: var(--shadow-lg); + } + .nav__links.is-open { transform: translateX(0); } + .nav__links a { font-size: 1.1rem; } + .nav__burger { display: flex; z-index: 60; } + .hero__content { padding-top: 110px; } + .card-stack__fg { padding: 22px; gap: 14px; } + .contact__form { padding: 26px 22px; } + .parallax-break__quote p { letter-spacing: 0.04em; } +} + +@media (max-width: 480px) { + .section { padding: 64px 0; } + .hero__cta { flex-direction: column; align-items: stretch; } + .hero__cta .btn { width: 100%; } + .stat span { font-size: 1.5rem; } +} + +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + transition-duration: 0.01ms !important; + } + [data-parallax] { transform: none !important; } +} diff --git a/generated content/0BAE2604-C84A-492B-85C0-01779E0A4B5C_1_105_c.jpeg b/generated content/0BAE2604-C84A-492B-85C0-01779E0A4B5C_1_105_c.jpeg new file mode 100644 index 0000000..e5eb607 Binary files /dev/null and b/generated content/0BAE2604-C84A-492B-85C0-01779E0A4B5C_1_105_c.jpeg differ diff --git a/generated content/19A4501F-1D4A-47B8-95B4-934F136D2CCF_1_105_c.jpeg b/generated content/19A4501F-1D4A-47B8-95B4-934F136D2CCF_1_105_c.jpeg new file mode 100644 index 0000000..6411e8b Binary files /dev/null and b/generated content/19A4501F-1D4A-47B8-95B4-934F136D2CCF_1_105_c.jpeg differ diff --git a/generated content/2D08C4EA-C71F-4985-840E-F789FE573F27_1_105_c.jpeg b/generated content/2D08C4EA-C71F-4985-840E-F789FE573F27_1_105_c.jpeg new file mode 100644 index 0000000..e7e65ab Binary files /dev/null and b/generated content/2D08C4EA-C71F-4985-840E-F789FE573F27_1_105_c.jpeg differ diff --git a/generated content/38AD6C64-A8E7-4555-8152-B0A97DA6D2CF_1_105_c.jpeg b/generated content/38AD6C64-A8E7-4555-8152-B0A97DA6D2CF_1_105_c.jpeg new file mode 100644 index 0000000..cec085e Binary files /dev/null and b/generated content/38AD6C64-A8E7-4555-8152-B0A97DA6D2CF_1_105_c.jpeg differ diff --git a/generated content/39B6FC9E-CE58-4D79-B479-C625881D5847_1_105_c.jpeg b/generated content/39B6FC9E-CE58-4D79-B479-C625881D5847_1_105_c.jpeg new file mode 100644 index 0000000..5b8b842 Binary files /dev/null and b/generated content/39B6FC9E-CE58-4D79-B479-C625881D5847_1_105_c.jpeg differ diff --git a/generated content/68763B89-EB6E-405C-B734-61F842C0103F_1_102_o.jpeg b/generated content/68763B89-EB6E-405C-B734-61F842C0103F_1_102_o.jpeg new file mode 100644 index 0000000..58e2349 Binary files /dev/null and b/generated content/68763B89-EB6E-405C-B734-61F842C0103F_1_102_o.jpeg differ diff --git a/generated content/77776EEC-A798-47CD-927B-9ED8DFBF0D99_1_105_c.jpeg b/generated content/77776EEC-A798-47CD-927B-9ED8DFBF0D99_1_105_c.jpeg new file mode 100644 index 0000000..c3e0fa5 Binary files /dev/null and b/generated content/77776EEC-A798-47CD-927B-9ED8DFBF0D99_1_105_c.jpeg differ diff --git a/generated content/7F058D78-F8A4-4BFD-9728-E3041B8933B9_1_102_o.jpeg b/generated content/7F058D78-F8A4-4BFD-9728-E3041B8933B9_1_102_o.jpeg new file mode 100644 index 0000000..a0396c4 Binary files /dev/null and b/generated content/7F058D78-F8A4-4BFD-9728-E3041B8933B9_1_102_o.jpeg differ diff --git a/generated content/C99BF7BB-F419-459F-8B91-B215017E6FCB_1_105_c.jpeg b/generated content/C99BF7BB-F419-459F-8B91-B215017E6FCB_1_105_c.jpeg new file mode 100644 index 0000000..75057f4 Binary files /dev/null and b/generated content/C99BF7BB-F419-459F-8B91-B215017E6FCB_1_105_c.jpeg differ diff --git a/generated content/FD7C35AA-F983-48B5-BE6A-5F34A84F8ACF_1_105_c.jpeg b/generated content/FD7C35AA-F983-48B5-BE6A-5F34A84F8ACF_1_105_c.jpeg new file mode 100644 index 0000000..c3e0fa5 Binary files /dev/null and b/generated content/FD7C35AA-F983-48B5-BE6A-5F34A84F8ACF_1_105_c.jpeg differ diff --git a/meetthemamas/IMG_2172.jpeg b/meetthemamas/IMG_2172.jpeg new file mode 100644 index 0000000..4551770 Binary files /dev/null and b/meetthemamas/IMG_2172.jpeg differ diff --git a/meetthemamas/IMG_2257.jpeg b/meetthemamas/IMG_2257.jpeg new file mode 100644 index 0000000..61cccde Binary files /dev/null and b/meetthemamas/IMG_2257.jpeg differ diff --git a/meetthemamas/IMG_2414.jpeg b/meetthemamas/IMG_2414.jpeg new file mode 100644 index 0000000..1d789bc Binary files /dev/null and b/meetthemamas/IMG_2414.jpeg differ diff --git a/meetthemamas/IMG_2876.jpeg b/meetthemamas/IMG_2876.jpeg new file mode 100644 index 0000000..3d894ed Binary files /dev/null and b/meetthemamas/IMG_2876.jpeg differ diff --git a/meetthemamas/IMG_2883.jpeg b/meetthemamas/IMG_2883.jpeg new file mode 100644 index 0000000..a865c9e Binary files /dev/null and b/meetthemamas/IMG_2883.jpeg differ diff --git a/meetthemamas/IMG_2887.jpeg b/meetthemamas/IMG_2887.jpeg new file mode 100644 index 0000000..40069f8 Binary files /dev/null and b/meetthemamas/IMG_2887.jpeg differ diff --git a/meetthemamas/IMG_2892.jpeg b/meetthemamas/IMG_2892.jpeg new file mode 100644 index 0000000..113e757 Binary files /dev/null and b/meetthemamas/IMG_2892.jpeg differ diff --git a/meetthemamas/IMG_2902.jpeg b/meetthemamas/IMG_2902.jpeg new file mode 100644 index 0000000..b8a3bd6 Binary files /dev/null and b/meetthemamas/IMG_2902.jpeg differ diff --git a/meetthemamas/IMG_2904.jpeg b/meetthemamas/IMG_2904.jpeg new file mode 100644 index 0000000..cc6417e Binary files /dev/null and b/meetthemamas/IMG_2904.jpeg differ diff --git a/meetthemamas/IMG_2912.jpeg b/meetthemamas/IMG_2912.jpeg new file mode 100644 index 0000000..b4f6a37 Binary files /dev/null and b/meetthemamas/IMG_2912.jpeg differ diff --git a/meetthemamas/IMG_2922.jpeg b/meetthemamas/IMG_2922.jpeg new file mode 100644 index 0000000..ef105fa Binary files /dev/null and b/meetthemamas/IMG_2922.jpeg differ diff --git a/meetthemamas/IMG_2988.jpeg b/meetthemamas/IMG_2988.jpeg new file mode 100644 index 0000000..2f6a658 Binary files /dev/null and b/meetthemamas/IMG_2988.jpeg differ diff --git a/meetthemamas/IMG_3035.jpeg b/meetthemamas/IMG_3035.jpeg new file mode 100644 index 0000000..8426f64 Binary files /dev/null and b/meetthemamas/IMG_3035.jpeg differ diff --git a/meetthemamas/IMG_3044.jpeg b/meetthemamas/IMG_3044.jpeg new file mode 100644 index 0000000..46be891 Binary files /dev/null and b/meetthemamas/IMG_3044.jpeg differ diff --git a/meetthemamas/IMG_3274.jpeg b/meetthemamas/IMG_3274.jpeg new file mode 100644 index 0000000..6943a3a Binary files /dev/null and b/meetthemamas/IMG_3274.jpeg differ diff --git a/meetthemamas/IMG_3275.jpeg b/meetthemamas/IMG_3275.jpeg new file mode 100644 index 0000000..8afc94e Binary files /dev/null and b/meetthemamas/IMG_3275.jpeg differ diff --git a/meetthemamas/IMG_3279.jpeg b/meetthemamas/IMG_3279.jpeg new file mode 100644 index 0000000..f0af071 Binary files /dev/null and b/meetthemamas/IMG_3279.jpeg differ diff --git a/meetthemamas/IMG_3360.jpeg b/meetthemamas/IMG_3360.jpeg new file mode 100644 index 0000000..5335348 Binary files /dev/null and b/meetthemamas/IMG_3360.jpeg differ diff --git a/meetthemamas/IMG_3384.jpeg b/meetthemamas/IMG_3384.jpeg new file mode 100644 index 0000000..4dfd696 Binary files /dev/null and b/meetthemamas/IMG_3384.jpeg differ diff --git a/meetthemamas/IMG_3478.jpeg b/meetthemamas/IMG_3478.jpeg new file mode 100644 index 0000000..37f8c35 Binary files /dev/null and b/meetthemamas/IMG_3478.jpeg differ diff --git a/meetthemamas/IMG_3971.jpeg b/meetthemamas/IMG_3971.jpeg new file mode 100644 index 0000000..13d9fb0 Binary files /dev/null and b/meetthemamas/IMG_3971.jpeg differ diff --git a/meetthemamas/IMG_3983.jpeg b/meetthemamas/IMG_3983.jpeg new file mode 100644 index 0000000..18b9c5b Binary files /dev/null and b/meetthemamas/IMG_3983.jpeg differ diff --git a/meetthemamas/IMG_3989.jpeg b/meetthemamas/IMG_3989.jpeg new file mode 100644 index 0000000..fa3b66d Binary files /dev/null and b/meetthemamas/IMG_3989.jpeg differ diff --git a/meetthemamas/IMG_4058.jpeg b/meetthemamas/IMG_4058.jpeg new file mode 100644 index 0000000..6a0dac4 Binary files /dev/null and b/meetthemamas/IMG_4058.jpeg differ diff --git a/meetthemamas/IMG_4059.jpeg b/meetthemamas/IMG_4059.jpeg new file mode 100644 index 0000000..46cae2e Binary files /dev/null and b/meetthemamas/IMG_4059.jpeg differ diff --git a/meetthemamas/IMG_4060.jpeg b/meetthemamas/IMG_4060.jpeg new file mode 100644 index 0000000..740115a Binary files /dev/null and b/meetthemamas/IMG_4060.jpeg differ diff --git a/meetthemamas/IMG_4098.jpeg b/meetthemamas/IMG_4098.jpeg new file mode 100644 index 0000000..a491a2b Binary files /dev/null and b/meetthemamas/IMG_4098.jpeg differ diff --git a/meetthemamas/IMG_4100.jpeg b/meetthemamas/IMG_4100.jpeg new file mode 100644 index 0000000..4a5ad64 Binary files /dev/null and b/meetthemamas/IMG_4100.jpeg differ diff --git a/meetthemamas/IMG_4182.jpeg b/meetthemamas/IMG_4182.jpeg new file mode 100644 index 0000000..12c0512 Binary files /dev/null and b/meetthemamas/IMG_4182.jpeg differ diff --git a/meetthemamas/IMG_4310.jpeg b/meetthemamas/IMG_4310.jpeg new file mode 100644 index 0000000..829ad44 Binary files /dev/null and b/meetthemamas/IMG_4310.jpeg differ diff --git a/meetthemamas/names.txt b/meetthemamas/names.txt new file mode 100644 index 0000000..1c0528f --- /dev/null +++ b/meetthemamas/names.txt @@ -0,0 +1,10 @@ +Fern (otiosus) pic 1-3 +Cleo (audax) pic 4-6 +Colette (regius) 7-9 +Demure (regius) 10-12 +Devine (regius) 13-15 +Delight (regius) 16-18 +Dove (regius) 19-21 +Inca (regius) 22-24 +Latte (regius) 25-28 +Lush (regius) 29-31 \ No newline at end of file diff --git a/placeholder.md b/placeholder.md deleted file mode 100644 index e69de29..0000000 diff --git a/regalsregiusmales/IMG_5753.jpeg b/regalsregiusmales/IMG_5753.jpeg new file mode 100644 index 0000000..591bd32 Binary files /dev/null and b/regalsregiusmales/IMG_5753.jpeg differ diff --git a/regalsregiusmales/IMG_5759.jpeg b/regalsregiusmales/IMG_5759.jpeg new file mode 100644 index 0000000..4618bde Binary files /dev/null and b/regalsregiusmales/IMG_5759.jpeg differ diff --git a/regalsregiusmales/IMG_5775.jpeg b/regalsregiusmales/IMG_5775.jpeg new file mode 100644 index 0000000..159bf7b Binary files /dev/null and b/regalsregiusmales/IMG_5775.jpeg differ diff --git a/regalsregiusmales/IMG_5776.jpeg b/regalsregiusmales/IMG_5776.jpeg new file mode 100644 index 0000000..0be2da5 Binary files /dev/null and b/regalsregiusmales/IMG_5776.jpeg differ diff --git a/regalsregiusmales/IMG_5788.jpeg b/regalsregiusmales/IMG_5788.jpeg new file mode 100644 index 0000000..b16e032 Binary files /dev/null and b/regalsregiusmales/IMG_5788.jpeg differ diff --git a/regalsregiusmales/IMG_5790.jpeg b/regalsregiusmales/IMG_5790.jpeg new file mode 100644 index 0000000..3a719da Binary files /dev/null and b/regalsregiusmales/IMG_5790.jpeg differ diff --git a/regalsregiusmales/IMG_5975.jpeg b/regalsregiusmales/IMG_5975.jpeg new file mode 100644 index 0000000..4e95fae Binary files /dev/null and b/regalsregiusmales/IMG_5975.jpeg differ diff --git a/regalsregiusmales/IMG_5996.jpeg b/regalsregiusmales/IMG_5996.jpeg new file mode 100644 index 0000000..1cbf252 Binary files /dev/null and b/regalsregiusmales/IMG_5996.jpeg differ diff --git a/regalsregiusmales/IMG_6002.jpeg b/regalsregiusmales/IMG_6002.jpeg new file mode 100644 index 0000000..ba57688 Binary files /dev/null and b/regalsregiusmales/IMG_6002.jpeg differ diff --git a/regalsregiusmales/IMG_6003.jpeg b/regalsregiusmales/IMG_6003.jpeg new file mode 100644 index 0000000..a824388 Binary files /dev/null and b/regalsregiusmales/IMG_6003.jpeg differ diff --git a/regalsregiusmales/IMG_6009.jpeg b/regalsregiusmales/IMG_6009.jpeg new file mode 100644 index 0000000..755d9f7 Binary files /dev/null and b/regalsregiusmales/IMG_6009.jpeg differ diff --git a/regalsregiusmales/IMG_6015.jpeg b/regalsregiusmales/IMG_6015.jpeg new file mode 100644 index 0000000..752e3ae Binary files /dev/null and b/regalsregiusmales/IMG_6015.jpeg differ diff --git a/regalsregiusmales/names.txt b/regalsregiusmales/names.txt new file mode 100644 index 0000000..75835eb --- /dev/null +++ b/regalsregiusmales/names.txt @@ -0,0 +1,3 @@ +Adult males don’t live long so these would be $25 also +First (6) is Nashville and he loves to dance for the camera 🕺 +Next 6 are Ivan and he loves to show off and look intimidating 😂 \ No newline at end of file diff --git a/scj/.DS_Store b/scj/.DS_Store new file mode 100644 index 0000000..bf097d3 Binary files /dev/null and b/scj/.DS_Store differ diff --git a/scj/README.md b/scj/README.md new file mode 100644 index 0000000..cb1b58b --- /dev/null +++ b/scj/README.md @@ -0,0 +1,43 @@ +# Storm Cloud Jumpers — website + +Static website for **jumpers.stormcloudhills.com**. Plain HTML/CSS/JS — no build step, no framework. Just upload the contents of this `scj/` folder to the web host. + +## Files + +| File | What it is | +|------|-----------| +| `index.html` | The main one-page site (hero, available, mamas, care, shipping, about, contact). | +| `care-sheet.html` | Print-friendly care sheet. This is what the QR code points to. | +| `styles.css` | All styling (dark storm palette, red accent). | +| `script.js` | Nav, scroll animations, and the inquiry form. **Edit `FORM_ENDPOINT` here to enable Gmail delivery — see below.** | +| `form-handler.gs` | Google Apps Script that emails form submissions from the shop's own Gmail. Setup steps are inside the file. | +| `assets/brand/` | Logo, mascot (Nimbus) and hero graphics. | +| `assets/spiders/` | Photos: `available/`, `males/`, `females/`, `mamas/`. | +| `assets/care/` | Care-sheet QR code (`care-qr.png` / `.svg`). | + +## Deploying + +It's a static site — upload everything in `scj/` to the document root for the `jumpers.stormcloudhills.com` subdomain (via the host's file manager, FTP, Netlify, Cloudflare Pages, GitHub Pages, etc.). No server or database needed. Keep the `assets/` folder alongside the HTML files. + +## The inquiry form (two modes) + +1. **Now — `mailto:` (zero setup).** Submitting the form opens the visitor's email app with a pre-filled message to `stormcloudjumpers@gmail.com`. Works out of the box. +2. **Upgrade — send via Gmail, no email app needed.** Deploy `form-handler.gs` as a Google Apps Script web app (5-minute steps are in that file), copy the resulting `/exec` URL, and paste it into `FORM_ENDPOINT` near the top of `script.js`. The form will then email submissions straight to the inbox and fall back to `mailto:` only if the request fails. + +## Updating content (common edits) + +All in `index.html`: + +- **Prices / availability:** find the spider's `
` block. Change the `` amount, or the `Available` text (e.g. to `Reserved` / `Sold`). Add `badge--soft` to the class for a muted badge. +- **Add / swap a photo:** drop the new image in the right `assets/spiders/...` folder and update the ``. Keep images web-sized (~1000px wide, JPEG) so pages stay fast. +- **Add a spider:** copy an existing `
` block and edit the text, image, price, and the `data-inquire="..."` label (that label pre-fills the "Which spider?" field when someone clicks Reserve). +- **Care sheet text:** edit `care-sheet.html` (and the matching cards in the Care section of `index.html`). + +## To do (waiting on Mom) + +- **Photos of the new boys:** Gully, Noble, Hexx & Magick. Right now the "Regal Jumper Males" card shows Ivan and names all five. Add their photos when available. (Nashville has passed away and is not listed.) +- Optional: confirm the **Paraphidippus fartilis** waitlist note and update when they're available. + +## Credits + +Brand mascot: **Nimbus**. Palette: storm-black + red. Fonts: Oswald + Inter (loaded from Google Fonts). diff --git a/scj/assets/.DS_Store b/scj/assets/.DS_Store new file mode 100644 index 0000000..b2a35d2 Binary files /dev/null and b/scj/assets/.DS_Store differ diff --git a/scj/assets/brand/favicon-180.jpg b/scj/assets/brand/favicon-180.jpg new file mode 100644 index 0000000..438512f Binary files /dev/null and b/scj/assets/brand/favicon-180.jpg differ diff --git a/scj/assets/brand/hero-logo-left.jpg b/scj/assets/brand/hero-logo-left.jpg new file mode 100644 index 0000000..5b8b842 Binary files /dev/null and b/scj/assets/brand/hero-logo-left.jpg differ diff --git a/scj/assets/brand/hero-storm-wide.jpg b/scj/assets/brand/hero-storm-wide.jpg new file mode 100644 index 0000000..e5eb607 Binary files /dev/null and b/scj/assets/brand/hero-storm-wide.jpg differ diff --git a/scj/assets/brand/logo-dark-square.jpg b/scj/assets/brand/logo-dark-square.jpg new file mode 100644 index 0000000..75057f4 Binary files /dev/null and b/scj/assets/brand/logo-dark-square.jpg differ diff --git a/scj/assets/brand/logo-mark.jpg b/scj/assets/brand/logo-mark.jpg new file mode 100644 index 0000000..c3e0fa5 Binary files /dev/null and b/scj/assets/brand/logo-mark.jpg differ diff --git a/scj/assets/brand/logo-white.jpg b/scj/assets/brand/logo-white.jpg new file mode 100644 index 0000000..6411e8b Binary files /dev/null and b/scj/assets/brand/logo-white.jpg differ diff --git a/scj/assets/brand/nimbus-hero-wide.jpg b/scj/assets/brand/nimbus-hero-wide.jpg new file mode 100644 index 0000000..58e2349 Binary files /dev/null and b/scj/assets/brand/nimbus-hero-wide.jpg differ diff --git a/scj/assets/brand/nimbus-poster.jpg b/scj/assets/brand/nimbus-poster.jpg new file mode 100644 index 0000000..a0396c4 Binary files /dev/null and b/scj/assets/brand/nimbus-poster.jpg differ diff --git a/scj/assets/brand/nimbus-reveal-portrait.jpg b/scj/assets/brand/nimbus-reveal-portrait.jpg new file mode 100644 index 0000000..e7e65ab Binary files /dev/null and b/scj/assets/brand/nimbus-reveal-portrait.jpg differ diff --git a/scj/assets/brand/social-square.jpg b/scj/assets/brand/social-square.jpg new file mode 100644 index 0000000..cec085e Binary files /dev/null and b/scj/assets/brand/social-square.jpg differ diff --git a/scj/assets/care/care-qr.png b/scj/assets/care/care-qr.png new file mode 100644 index 0000000..c541714 Binary files /dev/null and b/scj/assets/care/care-qr.png differ diff --git a/scj/assets/care/care-qr.svg b/scj/assets/care/care-qr.svg new file mode 100644 index 0000000..3718237 --- /dev/null +++ b/scj/assets/care/care-qr.svg @@ -0,0 +1,2 @@ + + diff --git a/scj/assets/spiders/available/otiosus-sling-2.jpg b/scj/assets/spiders/available/otiosus-sling-2.jpg new file mode 100644 index 0000000..0c77364 Binary files /dev/null and b/scj/assets/spiders/available/otiosus-sling-2.jpg differ diff --git a/scj/assets/spiders/available/otiosus-sling.jpg b/scj/assets/spiders/available/otiosus-sling.jpg new file mode 100644 index 0000000..6e6d2e8 Binary files /dev/null and b/scj/assets/spiders/available/otiosus-sling.jpg differ diff --git a/scj/assets/spiders/females/iris.jpg b/scj/assets/spiders/females/iris.jpg new file mode 100644 index 0000000..1d08bce Binary files /dev/null and b/scj/assets/spiders/females/iris.jpg differ diff --git a/scj/assets/spiders/females/mango.jpg b/scj/assets/spiders/females/mango.jpg new file mode 100644 index 0000000..95b4a52 Binary files /dev/null and b/scj/assets/spiders/females/mango.jpg differ diff --git a/scj/assets/spiders/males/ivan.jpg b/scj/assets/spiders/males/ivan.jpg new file mode 100644 index 0000000..752e3ae Binary files /dev/null and b/scj/assets/spiders/males/ivan.jpg differ diff --git a/scj/assets/spiders/mamas/cleo.jpg b/scj/assets/spiders/mamas/cleo.jpg new file mode 100644 index 0000000..40069f8 Binary files /dev/null and b/scj/assets/spiders/mamas/cleo.jpg differ diff --git a/scj/assets/spiders/mamas/colette.jpg b/scj/assets/spiders/mamas/colette.jpg new file mode 100644 index 0000000..b8a3bd6 Binary files /dev/null and b/scj/assets/spiders/mamas/colette.jpg differ diff --git a/scj/assets/spiders/mamas/delight.jpg b/scj/assets/spiders/mamas/delight.jpg new file mode 100644 index 0000000..6943a3a Binary files /dev/null and b/scj/assets/spiders/mamas/delight.jpg differ diff --git a/scj/assets/spiders/mamas/demure.jpg b/scj/assets/spiders/mamas/demure.jpg new file mode 100644 index 0000000..2f6a658 Binary files /dev/null and b/scj/assets/spiders/mamas/demure.jpg differ diff --git a/scj/assets/spiders/mamas/devine.jpg b/scj/assets/spiders/mamas/devine.jpg new file mode 100644 index 0000000..46be891 Binary files /dev/null and b/scj/assets/spiders/mamas/devine.jpg differ diff --git a/scj/assets/spiders/mamas/dove.jpg b/scj/assets/spiders/mamas/dove.jpg new file mode 100644 index 0000000..4dfd696 Binary files /dev/null and b/scj/assets/spiders/mamas/dove.jpg differ diff --git a/scj/assets/spiders/mamas/fern.jpg b/scj/assets/spiders/mamas/fern.jpg new file mode 100644 index 0000000..4551770 Binary files /dev/null and b/scj/assets/spiders/mamas/fern.jpg differ diff --git a/scj/assets/spiders/mamas/inca.jpg b/scj/assets/spiders/mamas/inca.jpg new file mode 100644 index 0000000..13d9fb0 Binary files /dev/null and b/scj/assets/spiders/mamas/inca.jpg differ diff --git a/scj/assets/spiders/mamas/latte.jpg b/scj/assets/spiders/mamas/latte.jpg new file mode 100644 index 0000000..6a0dac4 Binary files /dev/null and b/scj/assets/spiders/mamas/latte.jpg differ diff --git a/scj/assets/spiders/mamas/lush.jpg b/scj/assets/spiders/mamas/lush.jpg new file mode 100644 index 0000000..4a5ad64 Binary files /dev/null and b/scj/assets/spiders/mamas/lush.jpg differ diff --git a/scj/care-sheet.html b/scj/care-sheet.html new file mode 100644 index 0000000..d767aaa --- /dev/null +++ b/scj/care-sheet.html @@ -0,0 +1,107 @@ + + + + + + Jumping Spider Care Sheet — Storm Cloud Jumpers + + + + + + + + +
+
+ Storm Cloud Jumpers +
+

Jumping Spider Care Sheet

+

Storm Cloud Jumpers · Small Size · Big Personality

+
+
+ +
+

Congratulations on your new captive-raised jumper! Phidippus jumping spiders are curious, personable, and easy to care for. Here's everything you need to keep yours thriving.

+ +
+
Temperature 72–82°F (room temp)
+
Humidity Moderate; higher around molts
+
Enclosure Vertical & well-ventilated
+
Slings (i3–6) A 3×3" cube is perfect
+
Feeders Hydei fruit flies, PBL, crickets, BSFL
+
Critical molts i5 & i7 — extra humidity
+
+ +

1.Enclosure & Playground

+

Jumpers are climbers — go vertical and well-ventilated. Slings (instar 3–6) are happy in a small 3×3" cube; adults enjoy a roomy front-opening enclosure. Decorate it like a little playground: cork bark, fake or live foliage, and a cozy spot up high where they'll build a silk hammock.

+ +

2.Substrate & Soft Landings

+

Line the floor with soft sphagnum moss or another reptile-safe moss. It holds a bit of humidity and cushions your jumper if it ever takes a fall.

+ +

3.Temperature & Humidity

+

Normal room temperature (72–82°F) is ideal — no special heating for most homes. Keep humidity moderate: mist one side of the enclosure a few times a week so there's always a dry side too. Never soak it, and always keep good airflow. Nudge humidity up slightly when a molt is near.

+ +

4.Feeding

+
    +
  • Slings: hydei fruit flies, offered every 2–3 days.
  • +
  • Peanut beetle larvae (PBL): a newer, excellent feeder — highly recommended.
  • +
  • Larger jumpers: appropriately sized crickets or black soldier fly larvae (BSFL) every few days.
  • +
  • Remove any uneaten prey so it can't stress or nip your spider.
  • +
+ +

5.Molting — the Important Part

+

Molts are how your jumper grows, and they're most delicate at instar 5 and instar 7. Around these times:

+
    +
  • Raise humidity a little.
  • +
  • Your jumper will seal itself into its hammock and stop eating — this is normal.
  • +
  • Do not disturb or try to remove it. Molting is fragile.
  • +
  • After it emerges, wait a few days before feeding so its new fangs can harden. Then resume feeding.
  • +
+ +

6.Handling

+

Jumpers are famously personable. Handle low and slow, over a soft surface, and always let them come to you. Never handle a spider that's in pre-molt or hiding in its hammock.

+
+ + +
+ +
+ + ← Back to site +
+ + diff --git a/scj/form-handler.gs b/scj/form-handler.gs new file mode 100644 index 0000000..6b9b383 --- /dev/null +++ b/scj/form-handler.gs @@ -0,0 +1,61 @@ +/** + * Storm Cloud Jumpers — inquiry form handler (Google Apps Script) + * ------------------------------------------------------------------ + * This sends inquiry-form submissions to the shop's Gmail using the + * shop's OWN Google account — no third-party form service, no cost. + * + * ONE-TIME SETUP (about 5 minutes): + * 1. Sign in to the Gmail account that should RECEIVE inquiries + * (stormcloudjumpers@gmail.com). + * 2. Go to https://script.google.com → New project. + * 3. Delete the sample code, paste THIS whole file in, and Save. + * 4. Click "Deploy" → "New deployment". + * - Type: Web app + * - Description: SCJ inquiry form + * - Execute as: Me + * - Who has access: Anyone + * Click Deploy and authorize when prompted. + * 5. Copy the Web app URL (ends in /exec). + * 6. Open scj/script.js and paste that URL into FORM_ENDPOINT. + * + * That's it — the website form will then email submissions straight + * to the inbox. (Until FORM_ENDPOINT is set, the form falls back to + * opening the visitor's own email app, which also works fine.) + */ + +// Where inquiries are delivered: +var TO_ADDRESS = 'stormcloudjumpers@gmail.com'; + +function doPost(e) { + try { + var p = (e && e.parameter) ? e.parameter : {}; + var name = (p.name || 'Someone').toString().slice(0, 200); + var email = (p.email || '(no email)').toString().slice(0, 200); + var spider = (p.spider || '(not specified)').toString().slice(0, 200); + var message = (p.message || '(no message)').toString().slice(0, 5000); + + var subject = 'Spider Inquiry — ' + spider + ' (' + name + ')'; + var body = + 'New inquiry from the Storm Cloud Jumpers website:\n\n' + + 'Name: ' + name + '\n' + + 'Email: ' + email + '\n' + + 'Spider of interest: ' + spider + '\n\n' + + 'Message:\n' + message + '\n\n' + + '— Reply directly to this email to reach the buyer.'; + + GmailApp.sendEmail(TO_ADDRESS, subject, body, { replyTo: email, name: 'SCJ Website' }); + + return ContentService + .createTextOutput(JSON.stringify({ ok: true })) + .setMimeType(ContentService.MimeType.JSON); + } catch (err) { + return ContentService + .createTextOutput(JSON.stringify({ ok: false, error: String(err) })) + .setMimeType(ContentService.MimeType.JSON); + } +} + +// Simple health check when the URL is opened in a browser. +function doGet() { + return ContentService.createTextOutput('Storm Cloud Jumpers form handler is running.'); +} diff --git a/scj/index.html b/scj/index.html new file mode 100644 index 0000000..6f8ff9f --- /dev/null +++ b/scj/index.html @@ -0,0 +1,379 @@ + + + + + + Storm Cloud Jumpers — Captive-Raised Jumping Spiders + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

+ Captive-Raised Jumping Spiders + STORM CLOUD JUMPERS +

+

Small Size. Big Personality.

+ +
+
+ Nimbus, the Storm Cloud Jumpers mascot — a jumping spider crest +

Meet Nimbus — our mascot

+
+
+ +
+ + +
+
+

Captive Raised

From wild-caught mamas — never collected for sale.

+

Healthy Body Shape

Plump, well-fed abdomens on every spider.

+

Live Arrival

Guaranteed on overnight FedEx hub-to-hub.

+

Free Starter Kit

Included free with every spider purchase.

+
+
+ + +
+
+
+

Available Now

+

Meet the jumpers looking for a home.

+

A small, rotating selection of healthy, captive-raised Phidippus jumpers. See one you like? Reserve it and we'll be in touch.

+
+ +
+ + +
+
+ Northern canopy jumper sling (Phidippus otiosus) + Available +
+
+

Northern Canopy Slings

+

Phidippus otiosus

+

Fern's babies — Northern (NC) canopy jumpers, a distinct line from the Florida otiosus. Captive raised, unsexed, and eating hydei fruit flies. Active little characters that love a planted "playground."

+
    +
  • Instar i5–6
  • Unsexed
  • Active
  • Healthy body shape
  • +
+
+ $25+ shipping + Reserve +
+
+
+ + +
+
+ Adult male regal jumper (Phidippus regius) + Available +
+
+

Regal Jumper Males

+

Phidippus regius

+

Our showy boys — Ivan, Gully, Noble, Hexx & Magick. Adult males are bold, dramatic, and love to show off. Captive raised. (More boys' photos coming soon.)

+
    +
  • Adult male
  • Bold & active
  • Healthy body shape
  • +
+
+ $25+ shipping + Reserve +
+
+
+ + +
+
+ Iris — subadult female regal jumper (Phidippus regius) + Available +
+
+

Iris

+

Phidippus regius · subadult female

+

A young subadult girl. Hasn't been handled much yet, but she's young enough to work with and warm up beautifully. Captive raised, never exposed to a male.

+
    +
  • Subadult female
  • Beginner-friendly
  • Healthy body shape
  • +
+
+ $50+ shipping + Reserve +
+
+
+ + +
+
+ Mango — subadult female regal jumper (Phidippus regius) + Available +
+
+

Mango

+

Phidippus regius · subadult female

+

Super friendly and a lovely handler. Mango is a confident subadult girl with gorgeous coloration. Captive raised, never exposed to a male.

+
    +
  • Subadult female
  • Handles well
  • Healthy body shape
  • +
+
+ $50+ shipping + Reserve +
+
+
+ +
+ + +
+ Free Gift +

Every spider comes with a free Starter Kit — a misting bottle, a soft paintbrush, and easy notes on molting & instars to get you started right.

+
+ +

Coming soon: Paraphidippus fartilis. Ask us to join the waitlist.

+
+
+ + +
+
+
+

Meet the Mamas

+

The mothers behind every sling.

+

Our mamas are wild-caught females who breed just once, then spend their short lives raising babies. That's why every baby we offer is captive raised. These girls aren't for sale — but we're proud to introduce them.

+
+ +
+
Fern, a Phidippus otiosus female
FernP. otiosus
+
Cleo, a Phidippus audax female
CleoP. audax
+
Colette, a Phidippus regius female
ColetteP. regius
+
Demure, a Phidippus regius female
DemureP. regius
+
Devine, a Phidippus regius female
DevineP. regius
+
Delight, a Phidippus regius female
DelightP. regius
+
Dove, a Phidippus regius female
DoveP. regius
+
Inca, a Phidippus regius female
IncaP. regius
+
Latte, a Phidippus regius female
LatteP. regius
+
Lush, a Phidippus regius female
LushP. regius
+
+
+
+ + +
+
+
+

Care Guide

+

Simple care for a happy jumper.

+

Jumping spiders are some of the most rewarding inverts to keep. Here's the short version — a full printable care sheet is one scan away.

+
+ +
+
+
01
+

Enclosure

+

Go vertical and well-ventilated. Slings (i3–6) do great in a 3×3" cube; adults enjoy a roomy front-opening enclosure with cork bark, fake leaves and a hammock up top. Give them a "playground" — they love to climb and explore.

+
+
+
02
+

Substrate & Falls

+

Line the floor with soft sphagnum moss (or another reptile-safe moss). It holds a little humidity and gives a soft landing in case your jumper takes a tumble.

+
+
+
03
+

Temperature & Humidity

+

Room temperature (72–82°F) suits most homes. Keep humidity moderate — mist one side a few times a week, never soak. Bump humidity a little higher around molts.

+
+
+
04
+

Feeding

+

Slings love hydei fruit flies. Peanut beetle larvae (PBL) are a newer, excellent feeder. Larger jumpers take appropriately sized crickets or BSFL. Offer a fresh feeder every few days.

+
+
+
05
+

Molting

+

Molts are critical at i5 and i7 — raise humidity a touch and do not disturb. Your jumper will seal into its hammock and fast. This is normal. Never pull them out.

+
+
+
06
+

After a Molt

+

Wait a few days after your jumper leaves its hammock before feeding — their fangs need to harden first. Then resume normal feeding and enjoy their fresh new colors.

+
+
+ +
+ QR code linking to the printable Storm Cloud Jumpers care sheet +
+

Printable Care Sheet

+

Scan the code or open the care sheet to print or save the full guide for your new jumper.

+
+
+
+
+ + +
+ +
+
+

Shipping & Live Arrival

+

Packed warm. Tracked all the way.

+

We ship carefully and only when the weather is safe for your spider.

+
+ +
+
+

FedEx Only

+

FedEx is the only carrier we use — it's the only legal option for shipping spiders. We do not ship UPS or USPS.

+
+
+

Ships Mon–Wed

+

Orders go out early in the week so your jumper is never sitting in a facility over a weekend.

+
+
+

Overnight, Hub-to-Hub

+

Overnight FedEx to your local hub ships in a live-arrival–covered box. Guaranteed alive

+
+
+

2-Day to Your Door

+

A lower-cost option offered in mild spring & fall weather. Not covered by the live guarantee

+
+
+
Weather-appropriate heat or cool packs are always included, free.
+
+
+ + +
+
+
+

About Us

+

A small keeper who loves these little jumpers.

+

Storm Cloud Jumpers is a tiny, hands-on operation. Our mamas are wild-caught Phidippus who breed a single time and then spend their short lives as devoted mothers — so every baby we place is truly captive raised.

+

We raise each sling by hand, feed them well, and only send jumpers with a healthy body shape out the door. Big breeders charge a premium — we'd rather keep these charming spiders affordable and get them into caring homes.

+
    +
  • Captive raised, never wild-collected for sale.
  • +
  • Honest descriptions — real photos of the actual lines.
  • +
  • Hobbyist-first — real answers to your questions.
  • +
  • Free starter kit with every spider.
  • +
+
+
+ Meet Nimbus — the face of Storm Cloud Jumpers +
+
+
+ + +
+
+
+

Reserve or Ask

+

Ready to bring home a jumper?

+

Tell us what you're looking for and we'll match you with a healthy, captive-raised spider and sort out shipping to you.

+ +
+ +
+ + + + + +

Sending opens your email app addressed to Storm Cloud Jumpers. Prefer to email directly? Write to stormcloudjumpers@gmail.com.

+ +
+
+
+ + + + + + + + + + diff --git a/scj/script.js b/scj/script.js new file mode 100644 index 0000000..9cffc92 --- /dev/null +++ b/scj/script.js @@ -0,0 +1,209 @@ +/* ============================================================ + Storm Cloud Jumpers — site interactions + ============================================================ */ +(function () { + 'use strict'; + + /* ---------------------------------------------------------- + FORM DELIVERY CONFIG + ------------------------------------------------------------ + By default the inquiry form opens the visitor's email app + addressed to Storm Cloud Jumpers (mailto:). No server needed. + + To have submissions land straight in the Gmail inbox WITHOUT + the visitor needing a mail app, deploy the included + `form-handler.gs` as a Google Apps Script web app (it sends + from the shop's own Gmail) and paste its /exec URL below. + When FORM_ENDPOINT is set, the form POSTs to it and falls + back to mailto only if the request fails. + ---------------------------------------------------------- */ + var CONTACT_EMAIL = 'stormcloudjumpers@gmail.com'; + var FORM_ENDPOINT = ''; // e.g. 'https://script.google.com/macros/s/XXXX/exec' + + var $ = function (s, c) { return (c || document).querySelector(s); }; + var $$ = function (s, c) { return Array.prototype.slice.call((c || document).querySelectorAll(s)); }; + + /* ---------- Sticky nav shadow ---------- */ + var nav = $('#nav'); + var onScroll = function () { + if (nav) nav.classList.toggle('scrolled', window.scrollY > 12); + }; + onScroll(); + window.addEventListener('scroll', onScroll, { passive: true }); + + /* ---------- Mobile menu ---------- */ + var burger = $('#burger'); + var links = $('#navLinks'); + var closeMenu = function () { + if (!links) return; + links.classList.remove('open'); + nav.classList.remove('menu-open'); + burger.setAttribute('aria-expanded', 'false'); + }; + if (burger && links) { + burger.addEventListener('click', function () { + var open = links.classList.toggle('open'); + nav.classList.toggle('menu-open', open); + burger.setAttribute('aria-expanded', String(open)); + }); + $$('a', links).forEach(function (a) { a.addEventListener('click', closeMenu); }); + document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeMenu(); }); + } + + /* ---------- Reveal on scroll ---------- */ + var reveals = $$('.reveal'); + if ('IntersectionObserver' in window && reveals.length) { + var io = new IntersectionObserver(function (entries) { + entries.forEach(function (en) { + if (en.isIntersecting) { en.target.classList.add('in'); io.unobserve(en.target); } + }); + }, { threshold: 0.12, rootMargin: '0px 0px -8% 0px' }); + reveals.forEach(function (el) { io.observe(el); }); + } else { + reveals.forEach(function (el) { el.classList.add('in'); }); + } + + /* ---------- Hero parallax (subtle, respects reduced motion) ---------- */ + var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + var heroBg = $('.hero__bg'); + if (heroBg && !reduce) { + window.addEventListener('scroll', function () { + var y = window.scrollY; + if (y < window.innerHeight) heroBg.style.transform = 'translateY(' + (y * 0.25) + 'px)'; + }, { passive: true }); + } + + /* ---------- "Reserve" buttons prefill the spider field ---------- */ + $$('[data-inquire]').forEach(function (btn) { + btn.addEventListener('click', function () { + var field = $('#spiderField'); + if (field) field.value = btn.getAttribute('data-inquire') || ''; + }); + }); + + /* ---------- Inquiry form ---------- */ + var form = $('#inquiryForm'); + var ok = $('#formOk'); + + var buildMailto = function (data) { + var subjSpider = data.spider ? ' — ' + data.spider : ''; + var subject = 'Spider Inquiry' + subjSpider + ' (' + data.name + ')'; + var body = + 'Name: ' + data.name + '\n' + + 'Email: ' + data.email + '\n' + + 'Spider of interest: ' + (data.spider || '(not specified)') + '\n\n' + + 'Message:\n' + (data.message || '(none)') + '\n'; + return 'mailto:' + CONTACT_EMAIL + + '?subject=' + encodeURIComponent(subject) + + '&body=' + encodeURIComponent(body); + }; + + if (form) { + form.addEventListener('submit', function (e) { + e.preventDefault(); + if (!form.checkValidity()) { form.reportValidity(); return; } + + var data = { + name: form.name.value.trim(), + email: form.email.value.trim(), + spider: form.spider.value.trim(), + message: form.message.value.trim() + }; + + var finishMailto = function () { + window.location.href = buildMailto(data); + if (ok) ok.hidden = false; + }; + + if (FORM_ENDPOINT) { + // Progressive enhancement: POST to Google Apps Script (sends via Gmail). + var body = new URLSearchParams(data).toString(); + fetch(FORM_ENDPOINT, { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: body + }).then(function (r) { + if (!r.ok) throw new Error('bad status'); + if (ok) { ok.textContent = 'Thanks! Your inquiry has been sent — we’ll reply within a day or two.'; ok.hidden = false; } + form.reset(); + }).catch(finishMailto); + } else { + finishMailto(); + } + }); + } + + /* ---------- Mamas lightbox ---------- */ + var lb = $('#lightbox'); + var lbImg = $('#lightboxImg'); + var lbCap = $('#lightboxCap'); + var lbClose = $('#lightboxClose'); + var lastFocused = null; + + var openLightbox = function (trigger, img, capHTML) { + if (!img || !lb) return; + lastFocused = trigger; + lbImg.src = img.getAttribute('src'); + lbImg.alt = img.getAttribute('alt') || ''; + lbCap.innerHTML = capHTML || ''; + lb.hidden = false; + requestAnimationFrame(function () { lb.classList.add('open'); }); + document.body.style.overflow = 'hidden'; + lbClose.focus(); + }; + + var wireZoom = function (trigger, getImg, getCap, label) { + trigger.setAttribute('role', 'button'); + trigger.setAttribute('tabindex', '0'); + trigger.setAttribute('aria-label', label); + var open = function () { openLightbox(trigger, getImg(), getCap()); }; + trigger.addEventListener('click', open); + trigger.addEventListener('keydown', function (e) { + if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); open(); } + }); + }; + + var closeLightbox = function () { + if (!lb || lb.hidden) return; + lb.classList.remove('open'); + document.body.style.overflow = ''; + var done = function () { + lb.hidden = true; + lbImg.src = ''; + lb.removeEventListener('transitionend', done); + if (lastFocused && lastFocused.focus) lastFocused.focus(); + }; + if (reduce) { done(); } else { lb.addEventListener('transitionend', done); } + }; + + if (lb) { + // Meet the Mamas gallery + $$('.mama').forEach(function (fig) { + var name = $('.mama__cap b', fig); + wireZoom(fig, + function () { return $('img', fig); }, + function () { var c = $('.mama__cap', fig); return c ? c.innerHTML : ''; }, + 'Enlarge photo' + (name ? ' of ' + name.textContent : '')); + }); + + // Available spiders — click the photo to enlarge + $$('#available .card__media').forEach(function (media) { + var card = media.closest('.card'); + wireZoom(media, + function () { return $('img', media); }, + function () { + var h = $('h3', card), sci = $('.card__sci', card); + return (h ? '' + h.textContent + '' : '') + (sci ? '' + sci.textContent + '' : ''); + }, + 'Enlarge photo' + (card && $('h3', card) ? ' of ' + $('h3', card).textContent : '')); + }); + + lbClose.addEventListener('click', closeLightbox); + lb.addEventListener('click', function (e) { if (e.target === lb) closeLightbox(); }); + document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeLightbox(); }); + } + + /* ---------- Footer year ---------- */ + var y = $('#year'); + if (y) y.textContent = String(new Date().getFullYear()); +})(); diff --git a/scj/styles.css b/scj/styles.css new file mode 100644 index 0000000..42cee6b --- /dev/null +++ b/scj/styles.css @@ -0,0 +1,313 @@ +/* ============================================================ + STORM CLOUD JUMPERS — jumpers.stormcloudhills.com + Dark storm palette · red accent · brushed-silver display type + ============================================================ */ + +:root { + --red: #e02828; + --red-deep: #b81d1d; + --red-soft: #ff5a5a; + + --bg: #0a0a0a; + --bg-2: #101012; + --bg-3: #16161a; + --bg-4: #1e1e24; + --ink: #050505; + + --txt: #f2f2f2; + --txt-soft: #b6b6bd; + --txt-mute: #7d7d86; + + --silver-1: #ffffff; + --silver-2: #c9ccd3; + --silver-3: #8b8f99; + + --line: rgba(255,255,255,0.09); + --line-2: rgba(255,255,255,0.16); + + --shadow-sm: 0 2px 10px rgba(0,0,0,.45); + --shadow-md: 0 16px 40px rgba(0,0,0,.55); + --shadow-lg: 0 30px 70px rgba(0,0,0,.7); + --glow-red: 0 0 30px rgba(224,40,40,.35); + + --radius: 14px; + --radius-lg: 22px; + --container: 1200px; + --ease: cubic-bezier(.22,.61,.36,1); +} + +* { box-sizing: border-box; } +html { scroll-behavior: smooth; } +body { + margin: 0; + font-family: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; + color: var(--txt); + background: var(--bg); + line-height: 1.65; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; +} +img { max-width: 100%; display: block; } +a { color: inherit; text-decoration: none; } + +h1,h2,h3,h4 { + font-family: 'Oswald','Inter',sans-serif; + font-weight: 700; + letter-spacing: .02em; + line-height: 1.08; + margin: 0 0 .55em; + color: #fff; +} +h1 { font-size: clamp(2.4rem, 6vw, 4.4rem); } +h2 { font-size: clamp(1.9rem, 3.6vw, 2.9rem); } +h3 { font-size: 1.2rem; letter-spacing: .04em; text-transform: uppercase; } +p { margin: 0 0 1em; } + +/* silver metallic text used on key headlines */ +.metal { + background: linear-gradient(180deg,#fff 0%,#d3d6dc 42%,#8c9099 60%,#eef0f3 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + color: transparent; +} + +.container { width: 100%; max-width: var(--container); margin: 0 auto; padding: 0 24px; } +.accent { color: var(--red); } +.section { padding: clamp(64px, 9vw, 120px) 0; position: relative; } +.section--alt { background: var(--bg-2); } + +/* ---------- Eyebrow / section heads ---------- */ +.eyebrow { + display: inline-flex; align-items: center; gap: 12px; + margin: 0 0 16px; + font: 600 .78rem/1 'Inter',sans-serif; + letter-spacing: .24em; text-transform: uppercase; color: var(--red); +} +.eyebrow .dash { width: 34px; height: 2px; background: var(--red); display: inline-block; } +.eyebrow--light { color: var(--red-soft); } +.section__head { max-width: 720px; margin: 0 auto clamp(36px,5vw,60px); text-align: center; } +.section__head .eyebrow { justify-content: center; } +.lede { color: var(--txt-soft); font-size: 1.08rem; } + +/* ---------- Buttons ---------- */ +.btn { + display: inline-flex; align-items: center; justify-content: center; gap: 9px; + padding: 14px 28px; border-radius: 999px; + font: 600 .86rem/1 'Inter',sans-serif; letter-spacing: .09em; text-transform: uppercase; + border: 2px solid transparent; cursor: pointer; transition: all .25s var(--ease); + white-space: nowrap; +} +.btn--primary { background: var(--red); color: #fff; border-color: var(--red); box-shadow: 0 8px 24px rgba(224,40,40,.35); } +.btn--primary:hover { background: var(--red-deep); border-color: var(--red-deep); transform: translateY(-2px); } +.btn--ghost { background: transparent; color: #fff; border-color: rgba(255,255,255,.55); } +.btn--ghost:hover { background: #fff; color: var(--ink); border-color: #fff; transform: translateY(-2px); } +.btn--small { padding: 11px 20px; font-size: .76rem; } +.btn--block { width: 100%; } + +/* ---------- Nav ---------- */ +.nav { position: fixed; inset: 0 0 auto 0; z-index: 60; transition: background .3s var(--ease), box-shadow .3s var(--ease); } +.nav.scrolled { background: rgba(10,10,10,.86); backdrop-filter: blur(12px); box-shadow: 0 1px 0 var(--line); } +.nav__inner { max-width: var(--container); margin: 0 auto; padding: 14px 24px; display: flex; align-items: center; justify-content: space-between; gap: 20px; } +.nav__brand { display: flex; align-items: center; gap: 12px; } +.nav__logo { width: 42px; height: 42px; border-radius: 9px; object-fit: cover; box-shadow: var(--shadow-sm); } +.nav__name { font: 700 1.05rem/1 'Oswald',sans-serif; letter-spacing: .06em; text-transform: uppercase; color: #fff; } +.nav__name small { display: block; font-size: .62rem; letter-spacing: .34em; color: var(--txt-mute); margin-top: 3px; } +.nav__links { display: flex; align-items: center; gap: 26px; } +.nav__links a { font: 600 .82rem/1 'Inter',sans-serif; letter-spacing: .06em; text-transform: uppercase; color: var(--txt-soft); transition: color .2s; } +.nav__links a:hover { color: #fff; } +.nav__cta { padding: 10px 20px; border: 2px solid var(--red); border-radius: 999px; color: #fff !important; background: var(--red); } +.nav__cta:hover { background: var(--red-deep); border-color: var(--red-deep); } +.nav__burger { display: none; flex-direction: column; gap: 5px; background: none; border: 0; cursor: pointer; padding: 8px; } +.nav__burger span { width: 24px; height: 2px; background: #fff; transition: .25s var(--ease); } + +/* ---------- Hero ---------- */ +.hero { position: relative; min-height: 100svh; display: flex; align-items: center; overflow: hidden; padding: 120px 0 80px; } +.hero__bg { position: absolute; inset: 0; background: url('assets/brand/hero-storm-wide.jpg') center/cover no-repeat; opacity: .32; filter: saturate(1.1); } +.hero::after { content: ""; position: absolute; inset: 0; background: + radial-gradient(1000px 600px at 70% 30%, rgba(224,40,40,.16), transparent 60%), + linear-gradient(180deg, rgba(10,10,10,.55) 0%, rgba(10,10,10,.82) 70%, var(--bg) 100%); } +.hero__grid { position: relative; z-index: 2; display: grid; grid-template-columns: 1.1fr .9fr; gap: 48px; align-items: center; } +.hero__title { margin: 0 0 .35em; } +.hero__title .t-sub { display: block; font-size: clamp(1rem,2vw,1.4rem); letter-spacing: .3em; color: var(--red-soft); text-transform: uppercase; margin-bottom: .5em; font-weight: 600; font-family: 'Inter',sans-serif; } +.hero__tag { font: 600 clamp(1rem,1.8vw,1.35rem)/1.4 'Oswald',sans-serif; letter-spacing: .12em; text-transform: uppercase; color: var(--silver-2); margin-bottom: 1.6em; } +.hero__cta { display: flex; flex-wrap: wrap; gap: 14px; } +.hero__logo-wrap { position: relative; text-align: center; } +.hero__logo-wrap img { border-radius: var(--radius-lg); box-shadow: var(--shadow-lg), var(--glow-red); } +.hero__logo-cap { margin-top: 16px; font: 600 .78rem/1 'Inter',sans-serif; letter-spacing: .22em; text-transform: uppercase; color: var(--txt-mute); } +.hero__logo-cap b { color: var(--red-soft); } +.hero__scroll { position: absolute; bottom: 26px; left: 50%; transform: translateX(-50%); z-index: 2; text-align: center; color: var(--txt-mute); } +.hero__scroll span { display: block; width: 22px; height: 34px; border: 2px solid var(--line-2); border-radius: 12px; margin: 0 auto 8px; position: relative; } +.hero__scroll span::after { content: ""; position: absolute; top: 6px; left: 50%; transform: translateX(-50%); width: 3px; height: 7px; background: var(--red); border-radius: 2px; animation: scrolly 1.7s var(--ease) infinite; } +.hero__scroll p { font-size: .62rem; letter-spacing: .3em; margin: 0; } +@keyframes scrolly { 0%{opacity:0;transform:translate(-50%,0)} 40%{opacity:1} 100%{opacity:0;transform:translate(-50%,12px)} } + +/* ---------- Trust strip ---------- */ +.trust { background: var(--bg-3); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } +.trust__grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 24px; padding: 30px 0; text-align: center; } +.trust__item h4 { font-size: 1rem; margin: 0 0 4px; color: #fff; } +.trust__item p { margin: 0; font-size: .82rem; color: var(--txt-mute); } +.trust__item .ic { color: var(--red); font-size: 1.3rem; } + +/* ---------- Cards grid (available) ---------- */ +.grid { display: grid; gap: 26px; } +.spiders__grid { grid-template-columns: repeat(3,1fr); } +.card { + background: var(--bg-3); border: 1px solid var(--line); border-radius: var(--radius-lg); overflow: hidden; + display: flex; flex-direction: column; transition: transform .3s var(--ease), border-color .3s, box-shadow .3s; +} +.card:hover { transform: translateY(-6px); border-color: rgba(224,40,40,.5); box-shadow: var(--shadow-md); } +.card__media { position: relative; aspect-ratio: 4/3; overflow: hidden; background: var(--bg-4); } +.card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); } +.card:hover .card__media img { transform: scale(1.05); } +.badge { position: absolute; top: 12px; left: 12px; background: var(--red); color: #fff; font: 700 .66rem/1 'Inter',sans-serif; letter-spacing: .12em; text-transform: uppercase; padding: 7px 11px; border-radius: 999px; box-shadow: var(--shadow-sm); } +.badge--soft { background: rgba(0,0,0,.7); border: 1px solid var(--line-2); } +.card__body { padding: 22px; display: flex; flex-direction: column; gap: 12px; flex: 1; } +.card__body h3 { margin: 0; } +.card__sci { font-style: italic; color: var(--red-soft); font-size: .9rem; margin: -6px 0 0; } +.card__desc { color: var(--txt-soft); font-size: .92rem; margin: 0; } +.card__meta { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; } +.card__meta li { font-size: .74rem; letter-spacing: .04em; text-transform: uppercase; color: var(--txt-soft); background: var(--bg-4); border: 1px solid var(--line); border-radius: 999px; padding: 5px 11px; } +.card__foot { margin-top: auto; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 6px; } +.price { font: 700 1.5rem/1 'Oswald',sans-serif; color: #fff; } +.price small { font-size: .72rem; color: var(--txt-mute); letter-spacing: .08em; display: block; text-transform: uppercase; font-family: 'Inter',sans-serif; font-weight: 500; } + +/* Starter kit banner */ +.starter { margin-top: 34px; display: flex; align-items: center; gap: 22px; flex-wrap: wrap; justify-content: center; text-align: center; background: linear-gradient(120deg, rgba(224,40,40,.14), rgba(224,40,40,.04)); border: 1px solid rgba(224,40,40,.3); border-radius: var(--radius-lg); padding: 24px 30px; } +.starter .tag { background: var(--red); color: #fff; font: 700 .7rem/1 'Inter',sans-serif; letter-spacing: .12em; text-transform: uppercase; padding: 8px 14px; border-radius: 999px; } +.starter p { margin: 0; color: var(--txt-soft); } +.starter b { color: #fff; } + +.note-line { text-align: center; color: var(--txt-mute); font-size: .86rem; margin-top: 20px; } + +/* ---------- Mamas gallery ---------- */ +.mamas__grid { grid-template-columns: repeat(5,1fr); gap: 18px; } +.mama { position: relative; border-radius: var(--radius); overflow: hidden; aspect-ratio: 1; border: 1px solid var(--line); background: var(--bg-4); } +.mama img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); } +.mama:hover img { transform: scale(1.07); } +.mama__cap { position: absolute; inset: auto 0 0 0; padding: 26px 12px 10px; background: linear-gradient(180deg, transparent, rgba(0,0,0,.85)); } +.mama__cap b { display: block; font: 700 .95rem/1 'Oswald',sans-serif; letter-spacing: .04em; text-transform: uppercase; color: #fff; } +.mama__cap span { font-size: .72rem; font-style: italic; color: var(--red-soft); } + +/* ---------- Care ---------- */ +.care__grid { grid-template-columns: repeat(3,1fr); } +.care__card { background: var(--bg-3); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 26px; transition: border-color .3s, transform .3s; } +.care__card:hover { border-color: rgba(224,40,40,.4); transform: translateY(-4px); } +.care__num { font: 700 1rem/1 'Oswald',sans-serif; color: var(--red); letter-spacing: .1em; margin-bottom: 14px; } +.care__card h3 { margin: 0 0 8px; } +.care__card p { margin: 0; color: var(--txt-soft); font-size: .92rem; } +.care__qr { margin-top: 40px; display: flex; align-items: center; gap: 28px; flex-wrap: wrap; justify-content: center; background: var(--bg-3); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 28px 34px; } +.care__qr img { width: 128px; height: 128px; border-radius: 12px; background: #fff; padding: 8px; } +.care__qr .t h3 { margin: 0 0 6px; } +.care__qr .t p { margin: 0; color: var(--txt-soft); max-width: 420px; } + +/* ---------- Shipping (dark feature) ---------- */ +.shipping { position: relative; overflow: hidden; } +.shipping__bg { position: absolute; inset: 0; background: url('assets/brand/hero-logo-left.jpg') center/cover no-repeat; opacity: .18; } +.shipping::after { content:""; position:absolute; inset:0; background: linear-gradient(180deg, rgba(10,10,10,.85), rgba(10,10,10,.95)); } +.shipping .container { position: relative; z-index: 2; } +.ship__grid { grid-template-columns: repeat(2,1fr); gap: 22px; margin-top: 30px; } +.ship__card { background: rgba(22,22,26,.7); border: 1px solid var(--line-2); border-radius: var(--radius-lg); padding: 26px; backdrop-filter: blur(4px); } +.ship__card h4 { display: flex; align-items: center; gap: 10px; margin: 0 0 8px; font-size: 1.05rem; color: #fff; } +.ship__card p { margin: 0; color: var(--txt-soft); font-size: .92rem; } +.ship__card .ic { color: var(--red); } +.ship__flag { display: inline-block; margin-top: 8px; font-size: .74rem; letter-spacing: .1em; text-transform: uppercase; color: var(--red-soft); } +.callout { margin-top: 26px; text-align: center; font: 600 .9rem/1.5 'Inter',sans-serif; letter-spacing: .06em; color: var(--silver-2); background: rgba(224,40,40,.12); border: 1px solid rgba(224,40,40,.35); border-radius: 999px; padding: 14px 22px; display: inline-block; } + +/* ---------- About ---------- */ +.about__grid { grid-template-columns: 1fr 1fr; gap: 48px; align-items: center; } +.about__visual img { border-radius: var(--radius-lg); box-shadow: var(--shadow-md); } +.bullets { list-style: none; padding: 0; margin: 18px 0 0; display: grid; gap: 12px; } +.bullets li { position: relative; padding-left: 30px; color: var(--txt-soft); } +.bullets li::before { content: "✦"; position: absolute; left: 0; color: var(--red); } +.bullets b { color: #fff; } + +/* ---------- Contact ---------- */ +.contact__grid { grid-template-columns: 1fr 1fr; gap: 48px; } +.contact__list { list-style: none; padding: 0; margin: 22px 0 0; display: grid; gap: 14px; } +.contact__list li { display: flex; align-items: center; gap: 12px; color: var(--txt-soft); } +.contact__list .ic { color: var(--red); width: 22px; text-align: center; } +.contact__list a:hover { color: #fff; } +.form { background: var(--bg-3); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 30px; display: grid; gap: 16px; } +.form label { display: grid; gap: 6px; font: 600 .78rem/1 'Inter',sans-serif; letter-spacing: .08em; text-transform: uppercase; color: var(--txt-soft); } +.form input, .form select, .form textarea { + width: 100%; background: var(--bg); border: 1px solid var(--line-2); border-radius: 10px; padding: 12px 14px; + color: #fff; font: 400 .95rem/1.4 'Inter',sans-serif; transition: border-color .2s; +} +.form input:focus, .form select:focus, .form textarea:focus { outline: none; border-color: var(--red); } +.form textarea { resize: vertical; } +.form__note { font-size: .78rem; color: var(--txt-mute); text-transform: none; letter-spacing: 0; margin: 0; } +.form__msg { margin: 0; padding: 12px 14px; border-radius: 10px; font-size: .88rem; } +.form__msg--ok { background: rgba(40,180,90,.14); border: 1px solid rgba(40,180,90,.4); color: #9be8b6; } +.form__msg--err { background: rgba(224,40,40,.14); border: 1px solid rgba(224,40,40,.4); color: var(--red-soft); } + +/* ---------- Footer ---------- */ +.footer { background: var(--ink); border-top: 1px solid var(--line); padding: 50px 0 34px; } +.footer__inner { display: flex; flex-wrap: wrap; gap: 26px; align-items: center; justify-content: space-between; } +.footer__brand { display: flex; align-items: center; gap: 14px; } +.footer__brand img { width: 50px; height: 50px; border-radius: 10px; } +.footer__name { font: 700 1.1rem/1 'Oswald',sans-serif; letter-spacing: .06em; text-transform: uppercase; margin: 0; color:#fff; } +.footer__name small { display:block; font-size:.6rem; letter-spacing:.32em; color: var(--txt-mute); margin-top:4px; } +.footer__links { display: flex; flex-wrap: wrap; gap: 20px; } +.footer__links a { font-size: .82rem; letter-spacing: .06em; text-transform: uppercase; color: var(--txt-soft); } +.footer__links a:hover { color: #fff; } +.footer__social { display: inline-flex; align-items: center; gap: 8px; color: var(--txt-soft); } +.footer__social:hover { color: var(--red-soft); } +.footer__copy { width: 100%; text-align: center; color: var(--txt-mute); font-size: .78rem; margin: 24px 0 0; padding-top: 20px; border-top: 1px solid var(--line); } + +/* ---------- Lightbox ---------- */ +.mama, .card__media { cursor: zoom-in; } +.mama:focus-visible, .card__media:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; } +.lightbox { + position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; + padding: 5vh 20px; background: rgba(5,5,5,.9); backdrop-filter: blur(6px); + opacity: 0; transition: opacity .25s var(--ease); +} +.lightbox[hidden] { display: none; } +.lightbox.open { opacity: 1; } +.lightbox__figure { margin: 0; max-width: min(92vw, 760px); text-align: center; transform: scale(.96); transition: transform .25s var(--ease); } +.lightbox.open .lightbox__figure { transform: scale(1); } +.lightbox__img { max-width: 100%; max-height: 82vh; width: auto; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg), var(--glow-red); } +.lightbox__cap { margin-top: 16px; color: var(--txt); font: 700 1.15rem/1.2 'Oswald',sans-serif; letter-spacing: .04em; text-transform: uppercase; } +.lightbox__cap span { display: block; margin-top: 4px; font: italic 400 .85rem/1 'Inter',sans-serif; text-transform: none; color: var(--red-soft); letter-spacing: 0; } +.lightbox__close { + position: absolute; top: 18px; right: 22px; z-index: 2; width: 46px; height: 46px; border-radius: 50%; + background: rgba(0,0,0,.5); border: 1px solid var(--line-2); color: #fff; font-size: 1.8rem; line-height: 1; + cursor: pointer; transition: background .2s, transform .2s; +} +.lightbox__close:hover { background: var(--red); transform: rotate(90deg); } +@media (prefers-reduced-motion: reduce) { + .lightbox, .lightbox__figure, .lightbox__close { transition: none; } +} + +/* ---------- Reveal animation ---------- */ +.reveal { opacity: 0; transform: translateY(26px); transition: opacity .7s var(--ease), transform .7s var(--ease); } +.reveal.in { opacity: 1; transform: none; } + +/* ---------- Responsive ---------- */ +@media (max-width: 980px) { + .hero__grid { grid-template-columns: 1fr; text-align: center; gap: 36px; } + .hero__cta { justify-content: center; } + .hero__logo-wrap { order: -1; max-width: 380px; margin: 0 auto; } + .spiders__grid, .care__grid { grid-template-columns: repeat(2,1fr); } + .mamas__grid { grid-template-columns: repeat(4,1fr); } + .about__grid, .contact__grid { grid-template-columns: 1fr; } + .ship__grid { grid-template-columns: 1fr; } +} +@media (max-width: 640px) { + .nav__links { position: fixed; inset: 0 0 0 auto; width: min(78vw,320px); flex-direction: column; align-items: flex-start; gap: 22px; background: var(--bg-2); padding: 96px 30px 30px; transform: translateX(100%); transition: transform .3s var(--ease); box-shadow: var(--shadow-lg); } + .nav__links.open { transform: none; } + .nav__burger { display: flex; z-index: 61; } + .nav.menu-open .nav__burger span:nth-child(1) { transform: translateY(7px) rotate(45deg); } + .nav.menu-open .nav__burger span:nth-child(2) { opacity: 0; } + .nav.menu-open .nav__burger span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } + .trust__grid { grid-template-columns: repeat(2,1fr); gap: 20px; } + .spiders__grid, .care__grid { grid-template-columns: 1fr; } + .mamas__grid { grid-template-columns: repeat(2,1fr); } +} + +@media (prefers-reduced-motion: reduce) { + * { scroll-behavior: auto !important; } + .reveal { opacity: 1 !important; transform: none !important; transition: none !important; } + .hero__scroll span::after { animation: none; } +} diff --git a/somefemaleregals/IMG_5920.jpeg b/somefemaleregals/IMG_5920.jpeg new file mode 100644 index 0000000..1d08bce Binary files /dev/null and b/somefemaleregals/IMG_5920.jpeg differ diff --git a/somefemaleregals/IMG_5925.jpeg b/somefemaleregals/IMG_5925.jpeg new file mode 100644 index 0000000..f3c4ee5 Binary files /dev/null and b/somefemaleregals/IMG_5925.jpeg differ diff --git a/somefemaleregals/IMG_5941.jpeg b/somefemaleregals/IMG_5941.jpeg new file mode 100644 index 0000000..286ca35 Binary files /dev/null and b/somefemaleregals/IMG_5941.jpeg differ diff --git a/somefemaleregals/IMG_5942.jpeg b/somefemaleregals/IMG_5942.jpeg new file mode 100644 index 0000000..2a0c9ae Binary files /dev/null and b/somefemaleregals/IMG_5942.jpeg differ diff --git a/somefemaleregals/IMG_5946.jpeg b/somefemaleregals/IMG_5946.jpeg new file mode 100644 index 0000000..ec996c8 Binary files /dev/null and b/somefemaleregals/IMG_5946.jpeg differ diff --git a/somefemaleregals/IMG_5950.jpeg b/somefemaleregals/IMG_5950.jpeg new file mode 100644 index 0000000..3b1dd19 Binary files /dev/null and b/somefemaleregals/IMG_5950.jpeg differ diff --git a/somefemaleregals/IMG_6116.jpeg b/somefemaleregals/IMG_6116.jpeg new file mode 100644 index 0000000..46d2449 Binary files /dev/null and b/somefemaleregals/IMG_6116.jpeg differ diff --git a/somefemaleregals/IMG_6122.jpeg b/somefemaleregals/IMG_6122.jpeg new file mode 100644 index 0000000..f6382fa Binary files /dev/null and b/somefemaleregals/IMG_6122.jpeg differ diff --git a/somefemaleregals/IMG_6125.jpeg b/somefemaleregals/IMG_6125.jpeg new file mode 100644 index 0000000..3d1582e Binary files /dev/null and b/somefemaleregals/IMG_6125.jpeg differ diff --git a/somefemaleregals/IMG_6126.jpeg b/somefemaleregals/IMG_6126.jpeg new file mode 100644 index 0000000..a787774 Binary files /dev/null and b/somefemaleregals/IMG_6126.jpeg differ diff --git a/somefemaleregals/IMG_6138.jpeg b/somefemaleregals/IMG_6138.jpeg new file mode 100644 index 0000000..95b4a52 Binary files /dev/null and b/somefemaleregals/IMG_6138.jpeg differ diff --git a/somefemaleregals/IMG_6147.jpeg b/somefemaleregals/IMG_6147.jpeg new file mode 100644 index 0000000..89789c7 Binary files /dev/null and b/somefemaleregals/IMG_6147.jpeg differ diff --git a/somefemaleregals/names.txt b/somefemaleregals/names.txt new file mode 100644 index 0000000..b33916c --- /dev/null +++ b/somefemaleregals/names.txt @@ -0,0 +1,3 @@ +They’re $50 plus shipping. All captive raised and not exposed to any male. +First 6 is subadult Iris- hasn’t been handled much but young enough to work with. +Next 6 are Mango subadult - super friendly, she handles well. \ No newline at end of file