/* ==========================================================================
   JAGRITI DHAM - HOME PAGE, "Understanding Jagriti Dham" section
   ==========================================================================
   Enqueued on the front page only (see functions.php). Loaded after
   css/responsive.css, so source order settles most of this without !important.

   WHAT IT LOOKED LIKE BEFORE, measured on the live page:
     - the heading was 50px/60px Helvetica 400 in #4f6f52 - 4.4:1 on the band,
       which passes for large text and nothing more
     - the body was 15px/24px Helvetica, LEFT aligned under a CENTRED heading,
       running the full 803px column: about 100 characters a line, for an
       audience that skews 65+
     - the band was flat #ebe3cd with 30px of padding and no relationship to
       anything else on the page
     - `.about h1 strong{display:block;font-style:italic}` already put
       "Jagriti" Dham on its own italic line, which is a good bone and is kept

   The header now establishes a language for this site - Fraunces and Karla,
   paper grain, brass hairlines, the diamond from the ribbon. This section is
   brought into it rather than being restyled on its own terms. Both families
   are already enqueued sitewide by functions.php for the header, so this
   section costs no extra font request.

   CONTRAST, all measured against the #ebe3cd band:
       #2b3f2f  heading            8.84:1
       #6b5426  the italic line    5.61:1   (passes AA for normal text, not
                                             merely the 3:1 large-text floor)
       #333a31  body copy          9.16:1
   The old #4f6f52 heading was 4.4:1 and is replaced.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The band
   --------------------------------------------------------------------------
   style.css:1906 already gives .about the cream ground and a brass rule along
   the bottom. Added here: the same paper grain the header ribbon uses, a
   matching hairline along the TOP so the band is closed on both edges, and
   room to breathe - 30px of padding around a 50px heading was the main reason
   this read as cramped. */
.about{
  position:relative;
  padding:74px 24px 78px;
  background-color:#ebe3cd;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.045'/%3E%3C/svg%3E"),
    linear-gradient(180deg, rgba(255,255,255,.5) 0%, rgba(255,255,255,0) 38%, rgba(127,102,48,.05) 100%);
  border-top:1px solid rgba(203,178,121,.85);
}

/* --------------------------------------------------------------------------
   The heading
   -------------------------------------------------------------------------- */
.about h1{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  /* clamp rather than a breakpoint step: this heading is two words and a
     quoted name, and it should stay on two lines from 320px to 1920px */
  font-size:clamp(31px, 4vw, 52px);
  line-height:1.14;
  font-weight:600;
  letter-spacing:-.012em;
  color:#2b3f2f;
  text-align:center;
  margin:0;
}
/* style.css:2932 already sets display:block and italic on the strong - that
   is what puts "Jagriti" Dham on its own line, and it is worth keeping. Only
   the weight, colour and rhythm change. */
.about h1 strong,
.about h1 span{
  display:block;
  font-style:italic;
  font-weight:500;
  color:#6b5426;
  margin-top:.08em;
  letter-spacing:-.005em;
}

/* the ornament: the ribbon's diamond on a brass hairline.
   ONE pseudo-element doing both jobs, as two background layers - the diamond
   is an SVG with the band colour painted behind it, which punches a hole in
   the line rather than sitting on top of it. h1::before is left alone so the
   heading text is never preceded by generated content a screen reader might
   announce. */
.about h1::after{
  content:"";
  display:block;
  width:190px; height:9px;
  margin:26px auto 0;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%23ebe3cd'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%236b5426'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(107,84,38,0) 0%, rgba(107,84,38,.5) 24%, rgba(107,84,38,.5) 76%, rgba(107,84,38,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:center center, center center;
  background-size:17px 9px, 100% 1px;
}

/* --------------------------------------------------------------------------
   The body copy
   --------------------------------------------------------------------------
   Centred under a centred heading, at a measure that can actually be read.
   The paragraph was running the full 803px column - roughly 100 characters a
   line against the 60-75 that is comfortable, and at 15px. 17.5px on a 66ch
   measure is the substance of this change; everything else here is surface. */
.about p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:17.5px;
  line-height:1.78;
  color:#333a31;
  /* Justified and full-column, as asked for.

     TWO THINGS THAT HAVE TO COME WITH JUSTIFY, or it looks worse than the
     ragged right it replaced:

     hyphens:auto - justification works by stretching the spaces on a line. If
     no word can break, a line holding one long word ("age-integrated",
     "consciousness") stretches the remaining gaps to cover it, and those gaps
     line up down the paragraph as rivers. Hyphenation gives the engine
     somewhere else to take up the slack. It needs lang on <html>, which this
     theme sets.

     A CAP, even though the brief was "wider". The column here is col-lg-8 with
     no .container above it, so it is 66.67% of the VIEWPORT, not of a fixed
     content width - at 1920 that is about 1250px, roughly 140 characters a
     line. 860px holds the full column at ordinary laptop widths and only bites
     on very large monitors. */
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
  max-width:min(100%, 860px);
  margin:30px auto 0;
}
.about p:last-child{ margin-bottom:0; }

/* style.css:271 gives .sectiongap 20px 0; the band's own padding now carries
   the rhythm, so the inner gap only adds an uneven extra. */
.about .sectiongap{ padding:0; }

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
@media (max-width:991px){
  .about{ padding:58px 22px 62px; }
  .about p{ font-size:17px; margin-top:26px; }
  .about h1::after{ width:160px; margin-top:22px; }
}

@media (max-width:767px){
  .about{ padding:46px 18px 50px; }
  /* 16.5px is the floor for this audience; the measure narrows instead.
     CORRECTION, 2026-09-08: this paragraph was left justified on phones and
     described as holding up there. It does not. Measured word gaps, as a
     multiple of the natural space width:

         360px viewport (309px column)   worst line 5.1x   7 of 13 over 3x
         375px viewport (324px column)   worst line 4.3x   4 of 12 over 3x
         768px viewport (603px column)   worst line 2.4x   0 of 6

     So justify holds from 768 up and comes apart below it. Roughly 40
     characters a line is simply not enough room to absorb the slack, and
     hyphenation only softens it. Ragged right below 768. */
  .about p{ font-size:16.5px; line-height:1.7; margin-top:22px; text-align:left; }
  .about h1::after{ width:130px; margin-top:20px; }
}

/* responsive.css:705 sets `.about h1{font-size:34px}` at <=480px, which would
   override the clamp and undo the fluid sizing at exactly the width where it
   matters most. Same specificity, but this file loads later, so restating the
   clamp here is enough - no !important needed. */
@media (max-width:480px){
  .about h1{ font-size:clamp(28px, 7.4vw, 34px); }
}

/* --------------------------------------------------------------------------
   Motion
   --------------------------------------------------------------------------
   The heading sits in a `.wow slideInDown` wrapper driven by wow.min.js, which
   sets visibility:hidden inline until the element scrolls into view. That is
   fine when the script runs, and harmless when it does not - no script, no
   inline style, so the heading simply shows. It does NOT currently respect a
   reduced-motion preference, so that is added here. */
@media (prefers-reduced-motion:reduce){
  .about .wow{
    visibility:visible !important;
    animation:none !important;
  }
}

/* ==========================================================================
   "At Jagriti Dham "Compassion" is the Key !"   --  the .boxbg panel
   ==========================================================================
   Front page only, same enqueue as everything above. Loads after
   css/responsive.css, so source order settles most of this; where a theme
   rule needed beating on specificity rather than order it is noted inline.

   Everything here is scoped under .boxbg. That class appears exactly ONCE on
   the front page (front-page.php:41) but is generic enough to exist on other
   templates, and .grid / figure.effect-oscar are shared photo-grid classes.
   Scoping keeps all of this inside this one panel.

   WHAT WAS WRONG, measured on the live page at 1280:

   1. THE TILE COPY WAS INVISIBLE ON TOUCH. figure.effect-oscar p is
      opacity:0 + transform:scale(0) and only :hover brings it back. A phone
      or a tablet has no hover, so Meaning / Care / Peace / Companionship -
      the actual substance of this panel - simply did not exist for most of
      the audience. Nothing was focusable either, so a keyboard user could
      not reach it. That is the main fix here.

   2. .gradient_heading is not a gradient. It is background:#4f6f52 (a flat
      colour) painted through -webkit-background-clip:text with
      -webkit-text-fill-color:transparent. Same result as color:#4f6f52 in
      every browser that supports the clip, and INVISIBLE TEXT in any that
      does not, plus it breaks selection highlighting. Replaced with a plain
      colour.

   3. 40px/50px Helvetica 600 in #4f6f52 on white is 4.4:1 - the large-text
      floor and nothing more - and it sat directly under the Fraunces
      heading of the section above, so the page changed voice mid-scroll.

   4. Body copy 15px/25px Helvetica, for an audience that skews 65+.

   5. position:sticky with top:100px, against a fixed header that is 102px
      tall once condensed. The heading slid UNDER the header when it stuck.
      It was also still sticky below 1200px, where the two columns stack and
      there is nothing to stick beside.

   6. filter:grayscale(1) on all four photographs, lifted only on hover -
      so on every touch device the panel was four permanently grey squares.

   7. cursor:pointer on figures that are not links.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground and the panel
   --------------------------------------------------------------------------
   .about above is cream, .boxbg was flat #fff, and the page behind is #fff -
   so the panel had no edges and the cream simply stopped. Three grounds now,
   warm to cool: the cream band, a paler cream behind the panel, and the
   panel itself in near-white paper. The pale ground dissolves to white at
   the bottom so the next section does not start on a hard line. */
.about_area{
  background:linear-gradient(180deg,#f7f2e6 0%,#f7f2e6 68%,#ffffff 100%);
  padding-bottom:78px;
}

.boxbg{
  position:relative;
  padding:56px 36px 60px;
  background-color:#fdfbf6;
  /* the same grain as .about, so the two halves of this section are made of
     the same paper */
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E");
  border:1px solid rgba(203,178,121,.55);
  box-shadow:0 26px 60px -44px rgba(43,63,47,.55);
}

/* the panel's own padding carries the rhythm now; .sectiongap's 20px 0 only
   added an uneven extra (style.css:271) */
.boxbg.sectiongap{ padding-top:56px; padding-bottom:60px; }

/* --------------------------------------------------------------------------
   Column balance
   --------------------------------------------------------------------------
   The markup is col-xl-5 / col-xl-1 spacer / col-xl-6 - 405 / 88 / 515 at
   1280. 515px split two-up gave 243px tiles, and 243px is simply too small
   for the 325-character paragraph inside the longest of them: it only fitted
   at 12px/16px, which is the reason that copy was set so small.

   Taking 3.7% from the text column and almost all of the spacer gives the
   grid 60% instead of 50%, so the tiles come out around 308px and the same
   copy fits at 13.5px/1.5 with room left over. The text column is still
   ~400px, about 53 characters a line, which is a comfortable measure for an
   intro column.

   Bootstrap's .col-xl-5 is (0,1,0); .boxbg .row > .col-xl-5 is (0,3,0). */
@media (min-width:1200px){
  .boxbg .row > .col-xl-5{ flex:0 0 auto; width:38%; }
  .boxbg .row > .col-xl-6{ flex:0 0 auto; width:60%; }
  /* the spacer column has to lose its gutter padding as well as its width.
     A Bootstrap column is border-box with 12px of padding each side, so
     width:2% (19px at this size) is CLAMPED UP to the 24px the padding
     needs - the three columns then add up to more than 100% and the grid
     wraps onto its own line. Cost me a puzzled minute; leaving the note. */
  .boxbg .row > .col-xl-1{ flex:0 0 auto; width:2%; padding-left:0; padding-right:0; }
}

/* --------------------------------------------------------------------------
   The sticky text column
   --------------------------------------------------------------------------
   style.css:690 sets top:100px sitewide. The condensed header is
   0 (ribbon) + 56 (bar) + 46 (nav) = 102px - see css/header-lux.css:486-491,
   which is where those three numbers live - so at 100px the heading passed
   BEHIND the header every time it stuck. 56 + --jd-h-nav + 24 of air.

   By the time this panel is on screen the header is always condensed (the
   condense fires at 96px of scroll and this sits ~1300px down), so the
   condensed height is the right one to clear.

   Below 1200 the columns stack, so there is nothing to be sticky beside -
   a full-width block pinning itself to the top is just a glitch. */
/* default static and sticky only above 1200, rather than the other way
   round - a min/max pair leaves a seam at exactly 1199 (see the note on the
   photo grid), and a full-width block pinning itself to the top is a glitch
   rather than an effect. */
.boxbg .sticky_div{ position:static; margin-bottom:34px; }
@media (min-width:1200px){
  .boxbg .sticky_div{
    position:sticky;
    top:calc(56px + var(--jd-h-nav, 46px) + 24px);
    margin-bottom:0;
  }
}

/* --------------------------------------------------------------------------
   The heading
   --------------------------------------------------------------------------
   The field holds:  At Jagriti Dham <strong>"Compassion"</strong><strong> is
   the Key !</strong>  - both strongs are display:block (style.css:780), so it
   rendered as three equal 40px green lines. CSS cannot target the bare text
   node "At Jagriti Dham", but it does not need to: that text node inherits
   from .gradient_heading itself, and the two strongs override it. So styling
   the container as the eyebrow and the strongs as the display type turns one
   flat block into eyebrow + headline without touching the content.

   The pairing mirrors .about h1 one section up - roman green line, then
   italic brass line - so the two headings read as a family. */
.boxbg .gradient_heading{
  /* kill the background-clip text hack (style.css:768-778) outright */
  background:none;
  -webkit-text-fill-color:currentColor;
  -webkit-background-clip:border-box;
          background-clip:border-box;

  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:12.5px;
  line-height:1.4;
  font-weight:600;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:#7a6134;              /* 6.24:1 on #fdfbf6 - AA for small text */
  margin:0 0 4px;
  text-align:left;
}

/* a short brass rule above the eyebrow. The section above is marked with a
   centred diamond on a hairline; this column is left-aligned, so it gets the
   left-aligned cousin rather than a repeat of the same ornament. */
.boxbg .gradient_heading::before{
  content:"";
  display:block;
  width:46px; height:1px;
  margin:0 0 18px;
  background:linear-gradient(90deg,#a98b45 0%,rgba(169,139,69,.15) 100%);
}

.boxbg .gradient_heading strong{
  display:block;
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  text-transform:none;
  letter-spacing:-.012em;
}
/* "Compassion" */
.boxbg .gradient_heading strong:first-of-type{
  font-size:clamp(34px, 3.5vw, 50px);
  line-height:1.1;
  font-weight:600;
  color:#2b3f2f;              /* 10.7:1 on #fdfbf6 */
  margin-top:2px;
}
/* is the Key ! */
.boxbg .gradient_heading strong:last-of-type{
  font-size:clamp(24px, 2.4vw, 34px);
  line-height:1.18;
  font-weight:500;
  font-style:italic;
  color:#6b5426;              /* 7.0:1 on #fdfbf6 */
  letter-spacing:-.004em;
}

/* --------------------------------------------------------------------------
   The intro copy
   --------------------------------------------------------------------------
   .boxbg p also matches the paragraphs inside the figcaptions, so this is
   scoped to .sticky_div. Karla at 17px to sit with .about p above, justified
   with hyphens for the same reason it is justified there. responsive.css:341
   already justifies .boxbg p at <=480 - the theme's own author had the same
   instinct - and this simply makes it true at every width. */
.boxbg .sticky_div p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:17px;
  line-height:1.72;
  color:#3a4238;              /* 9.1:1 on #fdfbf6 */
  margin:20px 0 0;
  /* RAGGED, not justified - and this one was measured rather than eyeballed.
     Justification works by stretching the spaces on a line, and every space on
     a given line is stretched by the same amount, so a narrow column has
     nowhere to hide the slack. Rendered word gaps in this column, as a
     multiple of the font's natural space:

         column 390px (1440)   worst line 7.2x   5 of 7 lines over 3x
         column 344px (1280)   worst line 4.1x   4 of 7 lines over 3x
         column 255px (360)    worst line 25.8x  6 of 10 lines over 3x

     JUSTIFIED ANYWAY, on request and on a second asking. The measurement
     above is still true and is not hidden here - what changed is whose call
     it is. hyphens:auto is what keeps it from being worse: it gives the
     engine somewhere other than the word spaces to take up the slack, and
     without it the same column measures far looser again.

     To put it back to ragged, this one line becomes text-align:left. */
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
}
.boxbg .sticky_div p:first-of-type{ margin-top:26px; }
.boxbg .sticky_div p strong{ font-weight:600; color:#2b3f2f; }

/* --------------------------------------------------------------------------
   The photo grid
   --------------------------------------------------------------------------
   THE CARD IS THE DEFAULT AND THE OVERLAY IS THE ENHANCEMENT, not the other
   way round. That ordering matters twice over:

   - It is what makes the copy reachable. The theme hid four paragraphs
     behind :hover, so on a phone or a tablet they did not exist. Written
     this way the readable card is what every device gets unless it can
     prove it has a mouse AND the room to use one.

   - It closes a gap I actually shipped for a few minutes. The first pass
     used `@media (hover:none), (max-width:1199px)` for the card and left
     everything else as the base, and at a viewport of exactly 1199 NEITHER
     matched: max-width:1199 was false (fractional viewport width) and the
     1200 column rules were off too, so the grid rendered as an overlay
     inside a full-width stacked column. Two opposite queries always leave a
     seam; one query and a default cannot. */

/* .g-1 is a 4px gutter (0.25rem). Four photographs 4px apart read as one
   accidentally-sliced image rather than four cards. .boxbg .row.g-1 is
   (0,3,0) against Bootstrap's (0,1,0). */
.boxbg .row.g-1{ --bs-gutter-x:16px; --bs-gutter-y:16px; }

/* height:100% down the chain so two cards side by side in one row finish
   level even when one caption runs longer. */
.boxbg .grid{
  max-width:none;
  margin:0;
  height:100%;
  text-align:left;
}

.boxbg .grid figure{
  position:relative;
  float:none;                 /* beats responsive.css:981/1095 width:85% too */
  width:100%;
  height:100%;
  margin:0;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  background:#ffffff;
  border:1px solid rgba(203,178,121,.55);
  box-shadow:0 14px 30px -24px rgba(43,63,47,.55);
  /* nothing here is a link, so the hand cursor was a promise the tile could
     not keep (style.css:1173) */
  cursor:default;
}

.boxbg .grid figure img{
  position:relative;
  display:block;
  width:100%;
  height:auto;
  min-height:0;
  max-width:none;
  aspect-ratio:4/3;
  object-fit:cover;
  /* The sources are 600x600, so a landscape card crop throws away a quarter
     of the height - and with the default centre anchor that comes off the
     TOP as well as the bottom, which clipped the top of the head on Peace
     and on the standing figure in Companionship. All four are shot with the
     subject in the upper half, so the crop is biased upwards. Checked on
     each of the four rather than assumed. */
  object-position:center 22%;
  /* the permanent grayscale(1) is gone. These are warm photographs - a lawn,
     marigolds, terracotta, a white kurta - and four grey squares read
     clinical on a page about compassion. */
  filter:none;
  transform:none;
  /* no transition in card mode. There is no state to move between here, and
     a transition on opacity/filter that is armed at load leaves the element
     sitting at the theme's start value until the first frame paints - which
     on a slow phone is a real flash of hidden text, not a theoretical one. */
  transition:none;
}

.boxbg .grid figcaption{
  position:static;
  width:auto;
  height:auto;
  flex:1 1 auto;
  display:flex;
  flex-direction:column;
  justify-content:flex-start;
  padding:20px 22px 24px;
  text-align:left;
  text-transform:none;
}
/* the brass inset frame belongs to the overlay; on a card it would be a box
   drawn around a box */
.boxbg .grid figcaption::before{ content:none; }

.boxbg .grid figcaption h2{
  margin:0 0 9px;
  transform:none;
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:21px;
  line-height:1.18;
  font-weight:600;
  letter-spacing:-.008em;
  color:#2b3f2f;              /* 12.2:1 on #fff */
  text-transform:none;
  text-shadow:none;
  transition:none;
}

.boxbg .grid figcaption p{
  margin:0;
  opacity:1;
  max-height:none;
  overflow:visible;
  transform:none;
  transition:none;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:15.5px;
  line-height:1.62;
  color:#3a4238;              /* 10.3:1 on #fff */
  text-transform:none;
  /* Justified, on request. This is the narrowest measure on the page - the
     caption sits in a ~225px box over the photograph on a desktop and in a
     ~250-300px card below it on a phone - so it is also where justification
     has the least room to work. responsive.css:341 was already doing this to
     every .boxbg p at <=480; now it is deliberate and it applies at every
     width instead of only on small phones.

     hyphens:auto is doing more here than anywhere else on the page. The
     measured numbers are in README-HOME.md. One line back to text-align:left
     if it reads badly on the tiles. */
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
}

/* on a phone the four cards are a long scroll; a shallower crop takes about
   90px off each one without losing the subject */
@media (max-width:767px){
  .boxbg .grid figure img{ aspect-ratio:16/10; }
  .boxbg .grid figcaption{ padding:17px 18px 20px; }
  .boxbg .grid figcaption h2{ font-size:20px; }
  .boxbg .grid figcaption p{ font-size:15px; line-height:1.6; }
}

/* --------------------------------------------------------------------------
   Pointer, and room for it: the overlay
   --------------------------------------------------------------------------
   A mouse and at least 1200px. Below that the two columns stack anyway, so
   an overlay would be a 430px-wide photograph with its caption hidden behind
   a hover - the worst of both. */
@media (hover:hover) and (min-width:1200px){

  /* 4:5 rather than the square the photographs are cropped to. The square
     gave 266px tiles at 1280, and the longest of the four captions
     (Companionship, 361 characters) needs about 226px of text height at a
     readable 13.5px - more than a 266px square has left once the title and
     the padding are out. Portrait buys that room, and a 600x600 source loses
     only 10% off each side to the crop. This is the whole reason that copy
     used to be set at 12px. */
  .boxbg .grid figure{
    display:block;
    height:auto;
    aspect-ratio:4/5;
    background:#1c231c;
    border-color:rgba(203,178,121,.4);
    box-shadow:none;
  }

  .boxbg .grid figure img{
    position:absolute;
    inset:0;
    height:100%;
    aspect-ratio:auto;
    /* a light desaturation holds the four together as a set at rest; hover
       takes it off entirely */
    filter:saturate(.9) contrast(1.02);
    transition:transform .8s cubic-bezier(.2,.7,.2,1), filter .45s ease, opacity .45s ease;
  }

  /* the scrim. figcaption::before is already spoken for (the brass inset
     frame), so this rides on the figure's own ::after, under the caption and
     over the photograph. */
  .boxbg .grid figure::after{
    content:"";
    position:absolute;
    inset:0;
    z-index:1;
    pointer-events:none;
    background:linear-gradient(180deg,
      rgba(18,24,18,0) 34%,
      rgba(18,24,18,.32) 62%,
      rgba(18,24,18,.86) 100%);
    transition:background .45s ease;
  }

  /* justify-content:flex-end replaces figure.effect-oscar h2's margin:78% -
     a PERCENTAGE margin, which resolves against the tile's WIDTH, so the
     title only sat in the right place because the tiles happened to be
     square. */
  .boxbg .grid figcaption{
    position:absolute;
    inset:0;
    z-index:2;
    justify-content:flex-end;
    padding:20px 20px 18px;
  }

  /* permanent instead of hover-only, so a tile looks finished at rest.
     (0,2,2) beats figure.effect-oscar figcaption::before at (0,1,3). */
  .boxbg .grid figcaption::before{
    content:"";
    position:absolute;
    top:11px; right:11px; bottom:11px; left:11px;
    border:1px solid rgba(203,178,121,.42);
    opacity:1;
    transform:none;
    transition:border-color .45s ease;
  }

  .boxbg .grid figcaption h2{
    margin:0;
    font-size:23px;
    line-height:1.16;
    color:#f6edd8;
    text-shadow:0 1px 3px rgba(0,0,0,.55);
  }

  /* The paragraph stays in flow and is clipped rather than scaled, so when
     it opens it pushes the title up instead of landing on top of it.
     max-height is a transition handle only. */
  .boxbg .grid figcaption p{
    /* the caption is bottom-aligned, so the gap that matters is ABOVE the
       paragraph; the figcaption's own padding closes the bottom. */
    margin:7px 0 0;
    opacity:0;
    max-height:0;
    overflow:hidden;
    transform:translateY(6px);
    font-size:13.5px;
    line-height:1.52;
    color:#f0e8d8;
    transition:opacity .4s ease, max-height .5s ease, transform .4s ease;
  }

  /* :focus-within alongside :hover so that if anything focusable ever lands
     inside a tile the copy opens for a keyboard as well as a mouse. */
  .boxbg .grid figure:hover::after,
  .boxbg .grid figure:focus-within::after{
    background:linear-gradient(180deg,rgba(18,24,18,.82) 0%,rgba(18,24,18,.9) 100%);
  }
  .boxbg .grid figure:hover img,
  .boxbg .grid figure:focus-within img{
    filter:none;
    opacity:1;
    transform:scale(1.055);
  }
  .boxbg .grid figure:hover figcaption::before,
  .boxbg .grid figure:focus-within figcaption::before{
    border-color:rgba(203,178,121,.9);
  }
  .boxbg .grid figure:hover figcaption p,
  .boxbg .grid figure:focus-within figcaption p{
    opacity:1;
    max-height:360px;
    transform:none;
  }

  /* style.css:1257 drops the photo to opacity:.4 on hover, which greys the
     colour out again at exactly the moment it should be at its best. The
     scrim is doing that job now. */
  .boxbg .grid figure.effect-oscar:hover img{ opacity:1; }
}

/* The tiles grow with the panel, so the overlay only has a fitting problem
   at the very bottom of the desktop range: at 1200 a tile is 251px wide and
   Companionship (361 characters) overflowed it by 9px. Measured, not
   guessed. A taller crop and a step down in size fix it there without
   touching the sizes that already work, and the ratio change is inside a
   breakpoint, so nobody ever sees it happen. */
@media (hover:hover) and (min-width:1200px) and (max-width:1365px){
  .boxbg .grid figure{ aspect-ratio:3/4; }
  .boxbg .grid figcaption{ padding:16px 16px 15px; }
  .boxbg .grid figcaption h2{ font-size:20px; }
  .boxbg .grid figcaption p{ font-size:12.5px; line-height:1.5; margin-top:6px; }
}

/* and the opposite at the top of the range: a 417px tile at 1920 makes
   13.5px copy look stranded, and there is 300px of spare height to spend. */
@media (hover:hover) and (min-width:1600px){
  .boxbg .grid figcaption{ padding:26px 26px 24px; }
  .boxbg .grid figcaption h2{ font-size:26px; }
  .boxbg .grid figcaption p{ font-size:15px; line-height:1.56; margin-top:10px; }
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
@media (max-width:1199px){
  .boxbg{ padding:48px 30px 52px; }
  .boxbg.sectiongap{ padding-top:48px; padding-bottom:52px; }
  .about_area{ padding-bottom:60px; }
}

@media (max-width:767px){
  .boxbg{ padding:36px 20px 40px; }
  .boxbg.sectiongap{ padding-top:36px; padding-bottom:40px; }
  .boxbg .gradient_heading{ font-size:12px; letter-spacing:.18em; }
  .boxbg .gradient_heading::before{ margin-bottom:14px; }
  .boxbg .sticky_div p{ font-size:16.5px; line-height:1.68; }
  .boxbg .row.g-1{ --bs-gutter-y:18px; }
  .about_area{ padding-bottom:44px; }
}

/* responsive.css:119 and :976/:1090 set .gradient_heading font-size at 24px /
   35px, which would land on the EYEBROW now rather than on the display type.
   Same specificity, later file, so restating it is enough - but it has to be
   restated at every one of those widths or the eyebrow blows up to 35px. */
@media (max-width:480px){
  .boxbg .gradient_heading{ font-size:12px; line-height:1.4; }
}
@media (min-width:481px) and (max-width:768px){
  .boxbg .gradient_heading{ font-size:12.5px; line-height:1.4; margin-bottom:4px; }
}
@media (min-width:768px) and (max-width:1024px){
  .boxbg .gradient_heading{ font-size:12.5px; line-height:1.4; margin-bottom:4px; }
}
@media only screen and (min-device-width:820px) and (max-device-width:1180px) and (orientation:landscape){
  .boxbg .gradient_heading{ font-size:12.5px; line-height:1.4; }
}

/* responsive.css:967/:1082 centre .about, .about_area and .about h2 between
   481 and 1024. .about_area is an ancestor of this panel, so that inherited
   into the eyebrow, the intro copy and the card text. */
@media (min-width:481px) and (max-width:1024px){
  .boxbg,
  .boxbg .sticky_div,
  .boxbg .grid{ text-align:left; }
}

/* --------------------------------------------------------------------------
   Motion
   --------------------------------------------------------------------------
   The earlier block covers .about .wow; the tiles and the text column are in
   .about_area but not in .about, so they were still animating. */
@media (prefers-reduced-motion:reduce){
  .about_area .wow{
    visibility:visible !important;
    animation:none !important;
  }
  .boxbg .grid figure img,
  .boxbg .grid figure::after,
  .boxbg .grid figcaption p,
  .boxbg .grid figcaption::before{
    transition:none !important;
  }
  .boxbg .grid figure:hover img,
  .boxbg .grid figure:focus-within img{ transform:none; }
}

/* ==========================================================================
   "Eldercare Living at Jagriti Dham"   --  #eldercare_living
   ==========================================================================
   Front page only, same enqueue. Everything is scoped under the ID, which
   also settles the cascade: #eldercare_living .tick ul li::before is (1,1,3)
   against the theme's (0,1,3), so nothing here needs !important even where
   responsive.css restates a value later in its own file.

   WHAT WAS WRONG, measured at 1440 and 375:

   1. THE TABS DID NOT LOOK LIKE CONTROLS. An inactive pill was bare bold
      text with no border, no ground, no hover state - five labels in a row
      that happen to be clickable. Only the active one had a hairline under
      it and a small green triangle poking out below.

   2. AND THEY WERE TOO SMALL TO TAP. Measured 30-32px tall on a phone at
      13px type. The floor for a touch target is 44px, and this audience
      skews 65+.

   3. The intro paragraph ran the FULL container - about 150 characters a
      line at 1440, at 15px - and was left-aligned under a centred heading
      (style.css:1951).

   4. 36px Helvetica in #4f6f52 on white is 5.63:1, and the whole section
      was in the theme's system sans directly below two sections that are
      now Fraunces and Karla. The page changed voice mid-scroll.

   5. No ground of its own. White section between a white-ending section and
      the gallery, so it had no edges at all.

   6. .equalheight puts display:flex on #v-pills-rd1, whose only child is a
      <section> with no col class - so .equalheight > [class*=col-] matches
      nothing and the flex context does nothing but make the child's width
      content-based. Latent, not yet visible; switched off here.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground
   --------------------------------------------------------------------------
   The page reads cream band -> white paper panel -> and now a pale band, so
   the three sections alternate rather than repeat. Brass hairlines top and
   bottom close it, the same way .about is closed. */
#eldercare_living{
  position:relative;
  background-color:#faf7ef;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E");
  border-top:1px solid rgba(203,178,121,.7);
  border-bottom:1px solid rgba(203,178,121,.7);
}
#eldercare_living .sectiongap{ padding:74px 0 78px; }

/* --------------------------------------------------------------------------
   The heading
   --------------------------------------------------------------------------
   Same construction as .about h1 - Fraunces, deep green, and the brass
   hairline with the diamond punched through it. Repeating that mark here is
   deliberate: it turns a one-off ornament into the site's section mark. */
#eldercare_living .section-title{ margin-bottom:0; }

#eldercare_living .section-title h2{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(29px, 3.4vw, 46px);
  line-height:1.14;
  font-weight:600;
  letter-spacing:-.012em;
  color:#2b3f2f;              /* 10.85:1 on the band */
  text-align:center;
  margin:0;
}

#eldercare_living .section-title h2::after{
  content:"";
  display:block;
  width:170px; height:9px;
  margin:24px auto 0;
  /* the band colour is painted behind the diamond so it punches a hole in
     the rule rather than sitting on top of it - same trick as .about */
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%23faf7ef'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%236b5426'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(107,84,38,0) 0%, rgba(107,84,38,.5) 24%, rgba(107,84,38,.5) 76%, rgba(107,84,38,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:center center, center center;
  background-size:17px 9px, 100% 1px;
}

/* style.css:1951 left-aligns this under a centred heading and lets it run
   the whole container - 150 characters a line at 1440. The cap is the
   substance of the change; the alignment follows .about p, which measured
   1.4-1.5x word gaps at a comparable width. */
#eldercare_living .section-title p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:17px;
  line-height:1.74;
  color:#3a4238;              /* 9.98:1 on the band */
  max-width:min(100%, 790px);
  margin:28px auto 0;
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
}

/* --------------------------------------------------------------------------
   The tab rail
   --------------------------------------------------------------------------
   A segmented control on white with a brass hairline, so the five services
   read as a control at rest instead of only when one is chosen. Every
   segment is at least 46px tall.

   It WRAPS rather than scrolls on a narrow screen. A scrolling rail is the
   tidier pattern, but it hides options off the edge, and hiding four of five
   services from a 65+ audience is the wrong trade. */
#eldercare_living .section_separation .nav-pills{
  display:flex;
  flex-wrap:wrap;
  /* TWO !important rules have to be beaten here, and neither is obvious from
     the markup:
       bootstrap.min.css  .justify-content-evenly{justify-content:space-evenly!important}
       responsive.css     .nav.justify-content-evenly{justify-content:left!important}  (<=480)
     The class is on the <ul> in front-page.php, so it applies at every width.
     With width:max-content there is no free space for justify-content to
     distribute and it makes no visible difference today - the !important is
     here so that stays true if the rail ever goes full-width. */
  justify-content:center !important;
  gap:4px;
  width:-webkit-max-content;
  width:max-content;
  max-width:100%;
  margin:38px auto 42px;
  padding:5px;
  background:#ffffff;
  border:1px solid rgba(203,178,121,.6);
  box-shadow:0 12px 30px -26px rgba(43,63,47,.6);
}

/* The flex items are the <li class="nav-item"> wrappers, NOT the buttons -
   which is why a flex:1 1 auto written on .nav-link did nothing at all on a
   wrapped rail. The li carries the sizing; the button fills it. */
#eldercare_living .section_separation .nav-item{
  display:flex;
  /* grow, so that when the rail is clamped to 100% and wraps - a tablet puts
     three segments on the first line and two on the second - each LINE fills
     the rail instead of floating centred inside it. At >=1200 the rail is
     width:max-content, so there is no free space and this does nothing. */
  flex:1 1 auto;
}
#eldercare_living .section_separation .nav-item > .nav-link{ width:100%; }

#eldercare_living .section_separation .nav-pills .nav-link{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:15px;
  font-weight:600;
  letter-spacing:.008em;
  line-height:1.25;
  color:#495247;              /* 8.06:1 on white */
  background:transparent;
  border:0;
  border-radius:0;
  margin:0;
  padding:13px 20px;
  min-height:46px;            /* the touch-target floor */
  transition:color .25s ease, background-color .25s ease;
}

#eldercare_living .section_separation .nav-pills .nav-link:hover{
  color:#2b3f2f;
  background-color:rgba(203,178,121,.16);
}

#eldercare_living .section_separation .nav-pills .nav-link.active{
  color:#f6edd8;              /* 10.13:1 on the fill */
  background-color:#2f4634;
  border-bottom:0;            /* the theme's 2px underline is redundant now */
  padding:13px 20px;
  font-size:15px;
}

/* a visible keyboard ring - :focus is zeroed out sitewide at style.css:65 */
#eldercare_living .section_separation .nav-pills .nav-link:focus-visible{
  outline:2px solid #6b5426;
  outline-offset:-2px;
}

/* style.css:818 draws a green triangle below the active tab out of border
   tricks, sitting at top:68% with a translate on top. With a filled segment
   it is noise, and it was poking out below the rail. */
#eldercare_living .section_separation .nav-link::before{ content:none; }

/* --------------------------------------------------------------------------
   The panel
   -------------------------------------------------------------------------- */

/* see note 6 in the header: a flex context with nothing to lay out */
#eldercare_living .equalheight{ display:block; }

#eldercare_living .tab-content .row{ --bs-gutter-x:48px; }

/* a brass frame offset behind the photograph. The image column is always
   FIRST in the DOM - the order-md-* classes only swap the visual order - so
   :first-child is a safe hook for it either way round. */
#eldercare_living .tab-content .row > .col-md-6:first-child{ position:relative; }

#eldercare_living .tab-content .row > .col-md-6:first-child::before{
  content:"";
  position:absolute;
  z-index:0;
  top:16px;
  bottom:-16px;
  left:calc(var(--bs-gutter-x) * .5 + 16px);
  right:calc(var(--bs-gutter-x) * .5 - 16px);
  border:1px solid rgba(203,178,121,.9);
  pointer-events:none;
}

#eldercare_living .tab-content img{
  position:relative;
  z-index:1;
  width:100%;
  height:auto;
  /* the sources are 800x500, which is exactly 8:5, so nothing is cropped */
  aspect-ratio:8/5;
  object-fit:cover;
  border:1px solid rgba(203,178,121,.5);
  box-shadow:0 22px 44px -34px rgba(43,63,47,.75);
}

#eldercare_living .tab-content h4{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:27px;
  line-height:1.18;
  font-weight:600;
  font-style:normal;          /* .section-title h4 italicises h4 at style.css:2839 */
  letter-spacing:-.01em;
  color:#2b3f2f;
  margin:0 0 4px;
}
#eldercare_living .tab-content h4::after{
  content:"";
  display:block;
  width:44px; height:1px;
  margin:16px 0 20px;
  background:linear-gradient(90deg,#a98b45 0%,rgba(169,139,69,.15) 100%);
}

/* --------------------------------------------------------------------------
   The feature list
   --------------------------------------------------------------------------
   The theme hangs the icon with a negative margin against ul{margin-left:32}
   (style.css:486-512). It works, but the icon is inline, so it rides the
   first line's baseline and the gap is fixed. Absolute positioning against a
   padded li puts it where it belongs and keeps wrapped lines aligned.

   The bullet is a thin brass check inside a hairline circle rather than
   Font Awesome's solid check-circle - the same hairline language as the
   rules and the diamond, instead of a heavy filled disc. */
#eldercare_living .tick ul{
  margin:0 0 22px;
  padding:0;
  list-style:none;
}
#eldercare_living .tick ul li{
  position:relative;
  margin:0 0 13px;
  padding-left:42px;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:16px;
  line-height:1.56;
  color:#3a4238;              /* 9.98:1 on the band */
}
/* THE CHIP. Every item gets one; which glyph goes in it is set per item in
   the map further down. This rule holds the shape, and its \f00c check is
   the FALLBACK - anything the map does not name still gets a tick rather
   than an empty circle, so a new bullet added in ACF never renders blank.

   "Font Awesome 6 Free" first: css/all.css is FA 6.1.1, which also declares
   the "Font Awesome 5 Free" family for back-compatibility. Naming both means
   it keeps working whichever of the two the theme ends up loading. */
#eldercare_living .tick ul li::before{
  content:"\f00c";
  font-family:"Font Awesome 6 Free","Font Awesome 5 Free";
  font-weight:900;
  font-size:12.5px;
  position:absolute;
  left:0;
  top:0;
  width:27px;
  height:27px;
  line-height:25px;
  text-align:center;
  margin:0;
  /* 4.75:1 on the band. The icon is decorative - the item text carries the
     meaning - so 3:1 would do, but there is no reason not to clear the
     normal-text floor as well. */
  color:#7f6528;
  border:1px solid rgba(169,139,69,.85);
  border-radius:50%;
  background:rgba(255,255,255,.72);
  transition:background-color .28s ease, color .28s ease,
             border-color .28s ease, transform .28s cubic-bezier(.2,.7,.2,1);
}

/* THE EFFECT, part one: the chip fills on hover, and the whole row shifts a
   couple of pixels with it so the movement reads as the item responding
   rather than the icon twitching on its own. Also on :focus-within, so it is
   not mouse-only if a link is ever put in one of these items. */
#eldercare_living .tick ul li{
  transition:transform .28s cubic-bezier(.2,.7,.2,1);
}
#eldercare_living .tick ul li:hover,
#eldercare_living .tick ul li:focus-within{
  transform:translateX(3px);
}
#eldercare_living .tick ul li:hover::before,
#eldercare_living .tick ul li:focus-within::before{
  background-color:#6b5426;
  border-color:#6b5426;
  color:#f6edd8;              /* 8.0:1 on that fill */
  transform:scale(1.08);
}

/* THE EFFECT, part two: the list deals itself in when a tab is opened. The
   panel already fades up as a block (jdPaneIn); this staggers the items
   inside it, which is what makes switching tabs feel like the content
   arriving rather than swapping. It re-runs on every tab change because
   Bootstrap adds .show.active to the newly opened pane. */
@keyframes jdTickIn{
  from{ opacity:0; transform:translateX(-8px); }
  to  { opacity:1; transform:none; }
}
#eldercare_living .tab-pane.show.active .tick ul li{
  animation:jdTickIn .42s cubic-bezier(.2,.7,.2,1) both;
}
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(1){ animation-delay:40ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(2){ animation-delay:85ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(3){ animation-delay:130ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(4){ animation-delay:175ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(5){ animation-delay:220ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(6){ animation-delay:265ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(7){ animation-delay:310ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(8){ animation-delay:355ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(9){ animation-delay:400ms; }
#eldercare_living .tab-pane.show.active .tick ul li:nth-child(10){ animation-delay:445ms; }

/* --------------------------------------------------------------------------
   Which icon goes with which line
   --------------------------------------------------------------------------
   There is nothing in the markup to hook on to - the list items come out of
   an ACF wysiwyg field as plain <li> with no classes - so each one is
   addressed by position. Codepoints were read out of the theme's own
   css/all.css (Font Awesome 6.1.1 Free) rather than from memory, and every
   one was rendered at weight 900 and checked against the fallback width to
   confirm it exists in the SOLID face; all 46 do.

   THE CATCH, worth knowing before anybody edits the lists: these are tied to
   position, so inserting or reordering an item shifts every icon after it.
   Adding one to the END is safe - it inherits the fallback tick above.
   The comment after each rule says which icon it is, so re-pointing one is
   a one-line edit. */
/* Wellness Services */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(1)::before{ content:"\f82f"; }  /* user-nurse */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(2)::before{ content:"\f0f0"; }  /* user-doctor */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(3)::before{ content:"\f0f1"; }  /* stethoscope */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(4)::before{ content:"\f274"; }  /* calendar-check */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(5)::before{ content:"\f21e"; }  /* heart-pulse */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(6)::before{ content:"\f46d"; }  /* clipboard-list */
#eldercare_living #pills-t1 .tick ul:nth-of-type(1) li:nth-child(7)::before{ content:"\f543"; }  /* receipt */

/* Round The Clock Support */
#eldercare_living #pills-t2 .tick ul:nth-of-type(1) li:nth-child(1)::before{ content:"\f071"; }  /* triangle-exclamation */
#eldercare_living #pills-t2 .tick ul:nth-of-type(1) li:nth-child(2)::before{ content:"\f0f8"; }  /* hospital */
#eldercare_living #pills-t2 .tick ul:nth-of-type(1) li:nth-child(3)::before{ content:"\f0f9"; }  /* truck-medical */
#eldercare_living #pills-t2 .tick ul:nth-of-type(1) li:nth-child(4)::before{ content:"\f484"; }  /* pills */
#eldercare_living #pills-t2 .tick ul:nth-of-type(2) li:nth-child(1)::before{ content:"\f2cc"; }  /* shower */
#eldercare_living #pills-t2 .tick ul:nth-of-type(2) li:nth-child(2)::before{ content:"\f553"; }  /* shirt */
#eldercare_living #pills-t2 .tick ul:nth-of-type(2) li:nth-child(3)::before{ content:"\f0c4"; }  /* scissors */
#eldercare_living #pills-t2 .tick ul:nth-of-type(2) li:nth-child(4)::before{ content:"\f554"; }  /* person-walking */
#eldercare_living #pills-t2 .tick ul:nth-of-type(2) li:nth-child(5)::before{ content:"\f2e7"; }  /* utensils */
#eldercare_living #pills-t2 .tick ul:nth-of-type(2) li:nth-child(6)::before{ content:"\f193"; }  /* wheelchair */

/* Nutritious Meal */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(1)::before{ content:"\f06c"; }  /* leaf */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(2)::before{ content:"\f073"; }  /* calendar-days */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(3)::before{ content:"\f787"; }  /* carrot */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(4)::before{ content:"\f06d"; }  /* fire */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(5)::before{ content:"\f21e"; }  /* heart-pulse */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(6)::before{ content:"\f2e7"; }  /* utensils */
#eldercare_living #pills-t3 .tick ul:nth-of-type(1) li:nth-child(7)::before{ content:"\f508"; }  /* user-tie */

/* Physical Care */
#eldercare_living #pills-t4 .tick ul:nth-of-type(1) li:nth-child(1)::before{ content:"\f70c"; }  /* person-running */
#eldercare_living #pills-t4 .tick ul:nth-of-type(1) li:nth-child(2)::before{ content:"\f54b"; }  /* shoe-prints */
#eldercare_living #pills-t4 .tick ul:nth-of-type(1) li:nth-child(3)::before{ content:"\f44b"; }  /* dumbbell */
#eldercare_living #pills-t4 .tick ul:nth-of-type(1) li:nth-child(4)::before{ content:"\f4be"; }  /* hand-holding-heart */
#eldercare_living #pills-t4 .tick ul:nth-of-type(1) li:nth-child(5)::before{ content:"\f0f1"; }  /* stethoscope */
#eldercare_living #pills-t4 .tick ul:nth-of-type(1) li:nth-child(6)::before{ content:"\f201"; }  /* chart-line */

/* Emotional Wellbeing */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(1)::before{ content:"\f5bb"; }  /* spa */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(2)::before{ content:"\f086"; }  /* comments */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(3)::before{ content:"\f53f"; }  /* palette */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(4)::before{ content:"\f4ad"; }  /* comment-dots */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(5)::before{ content:"\f684"; }  /* hands-praying */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(6)::before{ content:"\f2b5"; }  /* handshake */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(7)::before{ content:"\f12e"; }  /* puzzle-piece */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(8)::before{ content:"\f518"; }  /* book-open */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(9)::before{ content:"\f5dc"; }  /* brain */
#eldercare_living #pills-t5 .tick ul:nth-of-type(1) li:nth-child(10)::before{ content:"\f001"; }  /* music */

/* pane 2 is the only one with a paragraph BETWEEN two lists - it is a
   sub-heading ("Below are only for elders assessed for Assisted Living"),
   not a note, so the base style treats it as one and the footnote style
   below only claims the last paragraph. */
#eldercare_living .tick p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:16px;
  line-height:1.56;
  font-weight:600;
  color:#2b3f2f;
  margin:0 0 14px;
  /* the prose in the panel goes with the intro above it */
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
}

/* The bulleted feature list is deliberately NOT justified. Most of those
   items are a single line, where justify does nothing at all, and the ones
   that wrap to two would have their first line stretched across the column
   while the second sits short - which reads as a fault rather than as
   setting. If you want them justified as well it is one declaration:
   `text-align:justify` on #eldercare_living .tick ul li. */

/* the NOTE. It is the last paragraph in all five panes - in the four that
   have only one paragraph, first and last are the same element, which is
   why this is written on :last-of-type rather than on a count. */
#eldercare_living .tick p:last-of-type{
  font-size:14px;
  line-height:1.6;
  font-weight:400;
  color:#5e6459;              /* 6.22:1 on the band */
  margin:0;
  padding-top:16px;
  border-top:1px solid rgba(203,178,121,.65);
}

/* --------------------------------------------------------------------------
   Switching panels
   --------------------------------------------------------------------------
   Bootstrap's .fade is opacity only, so a panel appeared without any sense
   of arriving. A short rise costs nothing and is switched off under
   prefers-reduced-motion below. */
@keyframes jdPaneIn{
  from{ opacity:0; transform:translateY(10px); }
  to  { opacity:1; transform:none; }
}
#eldercare_living .tab-content > .tab-pane.show.active{
  animation:jdPaneIn .38s cubic-bezier(.2,.7,.2,1) both;
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
@media (max-width:991px){
  #eldercare_living .sectiongap{ padding:58px 0 62px; }
  #eldercare_living .section-title h2::after{ width:150px; margin-top:20px; }
  #eldercare_living .tab-content .row{ --bs-gutter-x:32px; }
  #eldercare_living .tab-content h4{ font-size:25px; margin-top:26px; }
  /* The offset frame is off below 992. The columns are still side by side
     from 768 up (col-md-6), but at 768 the photograph is only 332px wide
     against a 16px half-gutter, so a 16px offset would sit exactly on the
     column edge; below 768 they stack and the frame would run into the text
     beneath. */
  #eldercare_living .tab-content .row > .col-md-6:first-child::before{ content:none; }
}

@media (max-width:767px){
  #eldercare_living .sectiongap{ padding:44px 0 48px; }
  #eldercare_living .container{ padding-left:18px; padding-right:18px; }
  /* Justified here too, on request. It was ragged below 768 because at a
     ~339px column the word gaps run several times the natural space; the
     measured numbers are in README-HOME.md. text-align:left puts it back. */
  #eldercare_living .section-title p{ font-size:16.5px; margin-top:22px; text-align:justify; }
  /* A wrapped flex rail put one chip on the first row and left the rest of
     that row empty, which reads as a mistake rather than a control. A grid
     is deterministic: two even columns, and the odd fifth spans the width. */
  #eldercare_living .section_separation .nav-pills{
    display:grid;
    grid-template-columns:1fr 1fr;
    width:auto;
    margin:28px 0 32px;
    gap:3px;
  }
  #eldercare_living .section_separation .nav-item:last-child{ grid-column:1 / -1; }
  #eldercare_living .section_separation .nav-pills .nav-link,
  #eldercare_living .section_separation .nav-pills .nav-link.active{
    font-size:14px;
    padding:12px 10px;
    text-align:center;
    display:flex;
    align-items:center;
    justify-content:center;
  }
  /* On desktop the five segments sit shoulder to shoulder inside the white
     track and read as one control. Spread across a grid they are just words
     on white again, so the idle cells get a faint wash to show where each
     one begins and ends. */
  #eldercare_living .section_separation .nav-pills .nav-link{
    background-color:rgba(203,178,121,.11);
  }
  #eldercare_living .tab-content h4{ font-size:23px; margin-top:22px; }
  #eldercare_living .tick ul li{ font-size:15.5px; }
  #eldercare_living .section-title h2::after{ width:130px; margin-top:18px; }
}

/* responsive.css:1160 sets .section-title h2{font-size:25px} between 768 and
   1024, and :793 sets .section-title h1 at 480 - the clamp has to be
   restated inside that window or it is overridden at exactly the widths a
   tablet uses. Same specificity plus an ID, and a later file. */
@media (min-width:768px) and (max-width:1024px){
  #eldercare_living .section-title h2{ font-size:clamp(29px, 3.6vw, 38px); }
}

/* responsive.css:220 and :225 turn the active pill into a solid green chip
   at <=480 with its own padding and margin. That is the same idea as the
   segmented control above, so it is not wrong - it just needs to stop
   fighting the rail's own spacing. */
@media (max-width:480px){
  #eldercare_living .section_separation .nav-pills .nav-link,
  #eldercare_living .section_separation .nav-pills .nav-link.active{
    font-size:13.5px;
    padding:12px 10px;
    margin:0;
  }
  #eldercare_living .section_separation .nav-pills .nav-link.active{
    background-color:#2f4634;
  }
  #eldercare_living .section_separation .nav-pills .nav-link:hover{
    background-color:rgba(203,178,121,.16);
  }
}

/* --------------------------------------------------------------------------
   Motion
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  #eldercare_living .wow{
    visibility:visible !important;
    animation:none !important;
  }
  #eldercare_living .tab-content > .tab-pane.show.active{ animation:none; }
  #eldercare_living .section_separation .nav-pills .nav-link{ transition:none; }
  /* the icons keep their colour change on hover; only the movement goes */
  #eldercare_living .tab-pane.show.active .tick ul li{ animation:none; }
  #eldercare_living .tick ul li,
  #eldercare_living .tick ul li::before{ transition:background-color .28s ease, color .28s ease, border-color .28s ease; }
  #eldercare_living .tick ul li:hover,
  #eldercare_living .tick ul li:focus-within{ transform:none; }
  #eldercare_living .tick ul li:hover::before,
  #eldercare_living .tick ul li:focus-within::before{ transform:none; }
}

/* ==========================================================================
   "Explore Jagriti Dham"   --  #explore_jagriti_dham
   ==========================================================================
   Front page only. Eleven slides, all of them 1920x800 (exactly 12:5), driven
   by the slick instance that js/custom.js:23 starts on $('.slider').

   NOTHING HERE TOUCHES THE SLIDER'S WIDTH, and that is deliberate. slick
   writes the track width and every slide width INLINE at init, and
   css/slick.css gives .slick-track `transition: 1s` - so a width slick writes
   gets ANIMATED rather than applied, and anything that measures the track in
   that first second reads a width of 0. That is what flattened the long-stay
   banner earlier in this project (five slides stacked into a 2800px column).
   Heights, grounds, type and the arrows are all safe; the horizontal box is
   not. Left alone.

   WHAT WAS WRONG, measured at 1440 and 375:

   1. ON A PHONE THE CAPTION WAS WHITE ON BRASS. responsive.css:161 turns
      .inner-bx into a #cbb279 block and :187 leaves the paragraph #fff on it.
      That is 1.88:1 - it fails every contrast floor there is, and it is the
      body copy of eleven slides.

   2. And that block is a FIXED height:250px whatever the caption says, so
      most slides ended with a large empty brass panel under three lines.

   3. The arrows were 40x40 on a phone - under the 44px touch floor - in
      #bf8349, a terracotta that appears nowhere else on the site, sitting on
      the #cbb279 caption block at 1.6:1 against it.

   4. object-position:0 100% cropped every phone image to its LEFT edge,
      throwing away a quarter of each composition off the right.

   5. The heading was the theme's Helvetica green, below two sections that
      are now Fraunces and Karla.

   6. The whole thing sat on white with no ground of its own.

   The autoplay interval is a seventh problem, and it needs JavaScript rather
   than CSS - see js/gallery-lux.js.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground
   --------------------------------------------------------------------------
   The eldercare band above closes on a brass hairline, so this one opens on
   white and lets the photographs be the only colour in it. */
#explore_jagriti_dham{
  background:#ffffff;
}
/* NO BOTTOM PADDING, and that is the fix for the white strip under the
   slider. Everything else on this page is inside a container, so padding
   below a section reads as breathing room - but this slider is full-bleed,
   so 78px of white under an edge-to-edge photograph reads as a gap that
   should not be there. With it gone the picture runs straight into the
   Partners band below, and that band's own brass top hairline becomes the
   rule under the photograph. */
#explore_jagriti_dham .sectiongap{ padding:74px 0 0; }

/* --------------------------------------------------------------------------
   The heading
   -------------------------------------------------------------------------- */
#explore_jagriti_dham .section-title{ margin-bottom:0; }

#explore_jagriti_dham .section-title h2{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(29px, 3.4vw, 46px);
  line-height:1.14;
  font-weight:600;
  letter-spacing:-.012em;
  color:#2b3f2f;              /* 11.3:1 on white */
  text-align:center;
  margin:0 0 44px;
}
/* the section mark again - white behind the diamond this time, since the
   ground changed */
#explore_jagriti_dham .section-title h2::after{
  content:"";
  display:block;
  width:170px; height:9px;
  margin:24px auto 0;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%23ffffff'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%236b5426'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(107,84,38,0) 0%, rgba(107,84,38,.5) 24%, rgba(107,84,38,.5) 76%, rgba(107,84,38,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:center center, center center;
  background-size:17px 9px, 100% 1px;
}

/* --------------------------------------------------------------------------
   The photograph
   --------------------------------------------------------------------------
   One variable drives the picture height AND the arrow placement, so the two
   cannot drift apart. 12/5 is the sources' own ratio - every one of the
   eleven is 1920x800 - so at full width nothing is cropped and nothing is
   upscaled until the viewport passes 1920.

   object-fit was `contain`, which only looked right because the box happened
   to match the source. cover is what that intent actually needs: the moment
   somebody uploads a slide at a different ratio, contain letterboxes it. */
#explore_jagriti_dham{
  --jd-g-ratio: 12 / 5;
  --jd-g-h: calc(100vw * 5 / 12);
}
/* the scaled image is clipped by the slide rather than bleeding past it */
#explore_jagriti_dham .slider .item{ overflow:hidden; }

/* --------------------------------------------------------------------------
   The drift
   --------------------------------------------------------------------------
   A slow push in on whichever slide is showing. slick moves .slick-current (which lands ON the .item, not on a wrapper)
   from one slide to the next, and a CSS animation restarts from zero when the
   class lands on a fresh element - so the drift re-runs on every slide with
   no JavaScript and nothing to keep in sync.

   11s against a 9s dwell on purpose: the animation never reaches its end and
   so never sits still at the far position before cutting away, and if
   js/gallery-lux.js is absent and the dwell is custom.js's 5s it simply gets
   further cut short, which looks the same. Nothing breaks either way - the
   worst case is a picture that is not moving.

   It holds still while the carousel is held still: on hover and on focus
   (slick's own pauseOnHover), and while the pause button is pressed. */
@keyframes jdKenBurns{
  from{ transform:scale(1); }
  to  { transform:scale(1.065); }
}
#explore_jagriti_dham .slider .item.slick-current > img{
  animation:jdKenBurns 11s linear both;
}
#explore_jagriti_dham .slider:hover .item.slick-current > img,
#explore_jagriti_dham .slider:focus-within .item.slick-current > img{
  animation-play-state:paused;
}
#explore_jagriti_dham .slider:has(.jd-g-pause[aria-pressed="true"]) .item.slick-current > img{
  animation-play-state:paused;
}

#explore_jagriti_dham .slider .item img{
  display:block;
  width:100%;
  height:auto;
  aspect-ratio:var(--jd-g-ratio);
  /* past 1920 the source would be upscaling anyway, and a 1000px-tall band
     stops being a picture and starts being a wall */
  max-height:760px;
  object-fit:cover;
  object-position:center center;
}

/* --------------------------------------------------------------------------
   The caption
   --------------------------------------------------------------------------
   It was a flat 50%-black slab with the title inline-block at 28% and the
   paragraph inline-block at 72%. The two-column idea is good - it is what
   makes this read as a plate caption rather than a banner - so it stays, and
   becomes an explicit flex row with a brass rule between the columns.

   NOT TOUCHED: the width is still a percentage of the slide and the box is
   still absolutely positioned against .container, which is what keeps its
   left edge on the page grid at every width. */
#explore_jagriti_dham .slider .inner-bx{
  display:flex;
  align-items:center;
  gap:26px;
  width:min(58%, 860px);
  padding:22px 30px;
  background:rgba(17,23,17,.8);
  border-top:1px solid rgba(203,178,121,.75);
  transition:none;            /* style.css:1028 puts `transition:.2s` on ALL
                                 properties here, which means the box animates
                                 its own layout on the first paint */
}

#explore_jagriti_dham .slider .inner-bx h4,
#explore_jagriti_dham .slider .inner-bx h5,
#explore_jagriti_dham .slider .inner-bx h6{
  flex:0 0 auto;
  width:auto;
  max-width:30%;
  display:block;
  margin:0;
  padding-right:26px;
  border-right:1px solid rgba(203,178,121,.4);
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:21px;
  line-height:1.2;
  font-weight:600;
  letter-spacing:-.008em;
  color:#dcc38d;              /* 8.3:1 on the caption ground */
}
/* style.css:1040 already puts the second word on its own line - a good bone,
   and the reason these read as two-line plate titles */
#explore_jagriti_dham .slider .inner-bx h4 strong{
  display:block;
  font-weight:600;
  color:#f0e3c4;
}

#explore_jagriti_dham .slider .inner-bx p{
  flex:1 1 auto;
  display:block;
  width:auto;
  padding:0;
  margin:0;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:15.5px;
  line-height:1.6;
  color:#efe8db;              /* 13.4:1 on the caption ground */
}

/* --------------------------------------------------------------------------
   The counter
   --------------------------------------------------------------------------
   The markup is three spans - slidenum, an empty .slash, totalnum - and the
   theme stacks them with line-height:0.1 and a 1px bar rotated 60deg. The
   fraction is the right idea; it just needs to sit on a baseline instead of
   collapsing onto itself. */
#explore_jagriti_dham .count{
  flex:0 0 auto;
  display:flex;
  align-items:center;
  float:none;                 /* it was float:right inside a flex row */
  margin:0;
  padding-left:8px;
}
#explore_jagriti_dham .count span{
  display:block;
  line-height:1;
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-variant-numeric:lining-nums tabular-nums;
}
#explore_jagriti_dham .count span.slidenum{
  font-size:30px;
  font-weight:600;
  color:#dcc38d;
}
#explore_jagriti_dham .count span.totalnum{
  font-size:17px;
  font-weight:500;
  color:rgba(239,232,219,.68);
  align-self:flex-end;
  padding-bottom:2px;
}
#explore_jagriti_dham .count span.slash{
  width:1px;
  height:30px;
  background:rgba(203,178,121,.75);
  transform:rotate(20deg);
  position:static;
  margin:0 9px;
  left:auto;
  top:auto;
}

/* --------------------------------------------------------------------------
   The arrows
   --------------------------------------------------------------------------
   css/slick.css gives these `background:#bf8349` - a terracotta that is in no
   other part of this site - plus a 10x16 PNG poked in through ::before with
   no background-size, and slick's own vendor rule adds `margin-top:-10px`
   which survives every `top` override. All of that is replaced with a
   hairline square and a chevron drawn in CSS.

   They live at the bottom-right of the PHOTOGRAPH at every width. On desktop
   that puts them beside the caption; on a phone, where the caption drops
   below the picture, --jd-g-h is what keeps them on it. */
/* !important here is not decoration. responsive.css hard-codes these arrows
   in FOUR separate media blocks, all with !important, and between them they
   cover every width a tablet or a phone reports:

     <=480              left:34%!important  right:34%!important
                        width:40px!important  height:40px!important
                        line-height:40px!important   ::before top:30%!important
     768-1024           prev right:140px!important   next right:40px!important
     820-1180           prev right:140px!important   next right:60px!important
     820-1180 landscape prev right:100px            next right:180px

   The last of those also puts NEXT further right than PREV, so the pair reads
   backwards on a landscape tablet. An ID selector out-weighs all of them on
   specificity but not on !important, so the contested properties - right,
   left, width, height, and the chevron's top - carry it here too. */
#explore_jagriti_dham button.slick-arrow{
  width:52px;
  height:52px;
  margin:0;
  padding:0;
  top:auto;
  bottom:22px;
  left:auto !important;
  z-index:3;
  background:rgba(17,23,17,.75);   /* .62 left the chevron at 3.4:1
                                      over a bright frame; .75 makes it 4.8 */
  border:1px solid rgba(203,178,121,.75);
  border-radius:0;
  transition:background-color .28s ease, border-color .28s ease;
}
/* They sit in the picture's corner until the page grid pulls in, and from
   then on their right edge lands on the SAME vertical as the caption's left
   edge - the container is capped at 1220px with 12px of padding
   (responsive.css:1192), so its content half-width is 598px and the slider is
   full-bleed and centred on the same axis. max() keeps the corner placement
   at every width below that, where the container is simply 100%. */
#explore_jagriti_dham button.slick-next.slick-arrow{ right:max(40px, calc(50% - 598px)) !important; }
#explore_jagriti_dham button.slick-prev.slick-arrow{ right:max(100px, calc(50% - 538px)) !important; }

/* The container is not capped at one value. responsive.css:1192 gives it
   1220px, and :1213 widens it again to 1480px at exactly 1920. Without this
   step the controls would sit 131px inside the grid on a 1920 screen - the
   one width where the misalignment is most visible. 728 = 1480/2 - 12. */
@media (min-width:1920px){
  #explore_jagriti_dham button.slick-next.slick-arrow{ right:calc(50% - 728px) !important; }
  #explore_jagriti_dham button.slick-prev.slick-arrow{ right:calc(50% - 668px) !important; }
  #explore_jagriti_dham .jd-g-pause{ right:calc(50% - 608px); }
}

#explore_jagriti_dham button.slick-arrow:hover,
#explore_jagriti_dham button.slick-arrow:focus-visible{
  background:rgba(43,63,47,.92);
  border-color:#cbb279;
}
#explore_jagriti_dham button.slick-arrow:focus-visible{
  outline:2px solid #f0e3c4;
  outline-offset:2px;
}

/* the chevron. The theme's ::before is a background-image with a fixed 10x16
   box; this redefines all four borders so nothing of it survives. */
#explore_jagriti_dham button.slick-arrow::before{
  content:"";
  background-image:none;
  position:absolute;
  top:50% !important;         /* responsive.css forces 30% at <=480 */
  left:50%;
  width:11px;
  height:11px;
  border:0 solid #e6d4a6;
  border-top-width:1.6px;
  border-right-width:1.6px;
  opacity:1;
  transition:border-color .28s ease;
}
#explore_jagriti_dham button.slick-next.slick-arrow::before{
  transform:translate(-70%, -50%) rotate(45deg);
}
#explore_jagriti_dham button.slick-prev.slick-arrow::before{
  transform:translate(-30%, -50%) rotate(-135deg);
}

/* --------------------------------------------------------------------------
   The pause control (injected by js/gallery-lux.js)
   --------------------------------------------------------------------------
   Styled here so it matches the arrows exactly; if the script does not load,
   none of this matches anything and nothing happens. */
#explore_jagriti_dham .jd-g-pause{
  position:absolute;
  bottom:22px;
  right:max(160px, calc(50% - 478px));
  z-index:3;
  width:52px;
  height:52px;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:0;
  background:rgba(17,23,17,.75);   /* .62 left the chevron at 3.4:1
                                      over a bright frame; .75 makes it 4.8 */
  border:1px solid rgba(203,178,121,.75);
  color:#e6d4a6;
  cursor:pointer;
  transition:background-color .28s ease, border-color .28s ease;
}
#explore_jagriti_dham .jd-g-pause:hover,
#explore_jagriti_dham .jd-g-pause:focus-visible{
  background:rgba(43,63,47,.92);
  border-color:#cbb279;
}
#explore_jagriti_dham .jd-g-pause:focus-visible{
  outline:2px solid #f0e3c4;
  outline-offset:2px;
}
#explore_jagriti_dham .jd-g-pause svg{ width:15px; height:15px; fill:currentColor; }
#explore_jagriti_dham .jd-g-pause .jd-g-play{ display:none; }
#explore_jagriti_dham .jd-g-pause[aria-pressed="true"] .jd-g-play{ display:block; }
#explore_jagriti_dham .jd-g-pause[aria-pressed="true"] .jd-g-stop{ display:none; }

/* --------------------------------------------------------------------------
   Tablet
   -------------------------------------------------------------------------- */
@media (max-width:991px){
  #explore_jagriti_dham{
    --jd-g-ratio: 2 / 1;
    --jd-g-h: calc(100vw / 2);
  }
  #explore_jagriti_dham .sectiongap{ padding:58px 0 0; }
  #explore_jagriti_dham .section-title h2{ margin-bottom:34px; }
  #explore_jagriti_dham .section-title h2::after{ width:150px; margin-top:20px; }
  #explore_jagriti_dham .slider .inner-bx{
    width:min(76%, 700px);
    gap:20px;
    padding:18px 22px;
  }
  #explore_jagriti_dham .slider .inner-bx h4{ font-size:19px; padding-right:20px; }
  #explore_jagriti_dham .slider .inner-bx p{ font-size:15px; }
}

/* --------------------------------------------------------------------------
   Phone: the caption comes out from under the picture
   --------------------------------------------------------------------------
   responsive.css:161 already makes .inner-bx static and full width below its
   breakpoint, which is the right call - a 58% overlay on a 375px screen is
   unreadable. What it got wrong is everything else about it: a fixed 250px
   height, a #cbb279 ground, and #fff body copy on that ground at 1.88:1.

   Note the selector weights. responsive.css writes `.slider .inner-bx`
   (0,2,1) and `.slider .inner-bx p` (0,2,2); the ID here puts every rule at
   (1,2,x), so none of this needs !important. */
@media (max-width:767px){
  #explore_jagriti_dham{
    --jd-g-ratio: 16 / 10;
    --jd-g-h: calc(100vw * 10 / 16);
  }
  #explore_jagriti_dham .sectiongap{ padding:44px 0 0; }
  #explore_jagriti_dham .section-title h2{ margin-bottom:26px; }
  #explore_jagriti_dham .section-title h2::after{ width:130px; margin-top:18px; }

  #explore_jagriti_dham .slider .inner-bx{
    display:block;
    position:relative;
    width:100%;
    height:auto;              /* was a flat 250px whatever the caption said */
    padding:22px 20px 24px;
    background:#141c14;
    border-top:1px solid rgba(203,178,121,.75);
    text-align:left;
  }
  #explore_jagriti_dham .slider .inner-bx h4{
    max-width:none;
    padding:0;
    border-right:0;
    margin:0 0 10px;
    font-size:21px;
    text-align:left;
    color:#dcc38d;
  }
  #explore_jagriti_dham .slider .inner-bx h4 strong{ display:inline; color:#f0e3c4; }
  #explore_jagriti_dham .slider .inner-bx p{
    width:100%;
    font-size:15.5px;
    line-height:1.62;
    color:#efe8db;            /* was #fff on #cbb279 - 1.88:1 */
    padding:0;
  }
  #explore_jagriti_dham .count{
    display:flex;
    margin:16px 0 0;
    padding:14px 0 0;
    border-top:1px solid rgba(203,178,121,.35);
    text-align:left;
  }
  #explore_jagriti_dham .count span.slidenum{ font-size:26px; }
  #explore_jagriti_dham .count span.totalnum{ font-size:15px; }
  #explore_jagriti_dham .count span.slash{ height:26px; background:rgba(203,178,121,.75); }

  /* on the bottom-right of the PICTURE, which is no longer the bottom of the
     slide once the caption is in flow beneath it */
  /* 46px, not the 40px responsive.css forces - 40 is under the 44px touch
     floor, and this audience needs the whole of it. */
  #explore_jagriti_dham button.slick-arrow,
  #explore_jagriti_dham .jd-g-pause{
    width:46px !important;
    height:46px !important;
    line-height:46px !important;
    bottom:auto;
    top:calc(var(--jd-g-h) - 60px);
  }
  #explore_jagriti_dham button.slick-next.slick-arrow{ right:14px !important; }
  #explore_jagriti_dham button.slick-prev.slick-arrow{ right:68px !important; }
  #explore_jagriti_dham .jd-g-pause{ right:122px; }
}

/* --------------------------------------------------------------------------
   Motion
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  #explore_jagriti_dham .wow{
    visibility:visible !important;
    animation:none !important;
  }
  #explore_jagriti_dham .slider .item.slick-current > img{ animation:none; }
  #explore_jagriti_dham button.slick-arrow,
  #explore_jagriti_dham .jd-g-pause{ transition:none; }
}

/* ==========================================================================
   "Partners"   --  #whatsmore.partners
   ==========================================================================
   Front page only. Thirty-nine logos in an Owl carousel that js/custom.js:122
   starts on $('.media'), six across at >=1200 and two on a phone.

   EVERY SELECTOR BELOW IS #whatsmore.partners, NOT #whatsmore. front-page.php
   uses that id TWICE - once here (line 195) and again on "Green Advantages"
   (line 310). getElementById returns only the first, so it looks unique from
   a console, but a CSS #whatsmore matches both, and the first version of this
   block put the partners band, padding and heading on the advantages section
   as well. The .partners class is already in the markup and tells them
   apart. The duplicate id is a markup bug in its own right - two elements
   cannot share one - and is noted in README-HOME.md.

   THE SECTION HAD ITS CONTROLS EXACTLY BACKWARDS. Measured, and confirmed by
   clicking each of them and watching which slide became active:

   1. THE TWO ARROWS DO NOTHING. custom.js passes `nav: false`, so Owl builds
      the arrows, marks the wrapper .owl-nav.disabled and hides it with
      `.owl-carousel .owl-nav.disabled{display:none}`. style.css:679 then
      overrides that with

          .owl-carousel .owl-nav.disabled,
          .owl-carousel .owl-dots.disabled { display: inherit !important; }

      so the arrows come back - 35x35, #bf8349, cursor:pointer, and inert.
      Clicking either one leaves the carousel exactly where it was. Two
      buttons that look clickable and are not is worse than no buttons.

      (That rule is not scoped to this carousel. It un-hides the disabled
      controls of every Owl carousel in the theme, on every page. Only this
      one is in reach from a front-page stylesheet; the rest is noted in
      README-HOME.md.)

   2. THE SEVEN DOTS THAT DO WORK ARE INVISIBLE. Owl's dot styling lives in
      css/owl.theme.default.min.css behind `.owl-theme .owl-dots .owl-dot
      span`, and the markup in front-page.php:203 is
      `class="owl-carousel media mt-2 mb-3"` - no owl-theme. So every dot
      renders as a 0x0 transparent span inside a 0px-tall container. Thirty-
      nine logos over seven pages, and nothing on screen says so.

   And the rest:

   3. Every logo is a 1080x1080 square, but what is INSIDE those squares
      varies enormously - Titan Eye+ is black to all four edges, PG Path Labs
      is a dark green disc, Narayana Health is a small mark floating in white.
      Dropped straight onto the page they read as a jumble of different
      objects rather than a row of partners.

   4. `padding: 20px 0` for a whole section, on a transparent ground.

   5. The heading was the theme's Helvetica green with a 25x3 green bar,
      below four sections that are now Fraunces and Karla.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground
   --------------------------------------------------------------------------
   Same pale band and hairlines as #eldercare_living, with the full-bleed
   gallery between them - so the page alternates band / picture / band rather
   than repeating either. */
#whatsmore.partners{
  position:relative;
  padding:74px 0 78px;
  background-color:#faf7ef;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E");
  border-top:1px solid rgba(203,178,121,.7);
  border-bottom:1px solid rgba(203,178,121,.7);
}

/* --------------------------------------------------------------------------
   The heading
   -------------------------------------------------------------------------- */
#whatsmore.partners .section-title{ margin-bottom:0; }

#whatsmore.partners .section-title h2{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(29px, 3.4vw, 46px);
  line-height:1.14;
  font-weight:600;
  letter-spacing:-.012em;
  color:#2b3f2f;              /* 10.58:1 on the band */
  text-align:center;
  margin:0 0 40px;
  position:relative;
}

/* style.css:2953 puts a 25x3 green bar under this heading with position
   absolute and bottom:-7px. Same pseudo-element, so the section mark simply
   replaces it - the position properties all have to be reset or the block
   inherits them. */
#whatsmore.partners .section-title h2::after{
  position:static;
  content:"";
  display:block;
  width:170px; height:9px;
  margin:24px auto 0;
  background-color:transparent;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%23faf7ef'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%236b5426'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(107,84,38,0) 0%, rgba(107,84,38,.5) 24%, rgba(107,84,38,.5) 76%, rgba(107,84,38,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:center center, center center;
  background-size:17px 9px, 100% 1px;
}

/* --------------------------------------------------------------------------
   The logo tiles
   --------------------------------------------------------------------------
   A uniform white tile with a hairline and its own padding is what makes
   thirty-nine differently-built logos read as one wall. The padding matters
   more than it looks: Titan Eye+ is black right to the edge of its square, so
   without an inset it becomes a solid black block the size of the tile.
   Inside a padded tile it becomes a black mark ON a white card, which is what
   every other logo already is. */
#whatsmore.partners .owl-item .item{
  display:flex;
  align-items:center;
  justify-content:center;
  aspect-ratio:1 / 1;
  padding:18px;
  background:#ffffff;
  border:1px solid rgba(203,178,121,.55);
  box-shadow:0 10px 24px -22px rgba(43,63,47,.55);
  transition:border-color .3s ease, box-shadow .3s ease, transform .3s ease;
}

#whatsmore.partners .owl-item .item > a{
  display:flex;
  align-items:center;
  justify-content:center;
  width:100%;
  height:100%;
}

#whatsmore.partners .owl-item .item img{
  /* style.css:686 is `.media img{width:200px !important}`. It only ever
     resolved to the column width because .img-fluid clamps it to
     max-width:100%; inside a flex tile there is nothing to clamp it, so this
     one has to be answered in kind. */
  width:100% !important;
  height:100%;
  max-width:100%;
  object-fit:contain;
  /* style.css:652 drops a `box-shadow: 0 0 12px #888` on every .owl-carousel
     .item img in the theme - a grey halo around each logo. The tile carries
     the shadow now. */
  box-shadow:none;
}

/* Only two of the thirty-nine are links, so the lift belongs to those two and
   not to the other thirty-seven - a hover state on something that cannot be
   clicked is a promise the tile cannot keep. */
#whatsmore.partners .owl-item .item:has(> a):hover{
  border-color:#cbb279;
  box-shadow:0 16px 30px -20px rgba(43,63,47,.6);
  transform:translateY(-3px);
}
#whatsmore.partners .owl-item .item > a:focus-visible{
  outline:2px solid #6b5426;
  outline-offset:4px;
}

/* --------------------------------------------------------------------------
   The controls
   -------------------------------------------------------------------------- */

/* The arrows are inert (see note 1 at the top). !important because the rule
   that un-hides them carries !important itself; .disabled is exactly the
   state Owl sets when nav is off, so if nav is ever turned on in custom.js
   these come back on their own. */
#whatsmore.partners .owl-nav.disabled{ display:none !important; }

/* And the dots, which do work, become visible. */
/* Owl paginates by PAGE, so the dot count is 39 divided by however many
   fit: seven on a desktop, but TWENTY on a phone at two across. Twenty in
   one row got flex-shrunk to 16px each - under the 24px target minimum and
   unreadable as an index. They wrap instead, and hold their size. */
#whatsmore.partners .owl-dots{
  display:flex;
  align-items:center;
  justify-content:center;
  flex-wrap:wrap;
  gap:2px;
  height:auto;
  margin-top:34px;
}

#whatsmore.partners .owl-dot{
  display:flex;
  align-items:center;
  justify-content:center;
  /* 26px so the target clears the 24x24 minimum, with a 9px dot inside it.
     flex:0 0 auto or the row squeezes them below that. */
  flex:0 0 auto;
  width:26px;
  height:26px;
  margin:0;
  padding:0 !important;       /* owl.carousel.css sets padding:0!important */
  background:none;
  border:0;
  cursor:pointer;
}

#whatsmore.partners .owl-dot span{
  display:block;
  width:9px;
  height:9px;
  margin:0;
  border-radius:50%;
  background:transparent;
  /* .6 measured 2.75:1 against the band, under the 3:1 an interface control
     needs to be perceivable at all; .75 is 3.74:1 and still reads clearly
     lighter than the filled current dot at 6.71:1. */
  border:1px solid rgba(107,84,38,.75);
  transition:background-color .25s ease, border-color .25s ease, transform .25s ease;
}
#whatsmore.partners .owl-dot:hover span{
  border-color:#6b5426;
  background:rgba(107,84,38,.32);
}
#whatsmore.partners .owl-dot.active span{
  background:#6b5426;         /* 6.9:1 on the band */
  border-color:#6b5426;
  transform:scale(1.18);
}
#whatsmore.partners .owl-dot:focus-visible{
  outline:2px solid #6b5426;
  outline-offset:1px;
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
@media (max-width:991px){
  #whatsmore.partners{ padding:58px 0 62px; }
  #whatsmore.partners .section-title h2{ margin-bottom:30px; }
  #whatsmore.partners .section-title h2::after{ width:150px; margin-top:20px; }
  #whatsmore.partners .owl-item .item{ padding:15px; }
  #whatsmore.partners .owl-dots{ margin-top:28px; }
}

@media (max-width:767px){
  #whatsmore.partners{ padding:44px 0 48px; }
  /* twenty pages at two across, so the index gets smaller and quieter - it
     is there to say "there is more" and to be tappable, not to be counted */
  #whatsmore.partners .owl-dot{ width:24px; height:24px; }
  #whatsmore.partners .owl-dot span{ width:7px; height:7px; }
  /* 246px is 10 dots at 24px, so the twenty wrap into two EVEN rows rather
     than a ragged 14 and 6. It is width-derived, not a magic number: change
     the dot size and this follows it. */
  #whatsmore.partners .owl-dots{ gap:0; row-gap:2px; max-width:246px; margin-left:auto; margin-right:auto; }
  #whatsmore.partners .section-title h2{ margin-bottom:24px; }
  #whatsmore.partners .section-title h2::after{ width:130px; margin-top:18px; }
  /* two across on a phone, so the tiles are large - the inset can grow with
     them without the logos getting small */
  #whatsmore.partners .owl-item .item{ padding:22px; }
  #whatsmore.partners .owl-dots{ margin-top:24px; }
}

/* responsive.css:1160 sets .section-title h2{font-size:25px} between 768 and
   1024; the clamp has to be restated inside that window or a tablet drops to
   25px. */
@media (min-width:768px) and (max-width:1024px){
  #whatsmore.partners .section-title h2{ font-size:clamp(29px, 3.6vw, 38px); }
}

/* --------------------------------------------------------------------------
   Motion
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  #whatsmore.partners .wow{
    visibility:visible !important;
    animation:none !important;
  }
  #whatsmore.partners .owl-item .item,
  #whatsmore.partners .owl-dot span{ transition:none; }
  #whatsmore.partners .owl-item .item:has(> a):hover{ transform:none; }
}

/* ==========================================================================
   "Testimonials"   --  #testimonial
   ==========================================================================
   Front page only. Six YouTube videos a page, opened in Fancybox, out of
   twenty-three pages.

   WHAT WAS WRONG, measured at 1440 and 375:

   1. IT IS A SECTION OF VIDEOS THAT LOOKED LIKE A SECTION OF PHOTOGRAPHS.
      style.css:1716 sets .photo-date - the layer holding the play button - to
      `opacity: 0; transform: scale(.5)`, and only `.post-box:hover` brings it
      back. On a phone or a tablet there is no hover, so six video thumbnails
      sat there with nothing on them to say they were videos. The play button
      is now there at rest and grows on hover instead of appearing.

   2. The pagination's current page was #fff on #cbb279 - 2.06:1. Every other
      number was fine; the one telling you where you are was the unreadable
      one. And the boxes were 33x33, under the 44px touch floor, for a control
      that has to serve twenty-three pages.

   3. .post-box is an <a> with `padding:15px` and `display:inline`. An inline
      box does not take vertical padding into the flow, which is why the cards
      never aligned with one another.

   4. .view_title is locked to `height: 55px` (style.css:1775) whatever the
      title says. The six on page one are 90-99 characters, which wraps to two
      lines and just fits; a three-line title spills out of the bar.

   5. The heading was the theme's Helvetica green, below five sections that
      are now Fraunces and Karla.

   ABOUT THE THUMBNAIL CROP. YouTube's hqdefault.jpg is always 480x360, so a
   16:9 video comes back letterboxed inside it. I sampled all six through a
   canvas before deciding, and they are not the same shape:

       wSdnAwi-fTA   40px of pure black top and bottom   -> 16:9, letterboxed
       jAOE5jFmKgs   dark low-variance left and right    -> vertical, pillarboxed
       YFABxOD9mTM   dark low-variance left and right    -> vertical, pillarboxed
       (three more filling the 4:3 frame)

   The box is 16:9. On the letterboxed one that removes 45px top and bottom
   against 40px of bar, so the black goes completely. On the other five it
   costs 12.5% off the top and the bottom, and I rendered all six at 16:9 and
   checked before keeping it: every subject stays in frame with headroom to
   spare, and 16:9 is the shape a video thumbnail is read as anyway.

   THE CAVEAT, because it is worth knowing: that is six thumbnails out of
   twenty-three pages. If a future testimonial is framed tighter than these
   and the crop clips somebody, the retreat is one line - `aspect-ratio: 4/3`
   on .photo-img - which restores the source's own shape and brings the black
   bars back with it.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground
   --------------------------------------------------------------------------
   White, because the Partners band directly above is pale and the cards here
   are white - a pale ground under white cards twice running would flatten
   both. The hairline and the shadow give the cards their edges instead.

   The <hr> at front-page.php:247 sits between the Partners section's own
   brass bottom edge and this heading: two rules, 30px apart. It is the only
   hr on the front page, so it can go. */
#testimonial{
  background:#ffffff;
  padding:74px 0 78px;
}
hr{ display:none; }

/* --------------------------------------------------------------------------
   The heading
   -------------------------------------------------------------------------- */
#testimonial .section-title{ margin-bottom:0; }

#testimonial .section-title h2{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(29px, 3.4vw, 46px);
  line-height:1.14;
  font-weight:600;
  letter-spacing:-.012em;
  color:#2b3f2f;              /* 11.32:1 on white */
  text-align:center;
  margin:0 0 46px;
}
#testimonial .section-title h2::after{
  content:"";
  display:block;
  width:170px; height:9px;
  margin:24px auto 0;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%23ffffff'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%236b5426'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(107,84,38,0) 0%, rgba(107,84,38,.5) 24%, rgba(107,84,38,.5) 76%, rgba(107,84,38,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:center center, center center;
  background-size:17px 9px, 100% 1px;
}

/* --------------------------------------------------------------------------
   The card
   --------------------------------------------------------------------------
   height:100% the whole way down the chain - .col is already a flex item that
   stretches, so once every wrapper passes the height through, the three cards
   in a row finish level however long their titles run. */
#testimonial .row{ --bs-gutter-x:26px; --bs-gutter-y:26px; }
#testimonial .col{ display:flex; }
#testimonial .col > .wow{ display:flex; width:100%; }

#testimonial .post-box{
  display:flex;               /* was inline, which is why nothing lined up */
  flex-direction:column;
  width:100%;
  padding:0;                  /* style.css:2347 and :2757 both say 15px */
  /* Cream paper rather than white. White cards on a white section read as a
     grid of thumbnails with hairlines round them; the same cards a shade warm
     read as cards, and it costs nothing in contrast - the title is 10.95:1 on
     this ground against 11.32:1 on white. */
  background:#fdfbf6;
  border:1px solid rgba(203,178,121,.7);
  box-shadow:0 14px 30px -24px rgba(43,63,47,.5);
  text-decoration:none;
  transition:border-color .3s ease, box-shadow .3s ease, transform .3s ease;
}
#testimonial .post-box:hover,
#testimonial .post-box:focus-visible{
  border-color:#cbb279;
  box-shadow:0 22px 40px -22px rgba(43,63,47,.6);
  transform:translateY(-3px);
}
#testimonial .post-box:focus-visible{
  outline:2px solid #6b5426;
  outline-offset:3px;
}

#testimonial .photo-item{
  display:flex;
  flex-direction:column;
  flex:1 1 auto;
  height:100%;
}

#testimonial .photo-img{
  position:relative;
  flex:0 0 auto;
  /* the same hairline that separates every other picture from its caption on
     this page */
  border-bottom:1px solid rgba(203,178,121,.55);
  min-height:0;               /* style.css:1701 sets 57px */
  /* see the crop note at the top of this block */
  aspect-ratio:16 / 9;
  background:#0a0d0a;
  overflow:hidden;
}
#testimonial .photo-img img{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  transition:transform .6s cubic-bezier(.2,.7,.2,1);
}
/* style.css:1693 scales to 1.1 on hover. With a 16:9 crop already taking
   12.5% off the top and bottom, another 10% is enough to push a subject out
   of frame; 4% reads as the same gesture and keeps everybody in. */
#testimonial .post-box:hover .photo-img img{ transform:scale(1.04); }

/* --------------------------------------------------------------------------
   The play button
   --------------------------------------------------------------------------
   The whole point of the fix: visible at rest. .photo-date is the cover layer
   and .photo-icon is the badge inside it. */
#testimonial .photo-date{
  position:absolute;
  inset:0;
  width:auto;
  height:auto;
  opacity:1;                  /* was 0 */
  transform:none;             /* was scale(.5) */
  transition:background-color .35s ease;
  transition-delay:0s;        /* style.css:1753 delays the reveal 300ms */
  background:linear-gradient(180deg, rgba(10,13,10,.05) 0%, rgba(10,13,10,.28) 100%);
  pointer-events:none;
}
#testimonial .post-box:hover .photo-date{
  opacity:1;
  transform:none;
  /* style.css:1753 also sets transition-delay:300ms on the hover state, so
     without this the scrim waits a third of a second before it starts. */
  transition-delay:0s;
  background:linear-gradient(180deg, rgba(10,13,10,.3) 0%, rgba(10,13,10,.5) 100%);
}

#testimonial .photo-icon{
  position:absolute;
  top:50%;                    /* style.css:1731 puts it at 42% */
  left:50%;
  transform:translate(-50%,-50%);
  width:62px;
  height:62px;
  border-radius:50%;
  background:rgba(12,17,12,.62);
  border:1px solid rgba(230,212,166,.9);
  box-shadow:0 6px 18px -8px rgba(0,0,0,.7),
             0 0 0 0 rgba(230,212,166,0);
  transition:transform .35s cubic-bezier(.2,.7,.2,1), background-color .35s ease,
             box-shadow .35s ease;
}
#testimonial .post-box:hover .photo-icon{
  transform:translate(-50%,-50%) scale(1.1);
  background:rgba(43,63,47,.86);
  box-shadow:0 6px 18px -8px rgba(0,0,0,.7),
             0 0 0 9px rgba(230,212,166,.16);
}
#testimonial .photo-icon i{
  display:block;
  line-height:62px;           /* style.css:1747 says 60px */
  font-size:19px;
  color:#f0e3c4;              /* 11.6:1 on the badge over a mid frame */
  /* the glyph's own bearing sits it left of centre in its box */
  padding-left:4px;
}

/* --------------------------------------------------------------------------
   The title
   --------------------------------------------------------------------------
   It was white 14px on a #4f6f52 bar locked to 55px. The contrast was fine
   (5.63:1); the fixed height was not, and a coloured bar under every card is
   a lot of weight for what is a caption. On the card, at a readable size,
   with room to run to three lines. */
#testimonial .gallery .view_title,
#testimonial .view_title{
  position:static;
  display:block;
  flex:1 1 auto;
  width:auto;
  height:auto;                /* was a flat 55px */
  min-height:0;
  left:auto;
  bottom:auto;
  margin:0;
  padding:18px 20px 20px;
  background:transparent;
  box-shadow:none;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:15px;
  line-height:1.5;
  font-weight:500;
  color:#2b3f2f;              /* 11.32:1 on white */
  text-align:left;
}

/* A brass tick above every caption.
   Each of these titles is a quotation - they all open with a curly quote of
   their own - so a decorative quotation mark would just double it up. The
   tick is the same brass the diamond under the heading is drawn in, and it
   turns a flat block of caption text into something that reads as a pulled
   quote. It is there at rest, not only on hover, and it runs out on hover
   with the rest of the card.
   Doubled selector for the same reason as the note at the media query below:
   the base rule's (1,2,1) half would beat a bare (1,1,1) `padding-top`. */
#testimonial .gallery .view_title,
#testimonial .view_title{
  position:relative;
  padding-top:34px;
}
#testimonial .view_title::before{
  content:"";
  position:absolute;
  top:20px;
  left:20px;
  width:26px;
  height:2px;
  background:linear-gradient(90deg, #cbb279 0%, rgba(203,178,121,.15) 100%);
  transition:width .35s cubic-bezier(.2,.7,.2,1);
}
#testimonial .post-box:hover .view_title::before{ width:48px; }

/* --------------------------------------------------------------------------
   Pagination
   --------------------------------------------------------------------------
   REPLACES the whole block above, from the `Pagination` comment banner down
   to and including `#testimonial .page-link:focus-visible` (was lines
   2388-2445).

   The top margin now lives on the <nav> rather than the <ul>. The old
   `#testimonial .pagination{ margin-top:36px; }` in the @media
   (max-width:991px) block below has been DELETED - it is (1,1,0) and sits
   after this block, so on source order it would have won and opened a 36px
   hole between the nav's top edge and its own list on every screen under
   992px. The (1,2,0) reset below is belt-and-braces in case it comes back.

   The existing @media (prefers-reduced-motion:reduce) block further down needs
   no change. It already lists `#testimonial .page-link` for transition:none;
   the query at the foot of this block adds the chevron rules it does not
   cover, and the two agree in either order.

   WHAT WAS WRONG, measured rather than assumed:

   1. THE BOXES HAD NO EDGES. The border was rgba(203,178,121,.75), which
      composites over white to #d8c59b - 1.70:1. SC 1.4.11 asks 3:1 of a
      component boundary. There is no fix inside the signature brass either:
      SOLID #cbb279 on white is 2.06:1, its ceiling. So the boundary had to
      move down the same hue to #a58c55, which is 3.24:1 on the white ground
      and 3.13:1 on its own tile. It is not a duller brass, only a darker one
      - #cbb279 carries an absolute chroma (max channel minus min) of 82 at
      hue 41.7, #a58c55 carries 80 at hue 41.3.

   2. HOVER WAS A NO-OP. It moved the border from 1.70:1 to 2.06:1 and washed
      the tile 18% brass. You could not see whether the thing under the cursor
      had responded. It is now a two-step boundary: #a58c55 at rest, #6b5426
      on hover, which is 7.19:1 and is already this page's colour - the h2
      diamond and the card focus ring are both drawn in it.

   3. THE NUMERALS WERE IN THE SUPPORT FACE. Numerals are the one place in a
      pagination control where the type IS the design, and they were Karla
      15px semibold. They are now Fraunces 500 at 17px on #fdfbf6 - the same
      face as the "Testimonials" heading directly above and the same paper the
      six cards are cut from.

   4. BOOTSTRAP'S -1px WAS STILL LIVE. bootstrap.min.css
      `.page-item:not(:first-child) .page-link{margin-left:-1px}` is (0,3,0),
      and nothing here declared margin, so the intended 6px gap was really
      5px. The base rule now says margin:0 - at (1,1,0) the id beats the three
      classes.

   5. PREV/NEXT WERE THE LITERAL STRINGS "< Prev" AND "Next >". A screen
      reader announces the first as "less than Prev". See front-page.php.
   -------------------------------------------------------------------------- */

/* The block --------------------------------------------------------------
   <nav class="pager-block"> replaces the bare <div class="text-center"> the
   template used to emit. text-align is set here rather than leaning on
   Bootstrap's .text-center utility, so the centring of the legend does not
   depend on a class the template happens to carry. */
#testimonial .pager-block{
  margin-top:46px;
  text-align:center;
}
/* (1,2,0). Defensive against a `#testimonial .pagination{margin-top:...}` ever
   coming back in a later block: that would be (1,1,0) but later in the file, so
   on source order it would win and open a hole between the nav's top edge and
   its own list.
   The VERTICAL margins only. This reset was `margin:0` and that was a bug - at
   (1,2,0) it outranked the `margin-left:auto` in the max-width:767.98px query
   below, which is (1,1,0), so the 304px list never centred itself in the
   container and the whole control sat 16px left of the section's axis on every
   phone. Measured at 375px: list at x=12 where the container centre wanted 28. */
#testimonial .pager-block .pagination{ margin-top:0; margin-bottom:0; }

/* The row ----------------------------------------------------------------
   column-gap is a true 8px now that the base rule kills Bootstrap's -1px.
   row-gap is 16px because it has to clear the brass diamond that hangs 12px
   below the current page's tile; see the note on .page-item.active below.
   The <ul> arrives with Bootstrap's .justify-content-center utility, which
   carries !important and sets `center` - the same value this wants, so they
   agree. Do not try to change the distribution here; change flex-grow on the
   items instead. */
#testimonial .pagination{
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  align-items:flex-start;
  column-gap:8px;
  row-gap:16px;
  margin:0;
  padding:0 0 14px;             /* room for the diamond under the current tile */
  list-style:none;
}
#testimonial .pagination .page-item{
  display:flex;
  margin:0;
}

/* The tile ---------------------------------------------------------------
   Cream rather than white: #fdfbf6 is the card paper from #testimonial
   .post-box, so the control belongs to the section instead of sitting on top
   of it. It costs 0.35 of a contrast point - the numeral is 10.07:1 on cream
   against 10.42:1 on white.

   box-shadow:none is load-bearing, not tidiness. bootstrap.min.css
   `.page-link:focus` paints a 4px blue ring at (0,2,0), which fires on a
   MOUSE click where :focus-visible never does. style.css:2857 also resets it,
   but that is a file we do not control, so this restates it at (1,1,0).

   box-sizing is declared even though Bootstrap's reboot sets it globally,
   because min-height:44px only means a 44px target if the 1px border is
   inside it. SC 2.5.5 measures the border box. */
#testimonial .page-link{
  position:relative;
  display:flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  min-width:44px;
  min-height:44px;              /* SC 2.5.5, and it does not shrink anywhere */
  margin:0;                     /* kills bootstrap's margin-left:-1px */
  padding:4px 8px;
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-optical-sizing:auto;
  /* lining figures because oldstyle ones would sit at three different heights
     across a row of 1, 10 and 23. tabular is belt-and-braces - Fraunces may
     not ship a tnum feature, and every tile is a fixed 44px anyway. */
  font-variant-numeric:lining-nums tabular-nums;
  font-size:17px;
  font-weight:500;              /* functions.php:311 loads 500/600/700 - no 400 */
  line-height:1;
  color:#3a4238;                /* 10.07:1 on the cream tile */
  background:#fdfbf6;
  border:1px solid #a58c55;     /* 3.24:1 on white, 3.13:1 on the tile */
  border-radius:0;
  box-shadow:none;
  text-decoration:none;
  transition:background-color .28s cubic-bezier(.2,.7,.2,1),
             border-color     .28s cubic-bezier(.2,.7,.2,1),
             color            .28s cubic-bezier(.2,.7,.2,1);
}

/* Prev / next ------------------------------------------------------------
   Words rather than bare arrows, because this audience reads words faster
   than glyphs - but set as a different species from the index: the text face,
   tracked and uppercased, against the display face's figures. uppercase is
   done in CSS so the DOM text stays "Prev"/"Next" and no screen reader spells
   it out; the accessible name is the visible word, exactly.

   min-width is identical on both and wider than either label needs (measured
   ~83px for PREV and NEXT in Karla 700, ~87px in the Segoe UI fallback), so
   the two controls are always the same width and the number group stays on
   the section's centre axis - the same axis the h2 and its diamond sit on.
   With unequal labels the index shifts by ~50px between page 1, which has no
   Prev, and page 2, which does.

   These two rules must stay ABOVE :hover. Both are (1,2,0), so the later one
   wins the colour, and it must be hover that wins. */
#testimonial .page-link.prev,
#testimonial .page-link.next{
  gap:8px;
  min-width:88px;
  padding:4px 14px;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:14px;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:#3a4238;                /* 10.07:1 on the cream tile */
}
/* 12px on top of the 8px gap, so the row reads [control] [index] [control].
   A modest separation, not a claim - the typographic difference is what does
   the real work here. */
#testimonial .page-link.prev{ margin-right:12px; }
#testimonial .page-link.next{ margin-left:12px; }

/* The chevron, drawn rather than set. Two sides of a rotated square is two
   sides of the diamond under the h2 - the same mark as the current-page pin
   below, at the same angle. currentColor means it tracks every state, and
   nothing depends on Font Awesome having loaded. The rotated footprint is
   ~8.5px but it occupies its 6px border box in the flex line, which is why
   the min-width arithmetic above uses 6. */
#testimonial .page-link.prev::before,
#testimonial .page-link.next::after{
  content:"";
  flex:0 0 auto;
  width:6px;
  height:6px;
  border:0 solid currentColor;
  border-left-width:1.5px;
  border-bottom-width:1.5px;
  transform:rotate(45deg);
  transition:transform .28s cubic-bezier(.2,.7,.2,1);
}
#testimonial .page-link.next::after{ transform:rotate(-135deg); }

/* Hover ------------------------------------------------------------------
   A real step: the tile warms, and the hairline goes from 3.24:1 to 7.19:1.
   No lift and no shadow - the conceit is a set row, and a tile that pops out
   of the shared baseline for the duration of a hover argues against it. The
   chevron slides the way it points, which is the only motion left in the
   control. */
#testimonial .page-link:hover{
  color:#2b3f2f;                /* 9.46:1 on the hover tile */
  background:#f3ead6;
  border-color:#6b5426;         /* 7.19:1 on white, 6.01:1 on the hover tile */
}
#testimonial .page-link.prev:hover::before{ transform:translateX(-3px) rotate(45deg); }
#testimonial .page-link.next:hover::after{ transform:translateX(3px) rotate(-135deg); }

/* The current page -------------------------------------------------------
   The only filled tile in the row, and the only one wearing the diamond.
   Twenty-three pages is more than anyone holds in their head, so this is
   deliberately over-signalled: fill (10.26:1 against the white ground, 9.92:1
   against its neighbouring tiles), weight, and a mark that is a difference in
   SHAPE - so it survives greyscale, colour blindness and a glance.

   The :hover halves are (1,3,0) and (1,4,0), so they beat the (1,2,0) hover
   rule outright and this stays correct wherever it lands in the file.
   .page-link.current is the fallback for the day the template's literal
   str_replace stops matching WordPress's output; without it the current page
   would lose every one of its cues at once. */
#testimonial .page-item.active .page-link,
#testimonial .page-item.active .page-link:hover,
#testimonial .page-link.current,
#testimonial .page-link.current:hover{
  font-weight:600;
  color:#f6edd8;                /* 8.81:1 on the fill */
  background:#2f4634;
  border-color:#2f4634;
  cursor:default;
}
/* The diamond under the h2, reused as the you-are-here pin. The data URI at
   home-lux.css:2205 draws `M8.5 1.2 L11.8 4.5 L8.5 7.8 L5.2 4.5` in #6b5426 -
   a 6.6 x 6.6 lozenge, which is a ~4.7px square rotated 45 degrees. This is
   the same construction at 6px, a hair larger because it hangs under a 44px
   tile rather than a 46px heading. It reaches 12.2px below the tile, which is
   what the 14px padding-bottom on the <ul> and the 16px row-gap are for. */
#testimonial .page-item.active .page-link::after,
#testimonial .page-link.current::after{
  content:"";
  position:absolute;
  left:50%;
  bottom:-11px;
  width:6px;
  height:6px;
  margin-left:-3px;
  background:#6b5426;           /* 7.19:1 on the white ground */
  transform:rotate(45deg);      /* static, so reduced motion has nothing to do */
}

/* The ellipsis -----------------------------------------------------------
   32px on desktop rather than 44: it is not a target, and being visibly
   narrower than every pressable box in the row is the clearest possible way
   of saying so. No tile and no rule, because an omission should be a gap in
   the fence and not a post - it is the one item sitting on the white section
   ground while every real page sits on cream. It goes back up to 44px on
   phones, where uniform slots are what make the wrap pack cleanly; see the
   note in the mobile query.

   Both the plain and :hover selectors are declared so the hover fill can
   never reach a <span> nobody can click. */
#testimonial .page-link.dots,
#testimonial .page-link.dots:hover{
  min-width:32px;
  padding:0 0 6px;              /* lifts the dots off a baseline shared with lining figures */
  font-size:19px;
  letter-spacing:.1em;          /* three marks, not a blob */
  color:#6b5426;                /* 7.19:1 on the white ground */
  background:transparent;
  border-color:transparent;
  cursor:default;
  -webkit-user-select:none;
  user-select:none;
}

/* Focus ------------------------------------------------------------------
   Geometry, not a recolour: a 2px ring in the page's own focus brass inside a
   pale-brass pad borrowed from the play badge's hover halo. The ring is
   7.19:1 on white and 5.84:1 against the halo it sits in, so it satisfies
   2.4.7 and WCAG 2.2's 2.4.11 as a 2px perimeter.

   No z-index anywhere in this block: margin:0 means no two tiles share a
   pixel, and the halo spreads 6px into an 8px gap, so nothing can be
   overpainted by a neighbour and there is no stacking order to declare. */
#testimonial .page-link:focus-visible{
  outline:2px solid #6b5426;
  outline-offset:2px;
  box-shadow:0 0 0 6px rgba(230,212,166,.55);
}

/* The legend -------------------------------------------------------------
   A folio under the control, not an eyebrow over it. Sentence case in the
   text face, deliberately NOT tracked caps: .boxbg .gradient_heading
   (home-lux.css:328) is how this site OPENS a section - a short brass rule
   with centred tracked capitals under it - and anything with that shape above
   a block reads as the top of a new section rather than the tail of this one.
   It stays in the accessibility tree, so a screen-reader user who tabs
   straight into the links still learns the total. */
#testimonial .pager-legend{
  margin:10px 0 0;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:14px;
  font-weight:500;
  line-height:1.4;
  color:#6b5426;                /* 7.19:1 on the white ground */
}

/* Responsive -------------------------------------------------------------
   There is no tablet tier, on purpose. The eleven-item row is sized to fit
   the narrowest desktop container outright: 7 tiles at 44 + 2 ellipses at 32
   + 2 controls at 88 + 10 gaps at 8 + 24px of caesura = 652px, against the
   696px content box of Bootstrap's 720px .container from 768px up. Since
   nothing has to switch at 992px, there is no boundary to fall into - and
   Bootstrap's .container steps at min-width:992px while a max-width:991px
   query stops at 991, which is a real hole at fractional viewport widths
   under zoom or a fractional DPR.

   The queries below are all max-width and stacked, so they do not seam against
   each other - but they DO seam against Bootstrap, whose .container steps at
   min-width:768px. Measured: an iframe set to a nominal 767px reports
   innerWidth 767 while the media query resolves the viewport at 767.184px, so
   `max-width:767px` failed and `min-width:768px` failed too - a dead band in
   which the mobile wrap switched off and the eleven-item row was left to fend
   for itself inside a 540px .container. That is why these carry Bootstrap's
   own .98: they have to change over on exactly the pixel the container does.
   -------------------------------------------------------------------------- */
@media (max-width:991.98px){
  #testimonial .pager-block{ margin-top:36px; }
}

/* The wrap.
   Eleven items cannot fit 360px - the row above is 652px and the targets are
   not negotiable - so below 768px the control becomes three deliberate
   registers instead of one ragged line:

       [ PREV ]
       1  ...  10  11  12  13
       14  ...  23
       [ NEXT ]
       Page 12 of 23

   Two things make that read as designed.

   First, prev and next each take a full-width row of their own. They are the
   two widest items and the only two that are not part of the index; letting
   them wrap into the middle of a number run is what makes a wrapped
   pagination look broken. A flex item at `flex:0 0 100%` forces a break both
   before and after itself, so ONE declaration on those two <li>s produces all
   three registers - with no `order` anywhere. That matters: prev is first in
   the DOM and next is last, so this arrangement is also the tab order, and
   the obvious alternative (an ordered zero-height spacer that hoists prev
   below the numbers) would put focus order at odds with visual order and
   break SC 2.4.3.

   Second, the <ul> is capped at 304px so the break is the same shape on every
   handset instead of being whatever width the device happens to be. With the
   ellipsis widened to 44px here, every slot is one 52px module (44 + 8), so
   304px is exactly six slots and the packing is arithmetic rather than luck.
   Across all 23 pages that gives: one row on pages 1, 2, 22 and 23; 6+2 on
   pages 4 and 20; 6+3 on pages 5 through 19, which is the nine-slot middle
   case and the one that matters - the break falls after 13, so the current
   page is never stranded at the end of a line. Pages 3 and 21 emit seven
   slots and orphan the last one; there is no cap that is orphan-free across
   all 23, and 5-per-row orphans two pages as well AND breaks the middle pages
   directly after the current number. Below 328px the cap has no room and the
   packing simply falls back to five per row - still no overflow, since
   flex-wrap plus max-width:100% cannot produce one.

   :has() is the only way to reach an <li> from a class on its <a>, and the
   markup is generated. It is already a live dependency in this stylesheet
   (three other blocks use it). The @supports guard means a browser without it
   gets prev and next flowing inline with the numbers inside the same 304px
   cap - less considered, still centred, still no horizontal overflow. */
@media (max-width:767.98px){
  #testimonial .pagination{
    max-width:304px;            /* six 44px slots and five 8px gaps, exactly */
    margin-left:auto;
    margin-right:auto;
  }
  /* uniform slots so the six-per-row packing is exact. The ellipsis is still
     obviously not a target here - it is the only item with no tile and no
     hairline - so the width no longer has to carry that message. */
  #testimonial .page-link.dots,
  #testimonial .page-link.dots:hover{ min-width:44px; }
  #testimonial .page-link.prev{ margin-right:0; }
  #testimonial .page-link.next{ margin-left:0; }
}
@supports selector(:has(*)){
  @media (max-width:767.98px){
    #testimonial .pagination .page-item:has(> .prev),
    #testimonial .pagination .page-item:has(> .next){ flex:0 0 100%; }
    #testimonial .pagination .page-item:has(> .prev) .page-link,
    #testimonial .pagination .page-item:has(> .next) .page-link{ flex:1 1 auto; }
  }
}

/* Motion -----------------------------------------------------------------
   The chevron slide is the only animation in the control, so this is short.
   The existing prefers-reduced-motion block further down already sets
   transition:none on #testimonial .page-link and does not conflict with this
   in either order. The current page's diamond is a static rotate and is not
   touched. */
@media (prefers-reduced-motion:reduce){
  #testimonial .page-link.prev::before,
  #testimonial .page-link.next::after{ transition:none; }
  #testimonial .page-link.prev:hover::before{ transform:rotate(45deg); }
  #testimonial .page-link.next:hover::after{ transform:rotate(-135deg); }
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
@media (max-width:991px){
  #testimonial{ padding:58px 0 62px; }
  #testimonial .section-title h2{ margin-bottom:34px; }
  #testimonial .section-title h2::after{ width:150px; margin-top:20px; }
  #testimonial .row{ --bs-gutter-x:20px; --bs-gutter-y:20px; }
  #testimonial .photo-icon{ width:56px; height:56px; }
  #testimonial .photo-icon i{ line-height:56px; font-size:17px; }
}

@media (max-width:767px){
  #testimonial{ padding:44px 0 48px; }
  #testimonial .section-title h2{ margin-bottom:26px; }
  #testimonial .section-title h2::after{ width:130px; margin-top:18px; }
  /* responsive.css:883 sets `.gallery .post-box{display:block;padding:0;
     margin:10px 0}` - the margin fights the row gutter now that the cards are
     flex children, so the gutter carries the spacing on its own. */
  #testimonial .gallery .post-box{ display:flex; margin:0; }
  /* .gallery .view_title has to be in this selector too. The base rule above
     is `#testimonial .gallery .view_title, #testimonial .view_title` - (1,2,1)
     and (1,1,1) - and a media query changes nothing about specificity, so a
     bare `#testimonial .view_title` here loses to the (1,2,1) half of its own
     base rule and silently does nothing. */
  #testimonial .gallery .view_title,
  #testimonial .view_title{ font-size:15.5px; padding:32px 18px 18px; }
  #testimonial .view_title::before{ top:18px; left:18px; }
  /* on a touch screen the play button IS the affordance, so it holds its
     size rather than shrinking with the card */
  #testimonial .photo-icon{ width:60px; height:60px; }
  #testimonial .photo-icon i{ line-height:60px; font-size:18px; }
}

/* responsive.css:1160 sets .section-title h2{font-size:25px} between 768 and
   1024; restated or a tablet drops to 25px. */
@media (min-width:768px) and (max-width:1024px){
  #testimonial .section-title h2{ font-size:clamp(29px, 3.6vw, 38px); }
}

/* --------------------------------------------------------------------------
   Motion
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  #testimonial .wow{
    visibility:visible !important;
    animation:none !important;
  }
  #testimonial .post-box,
  #testimonial .photo-img img,
  #testimonial .photo-date,
  #testimonial .photo-icon,
  #testimonial .page-link,
  #testimonial .view_title::before{ transition:none; }
  #testimonial .post-box:hover{ transform:none; }
  #testimonial .post-box:hover .photo-img img{ transform:none; }
  #testimonial .post-box:hover .photo-icon{ transform:translate(-50%,-50%); }
}

/* ==========================================================================
   "Green Advantages"   --  #whatsmore:not(.partners)
   ==========================================================================
   Front page only. Five IGBC statistics, an icon and a number each.

   THE SELECTOR. front-page.php uses id="whatsmore" TWICE - on Partners
   (line 195) and again here (line 314). getElementById returns only the
   first, so it looks unique from a console, but CSS matches both. The
   Partners block is written as #whatsmore.partners and this one as
   #whatsmore:not(.partners); both are (1,1,0) and they cannot overlap. The
   duplicate id is still a markup bug worth fixing in the template - two
   elements cannot share one, and any anchor link or script that looks for
   #whatsmore will only ever find Partners.

   WHAT WAS WRONG:

   1. THE NUMBERS - the entire point of the section - WERE THE SMALLEST
      CONFIDENT THING IN IT. `AROUND 97%` was 15px semibold; the intro
      paragraph above it was 15px too, and the heading was 36px. A section
      built out of five statistics was setting those statistics at body size.

   2. .green_adv_section is `width: 215px; height: 160px` (style.css:2575) -
      a fixed box inside a column that is 244px wide at 1280. So every card
      sat 29px short of its own column with dead space to its right, and the
      row finished 29px short of the container. The height is locked too:
      measured content 158px against a 160px box, which is two pixels of
      slack on the longest label before it spills.

   3. A `1px solid #ccc` border - the only grey in a palette of cream, brass
      and green.

   4. The intro paragraph ran the FULL container: about 150 characters a line
      at 1280.

   5. The heading was the theme's Helvetica green, below six sections that
      are now Fraunces and Karla.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground
   --------------------------------------------------------------------------
   The one dark band on the page, and it earns it: this is the section about
   the green certification, and it lands between the white testimonials and
   the brass #cbb279 contact band (style.css:854) - deep green into brass is
   the site's own pairing.

   It also solves something the light version could not. Five outlined boxes
   on white read as five boxes; five statistics on a dark ground read as one
   set of credentials. */
#whatsmore:not(.partners){
  position:relative;
  padding:78px 0 82px;
  background-color:#2b3f2f;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.05'/%3E%3C/svg%3E"),
    linear-gradient(180deg, rgba(255,255,255,.05) 0%, rgba(255,255,255,0) 42%, rgba(0,0,0,.14) 100%);
  border-top:1px solid rgba(203,178,121,.55);
  border-bottom:1px solid rgba(203,178,121,.55);
}

/* --------------------------------------------------------------------------
   The heading
   -------------------------------------------------------------------------- */
#whatsmore:not(.partners) .section-title{ margin-bottom:0; }

#whatsmore:not(.partners) .section-title h2{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(29px, 3.4vw, 46px);
  line-height:1.14;
  font-weight:600;
  letter-spacing:-.012em;
  color:#f4ecd8;              /* 11.9:1 on the band */
  text-align:center;
  margin:0;
}
/* the section mark, with the diamond in a lighter brass so it reads against
   the dark, and the band colour painted behind it to punch the hole */
#whatsmore:not(.partners) .section-title h2::after{
  content:"";
  display:block;
  width:170px; height:9px;
  margin:24px auto 0;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%232b3f2f'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%23cbb279'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(203,178,121,0) 0%, rgba(203,178,121,.55) 24%, rgba(203,178,121,.55) 76%, rgba(203,178,121,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:center center, center center;
  background-size:17px 9px, 100% 1px;
}

/* style.css:58 gives every paragraph color:#151515, which on this ground
   would be all but invisible - so the colour here is not decoration, it is
   the thing that keeps the copy readable. */
#whatsmore:not(.partners) .section-title p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:17px;
  line-height:1.74;
  color:#dcd5c4;              /* 9.0:1 on the band */
  max-width:min(100%, 820px);
  margin:28px auto 0;
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
}

/* --------------------------------------------------------------------------
   The five statistics
   -------------------------------------------------------------------------- */
#whatsmore:not(.partners) .row{ --bs-gutter-x:20px; --bs-gutter-y:34px; margin-top:52px; }
#whatsmore:not(.partners) .col{ display:flex; }
#whatsmore:not(.partners) .col.mb-3{ margin-bottom:0 !important; }

#whatsmore:not(.partners) .green_adv_section{
  /* was 215x160 fixed inside a 244px column */
  position:relative;
  width:100%;
  height:auto;
  min-height:0;
  display:flex;
  flex-direction:column;
  align-items:center;
  padding:26px 14px 28px;
  border:0;                   /* the #ccc box */
  background:rgba(255,255,255,.035);
  border-top:1px solid rgba(203,178,121,.55);
  text-align:center;
  transition:background-color .32s ease, border-color .32s ease,
             transform .32s cubic-bezier(.2,.7,.2,1);
}
#whatsmore:not(.partners) .green_adv_section:hover,
#whatsmore:not(.partners) .green_adv_section:focus-within{
  background-color:rgba(255,255,255,.075);
  border-top-color:#cbb279;
  /* !important, and this one is not optional. These cards now carry the
     classes "wow fadeInUp", and animate.css gives .animated an
     animation-fill-mode of both - so once the entrance has run, the animation
     goes on holding fadeInUp last keyframe, transform:translate3d(0,0,0).
     CSS animations outrank normal author declarations in the cascade, so an
     unflagged hover transform here is simply ignored: measured, the card
     stayed exactly where the animation left it and did not lift at all. Only
     !important author declarations sit above animations. */
  transform:translateY(-4px) !important;
}

/* The icons are single-colour PNGs - flat #4f6f52 on transparency, 70-82% of
   each file being transparent - which is exactly the theme green and would
   sit at about 1.9:1 on this ground. brightness(0) forces every opaque pixel
   to black with its alpha intact, and invert(1) turns that pure white, so the
   line art comes through cleanly with its antialiased edges kept. */
/* THE RING. An <img> takes a border, a padding and a border-radius like
   anything else, so the ring is on the image itself rather than on a
   pseudo-element that would have to be positioned to chase it. box-sizing has
   to be said out loud: Bootstrap sets border-box on *, which would eat the
   padding out of the 54px instead of growing the box around it. */
#whatsmore:not(.partners) .green_adv_section img{
  box-sizing:content-box;
  width:54px !important;      /* style.css:2591 says 60px !important */
  height:auto;
  margin:0 auto 18px;
  padding:17px;
  border:1px solid rgba(203,178,121,.55);
  border-radius:50%;
  background:rgba(255,255,255,.05);
  filter:brightness(0) invert(1);
  opacity:.9;
  transition:background-color .32s ease, border-color .32s ease,
             box-shadow .32s ease, transform .32s cubic-bezier(.2,.7,.2,1),
             opacity .32s ease;
}
#whatsmore:not(.partners) .green_adv_section:hover img,
#whatsmore:not(.partners) .green_adv_section:focus-within img{
  background-color:rgba(203,178,121,.22);
  border-color:#cbb279;
  box-shadow:0 0 0 6px rgba(203,178,121,.1);
  transform:scale(1.07);
  opacity:1;
}

/* the brass rule under the number stretches as the card lifts */
#whatsmore:not(.partners) .green_adv_section h4::after{
  transition:width .34s cubic-bezier(.2,.7,.2,1), background-color .32s ease;
}
#whatsmore:not(.partners) .green_adv_section:hover h4::after,
#whatsmore:not(.partners) .green_adv_section:focus-within h4::after{
  width:62px;
  background:rgba(203,178,121,.9);
}

/* --------------------------------------------------------------------------
   Why there is no entrance animation here
   --------------------------------------------------------------------------
   These cards have no .wow class, so there is no scroll trigger to hang an
   entrance off, and a plain CSS animation is no use this far down the page -
   it would have played out long before anybody scrolled to it.

   I built one on a scroll-driven timeline (animation-timeline:view(), behind
   @supports) and then took it out again, because I could not verify it. In
   the preview the timeline reported currentTime 0 and progress 0 at every
   scroll position from "section below the fold" to "section at the top" -
   which is indistinguishable from "the animation never advances", and
   progress 0 against a `from{opacity:0}` keyframe with fill:both is exactly
   the state that renders these cards INVISIBLE.

   It is very probably a limitation of the preview rather than of the CSS.
   But the failure mode is five blank cards on a live page, so it is not
   something to ship on probably. The hover work below is the part that could
   be measured, and it is the part that stayed.

   If you want the entrance later, the safe way is the one the rest of this
   theme already uses: add `wow fadeInUp` to the .green_adv_section div in
   front-page.php:325 and let wow.min.js - already loaded - drive it. That is
   a one-word template change with a library that is known to work here. */

/* The number, finally at the size the section is about.

   It WRAPS. I wrote white-space:nowrap first, on the assumption that "AROUND
   97%" would hold one line - it does at 1200 and up, and it overflows its own
   card at 360, 375, 768, 820 and 900, where the column is 123-155px wide
   against a string that wants 133-159. Left to wrap it breaks after "AROUND"
   on every one of the five, identically, which reads as a label over a
   figure rather than a mistake. */
#whatsmore:not(.partners) .green_adv_section h4,
#whatsmore:not(.partners) .green_adv_section h5,
#whatsmore:not(.partners) .green_adv_section h6{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(20px, 1.9vw, 27px);
  line-height:1.1;
  font-weight:600;
  font-style:normal;
  letter-spacing:-.01em;
  color:#dcc38d;              /* 6.6:1 on the band */
  margin:0;
}
#whatsmore:not(.partners) .green_adv_section h4::after{
  content:"";
  display:block;
  width:36px; height:1px;
  margin:14px auto 13px;
  background:rgba(203,178,121,.55);
}

#whatsmore:not(.partners) .green_adv_section p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:14.5px;
  line-height:1.5;
  color:#cfc8b6;              /* 8.1:1 on the band */
  margin:0;
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
/* HOW MANY ACROSS, written as a default plus two min-widths rather than a
   min/max pair - because the pair had the seam this project keeps finding.
   The first version used `(min-width:768px) and (max-width:991px)` for the
   three-across band, and at a viewport reported as exactly 991 NEITHER that
   nor the 992 rule matched, so the grid fell back to Bootstrap's
   row-cols-md-5 and rendered five 123px cards. Stacked min-widths cannot
   leave a hole.

   Why three and not five between 768 and 991: row-cols-md-5 starts at 768,
   where the container is 720 and each card comes out at 123px. Measured at
   834, "Water Consumption Lowered with Water Fixtures" wraps to FOUR lines in
   that width and the number wraps as well. Three across gives ~219px cards -
   the same width they get at 1200 - and the odd two on the second row centre
   themselves, because justify-content-center is already on the row in
   front-page.php:319. */
@media (min-width:768px){
  #whatsmore:not(.partners) .row > .col{ flex:0 0 auto; width:33.3333%; }
  #whatsmore:not(.partners) .green_adv_section{ padding:24px 14px 26px; }
  #whatsmore:not(.partners) .green_adv_section img{ width:50px !important; padding:15px; }
}
@media (min-width:992px){
  #whatsmore:not(.partners) .row > .col{ width:20%; }
  #whatsmore:not(.partners) .green_adv_section{ padding:26px 14px 28px; }
  #whatsmore:not(.partners) .green_adv_section img{ width:54px !important; padding:17px; }
}

/* the .98 is Bootstrap's own convention for the same reason - a viewport can
   report a fractional width, and `max-width:991px` is false at 991.4 */
@media (max-width:991.98px){
  #whatsmore:not(.partners){ padding:58px 0 62px; }
  #whatsmore:not(.partners) .section-title h2::after{ width:150px; margin-top:20px; }
  #whatsmore:not(.partners) .row{ margin-top:40px; --bs-gutter-y:28px; }
  #whatsmore:not(.partners) .green_adv_section img{ margin-bottom:15px; }
}

@media (max-width:767.98px){
  #whatsmore:not(.partners){ padding:46px 0 50px; }
  #whatsmore:not(.partners) .container{ padding-left:18px; padding-right:18px; }
  /* the measure is about 40 characters here; justified word gaps run to 4-5x
     the natural space at that width, the same reason .about p is ragged
     below 768 */
  #whatsmore:not(.partners) .section-title p{ font-size:16.5px; margin-top:22px; text-align:left; }
  #whatsmore:not(.partners) .section-title h2::after{ width:130px; margin-top:18px; }
  #whatsmore:not(.partners) .row{ margin-top:32px; --bs-gutter-x:14px; --bs-gutter-y:14px; }
  /* two across, so the cards are wide and the number can go back up */
  #whatsmore:not(.partners) .green_adv_section{ padding:24px 12px 26px; }
  #whatsmore:not(.partners) .green_adv_section h4{ font-size:24px; }
  /* responsive.css:632 sets 13px/18px here */
  #whatsmore:not(.partners) .green_adv_section p{ font-size:14.5px; line-height:1.5; }
  /* responsive.css:637 sets width:95%; height:170px; margin:0 5px */
  #whatsmore:not(.partners) .green_adv_section{ width:100%; height:auto; margin:0; }
}

/* responsive.css:1160 sets .section-title h2{font-size:25px} between 768 and
   1024; restated or a tablet drops to 25px. */
@media (min-width:768px) and (max-width:1024px){
  #whatsmore:not(.partners) .section-title h2{ font-size:clamp(29px, 3.6vw, 38px); }
}

/* --------------------------------------------------------------------------
   Motion
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  #whatsmore:not(.partners) .wow{
    visibility:visible !important;
    animation:none !important;
  }
  /* the colour change on hover stays; only the movement goes */
  #whatsmore:not(.partners) .green_adv_section,
  #whatsmore:not(.partners) .green_adv_section img,
  #whatsmore:not(.partners) .green_adv_section h4::after{
    transition:background-color .32s ease, border-color .32s ease;
    animation:none;
  }
  /* has to carry !important too now, for the same reason the hover rule does */
  #whatsmore:not(.partners) .green_adv_section:hover,
  #whatsmore:not(.partners) .green_adv_section:focus-within{ transform:none !important; }
  #whatsmore:not(.partners) .green_adv_section:hover img,
  #whatsmore:not(.partners) .green_adv_section:focus-within img{ transform:none; }
}

/* ==========================================================================
   "Step into Jagriti Dham"   --  #contact
   ==========================================================================
   Front page only. The heading lives in the ACF field form_heading; the form
   is Contact Form 7 id 32, seven fields plus a maths captcha.

   This is the one section on the page somebody has to USE rather than read,
   so most of what follows is about the form rather than the frame.

   WHAT WAS WRONG:

   1. THE PLACEHOLDERS ARE THE SAME COLOUR AS TYPED TEXT. style.css:331 sets
      `::placeholder{ color:#151515 !important }` sitewide - the same
      #151515 that style.css:317 gives the input's own text. So an empty
      field and a filled one look identical. On a form with NO labels at all,
      where the placeholder is the only thing naming the field, that means
      every field reads as already answered.

   2. THERE IS NO VISIBLE FOCUS INDICATOR. style.css:65 zeroes `:focus`
      sitewide, and style.css:346 does it again for textarea and select. A
      keyboard user tabbing through seven fields gets nothing on screen at
      any point. Measured: outline-style computes to `none` on every control.

   3. THE MATHS CAPTCHA INPUT IS 23x26px. It is the last thing between a
      visitor and sending the form, it is a required field, and it is a third
      of the 44px touch minimum with a browser-default inset border that
      matches nothing else on the page.

   4. Per-field error messages are switched off. style.css:1956 sets
      `.wpcf7-not-valid-tip{ display:none }`, so a failed submit says only
      "one or more fields have an error" at the bottom and never points at
      which. Seven fields, one generic message.

   5. #fff on #cbb279 for the heading (style.css:857) is 2.06:1. The same
      pairing turned up on the gallery caption and the testimonial pagination
      and fails just as hard here.

   6. .sticky_div is `top:100px` against a 102px condensed header, the same
      as the compassion panel - the heading slid under the header when it
      stuck. And it stayed sticky below 992, where the column is full width.

   7. `padding: 20px 0` for the section that closes the page.

   AND ONE THAT IS ONLY NOT A BUG BY ACCIDENT: style.css:323 says
   `input.form-control:focus{ color:#fff }` - white text on a white field the
   moment you click into it. It never fires because the base rule two lines
   above carries `color:#151515 !important`, and !important beats an
   unflagged declaration whatever the selector. Left alone; noted so nobody
   "tidies up" that !important.
   ========================================================================== */

/* --------------------------------------------------------------------------
   The ground
   --------------------------------------------------------------------------
   Brass is right here - it is the site's accent and it follows the deep
   green of Green Advantages the way the palette intends. What it needed was
   depth: the paper grain, a gentle vertical fall, and hairlines to close it,
   so it reads as the last panel of the page rather than a flat swatch. */
#contact{
  position:relative;
  padding:76px 0 80px;
  background-color:#cbb279;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.05'/%3E%3C/svg%3E"),
    linear-gradient(180deg, rgba(255,255,255,.16) 0%, rgba(255,255,255,0) 40%, rgba(74,58,22,.1) 100%);
  border-top:1px solid rgba(74,58,22,.35);
  border-bottom:1px solid rgba(74,58,22,.35);
}

/* --------------------------------------------------------------------------
   The left column
   -------------------------------------------------------------------------- */

/* style.css:690 is top:100px sitewide; the condensed header is 0 + 56 + 46 =
   102 (css/header-lux.css:486-491). Below 992 the columns stack and there is
   nothing to be sticky beside. Default static, one min-width - no seam. */
#contact .sticky_div{ position:static; }
@media (min-width:992px){
  #contact .sticky_div{
    position:sticky;
    top:calc(56px + var(--jd-h-nav, 46px) + 24px);
  }
}

#contact .section-title{ margin-bottom:0; }

#contact .section-title h2{
  font-family:"Fraunces","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  font-size:clamp(30px, 3.2vw, 44px);
  line-height:1.1;
  font-weight:600;
  letter-spacing:-.014em;
  color:#2b3f2f;              /* 5.49:1 on the brass, against 2.06:1 for #fff */
  text-align:left;
  margin:0;
}
/* the section mark, left-aligned to match a left-aligned heading - the other
   six sections centre it */
#contact .section-title h2::after{
  content:"";
  display:block;
  width:150px; height:9px;
  margin:22px 0 0;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='9'%3E%3Crect width='17' height='9' fill='%23cbb279'/%3E%3Cpath d='M8.5 1.2L11.8 4.5 8.5 7.8 5.2 4.5z' fill='%234a3a16'/%3E%3C/svg%3E"),
    linear-gradient(90deg, rgba(74,58,22,.55) 0%, rgba(74,58,22,.55) 76%, rgba(74,58,22,0) 100%);
  background-repeat:no-repeat, no-repeat;
  background-position:left 34px center, left center;
  background-size:17px 9px, 100% 1px;
}

#contact .sticky_div p{
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:16.5px;
  line-height:1.7;
  color:#241f12;              /* 8.0:1 on the brass */
  margin:24px 0 0;
  /* Justified, as asked, and as the reference section on infinityheights.in
     sets its own left column. hyphens comes with it: justification stretches
     the spaces on a line, and in a column this narrow there is nowhere else
     for the slack to go unless words can break. Measured gaps are in
     README-HOME.md - this is a 407px column, which is narrower than the
     860px where justify sits at 1.4x. */
  text-align:justify;
  -webkit-hyphens:auto;
          hyphens:auto;
}

/* --------------------------------------------------------------------------
   The form
   --------------------------------------------------------------------------
   Built to the pattern of the enquiry form in the "Guwahati's Most Exclusive
   Hill-Top Address" section on infinityheights.in, measured off that page:

       card      #fff, radius 16px, padding 28px 26px,
                 box-shadow 0 10px 30px rgba(0,0,0,.1)
       fields    #fff, radius 8px, 1px solid #d8e0dc, padding 10px 14px
       submit    solid fill, radius 30px (a pill), padding 13px 32px, 190x50
       gutter    g-2

   The wrapper .wpcf7 div that CF7 prints is what carries the card there, and
   it is in this markup too, so it needs no template change.

   TWO DELIBERATE DIFFERENCES from the reference, both about this audience
   rather than about the look:

     - the fill stays Jagriti's #2f4634 rather than Infinity Heights' #006a34.
       The shape is what was asked for; the colour belongs to the other brand.
     - the field type stays 16px rather than 14px. Below 16px iOS zooms the
       whole page in the moment a field is focused and the visitor has to
       pinch back out between every one. If you would rather match exactly,
       it is the one font-size below.

   The card also changes what the rest of this block sits on: everything
   inside .wpcf7 is now on white, not on the brass, so the error text, the
   response box and the Google Sheets note are all recoloured for white. */
#contact .wpcf7{
  background:#ffffff;
  border-radius:16px;
  padding:28px 26px;
  box-shadow:0 10px 30px rgba(43,33,10,.13);
}

#contact .wpcf7-form .row.g-2{ --bs-gutter-x:8px; --bs-gutter-y:8px; }

/* One rule for text inputs, selects and the textarea, because they were three
   different things: the inputs had no border at all (style.css:315), the
   selects had Bootstrap's #ced4da, and the captcha had the browser's default
   inset. */
#contact input.form-control,
#contact textarea.form-control,
#contact .form-select,
#contact input.wpcf7-mathcaptcha{
  background-color:#ffffff;
  /* the reference's own field border. It is very light, which works because
     the fields now sit on a white card rather than straight on the brass -
     that is the same reason it works on infinityheights.in, where the card
     is white on a pale grey ground. */
  border:1px solid #d8e0dc;
  border-radius:8px;
  font-size:16px;
  line-height:1.4;
  color:#151515;
  padding:11px 14px;
  min-height:48px;
  box-shadow:none;
  transition:border-color .2s ease, box-shadow .2s ease;
}
#contact textarea.form-control{ min-height:132px; padding:12px 14px; resize:vertical; }

/* The placeholder finally reads as a prompt rather than as an answer.
   !important because style.css:331 carries it. 5.61:1, so it is still
   comfortably legible - it is the only thing naming these fields. */
#contact ::-moz-placeholder{ color:#5f6b5c !important; opacity:1; }
#contact ::placeholder{ color:#5f6b5c !important; opacity:1; }

/* THE FOCUS RING. style.css:65 (`:focus{outline:0;box-shadow:none}`) and
   style.css:346 both switch this off; naming the element type puts these at
   (1,2,1) and (1,1,1), which clears both without !important. */
#contact input.form-control:focus,
#contact textarea.form-control:focus,
#contact .form-select:focus,
#contact input.wpcf7-mathcaptcha:focus{
  border-color:#2b3f2f;
  box-shadow:0 0 0 3px rgba(43,63,47,.22);
  background-color:#ffffff;
  color:#151515;
}
#contact input.form-control:focus-visible,
#contact textarea.form-control:focus-visible,
#contact .form-select:focus-visible,
#contact input.wpcf7-mathcaptcha:focus-visible,
#contact .wpcf7-submit:focus-visible{
  outline:2px solid #24331f;
  outline-offset:2px;
}

/* --------------------------------------------------------------------------
   The maths captcha
   --------------------------------------------------------------------------
   The markup is an input followed by a bare text node - " + 3 = 4" - inside
   .mathcaptcha_div, so the sum can be set as a unit and the box brought up to
   size without touching the plugin. */
#contact .mathcaptcha_div{
  display:flex;
  align-items:center;
}
#contact .mathcaptcha_div .wpcf7-form-control-wrap{
  display:flex;
  align-items:center;
  gap:10px;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:16px;
  font-weight:600;
  color:#2f3327;              /* on the white card now, not on the brass */
}
#contact input.wpcf7-mathcaptcha{
  width:62px;
  min-height:48px;
  padding:11px 8px;
  text-align:center;
  font-weight:600;
}

/* --------------------------------------------------------------------------
   The submit button
   --------------------------------------------------------------------------
   style.css:422-437 carries three !important declarations on .btn-primary -
   padding, a 1px white border and the text colour - so these three have to be
   answered in kind. The rest is ordinary. */
#contact .wpcf7-submit,
#contact .wpcf7-form-control.btn-primary{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:190px;
  min-height:50px;
  padding:13px 32px !important;
  border:0 !important;        /* style.css:435 puts a 1px white border here */
  color:#f6edd8 !important;   /* 8.81:1 on the fill */
  background-color:#2f4634;
  background-image:linear-gradient(0deg, #24331f, #24331f);
  background-size:100% 0;
  background-repeat:no-repeat;
  background-position:bottom;
  border-radius:30px;         /* the pill, from the reference */
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:15px;
  font-weight:700;
  letter-spacing:.08em;
  box-shadow:0 8px 18px -10px rgba(36,51,31,.7);
  transition:background-size .45s cubic-bezier(.2,.7,.2,1), box-shadow .3s ease;
}
#contact .wpcf7-submit:hover,
#contact .wpcf7-form-control.btn-primary:hover{
  background-size:100% 100%;
  color:#f6edd8 !important;
  box-shadow:0 12px 22px -10px rgba(36,51,31,.8);
}

/* --------------------------------------------------------------------------
   Errors
   --------------------------------------------------------------------------
   style.css:1956 hides the per-field message outright. Un-hidden here only -
   other forms on the site keep whatever they do now - and set as a note under
   the field it belongs to. */
#contact .wpcf7-not-valid-tip{
  display:block;
  margin:6px 0 0;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:13.5px;
  font-weight:600;
  line-height:1.4;
  color:#8c2f2f;              /* 8.2:1 on the white card */
}
/* the colour is not carrying this on its own - the border weight changes too,
   so it does not depend on seeing red */
#contact .wpcf7-not-valid{
  border-color:#8c2f2f !important;
  border-width:2px !important;
}

/* CF7 leaves this div in the markup and empty until something happens, and
   its own stylesheet is what normally keeps it out of the way. Giving it a
   border and padding here means an empty one would render as a bordered
   strip if that ever stopped being true, so :empty settles it independently
   of any class CF7 does or does not add. */
#contact .wpcf7-response-output:empty{ display:none; }

#contact .wpcf7-response-output{
  margin:20px 0 0;
  padding:13px 16px;
  border:1px solid #d8e0dc;
  border-radius:8px;
  background:#f7faf8;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:15px;
  line-height:1.5;
  color:#2f3327;
}
#contact form.invalid .wpcf7-response-output,
#contact .wpcf7-response-output.wpcf7-validation-errors{
  border-color:#8c2f2f;
  background:#fdf4f4;
  color:#7a2626;              /* 6.9:1 on that tint */
}
#contact form.sent .wpcf7-response-output,
#contact .wpcf7-response-output.wpcf7-mail-sent-ok{
  border-color:#2f4634;
  background:#f2f7f2;
  color:#22331f;
}

/* the Google Sheets line - a footnote, so it should look like one */
#contact .gscf7-frontend-gdpr-notice{
  margin:16px 0 0;
  font-family:"Karla","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  font-size:13px;
  line-height:1.5;
  color:#5b6157;            /* 6.0:1 on the white card */
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */
/* The columns are col-lg-4 / col-lg-8 on the LG breakpoint but col-md-4 /
   col-md-8 on MD, so between 768 and 991 the intro is squeezed into a 216px
   column - about 29 characters a line at 16.5px, which is unreadable prose
   before you even ask it to justify (measured word gaps there ran to 13x the
   natural space). The reference section on infinityheights.in uses
   col-lg-4 col-md-12 for exactly this reason: it stacks below 992 and only
   splits when there is room. Same here. */
@media (max-width:991.98px){
  #contact{ padding:56px 0 60px; }
  #contact .row > .col-lg-4,
  #contact .row > .col-lg-8{ flex:0 0 auto; width:100%; }
  #contact .sticky_div{ margin-bottom:34px; }
  #contact .section-title h2::after{ width:130px; margin-top:18px; }
}

/* WHERE JUSTIFY HOLDS AND WHERE IT DOES NOT.

   Justified by default, as asked. Justification stretches the spaces on a
   line and every gap on that line stretches equally, so how well it reads is
   a function of how wide the column is. Measured worst gap in this copy, as
   a multiple of the font's own space:

       469px  (1920)        2.3x     fine
       383px  (1280-1440)   3.9x     fine
       371px  (1200)        3.5x     fine
       363px  (414 phone)   3.6x     fine
       324px  (375 phone)   4.2x     loose but holding
       309px  (360 phone)   8.7x     comes apart
       296px  (992-1199)    6.7x     comes apart

   So the two exceptions below are the two column widths where it measurably
   breaks, and nowhere else. Note the shape: justify is the DEFAULT and these
   only subtract from it, so if either query ever fails to match, what you get
   is the justify that was asked for rather than a gap in the styling. */
@media (min-width:992px) and (max-width:1199.98px){
  #contact .sticky_div p{ text-align:left; }
}
@media (max-width:375.98px){
  #contact .sticky_div p{ text-align:left; }
}

@media (max-width:767.98px){
  #contact{ padding:44px 0 48px; }
  #contact .container{ padding-left:18px; padding-right:18px; }
  #contact .wpcf7{ padding:20px 16px; border-radius:14px; }
  #contact .sticky_div p{ font-size:16px; }
  #contact .mathcaptcha_div{ justify-content:flex-start; margin-bottom:14px; }
  /* responsive.css:482 already centres the button on a phone; it just needs
     to not be 89px wide while it does it */
  #contact .wpcf7-submit,
  #contact .wpcf7-form-control.btn-primary{ width:100%; }
}

/* responsive.css:987 and :1101 both set .peachbg h2{font-size:30px}, which
   would flatten the clamp at exactly tablet widths. */
@media (min-width:481px) and (max-width:1024px){
  #contact .section-title h2{ font-size:clamp(30px, 3.6vw, 38px); }
}

/* --------------------------------------------------------------------------
   Motion
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  #contact .wow{
    visibility:visible !important;
    animation:none !important;
  }
  #contact input.form-control,
  #contact textarea.form-control,
  #contact .form-select,
  #contact .wpcf7-submit{ transition:none; }
}
