diff --git a/about/index.md b/about/index.md
deleted file mode 100644
index 31dfcf9..0000000
--- a/about/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# About this space
-
-_This is a living archive for reigniting the spark within._
-
-Multiple voices are welcome here. Not a performance of awareness, but a practice of it.
-
-- Share what calls to you
-- Add notes, reflections, or small practices
-- Let contributions grow the whole garden gently
diff --git a/docs/index.md b/docs/index.md
index b9a666c..4b7f5c3 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -2,14 +2,23 @@
icon: lucide/leaf
comments: true
---
+# Tree of Ascension Docs
-# Tree of Ascension
+## Why Tree of Ascension
+
+The world can seem so chaotic that we feel we have no way to make an impact. But if we start with ourselves using time honoured [[docs/practices/index]] in our daily life and adopt [[docs/strategies/index]] to work together with other like hearted beings (physical or otherwise), we can certainly bring about peace and a lighter timeline, one day at a time.
+
+Many sprouts in this tree have action points hidden inside that you can adopt into your life if you feel resonant. Checking these items will help you feel the satisfaction of making progress. Here's a first one for free! Try checking the box below:
+
+- [ ] Read the introduction
+
+## How this site came about
A small group of us kept having the same kind of conversation. Late nights, voice notes, walls of text — sharing things that had actually moved the needle in our own lives. Practices that stuck. Realizations that rearranged something. Books and teachers and mistakes and breakthroughs.
At some point we thought: why keep this scattered across chat logs? Let's put it somewhere. Not as experts. Not as a finished thing. Just as what it is — notes from people climbing, passing the lantern back down the trail.
----
+***
## What we mean by ascension
@@ -19,7 +28,7 @@ It's learning to hold more light without burning out. It's noticing when you're
Some people call it awakening. Some call it remembering. The name doesn't matter much. What matters is that it's possible, it's happening to ordinary people everywhere, and nobody needs permission to begin.
----
+***
## Consciousness isn't abstract
@@ -27,14 +36,14 @@ You can feel it. When your mind goes quiet and there's still someone there — a
Practices — meditation, grounding, fasting, silence, community, sound, service — are just ways of clearing the static so you can hear what was already there. The tree doesn't need to *become* something. It just needs enough light and water to grow into what it already is.
----
+***
## How to use this site
-The [Practices](practices/) section is where to start. Pick one thing and try it. Not all of them. One. Give it a week.
+The Practices section is where to start. Pick one thing and try it. Not all of them. One. Give it a week.
-The [Strategies](strategies/) section is for when a practice opens a door and you want to understand the room you just walked into. Frameworks, context, the bigger picture.
+The Strategies section is for when a practice opens a door and you want to understand the room you just walked into. Frameworks, context, the bigger picture.
-Everything here is a draft. We update it when we learn something new or when someone points out we got something wrong. If something lands for you — or if it doesn't — [we'd love to hear about it](contributing/).
+Everything here is a draft. We update it when we learn something new or when someone points out we got something wrong. If something lands for you — or if it doesn't — we'd love to hear about it.
-
\ No newline at end of file
+- [ ] Mark this sprout complete
diff --git a/docs/javascripts/extra.js b/docs/javascripts/extra.js
index 7064227..51e82ad 100644
--- a/docs/javascripts/extra.js
+++ b/docs/javascripts/extra.js
@@ -81,6 +81,34 @@
initScrollReveal();
initCursorGlow();
initCusdisReload();
+ initExternalLinks();
+ }
+
+ /** Open all external links in a new tab. Runs on initial load and after
+ * every Zensical instant-navigation, so links on new pages are covered. */
+ function initExternalLinks() {
+ function fixLinks(root) {
+ var links = (root || document).querySelectorAll(
+ 'a[href^="http"]:not([target])'
+ );
+ for (var i = 0; i < links.length; i++) {
+ var a = links[i];
+ // Only external links — leave same-origin alone
+ if (a.hostname && a.hostname !== location.hostname) {
+ a.setAttribute("target", "_blank");
+ a.setAttribute("rel", "noopener");
+ }
+ }
+ }
+
+ fixLinks(document);
+
+ // Re-run after each SPA navigation
+ if (typeof document$ !== "undefined") {
+ document$.subscribe(function () {
+ fixLinks(document);
+ });
+ }
}
/**
@@ -907,3 +935,316 @@
ready(init);
})();
+
+/**
+ * ─────────────────────────────────────────────────────────────────────
+ * Keep In Touch — subscribe widget (.toa-kit)
+ *
+ * Self-contained. Behaviour:
+ * - WhatsApp and email each submit independently. Typing a valid value and
+ * pressing Send (or blurring) captures that channel, fires a light
+ * celebration, and shows a thank-you notice.
+ * - Once BOTH whatsapp and email are captured, the name field is revealed
+ * and the widget asks for their name. Name submits the same way.
+ * - POSTs JSON to the endpoint from data-endpoint (config.extra.keep_in_touch
+ * .endpoint, also on window.TOA_KEEP_IN_TOUCH_ENDPOINT). Each submit sends
+ * the full known set of fields plus the page URL, so the server can upsert.
+ * - Re-binds on Zensical instant-navigation via document$.subscribe.
+ * ─────────────────────────────────────────────────────────────────────
+ */
+;(function () {
+ "use strict";
+
+ var REDUCED_MOTION = window.matchMedia(
+ "(prefers-reduced-motion: reduce)"
+ ).matches;
+
+ var SUBSCRIBED_KEY = "toa-subscribed";
+
+ var CELEBRATE_COLORS = [
+ "#a8c5b6", "#b9a5d7", "#9ecbe6", "#f3d9a4", "#8db8a0", "#c8a8d8",
+ ];
+
+ // ── Light celebration: a small one-shot confetti burst from an anchor ──
+ function celebrate(anchorEl) {
+ if (REDUCED_MOTION) return;
+
+ var rect = anchorEl.getBoundingClientRect();
+ var originX = rect.left + rect.width / 2;
+ var originY = rect.top + rect.height / 2;
+
+ var canvas = document.createElement("canvas");
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ canvas.style.cssText =
+ "position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:2147483646;";
+ document.body.appendChild(canvas);
+ var ctx = canvas.getContext("2d");
+
+ var particles = [];
+ for (var i = 0; i < 48; i++) {
+ var ang = (Math.PI * 2 * i) / 48 + Math.random() * 0.4;
+ var speed = Math.random() * 4 + 2.5;
+ particles.push({
+ x: originX,
+ y: originY,
+ vx: Math.cos(ang) * speed,
+ vy: Math.sin(ang) * speed - 2,
+ w: Math.random() * 7 + 3,
+ h: Math.random() * 4 + 2,
+ rot: Math.random() * 360,
+ rotV: (Math.random() - 0.5) * 12,
+ color: CELEBRATE_COLORS[Math.floor(Math.random() * CELEBRATE_COLORS.length)],
+ });
+ }
+
+ var start = performance.now();
+ var DURATION = 1400;
+
+ function tick(now) {
+ var t = now - start;
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ if (t >= DURATION) {
+ canvas.remove();
+ return;
+ }
+ var fade = 1 - t / DURATION;
+ for (var j = 0; j < particles.length; j++) {
+ var p = particles[j];
+ p.vy += 0.12; // gravity
+ p.vx *= 0.99;
+ p.x += p.vx;
+ p.y += p.vy;
+ p.rot += p.rotV;
+ ctx.save();
+ ctx.globalAlpha = Math.max(0, fade);
+ ctx.translate(p.x, p.y);
+ ctx.rotate((p.rot * Math.PI) / 180);
+ ctx.fillStyle = p.color;
+ ctx.fillRect(-p.w / 2, -p.h / 2, p.w, p.h);
+ ctx.restore();
+ }
+ requestAnimationFrame(tick);
+ }
+ requestAnimationFrame(tick);
+ }
+
+ // ── Validators ──
+ function isValidEmail(v) {
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v.trim());
+ }
+ function isValidWhatsApp(v) {
+ // Lenient: international numbers, allow + and separators, require 7-15 digits.
+ var digits = v.replace(/[^\d]/g, "");
+ return digits.length >= 7 && digits.length <= 15;
+ }
+ function normalizeWhatsApp(v) {
+ var trimmed = v.trim().replace(/[^\d+]/g, "");
+ return trimmed;
+ }
+
+ function initKeepInTouch(root) {
+ var widgets = (root || document).querySelectorAll(".toa-kit");
+ widgets.forEach(function (widget) {
+ if (widget.dataset.kitBound === "1") return;
+
+ // Already subscribed in a previous session — hide immediately.
+ if (localStorage.getItem(SUBSCRIBED_KEY)) {
+ widget.classList.add("toa-kit--done");
+ return;
+ }
+
+ widget.dataset.kitBound = "1";
+
+ var form = widget.querySelector(".toa-kit__form");
+ var notice = widget.querySelector(".toa-kit__notice");
+ var sendBtn = widget.querySelector(".toa-kit__send");
+ var endpoint =
+ widget.getAttribute("data-endpoint") ||
+ window.TOA_KEEP_IN_TOUCH_ENDPOINT ||
+ "";
+
+ var fields = {
+ whatsapp: widget.querySelector('[data-kind="whatsapp"]'),
+ email: widget.querySelector('[data-kind="email"]'),
+ name: widget.querySelector('[data-kind="name"]'),
+ };
+ var inputs = {
+ whatsapp: fields.whatsapp.querySelector("input"),
+ email: fields.email.querySelector("input"),
+ name: fields.name.querySelector("input"),
+ };
+
+ // Track which channels have been captured this session.
+ var captured = { whatsapp: false, email: false, name: false };
+
+ function showNotice(msg, tone) {
+ notice.textContent = msg;
+ notice.setAttribute("data-tone", tone || "success");
+ notice.hidden = false;
+ }
+
+ function markField(kind, state) {
+ var f = fields[kind];
+ if (!f) return;
+ f.removeAttribute("data-valid");
+ f.removeAttribute("data-invalid");
+ if (state === "valid") f.setAttribute("data-valid", "true");
+ if (state === "invalid") f.setAttribute("data-invalid", "true");
+ }
+
+ function maybeRevealName() {
+ if (captured.whatsapp && captured.email && fields.name.hidden) {
+ fields.name.hidden = false;
+ inputs.name.focus();
+ showNotice(
+ "Lovely — one more thing: what should we call you?",
+ "success"
+ );
+ }
+ }
+
+ function buildPayload() {
+ return {
+ whatsapp: inputs.whatsapp.value
+ ? normalizeWhatsApp(inputs.whatsapp.value)
+ : "",
+ email: inputs.email.value.trim(),
+ name: inputs.name.value.trim(),
+ page: window.location.pathname,
+ url: window.location.href,
+ ts: new Date().toISOString(),
+ };
+ }
+
+ // POST the current known set. Returns a promise resolving true on success.
+ function send(payload) {
+ if (!endpoint) {
+ // No backend wired yet — treat as success locally so the UX still
+ // works, but log a clear warning for the developer.
+ console.warn(
+ "[keep-in-touch] No endpoint configured " +
+ "(config.extra.keep_in_touch.endpoint). Captured locally only:",
+ payload
+ );
+ return Promise.resolve(true);
+ }
+ return fetch(endpoint, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(payload),
+ credentials: "omit",
+ mode: "cors",
+ })
+ .then(function (res) {
+ return res.ok;
+ })
+ .catch(function (err) {
+ console.error("[keep-in-touch] submit failed:", err);
+ return false;
+ });
+ }
+
+ function handleSubmit() {
+ // Determine what's newly fillable / valid.
+ var wVal = inputs.whatsapp.value.trim();
+ var eVal = inputs.email.value.trim();
+ var nVal = inputs.name.value.trim();
+
+ var hasWhatsApp = wVal && isValidWhatsApp(wVal);
+ var hasEmail = eVal && isValidEmail(eVal);
+
+ // Validation feedback on filled-but-invalid fields.
+ if (wVal && !hasWhatsApp) { markField("whatsapp", "invalid"); }
+ if (eVal && !hasEmail) { markField("email", "invalid"); }
+
+ // Require at least one valid contact channel before first submit.
+ if (!hasWhatsApp && !hasEmail && !captured.whatsapp && !captured.email) {
+ showNotice(
+ "Add a WhatsApp number or email and we’ll keep you posted.",
+ "error"
+ );
+ return;
+ }
+
+ if (hasWhatsApp) markField("whatsapp", "valid");
+ if (hasEmail) markField("email", "valid");
+
+ var payload = buildPayload();
+ sendBtn.disabled = true;
+
+ send(payload).then(function (ok) {
+ sendBtn.disabled = false;
+ if (!ok) {
+ showNotice(
+ "Hmm, that didn’t go through. Please try again in a moment.",
+ "error"
+ );
+ return;
+ }
+
+ var firstWhatsApp = hasWhatsApp && !captured.whatsapp;
+ var firstEmail = hasEmail && !captured.email;
+ var firstName = nVal && !captured.name;
+
+ if (hasWhatsApp) captured.whatsapp = true;
+ if (hasEmail) captured.email = true;
+ if (nVal) captured.name = true;
+
+ // Celebrate on a fresh capture.
+ if (firstWhatsApp || firstEmail || firstName) {
+ celebrate(sendBtn);
+ }
+
+ if (firstName) {
+ showNotice(
+ "Thank you, " + nVal + " — you're all set. 🌱",
+ "success"
+ );
+ // Hide widget after a few seconds so the reader can see the message.
+ setTimeout(function () {
+ localStorage.setItem(SUBSCRIBED_KEY, "1");
+ widget.classList.add("toa-kit--done");
+ }, 3500);
+ } else if (captured.whatsapp && captured.email && fields.name.hidden === false && !captured.name) {
+ showNotice("Thanks! And your name, whenever you like.", "success");
+ } else {
+ showNotice(
+ "Thank you — we’ll be in touch with updates.",
+ "success"
+ );
+ maybeRevealName();
+ }
+ });
+ }
+
+ form.addEventListener("submit", function (e) {
+ e.preventDefault();
+ handleSubmit();
+ });
+
+ // Clear invalid state as the user edits.
+ ["whatsapp", "email"].forEach(function (kind) {
+ inputs[kind].addEventListener("input", function () {
+ fields[kind].removeAttribute("data-invalid");
+ });
+ });
+ });
+ }
+
+ function readyKit(fn) {
+ if (typeof document$ !== "undefined") {
+ document$.subscribe(function () {
+ fn();
+ });
+ } else if (document.readyState === "loading") {
+ document.addEventListener("DOMContentLoaded", fn);
+ } else {
+ fn();
+ }
+ }
+
+ readyKit(function () {
+ initKeepInTouch(document);
+ });
+})();
diff --git a/docs/practices/grounding-in-nature.md b/docs/practices/grounding-in-nature.md
index a4e4a94..46ee580 100644
--- a/docs/practices/grounding-in-nature.md
+++ b/docs/practices/grounding-in-nature.md
@@ -9,15 +9,26 @@ icon: material/nature-people
Photo by Adamu
-The earth beneath your feet has been waiting for you. Not metaphorically — literally. Every moment spent with bare skin on soil, grass, or sand is a reconnection to the electromagnetic field that humans evolved within for hundreds of thousands of years.
+Every moment spent with bare skin on soil, grass, or sand is a reconnection to the electromagnetic field that humans evolved within for hundreds of thousands of years.
+
+The Earth (whose other names include mother Gaia, Aurora, Aurelia, Tara), is a living being, and we are a small part of her.
+
+But connecting to the ground, whether that's by contact with our bare feet, using grounding blanket or pad, or even lying down and rolling (one of the best ways to rebalance energy when it gets to high!) we are chemically interacting with our physical Source via ionic exchange.
+
+Even if we can't physically touch the earth we can use awareness + visualisation and intention to guide our energy body down and root it into the crystalline core of mother Gaia. This crystalline core differs from the iron core of earth and is in a higher dimension.
+
+!!! info inline end "Coming soon"
+
+ Guided meditation for grounding to mother earth
---
## Why ground?
-Modern life separates us from the earth: rubber-soled shoes, elevated buildings, concrete pavements. The simple act of barefoot contact — called *earthing* or *grounding* — allows the body to absorb free electrons from the earth's surface. Research suggests this can reduce inflammation, improve sleep, and calm the nervous system.
+Modern life separates us from the earth: rubber-soled shoes, elevated buildings, concrete pavements. The simple act of barefoot contact — called _earthing_ or _grounding_ — allows the body to absorb free electrons from the earth's surface. Research suggests this can reduce inflammation, improve sleep, and calm the nervous system.
!!! note "Start small"
+
Five minutes of bare feet on grass in the morning is enough to begin. You don't need a forest retreat — a patch of lawn, a beach, or even damp soil in a garden works.
---
@@ -28,17 +39,17 @@ Sun gazing is an ancient practice of looking at the sun during the first or last
Sit. Breathe. Let the light wash over you. No agenda.
-[[docs/practices/nourishing-the-body]]
-
---
## Sitting practice: temples, forests, waterfalls
-Find a place where nature is doing its thing without human orchestration — a forest floor, a temple courtyard, beside a waterfall. Then do the hardest thing: nothing.
+Find a place where nature is doing its thing without human orchestration — a forest floor, a temple courtyard, beside a waterfall. Looking at the fractal form of nature found in trees, leaves, and the entire environment is highly nourishing for the nervous system. More significantly the energy flow in nature is more balanced and harmonious, whereas buildings and rooms composed of steel, aluminium and electrosmog are dissonant and disturb this flow.
-Don't meditate. Don't journal. Don't photograph.
+??? info "Discover more"
-Just sit and watch. Notice how the mind, given no task, eventually settles. This is *melukat* in the Balinese tradition — water purification not just of the body, but of the energetic residue we carry. Even sitting beside moving water, without entering it, can shift something.
+ - [ ] See Dan Winter's talks on fractal geometry on Youtube
+
+Just sit and watch. Notice how the mind, given no task, eventually settles. This is _melukat_ in the Balinese tradition — water purification not just of the body, but of the energetic residue we carry. Even sitting beside moving water, without entering it, can shift something.
---
@@ -52,4 +63,5 @@ Start tracking it loosely. You may find, as many do, that the nature hours becom
**Related:** [Nourishing the Body](nourishing-the-body.md) — bringing nature inside through food and materials.
-*What patch of earth will you stand on tomorrow morning?*
\ No newline at end of file
+_What patch of earth will you stand on tomorrow morning?_
+
diff --git a/docs/practices/nourishing-the-body.md b/docs/practices/nourishing-the-body.md
index a9e310b..b985b02 100644
--- a/docs/practices/nourishing-the-body.md
+++ b/docs/practices/nourishing-the-body.md
@@ -4,18 +4,25 @@ icon: material/food-apple
# Nourishing the Body
-The body is not a machine to be fueled — it is a living garden that responds to everything you place in it, on it, and around it. Nourishment goes far beyond calories.
+The body is a highly sophisticated ecosystem that responds to everything you place in it, on it, and around it.
+
+Our focus has been guided towards numbers like calories, steps, BMI (weight and height). These quantitave perspectives can be practical, but they often overlook the more subtle qualitative dimensions of health that can be observed and felt more easily through focused awareness than with measures and scales or lab equipment.
+
+??? info "Dive deeper"
+
+ The body is comprised of a fine balance of elements in different frequencies and states. These are a reflection of the state of the underlying aether at phases and degrees of motion. For instance solid materials are heavy, dense and even though it appears inert, their molecules are actually moving, albeit very slowly. Whereas when these molecules are heated, they undergo a dissolution of the bonds (which are really not a solid thing either, more an electrostatic coupling), and they 'melt' and move from solid to liquid and eventually to a gas and residue (solid aggregate byproduct). If we take more descriptive names to the states we could say the solid "earth" moves through liquid "water" by a process called "fire" and transforms into a gas called "air". Really all these states are part of one all encompassing consciousness and energy, the essence of which is plasma or "aether" as named in Ancient Greek. Modern science disregards this final point, owing to an experiment in 1887 called the Michelson Morley experiment, however this does not actually disprove the existence aether. You can read more about this at Aether Force Blog
---
-## Food from people, not corporations
+## Food from farmers, gardens and your plant pots, not corporations
Most of what fills supermarket shelves is the product of monopolized supply chains — processed, preserved, and profited from at every step. The alternative is older and simpler: know who grows your food.
-Work with local farmers. Join a CSA (community-supported agriculture). Buy from a neighbor who keeps hens. Trade skills for produce. When you eat food grown by someone you've spoken to, something shifts — you're no longer a consumer but a participant in a living exchange.
+Work with local farmers. Join a CSA (community-supported agriculture). Buy from a neighbor who keeps hens. Trade skills for produce. When you eat food grown by yourself or someone you've spoken to, something shifts — you feel the livingness of the food and the vitality it brings you.
!!! warning "The supermarket trap"
- Nearly every aisle in a conventional supermarket funnels money into a handful of conglomerates. The [documentary on monopoly food systems](https://www.youtube.com/watch?v=nLZV5EesNNI) is worth watching. Start by removing one aisle at a time from your routine.
+
+ Nearly every aisle in a conventional supermarket funnels money into a handful of conglomerates. The [documentary on monopolies](https://www.youtube.com/watch?v=nLZV5EesNNI) covers how all the big brand food items are owned by a handful of conglomerates and VC firms and is worth watching to see how it is possible that near everything in your Walgreens or 7 eleven has been engineered for profit and without your best interest or health at heart. You could also see Pam Peeke's fantastic lecture on the Hacked and Hijacked brain on how fast food acts like cocaine on the dopamine centres of the brain, and how to reset via meditation. Start by removing one aisle at a time from your routine and soon you'll feel your taste buds catching up to your desire for healthy organic and fresh natural food and drinks.
---
@@ -23,12 +30,12 @@ Work with local farmers. Join a CSA (community-supported agriculture). Buy from
Herbal teas are one of the gentlest ways to rebalance the body throughout the day:
-| Time | Tea | Purpose |
-|------|-----|---------|
-| Morning | Flower teas (chamomile, jasmine, rose) | Light, opening, uplifting |
-| After meals | Ginger tea | Digestive fire, warmth |
-| When agitated | Vata-pacifying (licorice, cinnamon, ashwagandha) | Grounding, calming |
-| When overheated | Pitta-pacifying (mint, fennel, coriander) | Cooling, soothing |
+| Time | Tea | Purpose |
+| --------------- | ------------------------------------------------ | ------------------------- |
+| Morning | Flower teas (chamomile, jasmine, rose) | Light, opening, uplifting |
+| After meals | Ginger tea | Digestive fire, warmth |
+| When agitated | Vata-pacifying (licorice, cinnamon, ashwagandha) | Grounding, calming |
+| When overheated | Pitta-pacifying (mint, fennel, coriander) | Cooling, soothing |
Learn your own patterns. The tea that works for someone else may not be yours — experiment gently.
@@ -46,7 +53,7 @@ The goal is not deprivation. It's giving the digestive system the rest it rarely
Gradually replace clothing and bed linen with natural, non-toxic materials: organic cotton, linen, hemp, wool. The skin is the largest organ — what it rests against for 8 hours a night matters.
-The same applies to what you put *on* your body. A self oil massage (*abhyanga*) with a simple, chemical-free oil suited to your constitution — or just pure coconut oil — is a daily practice that nourishes skin, calms the nervous system, and reconnects you to your own body with care rather than criticism.
+The same applies to what you put _on_ your body. A self oil massage (_abhyanga_) with a simple, chemical-free oil suited to your constitution — or just pure coconut oil — is a daily practice that nourishes skin, calms the nervous system, and reconnects you to your own body with care rather than criticism.
---
@@ -62,4 +69,5 @@ None of this needs to happen overnight. One change, held consistently, reshapes
**Related:** [Grounding in Nature](grounding-in-nature.md) — where nourishment meets the earth.
-*What's one thing your body has been quietly asking you to change?*
\ No newline at end of file
+_What's one thing your body has been quietly asking you to change?_
+
diff --git a/docs/practices/spiritual-hygiene.md b/docs/practices/spiritual-hygiene.md
index 104de4f..cb53f53 100644
--- a/docs/practices/spiritual-hygiene.md
+++ b/docs/practices/spiritual-hygiene.md
@@ -9,20 +9,33 @@ Just as you wash your body, your space and energy field require regular cleansin
## Cleansing your space
-Your bedroom is the most important room to tend. You spend a third of your life there, unconscious and receptive.
-
-- Open windows daily — stagnant air holds stagnant energy
+- See the [[docs/practices/daily-sadhana]] action items that will also affect your space. The humans in a space have the greatest impact upon its vibration.
+- Chanting is a very powerful way to raise vibration in a space. You can use any sound you enjoy that connects you to yourself. Chanting in the mind is more powerful than out loud.
+- Clear and declutter: every object carries a subtle energetic weight, see [Marie Kondo](https://www.youtube.com/@MarieKondoTV) and [A monk's guide to a clean house and mind](https://www.thezengateway.com/culture/an-interview-with-shoukei-matsumoto-author-of-a-monk-s-guide-to-a-clean-house-and-mind)
+ - Cleaning is extremely important, as any dirt and detritus will repel higher consciousness beings and attract those from the lower realms, just like how if you leave a mess insects will be drawn to it, the same applies to non physical beings. A clean home and a clean heart are pre-requisites to connecting to angelic and divine beings.
+- Open windows daily and allow light and fresh air to circulate through your space
- Remove electronics from the room, or at minimum cover screens
-- Declutter: every object carries a subtle energetic weight
-- Use sound: a bell, singing bowl, or simple clapping in corners breaks up density
+- Use pure frequency: a brass bell with bright tones, a tibetan or crystal singing bowl, download and play a Tarpan music, or Solfeggio tone music in the background on your phone.
- Burn natural incense or diffuse pure essential oils (frankincense, sage, palo santo)
-??? question "How often should I cleanse?"\
-A light daily clearing (open window, intention setting) and a deeper weekly reset (sound, smoke, decluttering) is a sustainable rhythm. After arguments, illness, or visits from heavy energy, cleanse immediately.
+!!! info "Discover more"
+
+ - Healing with Form, Energe and Light by Tenzin Wangyal Rinpoche
+ - Pranic Healing by Master Choa Kok Sui
+
+??? question "How often should I cleanse?"
+
+ A light daily clearing (open window, intention setting) and a deeper weekly reset (sound, smoke, decluttering) is a sustainable rhythm. After arguments, illness, or visits from heavy energy, cleanse immediately and go outside for a walk.
***
-## Setting intention and calling guides
+## Clearing Sleep Space
+
+Your bedroom is the most important room to tend. You spend a third of your life there, in a more unconscious and receptive state. Make your bed as soon as you wake up, crumpled sheets create surprisingly discordant energy. It also helps you fell you've achieved something and sets the precedence to take care of yourself and your life.
+
+Before sleeping you can light a ghee or sattvic oil lamp, being careful it will not be disturbed or near any flammable items. You could keep a shrine or altar with items that make you happy and feel love, that could be family or those who have inspired you who have good character.
+
+### Intention
Before sleep, state clearly — aloud or internally:
@@ -36,9 +49,10 @@ You don't need to believe in guides for this to work. The practice is about sett
The frequencies you surround yourself with shape your nervous system. Consider:
-- **432 Hz** — associated with heart coherence and natural resonance
-- **528 Hz** — often called the "love frequency," used in DNA repair research
-- **Natural classical** — Bach, Debussy, Ravi Shankar — music that creates space rather than filling it
+- Solfeggio tones such as:
+ - **432 Hz** — associated with heart coherence and natural resonance
+ - **528 Hz** — often called the "love frequency," used in DNA repair research
+- **Natural classical** — Debussy, Ravi Shankar — music that creates space rather than filling it
- **Kirtan and mantra** — collective chanting that synchronizes heart rates and entrains the group field
The rule is simple: if a song has a single negative word or message, skip it. The subconscious absorbs everything. Curate your sound environment as carefully as your food.
@@ -54,8 +68,7 @@ Pair this with:
- **Uplifting art** — surround yourself with images that open the heart
- **Light-hearted comedy** — laughter is a genuine cleansing practice
- **Positive energy events** — gatherings where the purpose is simply to feel good together
-
-"Joy maxxing" is not avoidance. It is deliberate nervous system nourishment.
+- **Joy maxxing** is relentlessly choosing what your heart calls you to do, even if you would have been shy or too scared to pursue it normally. It could be wearing that silly hat, or singing and dancing in the rain. Take at least one day a week or one hour a day to really follow your heart!
***
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
index 415028e..0eca1c7 100644
--- a/docs/stylesheets/extra.css
+++ b/docs/stylesheets/extra.css
@@ -6,78 +6,86 @@
:root {
/* Refined iris palette */
- --gp-bg: #f6fbf7;
- --gp-surface: #ffffff;
- --gp-text: #1c2b1c;
- --gp-text-muted: #4e5e4b;
- --gp-primary: #4a8262; /* darker sage — visible link color */
- --gp-secondary: #a8c5b6;
- --gp-tertiary: #e9dfc6;
- --gp-accent: #b9a5d7; /* soft aurora purple */
+ --gp-bg: #f6fbf7;
+ --gp-surface: #ffffff;
+ --gp-text: #1c2b1c;
+ --gp-text-muted: #4e5e4b;
+ --gp-primary: #4a8262; /* darker sage — visible link color */
+ --gp-secondary: #a8c5b6;
+ --gp-tertiary: #e9dfc6;
+ --gp-accent: #b9a5d7; /* soft aurora purple */
/* Iridescent atmosphere tokens */
- --gp-iris-1: #f1f6f3;
- --gp-iris-2: #eef3f6;
- --gp-iris-3: #f6f2f8;
- --gp-iris-4: #f5f1ec;
+ --gp-iris-1: #f1f6f3;
+ --gp-iris-2: #eef3f6;
+ --gp-iris-3: #f6f2f8;
+ --gp-iris-4: #f5f1ec;
--gp-aurora-iris: linear-gradient(
135deg,
- var(--gp-iris-1), var(--gp-iris-2), var(--gp-iris-3), var(--gp-iris-4)
+ var(--gp-iris-1),
+ var(--gp-iris-2),
+ var(--gp-iris-3),
+ var(--gp-iris-4)
);
- --gp-card-bg: rgba(255, 255, 255, 0.74);
- --gp-card-border: rgba(122, 170, 150, 0.22);
- --gp-card-shadow: 0 8px 28px rgba(122, 170, 150, 0.10);
- --gp-card-hover: 0 18px 40px rgba(122, 170, 150, 0.16);
+ --gp-card-bg: rgba(255, 255, 255, 0.74);
+ --gp-card-border: rgba(122, 170, 150, 0.22);
+ --gp-card-shadow: 0 8px 28px rgba(122, 170, 150, 0.1);
+ --gp-card-hover: 0 18px 40px rgba(122, 170, 150, 0.16);
- --gp-glow: rgba(141, 184, 160, 0.35);
- --gp-glow-intense: rgba(160, 130, 210, 0.45);
+ --gp-glow: rgba(141, 184, 160, 0.35);
+ --gp-glow-intense: rgba(160, 130, 210, 0.45);
- --gp-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
- --gp-duration: 0.78s;
- --gp-distance: 20px;
+ --gp-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
+ --gp-duration: 0.78s;
+ --gp-distance: 20px;
/* ── Coherent green system (single source of truth for all greens) ──
Use these everywhere instead of ad-hoc rgba() values so the page reads
as one consistent sage family rather than a dozen different greens. */
- --green-900: #2f5641; /* deepest — strong emphasis / completion */
- --green-700: #3d6b52; /* deep sage — achievement, button border */
- --green-600: #4a8262; /* primary sage — links, button text */
- --green-500: #5b9a76; /* mid sage — hover */
- --green-300: #a8c5b6; /* light sage — icons, soft accents */
- --green-100: #e4efe9; /* faint sage — fills, tints */
- --green-glow: rgba(74, 130, 98, 0.22); /* unified shadow/glow tint */
+ --green-900: #2f5641; /* deepest — strong emphasis / completion */
+ --green-700: #3d6b52; /* deep sage — achievement, button border */
+ --green-600: #4a8262; /* primary sage — links, button text */
+ --green-500: #5b9a76; /* mid sage — hover */
+ --green-300: #a8c5b6; /* light sage — icons, soft accents */
+ --green-100: #e4efe9; /* faint sage — fills, tints */
+ --green-glow: rgba(74, 130, 98, 0.22); /* unified shadow/glow tint */
}
/* Base atmosphere */
body {
background-color: var(--gp-bg);
background-image:
- radial-gradient(ellipse at 12% -8%, rgba(210, 230, 240, 0.38), transparent 56%),
- radial-gradient(ellipse at 88% 108%, rgba(215, 210, 235, 0.34), transparent 58%),
+ radial-gradient(
+ ellipse at 12% -8%,
+ rgba(210, 230, 240, 0.38),
+ transparent 56%
+ ),
+ radial-gradient(
+ ellipse at 88% 108%,
+ rgba(215, 210, 235, 0.34),
+ transparent 58%
+ ),
var(--gp-aurora-iris);
background-attachment: fixed;
- background-size: 100% 100%, 100% 100%, 200% 200%;
+ background-size: 100% 100%;
color: var(--gp-text);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
-@media (prefers-reduced-motion: no-preference) {
- body.godspark-breathe {
- animation: gp-breathe 36s ease-in-out infinite;
- }
- @keyframes gp-breathe {
- 0%, 100% { background-position: 0 0, 0 0, 0% 50%; }
- 50% { background-position: 0 0, 0 0, 100% 50%; }
- }
-}
-
/* Typography */
-h1, h2, h3, h4, h5, h6,
-article h1, article h2, article h3 {
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+article h1,
+article h2,
+article h3 {
font-weight: 650;
letter-spacing: -0.012em;
line-height: 1.2;
@@ -88,7 +96,9 @@ a {
color: var(--gp-primary);
text-decoration-thickness: 1px;
text-underline-offset: 3px;
- transition: color 0.22s var(--gp-ease), text-decoration-color 0.22s;
+ transition:
+ color 0.22s var(--gp-ease),
+ text-decoration-color 0.22s;
}
a:hover {
color: var(--gp-accent);
@@ -97,7 +107,8 @@ a:hover {
/* Layout helpers */
.zensical article,
.zensical .content,
-main, article {
+main,
+article {
position: relative;
z-index: 1;
}
@@ -122,7 +133,6 @@ main section {
border-radius: 22px;
backdrop-filter: blur(14px) saturate(145%);
-webkit-backdrop-filter: blur(14px) saturate(145%);
- padding: 1.6rem 1.8rem;
box-shadow: var(--gp-card-shadow);
transition:
transform var(--gp-duration) var(--gp-ease),
@@ -146,7 +156,11 @@ article.card:hover {
overflow: hidden;
border: 1px solid var(--gp-card-border);
background:
- linear-gradient(180deg, rgba(255,255,255,0.52), rgba(255,255,255,0.30)),
+ linear-gradient(
+ 180deg,
+ rgba(255, 255, 255, 0.52),
+ rgba(255, 255, 255, 0.3)
+ ),
var(--gp-aurora-iris);
background-blend-mode: overlay;
backdrop-filter: blur(10px) saturate(120%);
@@ -198,7 +212,10 @@ a[class*="godspark"] {
border-radius: 999px;
padding: 0.55em 1.5em;
cursor: pointer;
- transition: opacity 0.28s, box-shadow 0.28s, transform 0.28s var(--gp-ease);
+ transition:
+ opacity 0.28s,
+ box-shadow 0.28s,
+ transform 0.28s var(--gp-ease);
text-decoration: none;
display: inline-flex;
align-items: center;
@@ -223,8 +240,12 @@ a[class*="godspark"]::after {
content: "";
position: absolute;
inset: 0;
- background:
- linear-gradient(120deg, transparent, rgba(255,255,255,0.42), transparent);
+ background: linear-gradient(
+ 120deg,
+ transparent,
+ rgba(255, 255, 255, 0.42),
+ transparent
+ );
background-size: 220% 100%;
background-repeat: no-repeat;
background-position: -130% 0;
@@ -237,9 +258,15 @@ a[class*="godspark"]:hover::after {
animation: gp-sheen 7s var(--gp-ease) infinite;
}
@keyframes gp-sheen {
- 0% { background-position: -140% 0; }
- 55% { background-position: 80% 0; }
- 100% { background-position: 80% 0; }
+ 0% {
+ background-position: -140% 0;
+ }
+ 55% {
+ background-position: 80% 0;
+ }
+ 100% {
+ background-position: 80% 0;
+ }
}
/* Code (preserve toolbar button readability) */
@@ -247,10 +274,10 @@ pre {
background: rgba(255, 255, 255, 0.82);
border: 1px solid var(--gp-card-border);
border-radius: 14px;
- padding: 1.1rem 1.3rem;
}
-code, kbd {
- background: rgba(122, 170, 150, 0.10);
+code,
+kbd {
+ background: rgba(122, 170, 150, 0.1);
border: 1px solid rgba(122, 170, 150, 0.18);
border-radius: 7px;
color: var(--gp-text);
@@ -271,11 +298,13 @@ blockquote {
hr {
border: none;
height: 1px;
- background: linear-gradient(90deg,
+ background: linear-gradient(
+ 90deg,
transparent,
var(--gp-primary),
var(--gp-secondary),
- transparent);
+ transparent
+ );
margin: 2.4rem 0;
}
@@ -318,12 +347,24 @@ td {
opacity var(--gp-duration) var(--gp-ease),
transform var(--gp-duration) var(--gp-ease);
}
-.godspark-reveal.is-visible > *:nth-child(1) { transition-delay: 0.00s; }
-.godspark-reveal.is-visible > *:nth-child(2) { transition-delay: 0.08s; }
-.godspark-reveal.is-visible > *:nth-child(3) { transition-delay: 0.16s; }
-.godspark-reveal.is-visible > *:nth-child(4) { transition-delay: 0.24s; }
-.godspark-reveal.is-visible > *:nth-child(5) { transition-delay: 0.32s; }
-.godspark-reveal.is-visible > *:nth-child(6) { transition-delay: 0.40s; }
+.godspark-reveal.is-visible > *:nth-child(1) {
+ transition-delay: 0s;
+}
+.godspark-reveal.is-visible > *:nth-child(2) {
+ transition-delay: 0.08s;
+}
+.godspark-reveal.is-visible > *:nth-child(3) {
+ transition-delay: 0.16s;
+}
+.godspark-reveal.is-visible > *:nth-child(4) {
+ transition-delay: 0.24s;
+}
+.godspark-reveal.is-visible > *:nth-child(5) {
+ transition-delay: 0.32s;
+}
+.godspark-reveal.is-visible > *:nth-child(6) {
+ transition-delay: 0.4s;
+}
.godspark-reveal.is-visible > * {
opacity: 1;
transform: translateY(0);
@@ -341,7 +382,7 @@ td {
z-index: 999998;
background: radial-gradient(
circle,
- rgba(141, 184, 160, 0.30) 0%,
+ rgba(141, 184, 160, 0.3) 0%,
rgba(160, 130, 210, 0.16) 32%,
transparent 68%
);
@@ -381,10 +422,12 @@ td {
background: var(--gp-bg);
}
::-webkit-scrollbar-thumb {
- background: linear-gradient(180deg,
+ background: linear-gradient(
+ 180deg,
var(--gp-primary),
var(--gp-accent),
- var(--gp-secondary));
+ var(--gp-secondary)
+ );
border-radius: 99px;
}
@@ -396,8 +439,15 @@ td {
[data-md-color-component="header"] {
animation: none !important;
}
-h1, h2, h3, h4, h5, h6,
-article h1, article h2, article h3 {
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+article h1,
+article h2,
+article h3 {
animation: none !important;
background: none !important;
-webkit-text-fill-color: var(--gp-text);
@@ -596,7 +646,12 @@ article h1, article h2, article h3 {
background: #fff !important;
color: #000 !important;
}
- h1, h2, h3, h4, h5, h6 {
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
color: #000 !important;
}
.gp-glow-active::after,
@@ -628,7 +683,10 @@ article h1, article h2, article h3 {
border-radius: 16px;
isolation: isolate;
border: 1px solid var(--green-100);
- transition: transform 0.35s var(--gp-ease), box-shadow 0.35s var(--gp-ease), border-color 0.3s ease;
+ transition:
+ transform 0.35s var(--gp-ease),
+ box-shadow 0.35s var(--gp-ease),
+ border-color 0.3s ease;
}
/* Image layer — positioning & sizing set per theme below */
@@ -678,11 +736,12 @@ article h1, article h2, article h3 {
line-height: 1.4;
letter-spacing: 0.02em;
box-shadow: 0 1px 4px var(--green-glow);
- transition: background 0.28s var(--gp-ease),
- color 0.28s var(--gp-ease),
- border-color 0.28s var(--gp-ease),
- box-shadow 0.28s var(--gp-ease),
- transform 0.28s var(--gp-ease);
+ transition:
+ background 0.28s var(--gp-ease),
+ color 0.28s var(--gp-ease),
+ border-color 0.28s var(--gp-ease),
+ box-shadow 0.28s var(--gp-ease),
+ transform 0.28s var(--gp-ease);
}
/* Flashy-but-subtle: the outline button fills with sage green and lifts
@@ -702,7 +761,7 @@ article h1, article h2, article h3 {
[class*="gp-cards-"].grid.cards ul li {
background: var(--gp-surface);
padding: 0 1.4rem 3.4rem 1.4rem;
- padding-top: 176px; /* 150px image + ~26px gap before title */
+ padding-top: 176px; /* 150px image + ~26px gap before title */
min-height: 310px;
display: flex;
flex-direction: column;
@@ -758,16 +817,34 @@ article h1, article h2, article h3 {
CARD IMAGE URLS — defined once via custom properties
═══════════════════════════════════════════════════════════════════════ */
-.gp-cards-practices.grid.cards ul li:nth-child(1) { --card-img: url("/assets/images/cards/practices-grounding.jpg"); }
-.gp-cards-practices.grid.cards ul li:nth-child(2) { --card-img: url("/assets/images/cards/practices-nourishing.jpg"); }
-.gp-cards-practices.grid.cards ul li:nth-child(3) { --card-img: url("/assets/images/cards/practices-sadhana.jpg"); }
-.gp-cards-practices.grid.cards ul li:nth-child(4) { --card-img: url("/assets/images/cards/practices-digital.jpg"); }
-.gp-cards-practices.grid.cards ul li:nth-child(5) { --card-img: url("/assets/images/cards/practices-hygiene.jpg"); }
+.gp-cards-practices.grid.cards ul li:nth-child(1) {
+ --card-img: url("/assets/images/cards/practices-grounding.jpg");
+}
+.gp-cards-practices.grid.cards ul li:nth-child(2) {
+ --card-img: url("/assets/images/cards/practices-nourishing.jpg");
+}
+.gp-cards-practices.grid.cards ul li:nth-child(3) {
+ --card-img: url("/assets/images/cards/practices-sadhana.jpg");
+}
+.gp-cards-practices.grid.cards ul li:nth-child(4) {
+ --card-img: url("/assets/images/cards/practices-digital.jpg");
+}
+.gp-cards-practices.grid.cards ul li:nth-child(5) {
+ --card-img: url("/assets/images/cards/practices-hygiene.jpg");
+}
-.gp-cards-strategies.grid.cards ul li:nth-child(1) { --card-img: url("/assets/images/cards/strategies-digital-sov.jpg"); }
-.gp-cards-strategies.grid.cards ul li:nth-child(2) { --card-img: url("/assets/images/cards/strategies-community-sov.jpg"); }
-.gp-cards-strategies.grid.cards ul li:nth-child(3) { --card-img: url("/assets/images/cards/strategies-purpose.jpg"); }
-.gp-cards-strategies.grid.cards ul li:nth-child(4) { --card-img: url("/assets/images/cards/strategies-awakening.jpg"); }
+.gp-cards-strategies.grid.cards ul li:nth-child(1) {
+ --card-img: url("/assets/images/cards/strategies-digital-sov.jpg");
+}
+.gp-cards-strategies.grid.cards ul li:nth-child(2) {
+ --card-img: url("/assets/images/cards/strategies-community-sov.jpg");
+}
+.gp-cards-strategies.grid.cards ul li:nth-child(3) {
+ --card-img: url("/assets/images/cards/strategies-purpose.jpg");
+}
+.gp-cards-strategies.grid.cards ul li:nth-child(4) {
+ --card-img: url("/assets/images/cards/strategies-awakening.jpg");
+}
/* ═══════════════════════════════════════════════════════════════════════
DARK THEME (slate) — full-bleed atmospheric image + light text
@@ -787,12 +864,16 @@ article h1, article h2, article h3 {
inset: 0;
z-index: -1;
background-image:
- linear-gradient(160deg, rgba(14, 22, 16, 0.62) 0%, rgba(6, 14, 10, 0.74) 100%),
+ linear-gradient(
+ 160deg,
+ rgba(14, 22, 16, 0.62) 0%,
+ rgba(6, 14, 10, 0.74) 100%
+ ),
var(--card-img);
}
[data-md-color-scheme="slate"] [class*="gp-cards-"].grid.cards ul li {
- color: rgba(255, 255, 255, 0.80);
+ color: rgba(255, 255, 255, 0.8);
border-color: rgba(255, 255, 255, 0.08);
}
@@ -802,11 +883,16 @@ article h1, article h2, article h3 {
}
[data-md-color-scheme="slate"] [class*="gp-cards-"].grid.cards ul li .twemoji {
- color: rgba(255, 255, 255, 0.60);
+ color: rgba(255, 255, 255, 0.6);
}
[data-md-color-scheme="slate"] [class*="gp-cards-"].grid.cards ul li a:hover,
-[data-md-color-scheme="slate"] [class*="gp-cards-"].grid.cards ul li a:hover strong {
+[data-md-color-scheme="slate"]
+ [class*="gp-cards-"].grid.cards
+ ul
+ li
+ a:hover
+ strong {
color: rgba(255, 255, 255, 1);
}
@@ -817,13 +903,16 @@ article h1, article h2, article h3 {
/* Dark mode button — outline on glass; fills sage on hover */
[data-md-color-scheme="slate"] [class*="gp-cards-"].grid.cards ul li::after {
- background: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.1);
color: #fff;
border-color: rgba(255, 255, 255, 0.55);
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.30);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
-[data-md-color-scheme="slate"] [class*="gp-cards-"].grid.cards ul li:hover::after {
+[data-md-color-scheme="slate"]
+ [class*="gp-cards-"].grid.cards
+ ul
+ li:hover::after {
background: var(--green-600);
color: #fff;
border-color: var(--green-600);
@@ -849,7 +938,12 @@ article h1, article h2, article h3 {
[class*="gp-cards-"].grid.cards ul li {
min-height: 250px;
padding: 0 1.2rem 3.2rem 1.2rem;
- padding-top: 130px;
+ padding-top: 146px; /* 120px image + ~26px gap before title */
+ }
+ /* Image must shrink in step with padding-top, or the text slides up
+ underneath it. Keep image height + gap == padding-top above. */
+ [class*="gp-cards-"].grid.cards ul li::before {
+ height: 120px;
}
[class*="gp-cards-"].grid.cards > ul {
gap: 1.4rem;
@@ -876,7 +970,9 @@ li.task-list-item:has(input:checked) {
text-decoration: line-through;
color: var(--gp-text-muted);
opacity: 0.72;
- transition: opacity 0.3s ease, color 0.3s ease;
+ transition:
+ opacity 0.3s ease,
+ color 0.3s ease;
}
/* ── Pill badges (via ::after pseudo-element — clean textContent) ── */
@@ -886,8 +982,8 @@ h3[data-toa-count]::after {
content: attr(data-toa-count);
display: inline-block;
float: right;
- background: var(--gp-card-bg, rgba(255,255,255,0.74));
- border: 1px solid var(--gp-card-border, rgba(122,170,150,0.22));
+ background: var(--gp-card-bg, rgba(255, 255, 255, 0.74));
+ border: 1px solid var(--gp-card-border, rgba(122, 170, 150, 0.22));
border-radius: 999px;
padding: 0.08em 0.62em;
font-size: 0.62em;
@@ -930,9 +1026,9 @@ h3[data-toa-complete="true"]::after {
display: inline-flex;
align-items: center;
justify-content: center;
- min-width: 2em;
- background: var(--gp-card-bg, rgba(255,255,255,0.74));
- border: 1px solid var(--gp-card-border, rgba(122,170,150,0.22));
+ min-width: 1em;
+ background: var(--gp-card-bg, rgba(255, 255, 255, 0.74));
+ border: 1px solid var(--gp-card-border, rgba(122, 170, 150, 0.22));
border-radius: 999px;
padding: 0 0.42em;
font-size: 0.68em;
@@ -993,3 +1089,256 @@ h3[data-toa-complete="true"]::after {
.md-overlay {
z-index: 1;
}
+
+/* ═════════════════════════════════════════════════════════════════
+ Keep In Touch — subscribe admonition (.toa-kit)
+ A card with a slowly-rotating iridescent border, two icon fields
+ (WhatsApp + email), a progressively-revealed name field, and a small
+ "Send" button. Success/celebration states stay in the sage family;
+ only the rotating border is full-spectrum iridescent (decorative).
+ ═════════════════════════════════════════════════════════════════ */
+:root {
+ --toa-kit-radius: 16px;
+ --toa-kit-border: 1.5px;
+}
+
+.toa-kit {
+ margin: 2.6rem 0 2rem;
+}
+
+/* Clean, soft gradient card — no animation, no iridescent border. */
+.toa-kit__inner {
+ position: relative;
+ border-radius: var(--toa-kit-radius);
+ padding: 1.5rem 1.5rem 1.35rem;
+ border: 1px solid var(--gp-card-border);
+ background: linear-gradient(135deg, #f8faf7 0%, #f2f6f1 40%, #eef3ee 100%);
+ box-shadow: 0 2px 16px rgba(122, 170, 150, 0.08);
+ overflow: hidden;
+}
+
+/* Subtle inner highlight — a single soft radial sweep behind the content. */
+.toa-kit__glow {
+ position: absolute;
+ inset: 0;
+ z-index: 0;
+ pointer-events: none;
+ background: radial-gradient(
+ ellipse at 50% 0%,
+ rgba(168, 197, 182, 0.18),
+ transparent 70%
+ );
+}
+
+.toa-kit__header {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.75rem;
+ margin-bottom: 1.05rem;
+}
+
+.toa-kit__icon {
+ flex: 0 0 auto;
+ display: grid;
+ place-items: center;
+ width: 2.1rem;
+ height: 2.1rem;
+ border-radius: 10px;
+ color: var(--green-600);
+ background: var(--green-100);
+}
+.toa-kit__icon .lucide {
+ width: 1.2rem;
+ height: 1.2rem;
+}
+
+.toa-kit__heading {
+ min-width: 0;
+}
+
+.toa-kit__titletext {
+ margin: 0.05rem 0 0.15rem;
+ font-size: 1.1rem;
+ font-weight: 700;
+ line-height: 1.2;
+ color: var(--green-900);
+}
+
+.toa-kit__sub {
+ margin: 0;
+ font-size: 0.82rem;
+ line-height: 1.4;
+ color: var(--gp-text-muted);
+}
+
+.toa-kit__form {
+ display: flex;
+ flex-direction: column;
+ gap: 0.6rem;
+}
+
+/* Icon-inside-field, mirroring the Zensical search-bar look */
+.toa-kit__field {
+ display: flex;
+ align-items: center;
+ gap: 0.55rem;
+ padding: 0 0.85rem;
+ height: 2.6rem;
+ border-radius: 11px;
+ background: rgba(255, 255, 255, 0.7);
+ border: 1px solid var(--gp-card-border);
+ transition:
+ border-color 0.2s var(--gp-ease),
+ box-shadow 0.2s var(--gp-ease),
+ background 0.2s var(--gp-ease);
+}
+.toa-kit__field:focus-within {
+ border-color: var(--green-500);
+ box-shadow: 0 0 0 3px var(--green-glow);
+ background: #ffffff;
+}
+.toa-kit__field[data-valid="true"] {
+ border-color: var(--green-700);
+ background: var(--green-100);
+}
+.toa-kit__field[data-invalid="true"] {
+ border-color: #c97c7c;
+ box-shadow: 0 0 0 3px rgba(201, 124, 124, 0.18);
+}
+
+.toa-kit__fieldicon {
+ flex: 0 0 auto;
+ display: grid;
+ place-items: center;
+ color: var(--green-600);
+}
+.toa-kit__fieldicon .lucide {
+ width: 1.05rem;
+ height: 1.05rem;
+}
+
+.toa-kit__input {
+ flex: 1 1 auto;
+ min-width: 0;
+ border: 0;
+ outline: 0;
+ background: transparent;
+ font: inherit;
+ font-size: 0.9rem;
+ color: var(--gp-text);
+}
+.toa-kit__input::placeholder {
+ color: var(--gp-text-muted);
+ opacity: 0.8;
+}
+
+.toa-kit__field--name {
+ animation: toa-kit-reveal 0.42s var(--gp-ease) both;
+}
+@keyframes toa-kit-reveal {
+ from {
+ opacity: 0;
+ transform: translateY(-6px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+/* Small, easy "Send" button */
+.toa-kit__send {
+ align-self: flex-end;
+ margin-top: 0.15rem;
+ padding: 0.4rem 1.15rem;
+ border: 1px solid var(--green-700);
+ border-radius: 9px;
+ background: var(--green-600);
+ color: #fff;
+ font-size: 0.85rem;
+ font-weight: 600;
+ letter-spacing: 0.01em;
+ cursor: pointer;
+ transition:
+ transform 0.15s var(--gp-ease),
+ background 0.2s var(--gp-ease),
+ box-shadow 0.2s var(--gp-ease);
+}
+.toa-kit__send:hover {
+ background: var(--green-500);
+ box-shadow: 0 6px 18px var(--green-glow);
+}
+.toa-kit__send:active {
+ transform: translateY(1px);
+}
+.toa-kit__send:disabled {
+ opacity: 0.55;
+ cursor: default;
+ box-shadow: none;
+}
+
+/* Thank-you / status notice */
+.toa-kit__notice {
+ margin: 0.85rem 0 0;
+ padding: 0.55rem 0.8rem;
+ border-radius: 9px;
+ font-size: 0.85rem;
+ line-height: 1.4;
+ animation: toa-kit-reveal 0.4s var(--gp-ease) both;
+}
+.toa-kit__notice[data-tone="success"] {
+ color: var(--green-900);
+ background: var(--green-100);
+ border: 1px solid var(--green-300);
+}
+.toa-kit__notice[data-tone="error"] {
+ color: #7a3b3b;
+ background: rgba(201, 124, 124, 0.12);
+ border: 1px solid rgba(201, 124, 124, 0.35);
+}
+
+[data-md-color-scheme="slate"] .toa-kit__field {
+ background: rgba(255, 255, 255, 0.05);
+}
+[data-md-color-scheme="slate"] .toa-kit__field:focus-within {
+ background: rgba(255, 255, 255, 0.09);
+}
+[data-md-color-scheme="slate"] .toa-kit__input {
+ color: #e6efe8;
+}
+[data-md-color-scheme="slate"] .toa-kit__inner {
+ background: linear-gradient(135deg, #1e2b22, #1f2d24, #1c2a20);
+ border-color: rgba(122, 170, 150, 0.12);
+}
+
+/* Fade-out after the visitor has subscribed (localStorage flag). */
+.toa-kit--done {
+ opacity: 0;
+ max-height: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ overflow: hidden;
+ transition:
+ opacity 0.5s var(--gp-ease),
+ max-height 0.5s var(--gp-ease) 0.2s,
+ margin 0.5s var(--gp-ease) 0.2s;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .toa-kit__field--name,
+ .toa-kit__notice {
+ animation: none;
+ }
+ .toa-kit--done {
+ transition: none;
+ }
+}
+
+@media (max-width: 600px) {
+ .toa-kit__inner {
+ padding: 1.2rem 1.05rem;
+ }
+ .toa-kit__send {
+ align-self: stretch;
+ }
+}
diff --git a/overrides/main.html b/overrides/main.html
index df142f8..cab51f2 100644
--- a/overrides/main.html
+++ b/overrides/main.html
@@ -19,5 +19,7 @@
{% endblock %}
diff --git a/overrides/partials/comments.html b/overrides/partials/comments.html
index 9248487..e226711 100644
--- a/overrides/partials/comments.html
+++ b/overrides/partials/comments.html
@@ -1,3 +1,5 @@
+{% include "partials/keep-in-touch.html" %}
+
+
+
+{% endif %}
diff --git a/zensical.toml b/zensical.toml
index 484c553..2992c54 100644
--- a/zensical.toml
+++ b/zensical.toml
@@ -47,10 +47,25 @@ Copyright © 2026 The authors
# can be defined using TOML syntax.
#
# Read more: https://zensical.org/docs/setup/navigation/
-# nav = [
-# { "Get started" = "index.md" },
-# { "Markdown in 5min" = "markdown.md" },
-# ]
+nav = [
+ { "Home" = "index.md" },
+ { "Practices" = [
+ "practices/index.md",
+ "practices/daily-sadhana.md",
+ "practices/digital-wellness.md",
+ "practices/grounding-in-nature.md",
+ "practices/nourishing-the-body.md",
+ "practices/spiritual-hygiene.md",
+ ]},
+ { "Strategies" = [
+ "strategies/index.md",
+ "strategies/collective-awakening.md",
+ "strategies/community-sovereignty.md",
+ "strategies/digital-sovereignty.md",
+ "strategies/finding-purpose.md",
+ ]},
+ { "Contributing" = "contributing/index.md" },
+]
# With the "extra_css" option you can add your own CSS styling to customize
# your Zensical project according to your needs. You can add any number of
@@ -322,6 +337,18 @@ lang = "en"
[project.extra.action_points]
enabled = true
+# ----------------------------------------------------------------------------
+# Keep In Touch — subscribe widget (rendered above comments on every page).
+# Captures a visitor's WhatsApp number and/or email (and later their name)
+# and POSTs them as JSON to `endpoint`. Set enabled = false to hide the
+# widget entirely. The endpoint is exposed to client JS as
+# window.TOA_KEEP_IN_TOUCH_ENDPOINT via overrides/main.html and as the
+# data-endpoint attribute on the widget (overrides/partials/keep-in-touch.html).
+# ----------------------------------------------------------------------------
+[project.extra.keep_in_touch]
+enabled = true
+endpoint = "https://subscribe.krystl.org/api/subscribe"
+
#[[project.extra.social]]
#icon = "fontawesome/brands/github"