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.
+
+
+
+
+
+
+
+
+
+
+
“Curious. Charismatic. Fearless.”
+
— the jumping spider, in three words
+
+
+
+
+
+
+
+
Available Now
+
Meet the jumpers.
+
A rotating selection of our healthiest slings, juveniles, and adults.
+
+
+
+
+
+
+
Phidippus regius
+
Regal Jumper · Florida lineage
+
+
+
+
+
+
+
+
+
Phidippus audax
+
Bold Jumper · classic North American
+
+
+
+
+
+
+
+
+
Phidippus otiosus
+
Canopy Jumper · arboreal beauty
+
+
+
+
+
+
+
+
+
Phidippus mystaceus
+
Mustached Jumper · fluffy & rare
+
+
+
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
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 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."
+
+
+
+
+
+
+
+
+
+
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.)
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
+
+
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 P. otiosus
+
Cleo P. audax
+
Colette P. regius
+
Demure P. regius
+
Devine P. regius
+
Delight P. regius
+
Dove P. regius
+
Inca P. regius
+
Latte P. regius
+
Lush P. 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.
+
+
+
+
+
+
+
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
+
+
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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
×
+
+
+
+
+
+
+
+
+
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