@@ -52,6 +52,17 @@ return 'night'; } // which content categories belong to each time of day var TIME_CONTENT = { night: ['sky/', 'names/', 'remedies/'], dawn: ['planting/', 'foraging/'], morning: ['planting/', 'chores/', 'bugs/'], afternoon: ['kitchen/', 'bugs/', 'chores/'], evening: ['kitchen/', 'remedies/', 'foraging/', 'names/'] }; var TIME_LABELS = ['night', 'dawn', 'morning', 'afternoon', 'evening']; // --- haiku --- // real poems. the old masters wrote about exactly this.
@@ -97,7 +108,6 @@ function getHaiku(season) { var poems = HAIKU[season.name]; if (!poems) return null; // pick one based on day of year so it changes daily but is stable within the day var doy = Math.floor((new Date() - new Date(new Date().getFullYear(), 0, 0)) / 86400000); return poems[doy % poems.length]; }
@@ -223,13 +233,13 @@ // season palettes — the color of the earth shifts with the year var SEASON_COLORS = { 'winter': { bg: '#07080b', tint: '40,50,80' }, // cold blue 'early-spring': { bg: '#0a0c08', tint: '50,70,35' }, // dark moss 'late-spring': { bg: '#0b0d07', tint: '55,80,30' }, // green rising 'early-summer': { bg: '#0d0b07', tint: '80,65,20' }, // golden heat 'midsummer': { bg: '#0e0a06', tint: '90,60,15' }, // scorched amber 'early-fall': { bg: '#0d0906', tint: '85,45,20' }, // rust and oak 'late-fall': { bg: '#0b0908', tint: '65,40,30' } // bare wood 'winter': { bg: '#07080b', tint: '40,50,80' }, 'early-spring': { bg: '#0a0c08', tint: '50,70,35' }, 'late-spring': { bg: '#0b0d07', tint: '55,80,30' }, 'early-summer': { bg: '#0d0b07', tint: '80,65,20' }, 'midsummer': { bg: '#0e0a06', tint: '90,60,15' }, 'early-fall': { bg: '#0d0906', tint: '85,45,20' }, 'late-fall': { bg: '#0b0908', tint: '65,40,30' } }; function applyDaylightCycle(time, season) {
@@ -237,7 +247,6 @@ var s = SEASON_COLORS[season.name] || SEASON_COLORS['early-spring']; var r = document.documentElement; // background color blends time + season r.style.setProperty('--earth', s.bg); r.style.setProperty('--bone', c.text); r.style.setProperty('--sprout', c.accent);
@@ -250,34 +259,34 @@ document.body.setAttribute('data-time', time); document.body.setAttribute('data-season', season.name); // sky layer: season color wash // sky layer: season color wash, stronger for the hero var sky = document.getElementById('sky-layer'); if (sky) { sky.style.background = 'radial-gradient(ellipse at 30% 20%, rgba(' + s.tint + ',0.12) 0%, transparent 50%), ' + 'radial-gradient(ellipse at 70% 80%, rgba(' + s.tint + ',0.08) 0%, transparent 50%), ' + 'radial-gradient(ellipse at 50% 50%, rgba(' + s.tint + ',0.05) 0%, transparent 70%)'; 'radial-gradient(ellipse at 30% 15%, rgba(' + s.tint + ',0.25) 0%, transparent 55%), ' + 'radial-gradient(ellipse at 70% 80%, rgba(' + s.tint + ',0.12) 0%, transparent 55%), ' + 'radial-gradient(ellipse at 50% 50%, rgba(' + s.tint + ',0.08) 0%, transparent 70%)'; } // time layer: light source shining down from above // time layer: light source shining down, covering the hero viewport var timeEl = document.getElementById('time-layer'); if (timeEl) { timeEl.style.background = TIME_LIGHTS[time] || TIME_LIGHTS.morning; } } // the light source — a thin band across the top, sun or moon // the light source — stronger now, covering the hero var TIME_LIGHTS = { night: 'linear-gradient(to bottom, rgba(100,120,180,0.10) 0%, rgba(100,120,180,0.03) 40%, transparent 100%)', 'linear-gradient(to bottom, rgba(100,120,180,0.15) 0%, rgba(100,120,180,0.05) 30%, transparent 70%)', dawn: 'linear-gradient(to bottom, rgba(220,150,70,0.14) 0%, rgba(200,120,50,0.04) 50%, transparent 100%)', 'linear-gradient(to bottom, rgba(220,150,70,0.22) 0%, rgba(200,120,50,0.06) 40%, transparent 80%)', morning: 'linear-gradient(to bottom, rgba(240,210,140,0.10) 0%, rgba(240,210,140,0.02) 50%, transparent 100%)', 'linear-gradient(to bottom, rgba(240,210,140,0.16) 0%, rgba(240,210,140,0.04) 40%, transparent 80%)', afternoon: 'linear-gradient(to bottom, rgba(240,200,110,0.12) 0%, rgba(240,200,110,0.03) 50%, transparent 100%)', 'linear-gradient(to bottom, rgba(240,200,110,0.18) 0%, rgba(240,200,110,0.05) 40%, transparent 80%)', evening: 'linear-gradient(to bottom, rgba(200,90,30,0.16) 0%, rgba(180,70,20,0.04) 50%, transparent 100%)' 'linear-gradient(to bottom, rgba(200,90,30,0.24) 0%, rgba(180,70,20,0.06) 40%, transparent 80%)' };
@@ -321,10 +330,9 @@ } function moonGlyph(phase) { // 8 unicode moon glyphs mapped to the synodic cycle var glyphs = ['\uD83C\uDF11','\uD83C\uDF12','\uD83C\uDF13','\uD83C\uDF14','\uD83C\uDF15','\uD83C\uDF16','\uD83C\uDF17','\uD83C\uDF18']; var i = Math.floor((phase / 29.53058867) * 8) % 8; return glyphs[i]; var name = moonName(phase); var illum = Math.round(moonIllumination(phase) * 100); return name + ', ' + illum + '%'; } var MONTHS = ['january','february','march','april','may','june',
@@ -359,7 +367,6 @@ return { days: diff, label: s.label }; } } // wrap to next year var first = SEASONS[0]; var next = new Date(date.getFullYear() + 1, first.start[0] - 1, first.start[1]); return { days: Math.ceil((next - date) / 86400000), label: first.label };
@@ -368,7 +375,6 @@ function skyText(now, time) { var phase = moonPhase(now); var name = moonName(phase); var glyph = moonGlyph(phase); var illum = Math.round(moonIllumination(phase) * 100); var hours = daylight(now, LAT); var yesterday = new Date(now);
@@ -400,8 +406,28 @@ } // --- moon gardening --- function moonGardenTip(phase) { if (phase < 3.7) return 'the moon is dark. this is a time for rest and planning. prepare beds, amend soil, but do not plant. the old farmers said nothing wants to start in the dark.'; if (phase < 7.4) return 'the moon is waxing. plant leafy things: lettuce, spinach, cabbage, herbs that grow above ground. the light is growing and pulls the energy upward.'; if (phase < 11.1) return 'the moon is in its first quarter. plant things that fruit: tomatoes, peppers, beans, squash. the increasing light favors strong stems and heavy fruit.'; if (phase < 14.8) return 'the moon is nearly full. transplant, fertilize, graft. the light is strongest and the sap is rising. a good time to move plants and feed the soil.'; if (phase < 18.5) return 'the moon is full. plant root crops: carrots, potatoes, beets, onions, garlic. the energy is pulling downward now. bulbs and perennials go in well under a full moon.'; if (phase < 22.1) return 'the moon is waning. harvest what is ready, cut herbs for drying, prune what needs shaping. the energy is drawing inward. what you cut now heals faster.'; if (phase < 25.8) return 'the moon is in its last quarter. pull weeds, turn compost, cultivate the soil. this is a killing time, good for destroying what you do not want. the weeds will not come back as fast.'; return 'the moon is a thin crescent, almost gone. do not plant. rest, clean tools, plan the next cycle. the old almanacs left these days blank on purpose.'; } // --- markdown parsing --- // just enough to render what we write. no libraries. function parseFrontmatter(text) { var match = text.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
@@ -445,12 +471,12 @@ // --- word reveal --- function revealWords(root) { var elements = root.querySelectorAll('h2, p, li'); var allItems = []; // mixed: word spans and whole li elements if (!root) return; var elements = root.querySelectorAll('h2, p, li, blockquote, cite, .moon-glyph'); var allItems = []; elements.forEach(function (el) { if (el.tagName === 'LI') { // list items fade in as a whole unit, bullet and all if (el.tagName === 'LI' || el.tagName === 'BLOCKQUOTE' || el.tagName === 'CITE' || el.classList.contains('moon-glyph')) { allItems.push(el); return; }
@@ -488,17 +514,21 @@ // --- main --- var currentSeason = null; var currentTimeOverride = null; var cachedManifest = null; var naturalSeason = null; var naturalTime = null; function loadContent(seasonOverride) { function loadContent(seasonOverride, timeOverride) { var now = new Date(); var season = seasonOverride || getSeason(now); var time = getTimeOfDay(now); var realTime = getTimeOfDay(now); var contentTime = timeOverride || realTime; currentSeason = season; currentTimeOverride = timeOverride; // daylight cycle follows the clock, tinted by season applyDaylightCycle(time, season); // daylight cycle follows the real clock, not the content override applyDaylightCycle(realTime, season); // date line document.querySelector('.date-line').textContent = writtenDate(now);
@@ -509,8 +539,8 @@ // haiku var haiku = getHaiku(season); var haikuBlock = document.querySelector('.haiku blockquote'); var haikuCite = document.querySelector('.haiku cite'); var haikuBlock = document.querySelector('.hero-haiku blockquote'); var haikuCite = document.querySelector('.hero-haiku cite'); if (haiku) { var haikuLines = haiku.lines[0].split('\n'); haikuBlock.innerHTML = haikuLines.map(function (l) {
@@ -519,13 +549,21 @@ haikuCite.textContent = ''; } // moon glyph — large, standalone var phase = moonPhase(now); document.querySelector('.moon-glyph').textContent = moonGlyph(phase); // moon gardening tip document.querySelector('.moon-garden-tip').textContent = moonGardenTip(phase); // weather mood var moodP = document.querySelector('.weather-mood p'); moodP.textContent = getWeatherMood(season, time); document.querySelector('.weather-mood-text').textContent = getWeatherMood(season, contentTime); // sky data document.querySelector('.sky-data').innerHTML = skyText(now, contentTime).replace(/\n/g, '<br>'); // sky always shows real data var skyP = document.querySelector('.sky p'); skyP.innerHTML = skyText(now, time).replace(/\n/g, '<br>'); // glossary note document.querySelector('.glossary-note').textContent = 'what the ' + contentTime + ' brings'; // footer countdown var next = daysUntilNextSeason(now);
@@ -533,7 +571,7 @@ next.days + ' days until ' + next.label + ' \u00b7 zone 7a \u00b7 north carolina'; // crossfade: fade out content areas, then rebuild var fadeTargets = ['.season', '.haiku', '.weather-mood', '.sky', '.almanac', 'footer']; var fadeTargets = ['.hero-grid', '.hero-lower', '.wisdom', '.glossary-entries', 'footer']; fadeTargets.forEach(function (sel) { var el = document.querySelector(sel); if (el) el.style.opacity = '0';
@@ -547,10 +585,17 @@ p.then(function (manifest) { cachedManifest = manifest; var allowedPrefixes = TIME_CONTENT[contentTime] || []; var relevant = manifest.filter(function (entry) { // wisdom entries: filter by time if (entry.time) return entry.time === contentTime; // season entries: filter by season AND time-based category if (entry.season && entry.season !== season.name) return false; if (entry.time && entry.time !== time) return false; return true; for (var i = 0; i < allowedPrefixes.length; i++) { if (entry.path.indexOf(allowedPrefixes[i]) === 0) return true; } return false; }); return Promise.all(relevant.map(function (entry) {
@@ -560,7 +605,9 @@ })); }) .then(function (entries) { var almanac = document.querySelector('.almanac'); var wisdom = document.querySelector('.wisdom'); var almanac = document.querySelector('.glossary-entries'); wisdom.innerHTML = ''; almanac.innerHTML = ''; entries.forEach(function (entry) {
@@ -575,7 +622,21 @@ content.innerHTML = renderMarkdown(entry.body); div.appendChild(content); almanac.appendChild(div); var hasLists = content.querySelector('ul'); var hasParagraphs = content.querySelector('p'); if (hasLists && hasParagraphs) { div.setAttribute('data-content-type', 'mixed'); } else if (hasParagraphs && !hasLists) { div.setAttribute('data-content-type', 'prose'); } else { div.setAttribute('data-content-type', 'list'); } if (entry.meta.time) { wisdom.appendChild(div); } else { almanac.appendChild(div); } }); // fade in and reveal
@@ -584,16 +645,13 @@ if (el) el.style.opacity = '1'; }); revealWords(document.querySelector('header')); revealWords(document.querySelector('.season')); revealWords(document.querySelector('.haiku')); revealWords(document.querySelector('.weather-mood')); revealWords(document.querySelector('.sky')); revealWords(document.querySelector('.almanac')); revealWords(document.querySelector('.hero')); revealWords(document.querySelector('.glossary')); revealWords(document.querySelector('footer')); // update nav // update navs updateNav(season); updateTimeNav(contentTime); }); }
@@ -622,7 +680,7 @@ delay += 80; a.addEventListener('click', function () { window.scrollTo({ top: 0, behavior: 'smooth' }); loadContent(s); loadContent(s, currentTimeOverride); }); nav.appendChild(a); });
@@ -634,7 +692,39 @@ ret.style.animationDelay = delay + 'ms'; ret.addEventListener('click', function () { window.scrollTo({ top: 0, behavior: 'smooth' }); loadContent(null); loadContent(null, currentTimeOverride); }); nav.appendChild(ret); } } function updateTimeNav(activeTime) { var nav = document.querySelector('.times-nav'); if (!nav) return; nav.innerHTML = ''; var delay = 0; TIME_LABELS.forEach(function (t) { var a = document.createElement('a'); a.textContent = t; if (t === activeTime) { a.className = 'active'; } a.style.animationDelay = delay + 'ms'; delay += 80; a.addEventListener('click', function () { loadContent(currentSeason === naturalSeason ? null : currentSeason, t); }); nav.appendChild(a); }); if (currentTimeOverride && currentTimeOverride !== naturalTime) { var ret = document.createElement('a'); ret.textContent = 'return to now'; ret.className = 'return-now'; ret.style.animationDelay = delay + 'ms'; ret.addEventListener('click', function () { loadContent(currentSeason === naturalSeason ? null : currentSeason, null); }); nav.appendChild(ret); }
@@ -643,6 +733,7 @@ // initial render var now = new Date(); naturalSeason = getSeason(now); naturalTime = getTimeOfDay(now); loadContent(null);})();
added
site/data/chores/early-fall.md
@@ -0,0 +1,14 @@---season: early-fallsection: the work this season asks for---- plant garlic, four to six weeks before the ground freezes. the most important thing you do this season.- seed cover crops in empty beds. crimson clover, winter rye. they hold the soil.- clean up dead and diseased plant material. do not compost anything that was sick.- dig and cure sweet potatoes before frost. let them sit in a warm place for two weeks.- bring in tender herbs. pot up rosemary and basil if you want them through winter.- clean, oil, and store tools you will not use again until spring.- put up what the garden gave you. can, freeze, dry, ferment. do not let it go to waste.fall is the season of closing. do it well and spring will be easier. do it poorly and you will spend march catching up.
added
site/data/chores/early-spring.md
@@ -0,0 +1,14 @@---season: early-springsection: the work this season asks for---- sharpen your tools now, before you need them. a dull hoe is punishment.- clean and oil the pruners. cut back dead wood from last year's perennials.- turn the compost pile. it has been sitting all winter and needs air.- test your soil if you have not in two years. lime takes months to work.- repair raised beds, trellises, and anything the frost heaved or the wind took.- start hardening off seedlings. a few hours outside each day, a little more each time.- pull early weeds while they are small. they are easier to kill than to forgive later.early spring work is preparation. the season is not asking you to rush. it is asking you to be ready.
added
site/data/chores/early-summer.md
@@ -0,0 +1,14 @@---season: early-summersection: the work this season asks for---- water deeply and less often. shallow watering makes shallow roots.- harvest daily once things start coming in. a zucchini doubles in size overnight.- pinch suckers on tomato plants to focus energy on fruit, not leaves.- watch for pests early. one hornworm is a problem. ten is a disaster.- keep up with mulch. the heat breaks it down and the weeds do not rest.- succession plant beans and lettuce every two weeks for continuous harvest.- clean and sharpen the mower blade. dull cuts stress the grass and invite disease.early summer work is maintenance. the garden is running now and your job is to keep up with it.
added
site/data/chores/late-fall.md
@@ -0,0 +1,14 @@---season: late-fallsection: the work this season asks for---- spread leaves or straw over garlic beds. three to four inches. tuck them in.- drain and store hoses before a hard freeze splits them.- clean out cold frames and greenhouses. wash the glass so winter light gets through.- sharpen and oil every blade you own. hang them where they belong.- stack firewood under cover if you have not already. dry wood burns clean.- test soil now so results come back before spring planning starts.- rake leaves into beds or compost. they are not waste, they are next year's soil.late fall work is putting things away properly. the way you close the season is the way you open the next one.
added
site/data/chores/late-spring.md
@@ -0,0 +1,14 @@---season: late-springsection: the work this season asks for---- mulch everything. two to three inches of straw or leaves. it holds moisture and stops weeds.- set up trellises and stakes for tomatoes, beans, cucumbers before they need them.- thin seedlings. it feels cruel but crowded plants produce nothing.- weed weekly. if you stay on top of it now, summer is easier.- check irrigation lines or soaker hoses. fix leaks before the dry heat arrives.- side-dress heavy feeders with compost. tomatoes and squash are hungry.- mow paths between beds to keep things walkable and tidy.late spring is the busiest time. everything needs doing at once. work in the morning. rest in the heat. go back out in the evening.
added
site/data/chores/midsummer.md
@@ -0,0 +1,14 @@---season: midsummersection: the work this season asks for---- water in the morning, before the sun is high. evening watering invites fungus.- harvest everything on time. overripe vegetables tell the plant to stop producing.- pull spent crops and plant fall seeds in their place. bush beans, beets, carrots.- stake and tie anything that is leaning. the weight of fruit will snap a stem.- check the compost and turn it. midsummer heat makes it cook fast.- order garlic for fall planting now. the good varieties sell out early.- take notes on what worked and what failed. your memory will lie to you by winter.midsummer work is relentless but honest. the garden is giving you everything it has. meet it halfway.
added
site/data/chores/winter.md
@@ -0,0 +1,14 @@---season: wintersection: the work this season asks for---- read the seed catalogs. plan next year's garden on paper before you plan it in dirt.- inventory stored seeds. most last two to three years if kept cool and dry.- maintain tools. replace handles, tighten bolts, sharpen edges. winter is for repair.- prune fruit trees and dormant hardwoods on dry days. clean cuts, sharp saw.- start onion and leek seeds indoors under lights, eight to ten weeks before last frost.- check stored produce. one rotting potato ruins the box. sort through everything monthly.- fix fences, gates, raised beds. frozen ground makes it harder but the time is there.winter work is slow and inside. planning, mending, sharpening. the garden is resting but you should not be idle. quiet work is still work.
added
site/data/foraging/early-fall.md
@@ -0,0 +1,13 @@---season: early-fallsection: what the land is offering---- pawpaws, the largest native fruit, custard-soft and tropical. find them along creeks.- persimmons, but only after frost or they will turn your mouth inside out.- hickory nuts and black walnuts falling now. gather before the squirrels.- hen of the woods mushrooms at the base of oaks. unmistakable and choice.- spicebush berries, bright red, drying well for a spice like allspice.- goldenrod flowers, despite what people think they do not cause allergies. dry for tea.fall foraging is nuts and fruits and mushrooms. the woods are giving away everything before the cold. walk with a bag in your pocket.
added
site/data/foraging/early-spring.md
@@ -0,0 +1,13 @@---season: early-springsection: what the land is offering---- chickweed, growing low and thick in damp spots. eat it raw or wilt it like spinach.- henbit and purple dead-nettle, two of the first flowers. both edible, mild and green.- dandelion greens, before the flowers open. bitter and good for you.- wild onions and ramps, if you know where they grow. take only what you need.- cleavers, the sticky sprawling weed. steep fresh as a spring tonic tea.- violets, leaves and flowers both. the flowers candy well with sugar.early spring foraging is mostly greens. the land is generous before the heat comes, offering what the body needs after a long winter of stored food.
added
site/data/foraging/early-summer.md
@@ -0,0 +1,13 @@---season: early-summersection: what the land is offering---- black raspberries, ripening in thickets and fencerows. they do not wait.- elderflowers are still available early on. make cordial or dry for winter tea.- lamb's quarters, a weed that tastes better than spinach. grows everywhere.- purslane, low and succulent in garden beds. more omega-3s than any other green.- bee balm flowers, red and wild. steep for a tea that tastes like oregano and thyme.- sassafras leaves, young and bright green. dry and grind for file powder.summer foraging shifts from greens to fruits. the heat pushes everything toward ripeness at once. go out in the morning before it gets unbearable.
added
site/data/foraging/late-fall.md
@@ -0,0 +1,13 @@---season: late-fallsection: what the land is offering---- rose hips, bright red on bare canes. more vitamin c than oranges. dry for tea.- late persimmons, fully soft now and sweet as candy after hard frost.- turkey tail mushrooms on fallen logs. not for eating but for a medicinal broth.- dried seedheads of evening primrose. the roots are edible, peppery when cooked.- pine needles, fresh growth if you can find it. steep for a sharp vitamin c tea.- black walnuts still on the ground if you missed them. hull and cure them.the land is closing down but not empty. late fall foraging is about knowing what lasts and what the cold has made sweeter.
added
site/data/foraging/late-spring.md
@@ -0,0 +1,13 @@---season: late-springsection: what the land is offering---- elderflowers, the creamy flat clusters. dry them for tea or steep in vinegar.- mulberries start ripening on the trees nobody planted. look up.- wild strawberries, tiny and impossibly sweet, in sunny edges and old fields.- plantain leaf, the broad one in every yard. a poultice for stings and cuts.- red clover blossoms, just opening. dry for tea or eat fresh.- black raspberry canes are flowering now. mark where they are for june.the woods and edges are full. walk slowly and look at what grows where nobody tends it. that is what belongs here.
added
site/data/foraging/midsummer.md
@@ -0,0 +1,13 @@---season: midsummersection: what the land is offering---- blackberries, everywhere, ripening in waves through july and august.- wild plums, small and tart, good for jam and nothing else.- chanterelle mushrooms after summer rains, golden in the hardwood leaf litter.- jewelweed, the orange-flowered plant near creeks. crush the stem for poison ivy relief.- passionflower vine, blooming wild. the flower makes a calming tea.- sumac berries, the red fuzzy clusters. steep in cold water for a drink like pink lemonade.midsummer foraging is abundance and sweat. bring a bucket and water. the blackberries alone will keep you busy for weeks.
added
site/data/foraging/winter.md
@@ -0,0 +1,13 @@---season: wintersection: what the land is offering---- pine needle tea, from white pine or other soft pines. sharp and bright and full of vitamin c.- birch twigs, snapped and steeped. wintergreen flavor from the young branches.- dried rose hips if you stored them. brew with honey for cold nights.- oyster mushrooms on dead hardwoods after a warm spell. they fruit in the cold.- chickweed, still growing low in sheltered spots even now.- witch hazel bark, harvested carefully. steep for a skin wash.winter foraging is quiet work. the land is not dead, just still. there is always something if you know where to look and what to ask for.
modified
site/data/manifest.json
@@ -21,6 +21,34 @@ { "path": "bugs/early-fall.md", "season": "early-fall" }, { "path": "bugs/late-fall.md", "season": "late-fall" }, { "path": "bugs/winter.md", "season": "winter" }, { "path": "sky/early-spring.md", "season": "early-spring" }, { "path": "sky/late-spring.md", "season": "late-spring" }, { "path": "sky/early-summer.md", "season": "early-summer" }, { "path": "sky/midsummer.md", "season": "midsummer" }, { "path": "sky/early-fall.md", "season": "early-fall" }, { "path": "sky/late-fall.md", "season": "late-fall" }, { "path": "sky/winter.md", "season": "winter" }, { "path": "foraging/early-spring.md", "season": "early-spring" }, { "path": "foraging/late-spring.md", "season": "late-spring" }, { "path": "foraging/early-summer.md", "season": "early-summer" }, { "path": "foraging/midsummer.md", "season": "midsummer" }, { "path": "foraging/early-fall.md", "season": "early-fall" }, { "path": "foraging/late-fall.md", "season": "late-fall" }, { "path": "foraging/winter.md", "season": "winter" }, { "path": "remedies/early-spring.md", "season": "early-spring" }, { "path": "remedies/late-spring.md", "season": "late-spring" }, { "path": "remedies/early-summer.md", "season": "early-summer" }, { "path": "remedies/midsummer.md", "season": "midsummer" }, { "path": "remedies/early-fall.md", "season": "early-fall" }, { "path": "remedies/late-fall.md", "season": "late-fall" }, { "path": "remedies/winter.md", "season": "winter" }, { "path": "chores/early-spring.md", "season": "early-spring" }, { "path": "chores/late-spring.md", "season": "late-spring" }, { "path": "chores/early-summer.md", "season": "early-summer" }, { "path": "chores/midsummer.md", "season": "midsummer" }, { "path": "chores/early-fall.md", "season": "early-fall" }, { "path": "chores/late-fall.md", "season": "late-fall" }, { "path": "chores/winter.md", "season": "winter" }, { "path": "names/early-spring.md", "season": "early-spring" }, { "path": "names/late-spring.md", "season": "late-spring" }, { "path": "names/early-summer.md", "season": "early-summer" },
added
site/data/remedies/early-fall.md
@@ -0,0 +1,13 @@---season: early-fallsection: teas and remedies---- elderberry syrup, made now from ripe berries. the best thing you can put up for winter colds.- goldenrod tea, dried flowers. anti-inflammatory, good for the sinuses as the air dries out.- sage tea with honey, for sore throats and the first coughs of the season.- rosemary tea, strong and warm. improves circulation as the cold starts settling in.- a chest salve: beeswax, olive oil, eucalyptus, peppermint. melt and pour into tins for winter.- spicebush berry tea, dried and crushed. warming, like allspice in a cup.fall remedies are about preparation. dry what you can now. make the syrups and salves. winter does not wait for you to be ready.
added
site/data/remedies/early-spring.md
@@ -0,0 +1,13 @@---season: early-springsection: teas and remedies---- dandelion root tea, roasted and brewed dark. a liver tonic after the heavy food of winter.- violet leaf tea, mild and green. good for coughs that linger from the cold months.- nettle tea, if you can find young nettles. iron-rich, good for the blood. wear gloves picking.- a simple fire cider: apple cider vinegar, horseradish, garlic, onion, ginger, honey. steep for weeks. take a spoonful when you feel a cold coming.- cleavers steeped fresh in cool water overnight. the old herbalists called it a spring cleanser.- lemon balm tea from whatever survived the winter. calming, gentle on the stomach.spring remedies are about waking up. the body has been indoors too long. bitter greens and sharp roots shake the dust off.
added
site/data/remedies/early-summer.md
@@ -0,0 +1,13 @@---season: early-summersection: teas and remedies---- peppermint and spearmint iced tea. brew strong, cool, pour over ice. the heat demands it.- bee balm tea, from the red flowers. antiseptic, good for sore throats. the taste is wild thyme.- lavender tea, a few flower heads steeped. eases headaches and the tension the heat brings.- aloe vera gel, straight from the plant, for sunburn. keep a pot by the door.- basil tea, surprisingly good. anti-inflammatory and cooling despite the warm flavor.- a shrub: fruit vinegar with honey and cold water. raspberry or blackberry. the old way to stay cool.summer remedies are about staying cool, staying hydrated, and treating the small injuries the garden gives you. sunburn, bug bites, sore muscles.
added
site/data/remedies/late-fall.md
@@ -0,0 +1,13 @@---season: late-fallsection: teas and remedies---- ginger tea, fresh root sliced thin and simmered. warms from the inside for the raw damp cold.- rose hip tea from dried hips. vitamin c for the season when everyone gets sick.- thyme tea with honey for coughs. thyme is a natural antiseptic for the lungs.- a fire cider batch started now will be ready by deep winter. start steeping.- pine needle tea, sharp and bright. the easiest vitamin c source when nothing else is green.- bone broth, slow-simmered. not a tea but a remedy all the same. the warmth matters as much as the minerals.late fall remedies are about warmth and immunity. the cold is here. keep the kettle on and the broth pot simmering.
added
site/data/remedies/late-spring.md
@@ -0,0 +1,13 @@---season: late-springsection: teas and remedies---- chamomile tea from the first flowers. calming, good before sleep, gentle enough for children.- red clover blossom tea, slightly sweet. traditionally used for skin and respiratory health.- elderflower tea, steeped fresh or dried. cooling, good for early seasonal sniffles.- plantain leaf poultice for bee stings and bug bites. chew or crush and press to the skin.- peppermint tea, the plant is taking over the garden by now. settles the stomach, clears the head.- oat straw tea from young green oats. a gentle nerve tonic for when the season feels too fast.late spring remedies lean toward calming and cooling. everything is growing and so is the urge to overdo it. slow down.
added
site/data/remedies/midsummer.md
@@ -0,0 +1,13 @@---season: midsummersection: teas and remedies---- passionflower tea from wild vines. deeply calming. good for the restless nights the heat brings.- calendula flowers, steeped in oil for weeks. makes a healing salve for cracked hands and dry skin.- jewelweed stem, crushed fresh, for poison ivy. it often grows right next to it.- hibiscus iced tea, tart and red and full of vitamin c. brew a whole jar and keep it cold.- yarrow tea for fevers. it makes you sweat, which is the point.- a simple electrolyte: water, honey, salt, lemon juice. better than anything in a bottle.midsummer medicine is first aid. the garden and the woods are handing out scratches, bites, heat, and rashes. have your remedies ready.
added
site/data/remedies/winter.md
@@ -0,0 +1,13 @@---season: wintersection: teas and remedies---- elderberry syrup, a spoonful daily if you made it in the fall. the best cold prevention there is.- ginger and turmeric tea, simmered with black pepper and honey. anti-inflammatory and warming.- mullein leaf tea for chest congestion. steep the fuzzy leaves and strain well through cloth.- a garlic and honey oxymel: crushed garlic in honey and vinegar. take at the first sign of a cold.- pine needle tea, always available. the trees do not stop giving.- chamomile and valerian root tea before bed. winter sleep should be deep and long.winter remedies are simple. warmth, rest, broth, tea. the old knowledge was never complicated. it was just paying attention to what the body asks for when the light is short.
added
site/data/sky/early-fall.md
@@ -0,0 +1,13 @@---season: early-fallsection: what the stars are showing---- the summer triangle is still high but sliding west now- pegasus the great square rises in the east, four stars marking an empty box of sky- andromeda stretches from pegasus, and the andromeda galaxy hides in her, a smudge of light two million years old- fomalhaut appears low in the south, a lonely bright star with nothing near it- cassiopeia the queen climbs higher in the northeast, her W shape easy to find- the milky way still crosses overhead but will fade as autumn deepensfomalhaut was one of the four royal stars of ancient persia, marking the sky's seasons. they called it the "solitary one." it appears when the harvest comes.
added
site/data/sky/early-spring.md
@@ -0,0 +1,13 @@---season: early-springsection: what the stars are showing---- orion is sinking west, his last weeks of the year. watch him go.- leo the lion climbs high, the bright star regulus at his heart- the big dipper stands nearly upright, its handle pointing down- arcturus rises in the east, orange and steady, a sign the warm is coming- gemini and the twins castor and pollux still hold the south sky- the winter triangle (betelgeuse, sirius, procyon) fades lower each nightthe old farmers watched orion leave and knew the planting was close. when he disappears below the western horizon, the frost is nearly done.
added
site/data/sky/early-summer.md
@@ -0,0 +1,13 @@---season: early-summersection: what the stars are showing---- the summer triangle is rising in the east: vega, deneb, and altair- vega in lyra appears first, blue-white and unmistakable- scorpius crawls along the southern horizon, antares glowing red at his heart- arcturus is nearly overhead, the king of the summer zenith- the big dipper begins to tip westward, pouring out the long days- corona borealis, the northern crown, a small perfect arc of stars near arcturusantares means "rival of mars" because of its red color. the old greeks saw it and thought of war. the old farmers saw it and thought of heat.
added
site/data/sky/late-fall.md
@@ -0,0 +1,13 @@---season: late-fallsection: what the stars are showing---- the great square of pegasus is high in the south, the signature of autumn- the pleiades return in the east, a tiny cluster like a handful of sparks- taurus the bull follows, aldebaran glowing orange at his eye- cassiopeia is nearly overhead, her W bright against the dark- the summer triangle sets earlier each night, the warm sky leaving- orion begins to rise late in the east, the hunter returning for winterthe pleiades were the most watched stars in the ancient world. their return to the evening sky meant the growing season was over. time to bring everything in and close the ground.
added
site/data/sky/late-spring.md
@@ -0,0 +1,13 @@---season: late-springsection: what the stars are showing---- leo rules the high sky, regulus burning blue-white at his chest- virgo follows behind with spica, a pale blue star low in the southeast- the big dipper is overhead now, nearly upside down- follow the dipper's handle to arc to arcturus, the brightest star in the north sky- bootes the herdsman stands tall, shaped like a kite, arcturus at his base- corvus the crow, four stars in a small square, sits low in the southin the old almanacs, when arcturus stood high and orion was gone, it meant the soil was truly warm. plant anything now.
added
site/data/sky/midsummer.md
@@ -0,0 +1,13 @@---season: midsummersection: what the stars are showing---- the summer triangle dominates: vega, deneb, altair, high and bright- the milky way runs through it, visible on clear dark nights away from town- scorpius is at his highest, the curved tail sweeping low in the south- sagittarius follows scorpius, his teapot shape pointing toward the center of the galaxy- cygnus the swan flies down the milky way, deneb at his tail- the perseid meteors begin in late july, peaking in august, bits of comet swift-tuttlethe milky way was called the "backbone of night" by some old cultures. in midsummer it arches overhead like a bridge from horizon to horizon. go somewhere dark and look up.
added
site/data/sky/winter.md
@@ -0,0 +1,13 @@---season: wintersection: what the stars are showing---- orion stands tall in the south, the brightest constellation of the year- betelgeuse at his shoulder glows red, rigel at his knee burns blue-white- sirius the dog star follows orion, the brightest star in the entire sky- the winter triangle: betelgeuse, sirius, procyon, three stars from three constellations- the pleiades are high overhead, seven sisters in a tight knot of light- gemini the twins stand east of orion, castor and pollux side by sidethe old name for sirius was "the scorcher." the romans believed it added its heat to the sun in summer. in winter it is just cold light, the most brilliant thing in a dark sky. the clearest nights are the coldest ones.
@@ -35,36 +35,58 @@ <div id="time-layer"></div> <main> <header> <div class="title-row"> <article class="hero"> <p class="date-line"></p> <header class="hero-header"> <h1>dark furrow</h1> <p class="subtitle">old knowledge preserved</p> </header> <div class="hero-grid"> <div class="hero-cell hero-date"> <p class="season-name"></p> <p class="season-note"></p> </div> <div class="hero-cell hero-moon"> <span class="moon-glyph"></span> <p class="moon-garden-tip"></p> </div> <div class="hero-cell hero-haiku"> <blockquote></blockquote> <cite></cite> </div> </div> <p class="date-line"></p> <nav class="seasons-nav"></nav> </header> <section class="haiku"> <blockquote></blockquote> <cite></cite> </section> <div class="hero-lower"> <div class="hero-cell hero-sky"> <h2>what the sky is doing</h2> <p class="sky-data"></p> </div> <section class="season"> <p class="season-name"></p> <p class="season-note"></p> </section> <div class="hero-cell hero-mood"> <h2>the air today</h2> <p class="weather-mood-text"></p> </div> </div> <section class="weather-mood"> <h2>the air today</h2> <p></p> </section> <section class="wisdom"></section> <section class="sky"> <h2>what the sky is doing</h2> <p></p> </section> <nav class="seasons-nav"></nav> <div class="scroll-cue" aria-hidden="true"></div> </article> <section class="glossary"> <header class="glossary-header"> <p class="glossary-note"></p> </header> <section class="almanac"></section> <nav class="times-nav"></nav> <div class="glossary-entries almanac"></div> </section> <footer> <p>zone 7a · north carolina · tended by hand</p>
@@ -12,6 +12,11 @@ --under1: rgba(26,23,20,0.7); --under2: rgba(42,36,32,0.5); --under3: rgba(26,23,20,0.4); --type-hero-title: clamp(3.2rem, 5vw + 1rem, 5rem); --type-hero-season: clamp(2.2rem, 3vw + 0.8rem, 3.2rem); --type-hero-body: clamp(0.95rem, 0.8vw + 0.6rem, 1.05rem); --type-hero-label: 0.85rem;}* {
@@ -34,206 +39,403 @@ body {}main { max-width: 34rem; position: relative;}/* ===== HERO ===== */.hero { min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; justify-content: center; padding: 4rem 3rem 3rem; position: relative; max-width: 72rem; margin: 0 auto; padding: 4rem 1.5rem 6rem;}header { margin-bottom: 4rem; border-bottom: none; padding-bottom: 2rem;.hero-header { margin-bottom: 2.5rem;}.title-row { display: flex; align-items: baseline; gap: 1rem; flex-wrap: wrap;.hero-header::after { content: ''; display: block; width: 4rem; height: 1px; background: var(--bark); margin-top: 2rem; opacity: 0.6;}h1 { font-size: 2.4rem;.hero-header h1 { font-size: var(--type-hero-title); font-weight: 400; letter-spacing: 0.04em; letter-spacing: 0.03em; color: var(--parchment); line-height: 1.1; text-shadow: 0 -2px 40px var(--glow);}.subtitle { font-style: italic; color: var(--ash); font-size: 0.9rem; font-size: 1rem; margin-top: 0.4rem; animation: breathe 8s ease-in-out infinite;}/* --- hero grid --- */.hero-grid { display: grid; grid-template-columns: 1.2fr 1fr 1fr; gap: 2rem 3rem; align-items: start; margin-top: 2rem;}.hero-lower { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem 4rem; align-items: start; margin-top: 2.5rem;}.hero-cell { transition: opacity 0.4s ease;}/* --- hero elements --- */.date-line { color: var(--ash); font-size: 0.8rem; font-size: 0.88rem; font-style: italic; letter-spacing: 0.03em; margin-top: 0.6rem; margin-bottom: 0.2rem;}.season { margin-bottom: 3rem; padding: 1.5rem 0; border-bottom: none; transition: opacity 0.4s ease; margin-bottom: 1.5rem; opacity: 0.8;}.season-name { font-size: 1.3rem; font-weight: 500; font-size: var(--type-hero-season); font-weight: 400; color: var(--sprout); margin-bottom: 0.8rem; letter-spacing: 0.03em; letter-spacing: 0.02em; line-height: 1.2; animation: sway 6s ease-in-out infinite; transform-origin: left center; transition: color 2s ease;}.moon-glyph { display: block; font-size: 1.1rem; font-style: italic; line-height: 1.4; margin-bottom: 1rem; color: var(--bone);}.moon-garden-tip { color: var(--ash); font-style: italic; font-size: 0.9rem; line-height: 1.8;}.hero-sky h2,.hero-mood h2 { font-size: var(--type-hero-label); font-weight: 400; color: var(--ember); letter-spacing: 0.02em; margin-bottom: 0.6rem; transition: color 2s ease;}.sky-data { color: var(--bone); font-size: var(--type-hero-body); line-height: 1.9;}.weather-mood-text { color: var(--ash); font-style: italic; font-size: var(--type-hero-body); line-height: 1.9;}.season-note { color: var(--ash); font-style: italic; font-size: 0.95rem; font-size: 0.92rem; line-height: 1.8; margin-top: 0.8rem;}.haiku { margin-bottom: 3rem; padding: 0.8rem 0;/* --- haiku --- */.hero-haiku { display: flex; flex-direction: column; align-items: center; transition: opacity 0.4s ease; justify-content: center; padding-top: 1rem;}.haiku blockquote {.hero-haiku blockquote { color: var(--ash); font-style: italic; font-size: 0.82rem; line-height: 1.8; font-size: 1.1rem; line-height: 2; letter-spacing: 0.02em; opacity: 0; animation: word-in 0.3s ease-out forwards;}.haiku .haiku-line {.hero-haiku .haiku-line { display: block; white-space: nowrap;}.haiku .haiku-line:nth-child(2) { padding-left: 1rem;.hero-haiku .haiku-line:nth-child(2) { padding-left: 1.2rem;}.haiku .haiku-line:nth-child(3) { padding-left: 2rem;.hero-haiku .haiku-line:nth-child(3) { padding-left: 2.4rem;}.haiku cite {.hero-haiku cite { display: block; margin-top: 0.4rem; margin-top: 0.5rem; color: var(--bark); font-size: 0.72rem; font-style: normal; letter-spacing: 0.04em;}.weather-mood { margin-bottom: 3rem; padding: 1.2rem 0; border-bottom: none;/* --- wisdom (time-based, in hero) --- */.wisdom { margin-top: 2.5rem; transition: opacity 0.4s ease;}.weather-mood h2 { font-size: 1.1rem; font-weight: 500;.wisdom .entry h2 { font-size: var(--type-hero-label); font-weight: 400; color: var(--ember); margin-bottom: 0.8rem; letter-spacing: 0.02em; margin-bottom: 0.6rem; transition: color 2s ease;}.weather-mood p {.wisdom .entry p,.wisdom .entry div { color: var(--bone); font-size: var(--type-hero-body); line-height: 1.9;}/* --- seasons nav --- */.seasons-nav { display: flex; flex-wrap: wrap; gap: 0.2rem 0.5rem; margin-top: 2.5rem;}.seasons-nav a { color: var(--ash); text-decoration: none; font-size: 0.8rem; font-style: italic; font-size: 0.95rem; line-height: 1.9; letter-spacing: 0.02em; padding: 0.15rem 0; transition: color 0.6s ease; cursor: pointer; opacity: 0; animation: word-in 0.4s ease-out forwards;}.sky { margin-bottom: 3rem; padding-bottom: 1.5rem; border-bottom: none; transition: opacity 0.4s ease;.seasons-nav a:hover { color: var(--bone);}.sky h2 { font-size: 1.1rem; font-weight: 500;.seasons-nav a.active { color: var(--sprout);}.seasons-nav a.return-now { color: var(--ember); margin-bottom: 0.8rem; flex-basis: 100%;}.seasons-nav a::after { content: '\00b7'; color: var(--ash); margin-left: 0.4rem; opacity: 0.5;}.seasons-nav a:last-child::after { content: '';}/* --- scroll cue --- */.scroll-cue { position: absolute; bottom: 2rem; left: 50%; transform: translateX(-50%); width: 1px; height: 2.5rem; background: linear-gradient(to bottom, var(--ash), transparent); animation: drift 3s ease-in-out infinite;}/* ===== GLOSSARY ===== */.glossary { position: relative; z-index: 10000; background: var(--earth); margin: 0 auto; padding: 8rem 2rem 6rem; transition: background-color 2s ease;}.glossary-header { max-width: 56rem; margin: 0 auto 2rem; text-align: center; padding-bottom: 2rem; border-bottom: 1px solid var(--bark);}.glossary-note { color: var(--ash); font-style: italic; font-size: 1.1rem; letter-spacing: 0.02em; transition: color 2s ease;}.sky p {/* --- time-of-day nav --- */.times-nav { max-width: 40rem; margin: 0 auto 4rem; display: flex; flex-wrap: wrap; justify-content: center; gap: 0.2rem 0.5rem;}.times-nav a { color: var(--ash); text-decoration: none; font-size: 0.85rem; font-style: italic; letter-spacing: 0.02em; padding: 0.15rem 0.3rem; transition: color 0.6s ease; cursor: pointer; opacity: 0; animation: word-in 0.4s ease-out forwards;}.times-nav a:hover { color: var(--bone); font-size: 0.95rem; line-height: 1.9;}.almanac { display: flex; flex-direction: column; gap: 2.8rem; transition: opacity 0.4s ease;.times-nav a.active { color: var(--sprout);}.almanac .entry + .entry::before { content: '*'; display: block;.times-nav a.return-now { color: var(--ember); flex-basis: 100%; text-align: center; color: var(--bark); font-size: 0.9rem; letter-spacing: 0.5em; margin-bottom: 2.8rem; opacity: 0; animation: word-in 0.3s ease-out forwards; margin-top: 0.3rem;}.entry h2 { font-size: 1.1rem; font-weight: 500;.times-nav a::after { content: '\00b7'; color: var(--ash); margin-left: 0.4rem; opacity: 0.5;}.times-nav a:last-child::after,.times-nav a.return-now::after { content: '';}/* --- glossary entries --- */.glossary-entries { max-width: 40rem; margin: 0 auto; transition: opacity 0.4s ease;}.glossary-entries .entry { margin-bottom: 4rem;}.glossary-entries .entry h2 { font-size: 1.15rem; font-weight: 400; color: var(--ember); margin-bottom: 0.8rem; letter-spacing: 0.02em; margin-bottom: 1.5rem; transition: color 2s ease;}.entry p,.entry div {.glossary-entries .entry p,.glossary-entries .entry > div { color: var(--bone); font-size: 0.95rem; line-height: 1.9;}.entry ul {.glossary-entries .entry ul { list-style: none; padding: 0;}.entry ul li {.glossary-entries .entry ul li { color: var(--bone); font-size: 0.95rem; line-height: 1.9; line-height: 1.85; padding-left: 1.2rem; position: relative; opacity: 0; animation: word-in 0.3s ease-out forwards;}.entry ul li::before {.glossary-entries .entry ul li + li { margin-top: 0.4rem;}.glossary-entries .entry ul li::before { content: '\00b7'; position: absolute; left: 0;
@@ -243,72 +445,101 @@ h1 { transition: color 2s ease;}.entry ul li:nth-child(2n)::before { animation-delay: -1.3s; }.entry ul li:nth-child(3n)::before { animation-delay: -2.7s; }.entry ul li:nth-child(5n)::before { animation-delay: -0.6s; }.glossary-entries .entry ul li:nth-child(2n)::before { animation-delay: -1.3s; }.glossary-entries .entry ul li:nth-child(3n)::before { animation-delay: -2.7s; }.glossary-entries .entry ul li:nth-child(5n)::before { animation-delay: -0.6s; }.seasons-nav { display: flex; flex-wrap: wrap; gap: 0.2rem 0.6rem; margin-top: 1rem;.glossary-entries .entry p + p { margin-top: 0.6rem;}.seasons-nav a { color: var(--bark); text-decoration: none; font-size: 0.8rem; font-style: italic; letter-spacing: 0.02em; padding: 0.15rem 0; transition: color 0.6s ease; cursor: pointer; opacity: 0; animation: word-in 0.4s ease-out forwards;/* --- prose entries --- */.glossary-entries .entry[data-content-type="prose"] { text-align: center; padding: 2rem 0;}.seasons-nav a:hover {.glossary-entries .entry[data-content-type="prose"] p { font-style: italic; font-size: 1rem; line-height: 2.1; color: var(--ash);}.seasons-nav a.active { color: var(--sprout);/* --- mixed entries (list + closing prose) --- */.glossary-entries .entry[data-content-type="mixed"] > div > p { margin-top: 1.2rem; padding-top: 1rem; border-top: 1px solid rgba(42,36,32,0.3); font-style: italic; color: var(--ash); font-size: 0.92rem; line-height: 2;}.seasons-nav a.return-now { color: var(--ember);/* --- wisdom entry list items (in hero) --- */.wisdom .entry ul { list-style: none; padding: 0;}.seasons-nav a::after { content: ' \00b7'; color: var(--bark);.wisdom .entry ul li { color: var(--bone); font-size: var(--type-hero-body); line-height: 1.9; padding-left: 1.2rem; position: relative; opacity: 0; animation: word-in 0.3s ease-out forwards;}.seasons-nav a:last-child::after { content: '';.wisdom .entry ul li::before { content: '\00b7'; position: absolute; left: 0; color: var(--sprout); font-weight: 500; animation: rustle 4s ease-in-out infinite; transition: color 2s ease;}/* ===== FOOTER ===== */footer { margin-top: 2rem; padding-top: 2rem; border-top: none; transition: opacity 0.4s ease; position: relative; z-index: 10000; background: var(--earth); padding: 3rem 2rem 4rem; text-align: center; border-top: 1px solid var(--bark); transition: opacity 0.4s ease, background-color 2s ease;}footer p { color: var(--ash); font-size: 0.85rem; font-size: 0.82rem; font-style: italic; letter-spacing: 0.03em; letter-spacing: 0.04em;}/* ===== SHARED ===== */.word { opacity: 0; display: inline-block; animation: word-in 0.3s ease-out forwards;}/* daylight layer *//* ===== LAYERS ===== */#sky-layer { position: fixed;
@@ -326,7 +557,8 @@ footer p { top: 0; left: 0; right: 0; height: 120px; height: 100vh; height: 100dvh; pointer-events: none; z-index: 9999; transition: background 4s ease;
@@ -337,6 +569,9 @@ footer p { color: var(--parchment);}/* ===== ANIMATIONS ===== */@keyframes word-in { from { opacity: 0;
@@ -366,6 +601,11 @@ footer p { 75% { transform: translateX(1px) scale(1.1); opacity: 0.9; }}@keyframes drift { 0%, 100% { opacity: 0.3; transform: translateX(-50%) translateY(0); } 50% { opacity: 0.6; transform: translateX(-50%) translateY(6px); }}@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important;
@@ -373,16 +613,53 @@ footer p { }}/* ===== RESPONSIVE ===== */@media (max-width: 768px) { .hero { min-height: 110vh; min-height: 110dvh; padding: 3rem 1.5rem 3rem; } .hero-grid { grid-template-columns: 1fr; gap: 2rem 0; } .hero-haiku { padding-top: 0; } .hero-lower { grid-template-columns: 1fr; gap: 2rem 0; } .glossary-entries { max-width: 100%; }}@media (max-width: 480px) { html { font-size: 16px; } main { padding: 3rem 1.2rem 4rem; .hero { padding: 2.5rem 1.2rem 3rem; } .hero-header h1 { font-size: 3rem; } .glossary { padding: 5rem 1rem 5rem; } h1 { font-size: 2rem; footer { padding: 2rem 1.2rem 3rem; }}