/* ==========================================================================
   WREN, DRESSED FOR A CLEARING.

   The ten `park-*.html` clearings share one dark ground (life/park-clearing.css
   paints `body` #0a1614) and life/guide.css declares a LIGHT default palette on
   `.pg-root`. So every clearing has to re-dress her, and until 11 August 2026
   exactly one of them did — park-store.html, in a page-local <style> block,
   because it was the only page she was wired into.

   Nine more pages were about to copy that block. Ten copies of a palette is ten
   places for it to drift, and this park has a written scar about exactly that
   shape of thing (charter rule 8: one fact, one home). So the block moved here
   and all ten link it. Nothing in this file is new: every rule below was
   already running on park-store.html and was measured there.

   WHAT WAS MEASURED, AND WHERE IT CAME FROM (park-store.html, 10 Aug 2026).

   1. THE PALETTE. Contrast against the surfaces declared below:
        body text     #F2EDE1 on #10201F   14.4:1
        muted line    #B9C6BC on #16292A    8.0:1
        accent        #7FD3A6 on #10201F    9.5:1
        emergency     #FF8A66 on #10201F    7.5:1
      AA wants 4.5. Nothing outside `.pg-root` is touched, so this cannot leak
      into a host page.

   2. WHERE SHE STANDS. `.ps-help--clearing` — the crisis pill — is fixed at
      right 12px / bottom 132px and rises to about 170px when it is open, and
      its z-index is 2147483000, above every overlay on purpose. Anything of
      Wren's inside that band would have the pill sitting on top of it,
      including, at 390px wide, her text input. So her panel and her nudge open
      ABOVE the band instead of through it. Measured at 390x844 and 1280x800,
      closed and open, at the top and the bottom of the scroll: 0 px of overlap
      between any part of Wren and the pill's rectangle, and 0 links or buttons
      of the page covered by her launcher.

      A SIZE CONTROL MAY NEVER COME BETWEEN SOMEBODY AND A NUMBER, and neither
      may a guide. life/park-help.css defends the pill's position at length in
      its own header and it is not ours to move. This file moves Wren.

   3. `.wren-note` — the quiet line naming the clearing — is fixed at bottom
      52px by life/park-clearing.css, which is inside Wren's launcher. It is
      lifted to 70px only at the width where it is drawn at all (it is
      `display:none` below 721px).
   ========================================================================== */

/* ---- SHE ARRIVES FROM BELOW HERE, AND THAT IS A FIX ---------------------
   Added 11 August 2026, found by `PORT=9793 node tools/help-reach-check.js`
   reporting ELEVEN page-viewports broken with "covers a target at top:
   TARGET <BUTTON> pg-launch" — including park-store.html, which had been
   shipping that way since she was switched on yesterday.

   At rest there is no overlap and never was. Measured on this tree:
     390x844   pill  x 228..378  y 674..712      launcher x 320..376  y 774..830
     1280x800  pill  x 1108..1258 y 630..668     launcher x 1099..1254 y 730..786
   62 px of clear air at both widths. My own first instrument said 0 px² of
   overlap and was RIGHT ABOUT THE WRONG MOMENT.

   THE COLLISION IS IN THE ANIMATION. life/guide.css `pgArrive` opens at
   `translate(46px,-140px)` — she is born 140 px ABOVE her resting place and
   glides down into it. 140 px up from 774 is 634, and the pill's rectangle at
   390 is 674..712. So for roughly the first half of a 1.1 s arrival, Wren's
   launcher is inside the crisis pill's box, and the pill's z-index is
   2147483000, so it is Wren who is underneath it. A guest who reaches for her
   in that window presses the lifeline instead — which is the harmless
   direction of that mistake, but it is still a button that does not do what
   it looks like it does.

   IT IS A RACE, WHICH IS WHY IT LOOKS INTERMITTENT. The check caught
   park-grounds at both widths and park-store only at 1280; nine of the ten
   passed at 390 in the same run. A fault that depends on when the scan lands
   is not a smaller fault than a constant one — it is the same fault on a
   slower phone, where the window is wider.

   THE FIX IS THE DIRECTION, NOT THE MOTION. She now rises out of the clearing
   floor instead of falling through the lifeline: her greatest upward
   excursion is -10 px at the 55% overshoot, which leaves 52 px between the top
   of her launcher and the bottom of the pill at both widths. The bloom, the
   easing, the duration and the character of the arrival are unchanged, and
   she still glides down on every page that is not a clearing. Reduced motion
   is re-honoured below, because this file loads AFTER guide.css and would
   otherwise resurrect the animation that file's reduce block turns off. */
@keyframes pgArriveClearing{
  0%{opacity:0;transform:translate(30px,120px) rotate(-8deg) scale(.7)}
  55%{opacity:1;transform:translate(-4px,-10px) rotate(4deg) scale(1.05)}
  100%{opacity:1;transform:none}
}
.pg-root.arrive .pg-launch{animation:pgArriveClearing 1.1s cubic-bezier(.22,1,.36,1) both}
@media (prefers-reduced-motion:reduce){
  .pg-root.arrive .pg-launch{animation:none}
}

.pg-root{
  --ink:#F2EDE1; --ink-soft:#B9C6BC;
  --paper:#10201F; --paper-raised:#16292A; --paper-sunk:#0B1918;
  --hairline:rgba(224,217,200,.28);
  --on-dark:#10201F; --on-dark-soft:rgba(16,32,31,.72);
  --forest:#7FD3A6; --forest-deep:#63B58C;
  --gold:#E4A93C; --gold-soft:#F0C876; --ember:#FF8A66; --clay:#E8A87C;
}

/* the bottom-right corner, stacked, measured at 1280x800 with the arrival
   animation settled (a reading taken at 3.5 s catches the launcher mid-flight
   at y 577 instead of its resting y 718 — that first reading was thrown away):
     launcher   bottom  14 .. 70
     .wren-note bottom  80 .. 120
     crisis pill        132 .. ~302 open
   guide.css's own clamp puts the launcher at 26 at this width, and the note
   then sat across it — screenshotted, not assumed. */
.pg-root{bottom:14px}
@media (min-width:721px){ .wren-note{bottom:70px} }
.pg-panel{bottom:calc(100% + 120px)}
.pg-nudge{bottom:calc(100% + 120px)}
@media (max-width:520px){
  /* guide.css turns the panel into a full-bleed bottom sheet at this width;
     it is re-anchored above the pill for the same reason as above. */
  .pg-panel{position:absolute;left:auto;right:0;bottom:calc(100% + 120px);
    width:min(360px,calc(100vw - 24px));max-height:min(560px,calc(100vh - 260px))}
}

/* ==========================================================================
   THE GUIDE IS SECOND HERE — AND SHE IS STILL A MACHINE THAT SAYS SO.

   THE ASK. "Replace the bots with people." The owner's read is that a guide
   which mostly and correctly refuses is not an offer, and that in a shop he
   would rather a guest met a person.

   THE ONE LINE THAT DOES NOT MOVE. A machine may not present itself as a
   person. life/wren-knowledge.js:19 states her charter — "She is a GUIDE, not
   a helper" — and :386 has her say it out loud to anyone who asks: "I'm Wren,
   a simple guide that runs right here on your device. I'm not a person and
   I'm not clever AI." Nothing in this file gives her a human name, a face, a
   staffed-desk manner or an implied person behind her, and nothing in it may.
   For an organisation whose entire standing is that it does not overstate,
   dressing the machine as a person would be the single most damaging thing
   this project could ship. Literal humans in the shops means published staff
   names and availability, which is owner-blocked and stays blocked. So the
   route is to the real person who exists — 0467 937 659 and the enquiry form
   a person reads — and that route is now the first thing on the page, in the
   board (see life/park-clearing.css, .board and .board-reach).

   WHAT ACTUALLY CHANGES: THE ORDER, IN TWO PLACES.

   1. SHE NO LONGER SPEAKS FIRST. Measured at 390x844 on all ten clearings
      before this commit, her nudge opened by itself and sat at y 525..660 —
      above the fold, in the middle of the frame, and its greeting was the
      ONLY prose on the first screen of every shop apart from the crisis
      pill's own disclaimer. A guest who tapped a door marked "Cleaning" met
      a machine introducing itself and nothing the shop had to say. On the
      clearings the nudge is off; the board stands where it stood. This file
      is loaded by the ten clearings and by nothing else, so the nudge is
      untouched on every other page, where it is the only thing offering the
      tour and remains the right call.
      display:none rather than opacity: an invisible nudge still held tab
      stops and was still announced, which guide.css's own note records as a
      fault it had already had to fix once.

   2. SHE NO LONGER ARRIVES WITH A FLARE. guide.css gives the launcher a gold
      bloom on arrival (`.pg-root.arrive .pg-launch::after`, pgBloom) that
      pulls the eye to the bottom-right corner exactly while a guest is
      reading the board. The motion that carries her up out of the clearing
      floor is KEPT — it is another crew's fix for the launcher passing
      through the crisis pill's box mid-flight, recorded at length above and
      proved by tools/help-reach-check.js — and only the flare comes off.

   WHAT IS NOT TAKEN. She is still on every clearing, still one tap from the
   bottom-right corner, still 56x56 of target, still keyboard reachable, still
   carrying every published answer and still ending each of them at the phone
   number and the form. Demoted is not removed: a guest who wants to ask
   something can, and a guest who wants a person no longer has to ask her
   first. */
.pg-nudge{display:none}
.pg-root.arrive .pg-launch::after{content:none;animation:none}
