/* ======================================================================================================
   File:     mamadex-join.css
   Path:     assets/css/mamadex/mamadex-join.css
   Author:   Buktika Webdesk (Binka)
   Owner:    Buktika — Binka
   Purpose:  Page-scoped styles for mamadex-join.html (MamaDEX Door 2 —
             "Could your centre become part of MamaDEX?"). Loaded AFTER
             mamadex.css so this file's .page-mamadex-join rules win on tie
             specificity against mamadex.css's shared .page-mamadex rules
             (same technique every other MamaDEX page CSS file already
             uses — see mamadex-restoration-evidence.css §1-2). This page
             keeps BOTH "page-mamadex" and "page-mamadex-join" classes on
             <body> — the first is required so language-switcher.js's
             getPageNamespace() (picks the FIRST body class starting with
             "page-") keeps resolving to the shared flat
             /i18n/mamadex/{locale}.json bundle this page has always used;
             the second is this file's own CSS scope, purely for styling.
             Reuses existing mamadex.css/global.css components wherever
             possible (.sdx-card-section, .sdx-cta-band, .sdx-btn-primary/
             -secondary, .eyebrow, hero system, .capability-grid/-card/
             -card-media/-card-label — the six self-recognition cards in
             §3 of the page use these verbatim, zero new CSS) — only
             page-scoped additions below for the things this page needs
             that no existing component covers: the hero-image override
             and the plain prose lists/notes used in §4-§8.
   Type:     CSS
   License:  © Buktika, 2026. All rights reserved.
   Colour Map:    v3.9.0
   Design System: v4.0.0

   ChangeLog:
     v1.13.0 (2026-07-13): REDUNDANT MARGIN CLEANUP — owner instruction
             (part of the Door 3 rejected-build correction's "search every
             MamaDEX stylesheet" sweep). Removed the now-redundant
             margin-bottom: 1.5rem from .mamadex-join-section h2 — same
             value as the shared mamadex.css §1b .page-mamadex
             .sdx-card-section h2 rule, which now also supplies it. Not a
             visible change (identical numeric result), a cleanliness fix
             so this rule can no longer be mistaken for the source of
             truth. text-align and border-bottom-color on this rule are
             unchanged.
     v1.12.0 (2026-07-13): LIVING TOWER TYPOGRAPHY NORMALISATION — owner
             instruction (narrow visual normalisation pass, comparator:
             /living-tower/living-tower.html). This page's own
             .mamadex-join-section .eyebrow rule REMOVED — its font-size
             (0.9375rem), font-weight (800), text-align, width, and colour
             are now all set once in the shared mamadex.css §1b
             (.page-mamadex .eyebrow) rule at the exact Living Tower-
             computed values (font-size:1.1rem, weight:600, letter-
             spacing:0.15em unchanged, margin-block-end:2rem) — see that
             file's own changelog (v5.12.0). Historical v1.6.0 changelog
             paragraph above amended in place: it described a border-
             bottom amber override that was withdrawn the same day
             (v1.8.0) but the paragraph was never updated to say so —
             fixed this pass so it no longer contradicts the live
             .mamadex-join-section h2 rule below (border-bottom-color:
             var(--page-primary), unchanged, still correct).
     v1.11.0 (2026-07-13): SHARED SPACING HANDOFF — owner instruction,
             MamaDEX page-family eyebrow-to-title spacing correction (not a
             one-page patch — see mamadex.css v5.11.0 changelog for the
             full rationale and the other pages affected). Removed this
             rule's own margin-bottom: 2rem override on .mamadex-join-
             section .eyebrow — it was fighting the newly-centralised
             shared value (margin-block-end: 1.5rem) in mamadex.css's new
             .page-mamadex .eyebrow rule, which this page now inherits
             instead (this page already carries .page-mamadex on <body>).
             No other property on this rule changed — font-size, font-
             weight, letter-spacing, colour, and text-align: start are all
             unchanged. .mamadex-join-section h2's own margin-bottom: 1.5rem
             (spacing to the intro paragraph below, not to the eyebrow
             above) is untouched. Cache-busting query string on mamadex.css
             (loaded ahead of this file) bumped to ?v=5.11.0 on mamadex-
             join.html; this file's own link bumped to ?v=1.11.0.
     v1.10.0 (2026-07-13): DISCLOSURE-PANEL TEXT SIZE — owner instruction,
             following owner screenshot of an open §3 capability card
             (Care/Food/etc.) showing the panel copy reading too small.
             §7 only, four font-size bumps, no other property changed on
             any of the four rules:
             - .capability-disclosure-lead ("This may describe your centre
               if…" / "Later, we may ask about…"): 0.875rem → 1rem.
             - .capability-disclosure-list li (the checkmarked point rows):
               0.8125rem → 0.9375rem; line-height nudged 1.5 → 1.55 to keep
               the larger text comfortably spaced.
             - .capability-disclosure-consent (the "Important:" note):
               0.75rem → 0.875rem.
             - .capability-trigger ("What this includes" + chevron):
               0.8125rem → 0.875rem.
             Panel/list/consent padding, margins, colours, the chevron
             icon, and the collapsed card's own label/media sizing are all
             unchanged — this pass is font-size only, on already-open-panel
             text the owner flagged as illegible-small, not a layout or
             density change.
     v1.9.0 (2026-07-13): LIVING TOWER BUTTON FIX — owner instruction,
             following owner screenshot showing the §7 "See the Living
             Tower" button (class swapped to sdx-btn-primary in v2.9.0/
             mamadex-join.html) rendering flat/mono-colour and left-aligned
             rather than matching "Contact us about joining". Root cause:
             the page's real MamaDEX gradient lives in mamadex.css §7 on
             `.page-mamadex .sdx-cta-band .sdx-btn-primary` — scoped to the
             CTA band only — so this button, which sits in ordinary §7
             content outside .sdx-cta-band, fell through to global.css's
             flat single-colour .sdx-btn-primary base rule instead. Two
             changes, both §8/§9:
             - §8d: .mamadex-join-living-tower-link text-align reverted
               from left (v1.5.0's narrow-column-prose match) back to
               center, so the button sits centred like the CTA band button.
               margin-top (1rem) unchanged.
             - New §9: page-scoped rule,
               .page-mamadex-join .mamadex-join-living-tower-link
               .sdx-btn-primary, reproducing mamadex.css's exact CTA-band
               gradient/shadow/hover values (violet→depth 135deg gradient,
               white text, matching box-shadow) for this one button only —
               not a blanket .sdx-btn-primary override, so no other button
               on this page or elsewhere is affected. mamadex.css itself is
               untouched; this duplicates its §7 values page-locally, the
               same pattern already used throughout this file.
     v1.8.0 (2026-07-13): UNDERLINE COLOUR CORRECTION — owner instruction,
             following owner review of a live screenshot showing v1.7.0's
             var(--page-secondary) underline read as too dark. Owner named
             mamadex.html's own "What brings you to MamaDEX?" section
             (h2.section-title, no page-scoped override) as the exact
             colour reference and asked for token/computed-value parity,
             not a new colour. Edited §2 only, one property:
             .mamadex-join-section h2's border-bottom-color changed from
             var(--page-secondary) (#220f27, dark MamaDEX depth — too dark
             per owner) to var(--page-primary) (#8b5cf6, MamaDEX violet).
             This is the exact same token mamadex.html's own doors-section
             h2 resolves through: that section carries zero page-scoped
             border-bottom-color override in mamadex.css, so it falls
             straight through to global.css's canonical .sdx-card-section >
             h2 rule, `border-bottom: 2px solid var(--page-primary)` — the
             identical custom property, identical value (both pages bind
             --page-primary: var(--sdx-color-mama-violet) in their own §1
             token block), so computed border-bottom-color is now provably
             identical on both pages in both light and dark mode (dark mode
             on both routes through the same higher-specificity global.css
             rule, `[data-theme="dark"] .sdx-card-section > h2`, which this
             file does not and has never overridden). var(--page-accent)
             (amber) is still not used anywhere in this rule block. Eyebrow
             alignment (text-align:start/width:100%), eyebrow colour
             (var(--page-secondary) — unchanged, still correct per owner),
             h2 text-align/font/colour/margin-bottom, and every other
             property in this file are untouched.
     v1.7.0 (2026-07-13): SECTION-HEADING LOCKUP — FINAL CORRECTION — owner
             instruction, withdrawing v1.6.0's amber underline and centred
             eyebrow. Edited §2 only (Section header rhythm), the same rule
             block v1.6.0 touched:
             - .mamadex-join-section .eyebrow: text-align changed from
               center to start, plus width:100% added. Logical alignment
               (text-align:start), not text-align:left — this flips to right
               automatically under dir="rtl" with no separate RTL selector,
               matching global.css's own logical-property convention
               elsewhere. color:var(--page-secondary) (MamaDEX depth,
               #220f27) is unchanged from v1.6.0 — the owner's dark-eyebrow
               instruction stands; only the amber underline and the
               centred alignment are reversed this pass.
             - .mamadex-join-section h2: border-bottom-color changed from
               var(--page-accent) (amber) back to var(--page-secondary) —
               the dark MamaDEX violet already bound for this page (same
               token now used for the eyebrow). This restores alignment
               with global.css's own v3.16.0 rationale (amber reserved for
               CTA/accent roles only, pillar colour for heading underlines)
               that v1.6.0 had deliberately, explicitly departed from —
               that departure is now withdrawn. var(--page-accent) is not
               used anywhere in this rule block after this pass.
             h2 text-align (still center), font-family, font-weight, and
             the h2 text colour (var(--fg)) are untouched, per the global.css
             HARD RULE and per explicit owner instruction: the heading
             itself stays centred, only the eyebrow and the underline
             colour changed. margin-bottom values on both .eyebrow and h2
             (the spacing rhythm added in v1.6.0) are untouched — spacing
             was explicitly out of scope this pass. Applies to all seven
             .mamadex-join-section instances (Recognition, Does your work
             fit?, What joining means, What the intake looks at, What
             happens next, Living Tower relationship, Privacy and document
             safety) via the existing shared selector — no section-specific
             rule was added or needed. The compact readiness module
             (.mamadex-join-readiness, uses .mamadex-join-not-title, not h2
             or .eyebrow) and the CTA band (.sdx-cta-band, a different
             section entirely) were never matched by this selector and
             remain unaffected. No other rule in this file, no wording, no
             typography scale, no image, and no other section changed.
             mamadex.css, global.css, and living-tower.css untouched.
     v1.6.0 (2026-07-13): SECTION-HEADING LOCKUP — owner instruction, following
             owner review of Living Tower vs MamaDEX eyebrow/heading screenshots.
             Edited §2 only (Section header rhythm): .mamadex-join-section
             .eyebrow gains font-size/font-weight/letter-spacing/margin-bottom
             step-ups plus a colour change to var(--page-secondary) (MamaDEX
             depth, #220f27 — was inherited page-primary violet, flagged by
             owner as "not dark enough"); .mamadex-join-section h2 gains
             margin-bottom (opens the rule→intro gap) plus a border-bottom-
             colour change to var(--page-accent) (amber). Full rationale,
             including the deliberate divergence from global.css's v3.16.0
             underline-colour rationale (owner-authorised, cites BKT-PIL-03),
             is in §2's own header comment. Added the previously-absent
             Privacy (§8) eyebrow — "Before you send anything" — reversing
             that section's earlier "deliberately quieter, no eyebrow"
             design call per explicit owner instruction; new i18n key
             mamadex_join.privacy.eyebrow added to all 5 locales + vault. No
             other section's wording, the six capability cards, the
             readiness module, the CTA band, hero styling, or routes were
             touched. global.css, mamadex.css, and living-tower.css
             untouched — every colour reference below resolves through
             tokens mamadex.css already binds for this page.
     v1.5.0 (2026-07-13): DENSITY AND LAYOUT CORRECTION — owner instruction,
             formatting-only pass following owner review of screenshots.
             Added §8 below: full technical rationale for every change is
             in that section's own header comment (expanded-card
             architecture via :has() + grid, §4/§8 desktop two-column
             layouts, readiness-block restructure, disclosure density
             tightening, why the existing §2/§3 centred rules were left
             untouched rather than edited). No rule in §1-§7 was edited;
             §8 only adds new selectors or narrows scope via new wrapper
             elements in the HTML. No wording, image, route, or shared-file
             change. mamadex.css and global.css untouched.
     v1.4.0 (2026-07-12): SELF-CHECK DISCLOSURES — owner instruction,
             implementing the accepted criteria evaluation (Phase 9). Added
             §7 below: converts the six §3 capability cards to native
             <details>/<summary> disclosures and styles the new universal
             "Before you express interest" readiness block. See §7's own
             comment for the full technical rationale (summary content
             model, why .capability-card-label needs display:block now,
             lightbox/accordion non-engagement, chevron technique). No rule
             in §1-§6 changed. mamadex.css and global.css untouched.
     v1.3.0 (2026-07-12): HERO TYPOGRAPHY AUDIT + HEADLINE WIDTH CORRECTION —
             owner instruction. Owner reported the hero typography on Doors
             2/3/4 had drifted from the Door 1 (mamadex-restoration-
             evidence.html) reference and asked for computed-style parity
             plus a width-only fix for the Door 2 headline's line wrap.
             AUDIT FINDING: this file carries, and has ever carried, zero
             rules targeting .headline or .hero .intro. Grepped this file in
             full for font-family/font-size/font-weight/line-height/letter-
             spacing/text-shadow/color — every match is on an unrelated
             selector (.mamadex-join-section > .intro, a body-section intro
             pattern that cannot match the hero's <p class="intro"> because
             it requires a .mamadex-join-section ancestor, which the hero
             does not have; .join-list*; .mamadex-join-note*). No
             .headline or .hero .intro override exists or was removed —
             there was nothing to remove. Traced the live cascade instead:
             both elements inherit font-family/font-weight/line-height/
             letter-spacing/color/text-shadow from global.css's .headline
             and .hero .intro rules, and font-size from mamadex.css's
             .page-mamadex .headline{font-size:clamp(2.75rem,6vw,4.5rem)}
             override — the same three files (global.css, mamadex.css) in
             the same load order Door 1 uses, with no page-specific rule in
             between at any higher or equal specificity. Confirmed Door 1's
             own CSS (mamadex-restoration-evidence.css) also carries no
             .headline/.hero .intro override, so both pages resolve through
             an identical, unmodified cascade — computed values for
             font-family, font-size, font-weight, line-height, letter-
             spacing, color and text-shadow (.headline) and font-family,
             font-size, font-weight, line-height, color, text-shadow and
             paragraph-spacing (.hero .intro, via the shared .hero .headline
             + .intro margin-top rule) are already identical between Door 1
             and this page at any given viewport width. No CSS change was
             needed or made for typography itself.
             WIDTH FIX (the real cause of the "oversized five-line stack"):
             the >=1024px .hero-body width this page has used since v1.2.0,
             min(30rem,38vw)/max-width:30rem, was sized for the left-column
             placement fix and never revisited for THIS page's specific
             headline length. "Could your centre become part of MamaDEX?"
             (7 words) is markedly longer than the other three doors'
             headlines and was wrapping into 5 lines inside that column —
             not a font-size problem (font-size is identical to Door 1, see
             audit above) but a width problem, exactly as named in the
             owner's brief ("handle the long Join heading through width, not
             font-size reduction"). No headless browser or connected Chrome
             extension is available in this environment (re-confirmed this
             pass — list_connected_browsers returned empty), so getComputedStyle()
             line-wrap could not be observed directly; substituted a
             font-metric simulation instead: rendered the exact headline
             string at 72px/700 (the computed font-size at >=1200px
             viewport width, where the clamp maxes out) using Liberation
             Serif Bold — a metrically-similar stand-in for this file's
             actual --headline-font stack (Libre Baskerville, Georgia,
             Times New Roman, serif; none of which are installed in this
             sandbox) — and greedily word-wrapped it at a range of column
             widths. Result: 560px (35rem) is the simulated threshold where
             the wrap drops from 4 to 3 lines ("Could your centre" / "become
             part of" / "MamaDEX?"); the real font is expected to run
             somewhat wider than Liberation Serif (consistent with the
             owner's 5-line report against a 480px/30rem column, one more
             line than this simulation predicted at that width), so a
             margin above the simulated threshold was used rather than the
             threshold itself.
             FIX: >=1024px .hero-body width changed from min(30rem,38vw)/
             max-width:30rem to min(37rem,45vw)/max-width:37rem — a 112px
             increase at the 1440px reference viewport, chosen as the
             smallest step that clears the simulated 3-line threshold with a
             buffer, rather than jumping to the much larger mamadex.html
             precedent value (min(40rem,46vw)) unnecessarily. left:5%, top:
             50%, the translateY(-50%) centring, and text-align:left are
             unchanged. The <1024px block (max-width:min(42%,18rem)) is
             unchanged — the owner's brief named this a desktop-only fix,
             and neither the Java-hero mobile crop nor this page's shorter
             effective mobile measure showed a comparable stacking problem.
             CROP POSITION: background-position (57% 40% >=1024px, 52% 40%
             <1024px) is DELIBERATELY left unchanged this pass. The wider
             column does move the text block's right edge further right
             (by the same 112px, at the reference viewport), and re-deriving
             a new crop anchor from first principles here — without the
             original pass's saved intermediate face-zone coordinates, and
             without a live browser to confirm any recalculation — risks
             producing a confidently-wrong number, which is a worse outcome
             than an honestly-flagged unknown for a rule whose whole purpose
             is keeping a face uncovered. The original 57%/52% values were
             derived with a stated positive margin, not a zero-tolerance
             boundary, and the width increase here is the smallest one that
             clears the wrap requirement. Flagged for visual confirmation:
             recommend checking mamadex-join.html at 1440px width (and the
             1024-1439px range, where the vw term now controls) before
             treating this as final; connecting Chrome or opening the page
             directly would allow a definitive check. No image file
             modified. No hero wording, i18n key, section, or route
             touched. Version bump only — no other rule in this file
             changed.
     v1.2.0 (2026-07-12): HERO TEXT-PLACEMENT CORRECTION — owner instruction.
             v1.1.0's fix was diagnosed as wrong in kind, not just degree:
             it only shifted background-position, but .hero-body was still
             being rendered through global.css's default single-column
             grid, which CENTRES it (.hero-grid{justify-items:center},
             .hero-body{justify-self:center}, .hero{text-align:center}) —
             so the copy block sat directly over the same right-hand zone
             the three women occupy, regardless of how the background was
             cropped. This is a content-placement bug, not a crop bug.
             FIX: .hero-body is moved into a genuine left column, mirroring
             the technique mamadex.html's OWN hero already uses for this
             exact problem (mamadex.css §"Hero" block, `.page-mamadex
             .hero-body{position:absolute;left:44%;...}` at >=1024px) —
             that page's Mama sits LEFT-of-centre in its image, so its
             text sits right (`left:44%`); this page's three women sit
             RIGHT-of-centre, so the same technique is mirrored to anchor
             text near the LEFT edge instead (`left:5%`). A canonical grid
             column split was tried first and rejected: with .hero-grid's
             single-column layout, forcing .hero-body into an artificial
             two-column split via grid-template-columns produced the exact
             "narrow column forces an ugly multi-line stack" outcome
             mamadex.css's own v5.5.0/v5.6.0 changelog already documents
             and reverted for the same hero system — so this file follows
             that same precedent and uses position:absolute at >=1024px
             instead (permitted per owner instruction: "do not use
             arbitrary absolute positioning unless the canonical grid
             cannot perform the placement" — it cannot, without repeating
             a known-rejected result).
             Below 1024px, .hero-body stays in normal flow (position:
             static) but is left-justified (justify-self:start, text-
             align:left) rather than centred, with .hero switched to
             align-items:end (bottom-anchored) — again reusing mamadex.
             html's own proven mobile technique of anchoring copy over the
             image's lower, vignette-darkened register, away from face
             height, rather than relying on horizontal position alone.
             CROP POSITION RECALCULATED from scratch against the NEW text
             placement (the v1.1.0 value, 85%, was calculated to compensate
             for CENTRED text and is wrong for left-aligned text — a lower,
             not higher, anchor is correct now, since left-aligned text
             needs the image's own left-of-centre region to stay clear,
             which a smaller position value provides). Modelled full
             background-size:cover arithmetic at the four required
             verification viewports (1440x900, 1024x768, 768x1024, 390x844)
             against the actual .hero-body text-column geometry at each
             breakpoint, solving for the smallest horizontal anchor that
             keeps a >=1 percentage-point margin between the text column's
             right edge and the speaking community leader's face at every
             one of the four. Result: background-position 57% 40% at
             >=1024px, 52% 40% at <1024px (two values, not one, because the
             text column itself uses different placement mechanics above
             and below 1024px — matches mamadex.css's own precedent of a
             separate <1024px position rule). Verified: the central
             community leader's face keeps a positive margin at all four
             required viewports; the two other women fall partly outside
             the crop window at the narrowest viewport (390x844) — this is
             the same, explicitly-permitted "background loss unavoidable
             on narrow mobile" trade-off named in the owner's own priority
             order (faces > activity > readable copy > background), not a
             face being covered. No dark panel, no new overlay, no new
             eyebrow, no new button, no blur, no filter added. Headline/
             intro wording, typography family, and text-shadow are
             untouched — only .hero-body's placement/width and .hero-wrap's
             background-position changed. No image file modified, cropped,
             edited, or regenerated.
     v1.1.0 (2026-07-12): HERO CROP POSITION — owner instruction (BKT-35120
             Door 2 closure pass). SUPERSEDED by v1.2.0 above — diagnosed
             as the wrong fix (crop-only; did not address the centred-text
             placement bug that was the actual cause).
     v1.0.0 (2026-07-12): NEW FILE — owner instruction (BKT-35120 Door 2
             full build, following the accepted evaluation pass). Created
             because the v1.1.0 routing-shell version of this page used
             zero page CSS (relied entirely on mamadex.css's shared
             .page-mamadex rules, including the temporary shared doorway-
             Mama hero); the full build needs its own locked hero-image
             override (rural Java, Indonesia — asset not yet supplied,
             see mamadex-join.html's own changelog) plus the plain-prose
             list/note components used across §4-§8, none of which exist
             elsewhere on the site in exactly this shape.
   ====================================================================================================== */

/* ======================================================================================================
   1) Page variable override — locked hero image only. Every other
   .page-mamadex token (colours, --page-bg/-primary/-secondary/-accent/
   -depth) is inherited unchanged from mamadex.css's .page-mamadex block;
   not redeclared here.
   ====================================================================================================== */

.page-mamadex-join {
  /* Locked hero image — owner instruction: rural Java, Indonesia;
     established adult Indonesian women in a functioning Javanese
     community-centre environment; the central woman already carries
     local authority. Asset not yet supplied at time of this build (see
     mamadex-join.html's own changelog) — the --hero-image token is
     wired up now so the page is correct the moment the file lands at
     /assets/images/mamadex/mamadex-join-hero.webp; until then the hero
     shows its background colour/vignette only, the same graceful
     behaviour any page has when its --hero-image file is momentarily
     absent. Do not substitute a generic or African-coded image here
     (owner instruction) and do not generate one during any pass that
     has not been explicitly asked to. */
  --hero-image:         url("/assets/images/mamadex/mamadex-join-hero.webp");
  --hero-vignette-from: rgba(139, 92, 246, 0.20);  /* mama-violet, bottom only, max 0.25 — same value mamadex.css uses */
  --hero-vignette-to:   rgba(139, 92, 246, 0);
}

/* ======================================================================================================
   1b) Hero copy placement — v1.2.0. LOCKED VISUAL RULE: hero text occupies
   the left-hand field; the three conversing women stay unobstructed on the
   right. See this file's own changelog for the full derivation. Structural
   technique mirrors mamadex.html's own .page-mamadex .hero-body override
   (mamadex.css, "Hero" section) — same mechanism, positioned at the
   opposite side because this image's principal subjects sit right-of-
   centre rather than left-of-centre. Canonical headline/intro typography,
   text-shadow, and hero dimensions are untouched; only placement, width,
   and text-align are set here.
   ====================================================================================================== */

@media (min-width: 1024px) {
  .page-mamadex-join .hero-body {
    position: absolute;
    left: 5%;
    top: 50%;
    transform: translateY(-50%);
    /* v1.3.0: widened from min(30rem,38vw)/30rem — the narrower column was
       wrapping this page's long headline into 5 lines. See changelog for
       the font-metric simulation behind this specific value. */
    width: min(37rem, 45vw);
    max-width: 37rem;
    margin: 0;
    text-align: left;
  }
}

@media (max-width: 1023px) {
  .page-mamadex-join .hero {
    /* Bottom-anchor, not centre — keeps copy over the image's lower,
       vignette-darkened register, away from face height, the same
       technique mamadex.css's own <1024px hero rule uses. */
    align-items: end;
  }

  .page-mamadex-join .hero-body {
    position: static;
    justify-self: start;
    text-align: left;
    max-width: min(42%, 18rem);
    margin: 0;
    padding-bottom: 0.5rem;
  }
}

/* Crop position — v1.2.0, recalculated for the left-aligned text above
   (the v1.1.0 value, 85%, was tuned to compensate for CENTRED text and is
   wrong here). Two values because the text column's placement mechanics
   differ above/below 1024px, matching mamadex.css's own precedent of a
   separate <1024px position rule for this same hero system. */
.page-mamadex-join .hero-wrap {
  background-position: 57% 40%;
}

@media (max-width: 1023px) {
  .page-mamadex-join .hero-wrap {
    background-position: 52% 40%;
  }
}

/* ======================================================================================================
   2) Section header rhythm — shared centred eyebrow/h2/intro treatment
   for the plain-prose sections (§2 Recognition, §3 Does your work fit,
   §4 What joining means, §5 What the intake looks at, §6 What happens
   next, §7 Living Tower relationship, §8 Privacy). Matches the canonical
   .sdx-card-section > h2 underline rule (global.css) with a consistent
   intro measure beneath it — same convention mamadex-restoration-
   evidence.css §6 already established for the sibling Door 1 page.

   v1.6.0 UPDATE (HISTORICAL, superseded by v1.12.0 below) — SECTION-
   HEADING LOCKUP, owner instruction. Owner named the Living Tower page
   (living-tower.css §4) as the visual reference for the eyebrow→h2→
   rule→intro lockup's geometry and rhythm. That v1.6.0 pass also
   applied a border-bottom-color: var(--page-accent) (amber) h2 underline
   override per an explicit owner instruction at the time — that
   instruction was WITHDRAWN the same day (see v1.8.0 below, "Revert
   underline to light violet") and the amber override was removed from
   the live rule. This paragraph is kept only as history for anyone
   grepping past changelog entries; the live .mamadex-join-section h2
   rule below has carried border-bottom-color: var(--page-primary) since
   v1.8.0 and does not use amber.
   v1.12.0 UPDATE — LIVING TOWER TYPOGRAPHY NORMALISATION, owner
   instruction. The v1.6.0 pass above hand-set this page's own eyebrow
   size/weight/letter-spacing/colour to approximate the Living Tower
   geometry per-page. That per-page approximation is now retired: the
   exact Living Tower-computed values (font-size:1.1rem, weight:600,
   letter-spacing:0.15em, uppercase, margin-block-end:2rem) plus the
   dark-violet colour and reading-start alignment are now set ONCE in the
   shared mamadex.css §1b (.page-mamadex .eyebrow) rule and apply here
   automatically — this page's own .eyebrow rule is removed below rather
   than kept as a now-redundant duplicate that could drift out of sync.
   ====================================================================================================== */

.mamadex-join-section > .intro {
  font-size: 1.0625rem;
  line-height: 1.6;
  text-align: center;
  max-width: 65ch;
  margin: 0 auto 1.25rem;
  color: var(--muted);
}

.mamadex-join-section h2 {
  /* v1.13.0: margin-bottom removed — redundant with the shared
     mamadex.css §1b .page-mamadex .sdx-card-section h2 rule (margin: 0 0
     1.5rem), which now also wins on specificity for margin-block-start
     via .page-mamadex .sdx-card-section > .eyebrow + h2. text-align kept
     (matches canonical, redundant but harmless — not part of this pass's
     scope). */
  text-align: center;
  border-bottom-color: var(--page-primary); /* v1.8.0: lighter MamaDEX violet — same token mamadex.html's own canonical .section-title/.sdx-card-section > h2 rule resolves to (global.css, unmodified). See changelog. */
}

/* ======================================================================================================
   3) Plain prose lists (§4 exclusions, §5 intake areas, §6 process
   steps, §8 do-not-send items). Deliberately plain text rows, not cards
   or pills — this page stays in prose register throughout, matching the
   "concise public explanation" instruction for §5 and the "without
   sounding exclusionary or bureaucratic" instruction for §4.
   ====================================================================================================== */

.join-list {
  list-style: none;
  padding: 0;
  margin: 1.25rem auto 0;
  max-width: 65ch;
  text-align: left;
}

.join-list li {
  position: relative;
  padding-left: 1.5rem;
  margin-bottom: 0.65rem;
  color: var(--muted);
  line-height: 1.6;
  font-size: 1rem;
}

.join-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--page-primary);
  font-weight: 700;
}

/* Exclusion / do-not-send variant — same shape, a quieter dash marker
   instead of a checkmark, so these rows never read as affirmative
   requirements. Used by §4's "joining is not" list and §8's do-not-send
   list. */
.join-list--not li::before {
  content: "–";
  color: var(--muted);
  font-weight: 700;
}

/* Ordered process-steps variant (§6) — native decimal numbering via
   list-style, not the ::before checkmark (a numbered process reads more
   accurately as "this happens, then this" than a checklist would). */
.join-list--steps {
  list-style: decimal;
  padding-left: 1.5rem;
}

.join-list--steps li {
  padding-left: 0.35rem;
}

.join-list--steps li::before {
  content: none;
}

/* §4's "To be clear, joining is not:" lead-in line and §5/§6's intro
   sentence both use the shared centred .intro rule above; only the list
   lead-in title unique to §4 needs its own small rule. */
.mamadex-join-not-title {
  text-align: center;
  font-weight: 700;
  color: var(--fg);
  margin: 1.5rem auto 0;
  max-width: 65ch;
}

/* ======================================================================================================
   4) Quiet callout notes (§3 self-recognition disclaimer, §6 non-approval
   statement, §8 controlled-intake note). Same treatment as
   mamadex-restoration-evidence.css's .restoration-evidence-consent-note
   (not reused directly — that class lives in a stylesheet this page does
   not load, and that file is frozen — redeclared here at the same base
   values for visual consistency across the MamaDEX pillar).
   ====================================================================================================== */

.mamadex-join-note {
  margin: 1.5rem auto 0;
  max-width: 56rem;
  padding: 1rem 1.25rem;
  background: rgba(120, 113, 108, 0.08);
  border: 1px solid rgba(120, 113, 108, 0.18);
  border-radius: var(--radius);
  text-align: center;
  color: var(--muted);
  font-size: var(--body);
  line-height: 1.6;
}

/* Emphasis variant — carries the required verbatim non-approval sentence
   (§6). Same mama-violet accent already used for this page's hero
   vignette and elsewhere on the MamaDEX pillar for "pay attention" tone,
   without being alarming (no red/coral warning colour — this is a
   boundary statement, not an error). */
.mamadex-join-note--emphasis {
  background: rgba(139, 92, 246, 0.08);
  border-color: rgba(139, 92, 246, 0.30);
  color: var(--fg);
  font-weight: 600;
}

/* ======================================================================================================
   5) Living Tower secondary exit link (§7) — a restrained, centred
   outline link, not a competing primary CTA. This section's own
   .sdx-cta-band-style band is deliberately NOT used here (that component
   is reserved for the page's one mandatory, final, full-width CTA band
   in §9) — this is a quiet in-section link only.
   ====================================================================================================== */

.mamadex-join-living-tower-link {
  text-align: center;
  margin-top: 1.5rem;
}

/* ======================================================================================================
   6) Dark theme — only the values above that use fixed rgba() rather
   than existing tokens need an explicit override; var(--card)/
   var(--border)/var(--muted)/var(--fg)/var(--page-primary) already
   resolve correctly in dark mode via global.css/themes.css.
   ====================================================================================================== */

[data-theme="dark"] .mamadex-join-note {
  background: rgba(255, 255, 255, 0.05);
  border-color: rgba(255, 255, 255, 0.14);
}

[data-theme="dark"] .mamadex-join-note--emphasis {
  background: rgba(139, 92, 246, 0.16);
  border-color: rgba(139, 92, 246, 0.40);
}

/* ======================================================================================================
   7) Self-check disclosures — v1.4.0. Converts the six §3 capability cards
   from plain image+label into native <details>/<summary> disclosures (owner
   instruction, following the accepted criteria evaluation). The card's own
   .capability-card-media and .capability-card-label elements now live
   inside <summary> as <span> rather than <div>/<p> — a page-scoped markup
   change only, so their content stays valid inside summary's content model;
   the shared mamadex.css rules for those two classes are selector-only
   (never tag-qualified) and keep applying unmodified. display:block is
   restored on .capability-card-label here since <span> defaults to inline
   and <p>'s implicit block behaviour is lost with the tag change — the only
   reason this page overrides that one shared-looking property. Nothing in
   mamadex.css itself was touched; mamadex.html's own capability section
   keeps its original non-interactive div/p structure untouched.
   Whole-card selectability, "no lightbox" and "no JS accordion" all fall
   out of using <summary> as the sole trigger: native summary click/keyboard
   handling covers the whole box (image included, since img is not itself
   interactive and does not intercept the click), no .media-thumb class or
   data-gallery attribute is present so media-lightbox.js's delegation
   (which matches on .media-thumb) never engages, and multiple cards can be
   open at once because that is <details>'s native default — no JS was
   added to force accordion (single-open) behaviour, matching the owner's
   explicit "no JavaScript accordion" instruction.
   Chevron uses the same CSS-only border-triangle technique already
   established for this exact interaction pattern elsewhere on the site
   (faq.css's .faq-item summary::after), rotated via the details[open]
   attribute selector — no JS reads or writes the open state.
   ====================================================================================================== */

.page-mamadex-join .capability-disclosure {
  display: flex;
  flex-direction: column;
  width: 100%;
}

.page-mamadex-join .capability-summary {
  display: flex;
  flex-direction: column;
  width: 100%;
  cursor: pointer;
  list-style: none;
  -webkit-tap-highlight-color: transparent;
}

.page-mamadex-join .capability-summary::-webkit-details-marker {
  display: none;
}

.page-mamadex-join .capability-summary::marker {
  display: none;
}

/* <span> replaces <p> for summary-content-model validity (see file header
   note above) — restore the block display the shared mamadex.css rule
   never had to declare while this was a <p>. */
.page-mamadex-join .capability-card-label {
  display: block;
}

/* Trigger row — "What this includes" + chevron, directly beneath the
   label, inside the always-visible summary content (so it, like the
   photograph, stays visible when the card is collapsed). Centred to match
   the label's own centred treatment (mamadex.css .capability-card-label). */
.page-mamadex-join .capability-trigger {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.375rem;
  padding: 0 1rem 1rem;
  margin-top: -0.5rem;
  font-family: var(--text-font);
  font-size: 0.875rem;    /* v1.10.0: up from 0.8125rem — owner reported disclosure-panel text too small */
  font-weight: 600;
  color: var(--page-primary);
  /* Touch target: the whole summary (image + label + this row) is the
     click target, well over the 44px minimum on its own via the image
     height alone — this row does not need its own min-height. */
}

.page-mamadex-join .capability-chevron {
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 6px solid var(--page-primary);
  flex-shrink: 0;
  transition: transform 0.2s ease;
}

.page-mamadex-join .capability-disclosure[open] .capability-chevron {
  transform: rotate(180deg);
}

.page-mamadex-join .capability-summary:focus {
  outline: 2px solid var(--page-primary);
  outline-offset: -2px;
  border-radius: 10px;
}

.page-mamadex-join .capability-summary:focus:not(:focus-visible) {
  outline: none;
}

/* Panel content — hidden by the browser natively when the details element
   is closed (this div sits outside <summary>); only the lead/list/consent
   copy is ever conditionally hidden, never the photograph or label. */
.page-mamadex-join .capability-disclosure-panel {
  padding: 0 1rem 1.125rem;
}

.page-mamadex-join .capability-disclosure-lead {
  font-family: var(--text-font);
  font-weight: 700;
  font-size: 1rem;      /* v1.10.0: up from 0.875rem — owner reported disclosure-panel text too small */
  color: var(--fg);
  margin: 0.75rem 0 0.375rem;
  text-align: left;
}

.page-mamadex-join .capability-disclosure-lead:first-child {
  margin-top: 0;
}

.page-mamadex-join .capability-disclosure-list {
  list-style: none;
  padding: 0;
  margin: 0 0 0.25rem;
  text-align: left;
}

.page-mamadex-join .capability-disclosure-list li {
  position: relative;
  padding-left: 1.25rem;
  margin-bottom: 0.375rem;
  color: var(--muted);
  font-size: 0.9375rem;    /* v1.10.0: up from 0.8125rem — owner reported disclosure-panel text too small */
  line-height: 1.55;
}

.page-mamadex-join .capability-disclosure-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--page-primary);
  font-weight: 700;
}

.page-mamadex-join .capability-disclosure-consent {
  margin: 0.5rem 0 0;
  padding: 0.625rem 0.75rem;
  font-size: 0.875rem;    /* v1.10.0: up from 0.75rem — owner reported disclosure-panel text too small */
  line-height: 1.5;
  text-align: left;
  background: rgba(139, 92, 246, 0.08);
  border: 1px solid rgba(139, 92, 246, 0.22);
  border-radius: 6px;
  color: var(--fg);
}

[data-theme="dark"] .page-mamadex-join .capability-trigger,
[data-theme="dark"] .page-mamadex-join .capability-disclosure-columns > .capability-disclosure-col:first-child .capability-disclosure-lead {
  color: var(--sdx-color-mama-violet-light);
}

[data-theme="dark"] .page-mamadex-join .capability-chevron {
  border-top-color: var(--sdx-color-mama-violet-light);
}

/* Universal readiness block — reuses .mamadex-join-not-title (§2, already
   centred/bold) and .join-list (§3, already checkmarked/left-aligned) and
   .mamadex-join-note--emphasis (§6, already the exact non-approval-sentence
   styling used in §6 of the page) verbatim; only the wrapper's own top
   margin is new. */
.page-mamadex-join .mamadex-join-readiness {
  margin-top: 1.75rem;
}

@media (prefers-reduced-motion: reduce) {
  .page-mamadex-join .capability-chevron {
    transition: none;
  }
}

[data-theme="dark"] .page-mamadex-join .capability-disclosure-consent {
  background: rgba(139, 92, 246, 0.14);
  border-color: rgba(139, 92, 246, 0.35);
}

/* ======================================================================================================
   8) Density and layout correction — v1.5.0. Owner-reviewed screenshots
   showed two distinct problems: (a) opening a capability disclosure
   produced a tall narrow single-column wall of text instead of a scannable
   panel, and (b) §4-§8 read as excessive vertical padding over very wide
   centred prose. Both are corrected here, formatting only — no wording,
   image, route, contact, translation *value*, Form 1/2/3, or shared-file
   change anywhere below. One exception permitted by the brief: the
   duplicate non-approval sentence previously rendered in both this
   section and §6 is now rendered once only (§6's own <p> was removed in
   the HTML; the mamadex_join.next.non_approval_note key itself is kept,
   still consumed by the readiness block below).
   All new selectors below are page-scoped (.page-mamadex-join / new
   wrapper classes only) or scoped via a NEW WRAPPER ELEMENT whose
   presence changes the DOM parent of existing elements (e.g. .intro is
   now a child of .mamadex-join-content in §5-§8, not a direct child of
   .mamadex-join-section) — this is why the existing §2 rule
   (.mamadex-join-section > .intro, direct-child combinator) no longer
   matches those five sections without being edited: the immediate parent
   changed, so the old rule simply stops applying there, while continuing
   to serve §2 "Recognition" (deliberately NOT wrapped, deliberately NOT
   in scope for this pass) exactly as before. No existing §1-§7 rule was
   edited to make this work.
   ====================================================================================================== */

/* -- 8a) Generic narrow content column — §5 intake, §6 next, §7 Living
   Tower, §8 privacy intro/note. Left-aligned, narrower than the shared
   .sdx-card-section's own 1200px canvas so prose reads as a normal
   measure instead of stretching wall-to-wall. */
.mamadex-join-content {
  max-width: 42rem;
  margin: 0 auto;
}

.mamadex-join-content > .intro {
  font-size: 1.0625rem;
  line-height: 1.6;
  text-align: left;
  color: var(--muted);
  margin: 0 0 1.25rem;
}

.mamadex-join-content > *:last-child {
  margin-bottom: 0;
}

/* -- 8b) §4 "What joining means" — balanced two-column interior at
   desktop (left: what joining means; right: the "is not" list in a quiet
   inset surface, not a warning box), stacked on mobile. Reuses .intro and
   .join-list--not verbatim; only the grid wrapper and the inset surface
   are new. */
.mamadex-join-means-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.75rem;
  max-width: 56rem;
  margin: 0 auto;
}

@media (min-width: 1024px) {
  .mamadex-join-means-grid {
    grid-template-columns: 1fr 1fr;
    align-items: start;
    gap: 2.5rem;
  }
}

.mamadex-join-means-grid > .intro {
  font-size: 1.0625rem;
  line-height: 1.6;
  text-align: left;
  color: var(--muted);
  margin: 0;
}

.mamadex-join-not {
  background: rgba(120, 113, 108, 0.06);
  border: 1px solid rgba(120, 113, 108, 0.14);
  border-radius: var(--radius);
  padding: 1.25rem 1.5rem;
}

.mamadex-join-not .join-list {
  margin: 0;
}

.mamadex-join-not .join-list li:last-child {
  margin-bottom: 0;
}

[data-theme="dark"] .mamadex-join-not {
  background: rgba(255, 255, 255, 0.04);
  border-color: rgba(255, 255, 255, 0.12);
}

/* Redeclares text-align/margin only (cascade: later + equal specificity
   wins over the §3 rule above for these two properties; font-weight and
   color are unchanged so are not repeated). Both current users of this
   class — §4's "is not" title and the readiness block's own heading below
   — now sit in left-aligned narrow contexts, so a single left-aligned
   definition correctly serves both; there is no third, centred usage
   anywhere on this page. */
.mamadex-join-not-title {
  text-align: left;
  margin: 0 0 0.75rem;
}

/* -- 8c) §8 Privacy — two columns for the seven "do not send" items at
   desktop, one column on mobile. grid-auto-flow:column with a fixed
   4-row track reads top-to-bottom then continues in the second column
   (items 1-4, then 5-7), not the default row-major left-right-left-right
   order, which would read oddly for an itemised list. */
@media (min-width: 1024px) {
  .mamadex-join-privacy-list {
    display: grid;
    grid-template-rows: repeat(4, auto);
    grid-auto-flow: column;
    column-gap: 2rem;
    row-gap: 0;
  }
}

/* -- 8d) §7 Living Tower — reduced vertical prominence: button sits close
   to the copy above it (this is supporting context, not the primary
   application path) instead of the wider default gap.
   v1.9.0 CORRECTION — owner instruction, following owner screenshot review:
   the v1.5.0 left-alignment below is now overridden back to centred so this
   button visually matches the page's other primary CTA ("Contact us about
   joining" in the §9 CTA band) — see §9 below for the matching colour fix.
   Left-aligned narrow-column prose above (.mamadex-join-content > .intro)
   is untouched; only this button's own wrapper is re-centred. */
.mamadex-join-living-tower-link {
  text-align: center;
  margin-top: 1rem;
}

/* -- 8e) Universal readiness block — v1.5.0 restructure. Was a single
   centred column that visually disappeared beneath six busy cards; now a
   distinct, compact module: heading + one short framing line on the left,
   the seven points on the right, closing non-approval callout full-width
   beneath both (not the base .mamadex-join-note's own 56rem centred cap,
   which is still correct for the unrelated §3/§8 quiet-callout usages of
   that same base class — overridden here only for this instance via the
   added modifier class). Stacks to heading -> framing -> points -> callout
   on mobile, matching the brief's mobile order exactly. A top border
   (not a full section) marks it as its own module without becoming
   another large page-sized section. */
.page-mamadex-join .mamadex-join-readiness {
  margin-top: 1.75rem;
  padding-top: 1.75rem;
  border-top: 1px solid var(--border);
}

.page-mamadex-join .mamadex-join-readiness-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.25rem;
  align-items: start;
}

@media (min-width: 1024px) {
  .page-mamadex-join .mamadex-join-readiness-grid {
    grid-template-columns: minmax(14rem, 0.85fr) minmax(0, 1.3fr);
    gap: 2.5rem;
  }
}

.page-mamadex-join .mamadex-join-readiness-framing {
  font-family: var(--text-font);
  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--muted);
  margin: 0;
}

.page-mamadex-join .mamadex-join-readiness-list {
  margin: 0;
}

.page-mamadex-join .mamadex-join-readiness-callout {
  max-width: none;
  margin: 1.5rem 0 0;
}

/* -- 8f) Card grid — explicit safety net, not a change of behaviour:
   never stretch collapsed cards to match a taller sibling (e.g. a longer
   translated label wrapping to two lines in one locale). Harmless for
   open cards, which occupy their own full-width row and have no sibling
   to stretch against. */
.page-mamadex-join .capability-grid {
  align-items: start;
}

/* -- 8g) Expanded-card architecture — the main fix. An opened disclosure
   no longer renders as a tall narrow column: the card itself spans the
   full grid row (:has() — supported in every evergreen engine this site
   already depends on, e.g. faq.css's own modern CSS usage), and its two
   native children (<summary> = photo+label+trigger, and the panel div)
   become a two-column grid instead of a vertical stack. Photo/summary
   stay left, criteria panel right — matches the collapsed card's own
   left-to-right reading start point, so opening a card does not relocate
   the photograph. Below 1024px this entire block does not apply — cards
   stay exactly as already specified (single column, summary then panel
   stacked beneath, no side-by-side content), matching the established
   desktop/mobile line already used throughout this file's own hero rules.
   No accordion script — <details> keeps its native default of allowing
   multiple simultaneously-open elements; nothing here reads or writes the
   open attribute. */
@media (min-width: 1024px) {
  .page-mamadex-join .capability-card:has(.capability-disclosure[open]) {
    grid-column: 1 / -1;
  }

  .page-mamadex-join .capability-disclosure[open] {
    display: grid;
    grid-template-columns: minmax(18rem, 0.85fr) minmax(0, 1.3fr);
    gap: 1.5rem;
    align-items: start;
  }

  .page-mamadex-join .capability-disclosure[open] .capability-disclosure-panel {
    padding: 1.5rem 1.5rem 1.5rem 0;
  }

  .page-mamadex-join .capability-disclosure-columns {
    display: flex;
    gap: 2rem;
  }

  .page-mamadex-join .capability-disclosure-columns > .capability-disclosure-col {
    flex: 1 1 0;
    min-width: 0;
  }
}

/* -- 8h) Disclosure density reduction — tighter list rhythm, and the two
   lead phrases ("This may describe your centre if…" / "Later, we may ask
   about…") made visibly distinct by colour rather than weight alone, so
   an open panel reads as two clearly different kinds of information, not
   one undifferentiated block. Warning-note colour (mama-violet) is
   unchanged from v1.4.0 — still deliberately not red/coral, so it never
   reads as an error. */
.page-mamadex-join .capability-disclosure-list li {
  margin-bottom: 0.25rem;
}

.page-mamadex-join .capability-disclosure-panel {
  padding: 0 1rem 0.875rem;
}

.page-mamadex-join .capability-disclosure-columns > .capability-disclosure-col:first-child .capability-disclosure-lead {
  color: var(--page-primary);
}

.page-mamadex-join .capability-disclosure-columns > .capability-disclosure-col:last-child .capability-disclosure-lead {
  color: var(--fg);
  opacity: 0.72;
}

.page-mamadex-join .capability-disclosure-consent {
  margin-top: 0.75rem;
}

/* ======================================================================================================
   9) Living Tower button colour match — v1.9.0, owner instruction. Owner
   screenshot showed the "See the Living Tower" button rendering flat/mono
   (var(--page-primary) solid fill only) after v1.9.0's class swap to
   sdx-btn-primary, because the page's real MamaDEX gradient
   (mamadex.css §7, `.page-mamadex .sdx-cta-band .sdx-btn-primary`) is
   scoped to buttons inside .sdx-cta-band only — this button sits in §7's
   in-page content, not the CTA band, so it never matched that selector and
   fell back to global.css's plain single-colour .sdx-btn-primary rule.
   Reproduces the exact same gradient/shadow values as the CTA band rule,
   scoped narrowly to this one button only (not a blanket .sdx-btn-primary
   override, so no other button anywhere on this page or elsewhere is
   affected) so it now visually matches "Contact us about joining" exactly.
   mamadex.css itself is untouched — this is a page-scoped duplicate of its
   §7 values, same pattern this file already uses throughout. */
.page-mamadex-join .mamadex-join-living-tower-link .sdx-btn-primary {
  background: linear-gradient(135deg, var(--sdx-color-mama-violet) 0%, var(--sdx-color-mama-depth) 100%);
  color: #ffffff;
  box-shadow: 0 4px 16px rgba(139, 92, 246, 0.40),
              inset 0 0 0 1px rgba(255, 255, 255, 0.20);
}

.page-mamadex-join .mamadex-join-living-tower-link .sdx-btn-primary:hover {
  box-shadow: 0 10px 30px rgba(139, 92, 246, 0.55),
              inset 0 0 0 1px rgba(255, 255, 255, 0.25);
}
