/* =========================================================================
   AANGAN · LEGIBLE — the corrections the contrast gate demanded  (2026-08-16)
   -------------------------------------------------------------------------
   Owner 2026-08-16: "I want readability to be improved and color crisp
   everywhere. Check for readability all the time when making changes colour
   and everything wise- commit it to memory."

   MOST OF THE ANSWER IS NOT IN THIS FILE, and that is deliberate. The bulk of
   it was four tokens in chalk.css — --ck-chalk-2/-3 and --hp-ink-2/-3 — which
   carry nearly every secondary string in the house and were set thin enough
   that ~140 strings sat below AA at once. Raising those four fixed them all
   in one place, which is this project's own rule: one constant, not the same
   number in twenty-six selectors.

   WHAT IS LEFT HERE is the remainder — strings whose colour is set by a rule
   too specific for a token to reach, or whose ground changed under them when
   a room was repainted. Each one is listed with the ratio it measured, so the
   next person can tell a considered value from a nudge.

   LOADS LAST, ON PURPOSE. Several of these lost their first fix to a rule in
   kirana.css or chalk-sections.css that was more specific; being late in the
   <head> is not enough on its own, so the selectors here carry the weight to
   win outright rather than relying on order.

   THE GATE IS .claude/mp/contrast.js. It samples the RENDERED PIXELS behind
   each string — DOM-walking guesses the ground wrong in this app, because
   nearly every surface here is a gradient, an SVG or a canvas. Run it before
   showing colour work and before shipping it.
   ========================================================================= */

/* the kirana's price line — "Free" / "Locked", the one line a player reads
   before tapping a tile. #b9a077 composited to #8a6a44 over the niche: 4.06:1 */
#homeOv #paneShop .shoptile .sts{color:#6f5228}
/* ...and APPLIED is not LOCKED. "Applied" moved out of the green ribbon and
   into this line on 2026-09-05, and in the muted price grey a state you are
   pleased about read exactly like a state you are not. It keeps the ribbon's
   own ink, #2f5220, which measures 7.2:1 on the cream label — comfortably past
   the floor, and darker rather than brighter, per the standing rule that crisp
   means a darker ink on the same warm paper. */
#homeOv #paneShop .shoptile.on .sts{color:#2f5220;font-weight:700}

/* the line under your name IN THE MIRROR. The glass is a mid green-grey, so
   the warm ink token lands at 3.60:1 on it and needs a cool, dark one.
   !important is not decoration here: tin.css:157 sets every .bigbtn .bs in
   every non-Play pane with !important, and no amount of specificity reaches
   past that. Three ID selectors lost to it before this was found. */
#homeOv #paneSettings #myPfSub{color:#16281f !important}

/* Cups: "Predict you'll win — deliver it for +25", 3.70:1 on the tan chip */
#homeOv #paneTour .tourcall .tcall-tx span{color:#5f4520 !important}

/* Cups: "Best of 5" on the unselected tan chip, 4.38:1 */
#homeOv #paneTour .cbtn .sm{color:#4a3313}

/* Profile: "Plus earn 1.5× more marbles on every game.", 3.54:1 — this is the
   sales line for the one paid thing in the app, so it has to read */
/* the sales line for the one paid thing in the app. Its own colour is set by
   a rule this could not reach, so the sweep is broad and loud on purpose:
   every gold-brown descendant of the card, none of which is a heading. */
#homeOv .subcard *:not(.sub-h){color:#5c3f06 !important}
#homeOv .subcard .sub-h{color:#6a4708 !important}


/* =========================================================================
   THE PUBLIC PROFILE — the whole card is cream, the text was written for dark
   -------------------------------------------------------------------------
   Owner 2026-08-16, with a screenshot: "in the profile icon, again, some of
   the text is not readable... in the last work, we did all the crisp point and
   in profile it is missing."

   HE IS RIGHT, AND THE REASON MATTERS MORE THAN THE FIX. The contrast gate
   DOES sweep #profileOv — but it sweeps it in ?demo, where the card renders
   EMPTY. There was no Record line, no stat tiles and no achievement line to
   measure, so the sweep passed on a screen that had nothing on it. "Zero
   strings below AA" was true and meaningless. A gate that only ever sees empty
   states is not a gate; .claude/mp/profile-full.js now populates the card
   before measuring.

   Every string below is --ink or --muted — correct on the dark panel this card
   used to be, invisible on the cream one it is now. Same defect as the Wall's
   cork board and the Cups cards, for the third time. */
#profileOv .pfrec{color:#3b2a14}
#profileOv .pfhint,
#profileOv .pfach-line{color:#7a5a2c}
#profileOv .pftile{background:rgba(120,86,40,.10);border-color:rgba(120,86,40,.32)}
#profileOv .pftile b{color:#5c2015}
#profileOv .pftile span{color:#6b4a1c}
#profileOv .pfsect h4{color:#6b3f12}
#profileOv .pflabel .pfrar{color:#7a4a12}
