/* =====================================================================
   The Circl - Marketing Website
   Single shared stylesheet
   ---------------------------------------------------------------------
   Fonts:  New Farm - the primary Latin typeface, licensed through Adobe
           Fonts web project evk2vqt (loaded from a <link> in the layout
           head; the CSS family Adobe exposes is "new-farm"). The project
           serves weights 100/300/400/500/700, normal style only: there is
           no SemiBold and no italic, so a font-weight:600 rule resolves to
           the real 700 face by standard CSS font matching, and italics are
           browser-synthesised.
           SN Pro ("SNPro") - the controlled LOCAL fallback, bundled as two
           variable TTFs (wght 200-900, upright + italic) under
           /assets/fonts/fallbackFont/SNPro. If Adobe Fonts is unreachable,
           Latin text falls back to SNPro, never to a system default.
           Playpen Sans Arabic (Arabic) - bundled TTF (exact). Neither New
           Farm nor SN Pro carries Arabic glyphs, so Arabic keeps this face.
   ===================================================================== */

/* The Adobe Fonts stylesheet loads from a <link> in the layout head
   (PERF-01): an @import here would chain style.css -> fonts CSS -> font
   files and block rendering. */

@font-face {
  font-family: "Playpen Sans Arabic";
  src:
    url("../fonts/fallbackFont/PlaypenSansArabic/PlaypenSansArabic.woff") format("woff"),
    url("../fonts/fallbackFont/PlaypenSansArabic/PlaypenSansArabic.ttf") format("truetype");
  font-weight: 100 800;
  font-display: swap;
}

/* SN Pro variable fonts - the whole 200-900 range in one file per style, so
   no static weight is fabricated and none is missing. TTF is the only format
   shipped with the family; the files are served as-is, unconverted. */
@font-face {
  font-family: "SNPro";
  src: url("../fonts/fallbackFont/SNPro/SNPro-VariableFont_wght.ttf") format("truetype");
  font-weight: 200 900;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "SNPro";
  src: url("../fonts/fallbackFont/SNPro/SNPro-Italic-VariableFont_wght.ttf") format("truetype");
  font-weight: 200 900;
  font-style: italic;
  font-display: swap;
}

/* ------------------------------- Variables ------------------------------- */
:root {
  /* Brand colours */
  --purple: #6a48e5;
  --purple-deep: #5128cc;
  --purple-logo: #635aa7;
  --violet: #5e0fe0;
  --ink: #221237;
  --near-black: #1c1b1a;
  --body: #484555;
  --muted: #51575c;
  --yellow: #f5c952;
  --yellow-light: #ffd25a;
  --green: #46ce99;
  --cream: #f9f4f2;
  --card: #fdf8f6;
  --border: #cac4d7;
  --white: #ffffff;

  /* Type. One controlled Latin stack - Adobe's "new-farm" first, the local
     SNPro variable font as the guaranteed fallback, then generic sans-serif.
     The three Latin tokens are kept separate on purpose: they mark distinct
     typographic ROLES (display / UI / eyebrows) even while one family now
     serves all of them, so a future split costs one line each. Arabic keeps
     its own face - neither New Farm nor SN Pro has Arabic glyphs. */
  /* Playpen closes the Latin stacks so Arabic glyphs on an English page -
     the "العربية" locale pill above all - resolve to OUR Arabic face per
     character instead of an uncontrolled system font of unpredictable width. */
  --font-display: "new-farm", "SNPro", "Playpen Sans Arabic", sans-serif;
  --font-ui: "new-farm", "SNPro", "Playpen Sans Arabic", sans-serif;
  --font-alt: "new-farm", "SNPro", "Playpen Sans Arabic", sans-serif;
  --font-ar: "Playpen Sans Arabic", "SNPro", sans-serif;

  /* Layout */
  --container: 1240px;
  --gutter: 100px;

  /* Radius */
  --r-pill: 9999px;
  --r-lg: 50px;
  --r-md: 25px;
  --r-sm: 16px;

  /* Effects */
  /* Shared by both dashboards (member .dash and therapist .tdash). */
  --dash-card-shadow: 0 2px 14px rgba(28, 27, 26, 0.06), 0 1px 3px rgba(28, 27, 26, 0.04);
  --ring: inset 0 0 0 1px var(--border);
  --shadow-soft: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
}

/* --------------------------------- Reset --------------------------------- */
*,
*::before,
*::after { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  position: relative;
  margin: 0;
  font-family: var(--font-display);
  font-size: 16px;
  line-height: 1.5;
  color: var(--body);
  background: var(--white);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

/* Shared page-level background doodles, rendered behind every page. */
.page-doodles {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-image:
    url("../images/bg-scribbles-1.svg"),
    url("../images/bg-loop-yellow.svg"),
    url("../images/bg-bolt-yellow.svg"),
    url("../images/bg-swoosh-purple.svg"),
    url("../images/bg-scribbles-2.svg"),
    url("../images/bg-bolt-yellow.svg");
  background-repeat: no-repeat;
  background-position:
    right 0 top 140px,
    left 0 top 720px,
    left 0 top 1560px,
    right 0 top 1280px,
    right 0 top 2050px,
    right 0 top 2900px;
}

@media (max-width: 767px) {
  .page-doodles { display: none; }
}

img,
svg { display: block; max-width: 100%; }

a { color: var(--purple-deep); text-decoration: none; }
a:hover { color: var(--purple); }

ul { margin: 0; padding: 0; list-style: none; }

button { font-family: inherit; cursor: pointer; }

h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 700;
  color: var(--ink);
  margin: 0;
  letter-spacing: -0.96px;
  text-wrap: balance;
}

p { margin: 0; }

/* ------------------------------- Utilities ------------------------------- */
.container {
  width: 100%;
  max-width: calc(var(--container) + var(--gutter) * 2);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-family: var(--font-alt);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--near-black);
}
.eyebrow::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--yellow-light);
}

.section-title {
  font-size: 65px;
  line-height: 60px;
  letter-spacing: -0.96px;
}

.arrow {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  fill: currentColor;
}

/* -------------------------------- Buttons -------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 56px;
  padding: 0 32px;
  border: 0;
  border-radius: var(--r-pill);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 0.7px;
  line-height: 20px;
  white-space: nowrap;
  transition: transform 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease;
}
.btn:hover { transform: translateY(-2px); }
.btn:active { transform: translateY(0); }
.btn:focus-visible { outline: 3px solid rgba(106, 72, 229, 0.4); outline-offset: 2px; }

.btn--primary { background: var(--purple-deep); color: var(--white); }
.btn--primary:hover { background: #451fb0; }

.btn--purple { background: var(--purple); color: var(--white); }
.btn--purple:hover { background: var(--purple-deep); }

.btn--yellow { background: var(--yellow); color: var(--near-black); }
.btn--yellow:hover { background: var(--yellow-light); }

.btn--yellow-outline { background: transparent; color: var(--yellow); box-shadow: inset 0 0 0 2px var(--yellow); }
.btn--yellow-outline:hover { background: var(--yellow); color: var(--near-black); }

.btn--outline {
  background: transparent;
  color: var(--near-black);
  box-shadow: inset 0 0 0 2px var(--near-black);
}
.btn--outline:hover { background: var(--near-black); color: var(--white); }

/* ================================ HEADER ================================= */
.site-header {
  position: sticky;
  top: 0;
  z-index: 40;
  background: rgba(255, 255, 255, 0.9);
  backdrop-filter: blur(10px);
}
.site-header .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  height: 100px;
}
.brand { display: flex; align-items: center; flex-shrink: 0; }
/* The approved lock-ups (partials/brand-logo) are wider than the retired mark
   at the same cap height - 124px (EN) / 111px (AR) at 36px. Height is the
   fixed dimension; the width follows each file's own aspect ratio. */
.brand img { height: 36px; width: auto; }

.nav-wrap { display: contents; }
/* The desktop header is ONE row. The nav never drops a destination onto a
   second line: its spacing tightens through the laptop tiers below (the same
   approach as .dash-header), and the only element allowed to give ground is
   the signed-in identity, whose name truncates. Under 1024px the whole
   .nav-wrap becomes the mobile menu instead - see the 1023px block.
   Re-measured for six destinations when About Us joined the nav. */
.main-nav { flex-shrink: 0; }
.main-nav ul {
  display: flex;
  align-items: center;
  gap: 22px;
  flex-wrap: nowrap;
}
.main-nav a {
  position: relative;
  font-family: var(--font-display);
  font-weight: 500;
  font-size: 16px;
  color: var(--ink);
  padding-bottom: 6px;
  /* "How It Works" must never stack into three lines when space is tight. */
  white-space: nowrap;
}
.main-nav a:hover { color: var(--purple); }
.main-nav a.is-active { color: var(--purple); font-weight: 700; }
.main-nav a.is-active::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -4px;
  width: 100%;
  height: 9px;
  background: url("../images/nav-underline.svg") no-repeat center / 100% 100%;
}

.header-actions { display: flex; align-items: center; gap: 10px; min-width: 0; }
/* Controls keep their size; only .header-account (min-width: 0 chain down to
   the ellipsised name) absorbs a shortfall. */
.header-actions > .locale-switch, .header-actions > .btn { flex-shrink: 0; }
.header-actions .btn--outline { box-shadow: inset 0 0 0 2px var(--near-black); }

/* Signed-in participant identity (QA-FIX-01): profile link + POST sign-out. */
.header-account { display: flex; align-items: center; gap: 6px; min-width: 0; }
.header-account__profile { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 12px; text-decoration: none; color: var(--near-black); min-width: 0; }
/* QA: the dashboard-header avatar - image or initials, always a circle. */
.dash-user__avatar { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
span.dash-user__avatar { display: inline-flex; align-items: center; justify-content: center; background: #eef2ff; color: var(--purple-deep); font-family: var(--font-ui); font-weight: 700; font-size: 15px; }
/* QA: rejected-payment recovery card + the green WhatsApp action. */
.dash-rejected__actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 12px; }
.btn--whatsapp { background: #23B33A; color: var(--white); gap: 10px; }
.btn--whatsapp:hover { background: #1e9c33; color: var(--white); }
.btn--whatsapp svg { width: 20px; height: 20px; flex-shrink: 0; }
.billing__more { margin: 0; padding: 14px 18px 16px; text-align: end; font-family: var(--font-ui); font-size: 14px; border-top: 1px solid var(--border); }
/* QA: the navbar avatar - image or initials, always a neat circle. */
.header-account__avatar { width: 34px; height: 34px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
span.header-account__avatar { display: inline-flex; align-items: center; justify-content: center; background: #eef2ff; color: var(--purple-deep); font-family: var(--font-ui); font-weight: 700; font-size: 13px; }
.header-account__profile:hover, .header-account__profile:focus-visible { background: rgba(106,72,229,0.08); outline: none; }
.header-account__profile:focus-visible { box-shadow: inset 0 0 0 2px var(--purple); }
.header-account__profile > svg { width: 26px; height: 26px; flex-shrink: 0; fill: none; stroke: var(--purple-deep); stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.header-account__meta { display: flex; flex-direction: column; min-width: 0; line-height: 1.15; text-align: start; }
.header-account__meta b { font-family: var(--font-ui); font-size: 14px; font-weight: 700; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Truncates with the name, so a squeezed chip never runs under sign-out. */
.header-account__meta small { font-family: var(--font-ui); font-size: 11.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.header-account__signout { display: flex; }
.header-account__signout button { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: 0; border-radius: 10px; background: transparent; cursor: pointer; }
.header-account__signout button:hover { background: rgba(28,27,26,0.07); }
.header-account__signout button:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--purple); }
.header-account__signout svg { width: 19px; height: 19px; fill: none; stroke: var(--near-black); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
html[dir="rtl"] .header-account__signout svg { transform: scaleX(-1); }

.nav-checkbox { display: none; }
.nav-toggle {
  display: none;
  width: 48px;
  height: 48px;
  background: transparent;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  cursor: pointer;
}
.nav-toggle span {
  width: 24px;
  height: 2px;
  background: var(--ink);
  border-radius: 2px;
  transition: transform 0.2s ease, opacity 0.2s ease;
}

/* Laptop tiers. Measured with the production font: the English header needs
   ~1100px at full spacing but a 1280px laptop offers 1080px and a 1200px one
   1072px, which is exactly where "Business Circl" used to wrap. Each tier
   trades spacing - gaps, CTA padding, one point of nav type, the logo's cap
   height - never a label. Bounded to the desktop nav (min-width: 1024px) so
   the mobile menu keeps its own sizes untouched.
   Re-measured with six destinations (About Us): at the old values a signed-in
   English header lost the whole name at 1140/1280 and ran 11px over at 1024. */
@media (min-width: 1024px) {
  .header-actions .btn { padding: 0 24px; }
}
@media (min-width: 1024px) and (max-width: 1439px) {
  .site-header .container { gap: 14px; }
  .main-nav ul { gap: 16px; }
  .main-nav a { font-size: 15px; }
  .header-actions .btn { padding: 0 18px; }
  .header-account__meta b { max-width: 130px; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  .main-nav ul { gap: 11px; }
  .main-nav a { font-size: 14px; }
  .header-actions .btn { padding: 0 14px; }
  .header-account__meta b { max-width: 110px; }
}
@media (min-width: 1024px) and (max-width: 1139px) {
  .site-header .container { gap: 10px; }
  .main-nav ul { gap: 8px; }
  .main-nav a { font-size: 14px; }
  .brand img { height: 30px; }
  .header-actions { gap: 8px; }
  .header-actions .btn { padding: 0 12px; }
  .site-header .locale-switch button { padding: 6px 8px; }
  .header-account__meta b { max-width: 90px; }
}

/* ================================= HERO ================================== */
.hero { padding: 80px 0 40px; }
.hero .container {
  display: grid;
  grid-template-columns: minmax(0, 505px) minmax(0, 1fr);
  gap: 64px;
  align-items: center;
}
.badge {
  display: inline-block;
  padding: 4px 16px;
  border-radius: var(--r-pill);
  background: var(--yellow);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: -0.96px;
  color: var(--near-black);
  white-space: nowrap;
}
.hero h1 {
  margin-top: 28px;
  font-size: 65px;
  line-height: 60px;
  color: var(--near-black);
}
.hero__lead {
  margin-top: 24px;
  max-width: 504px;
  font-size: 18px;
  line-height: 28px;
  color: var(--muted);
}
.hero__actions { margin-top: 32px; display: flex; flex-wrap: wrap; gap: 20px; }

.hero__media { position: relative; }
.hero__media img { width: 100%; height: auto; }

/* ================================ STATS ================================== */
.stats { padding: 40px 0 80px; }
.stats .container {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 83px;
}
.stat { text-align: center; }
.stat__value {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: 50px;
  line-height: 1;
  letter-spacing: -0.96px;
  color: var(--near-black);
}
.stat__label {
  margin-top: 8px;
  font-family: var(--font-alt);
  font-size: 16px;
  color: var(--muted);
}

/* ============================ STEPS (purple) ============================= */
.steps {
  position: relative;
  margin: 0 22px;
  padding: 86px 78px;
  background: var(--purple) url("../images/steps-doodles.svg") no-repeat center / cover;
  border-radius: var(--r-lg);
  overflow: hidden;
}
.steps__title {
  text-align: center;
  color: var(--white);
  font-size: 65px;
  line-height: 60px;
  text-transform: capitalize;
  margin-bottom: 56px;
}
.steps__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 24px;
}
.step-card {
  background: var(--card);
  border-radius: var(--r-md);
  box-shadow: var(--ring);
  padding: 32px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.step-card__num {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--yellow);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 26px;
  color: var(--near-black);
}
.step-card h3 {
  font-size: 24px;
  line-height: 32px;
  letter-spacing: 0;
  padding: 16px 0;
  color: var(--near-black);
}
.step-card p { font-size: 16px; line-height: 24px; color: var(--body); }

/* =============================== BENEFITS ================================ */
.benefits { padding: 120px 0; }
.benefits .container {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(0, 1fr) minmax(0, 1.1fr);
  gap: 48px;
  align-items: center;
}
.benefits__intro .section-title { color: var(--ink); font-size: 56px; line-height: 60px; margin: 12px 0 24px; }
.benefits__media { position: relative; }
.benefits__media img { width: 100%; height: auto; }

.benefit-list { display: flex; flex-direction: column; }
.benefit {
  display: grid;
  grid-template-columns: 20px 1fr;
  column-gap: 16px;
}
.benefit:not(:last-child) .benefit__body { padding-bottom: 28px; }
.benefit__marker { display: flex; flex-direction: column; align-items: center; }
.benefit__node { flex-shrink: 0; margin-top: 2px; }
.benefit__node rect {
  fill: none;
  stroke: #cdd0d2;
  stroke-dasharray: 2 2;
  transition: stroke 0.35s ease;
}
.benefit__node circle { fill: #cdd0d2; transition: fill 0.35s ease; }
.benefit__line {
  flex: 1;
  width: 0;
  margin: 4px 0;
  border-left: 1px dashed #cdd0d2;
  transition: border-color 0.35s ease;
}
.benefit:last-child .benefit__line { display: none; }
.benefit.is-done .benefit__node rect { stroke: var(--purple); stroke-dasharray: none; }
.benefit.is-done .benefit__node circle { fill: var(--purple); }
.benefit.is-done .benefit__line { border-left-style: solid; border-color: var(--purple); }
.benefit h3 { font-size: 20px; line-height: 1.3; letter-spacing: 0; color: var(--ink); }
.benefit p { margin-top: 6px; font-size: 16px; color: var(--muted); }
.benefits__cta { margin-top: 16px; }

/* ============================ PROGRAMS (cream) =========================== */
.programs {
  position: relative;
  margin: 0 22px;
  padding: 69px 78px;
  background: var(--cream);
  border-radius: var(--r-lg);
}
.programs::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: url("../images/choose-your-circl-shape.webp") no-repeat center / cover;
  pointer-events: none;
}
.programs__head {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  margin-bottom: 40px;
}
.programs__head h2 {
  font-size: 65px;
  line-height: 60px;
  text-transform: capitalize;
  color: var(--near-black);
  border-bottom: 3px solid var(--purple);
  padding-bottom: 10px;
}
.carousel-nav { display: flex; gap: 12px; }
.carousel-nav button {
  width: 63px;
  height: 63px;
  border-radius: 50%;
  background: transparent;
  box-shadow: inset 0 0 0 1px var(--near-black);
  color: var(--near-black);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.carousel-nav button svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.5; }
.carousel-nav button:hover,
.carousel-nav button[aria-current="true"] { background: var(--near-black); color: var(--white); }
/* Slider at either end: drop back to the outline arrow and fade it, so the
   filled/hover treatments never read as clickable. */
.carousel-nav button:disabled,
.carousel-nav button:disabled:hover {
  background: transparent;
  color: var(--near-black);
  opacity: 0.35;
  cursor: not-allowed;
}

.programs__track {
  position: relative;
  display: flex;
  gap: 20px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  padding-bottom: 8px;
  scrollbar-width: none;
  -ms-overflow-style: none;
  overscroll-behavior-x: contain;
}
.programs__track::-webkit-scrollbar { display: none; }
/* End spacer: gives the track enough scroll room for the last cards to
   reach the snap start, so every card can become the active one. */
.programs__track::after {
  content: "";
  flex: 0 0 calc(100% - 630px);
}

.program-card {
  position: relative;
  isolation: isolate;
  flex: 0 0 610px;
  max-width: 610px;
  height: 423px;
  border-radius: var(--r-lg);
  background: var(--purple);
  overflow: hidden;
  scroll-snap-align: start;
  color: var(--white);
  transition: opacity 0.3s ease, transform 0.3s ease;
}
.programs__track .program-card::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image:
    url("../images/program-face-spark.svg"),
    url("../images/program-face-happy.svg"),
    url("../images/program-face-sad.svg");
  background-repeat: no-repeat;
  background-position:
    right 12px top 16px,
    right -30px top 128px,
    left -24px bottom 10px;
  background-size: 47px 69px, 95px 95px, 95px 87px;
  opacity: 0.12;
  pointer-events: none;
}
.program-card:not(.is-active) {
  opacity: 0.4;
  transform: scale(0.94);
}
/* Logical inset: the photo sits on the side the copy reads AWAY from, so it
   moves to the left in Arabic instead of ending up underneath the text. */
.program-card__img {
  position: absolute;
  inset-block: 0;
  inset-inline: auto 0;
  z-index: 1;
  width: 50%;
  height: 100%;
  object-fit: cover;
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 44%);
  mask-image: linear-gradient(90deg, transparent 0%, #000 44%);
}
.program-card__body {
  position: relative;
  z-index: 2;
  padding: 39px 43px;
  display: flex;
  flex-direction: column;
  height: 100%;
}
.program-card h3 { color: var(--white); font-size: 30px; line-height: 1.1; letter-spacing: -0.96px; }
.program-card__role { margin-top: 6px; font-family: var(--font-alt); font-weight: 500; font-size: 14px; color: var(--yellow-light); }
.program-card__desc { margin-top: 12px; font-size: 14px; line-height: 1.5; max-width: 300px; color: rgba(255, 255, 255, 0.9); }
.program-card__tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: auto; margin-bottom: 16px; }
.tag {
  display: inline-flex;
  align-items: center;
  padding: 4px 12px;
  border-radius: var(--r-pill);
  box-shadow: inset 0 0 0 1px rgba(248, 243, 241, 0.6);
  font-family: var(--font-alt);
  font-size: 12px;
  color: var(--white);
}
/* The card body is a full-height column, and the tag row that used to carry
   `margin-top: auto` is no longer rendered - so the CTA claims the free space
   itself and sits on the card floor instead of floating under the copy. */
.program-card .btn { align-self: flex-start; margin-top: auto; }

/* ============================ ASSESSMENT (dark) ========================== */
.assessment {
  margin: 120px 22px;
  padding: 90px 80px;
  background: var(--ink) url("../images/assessment-doodles.svg") no-repeat center / cover;
  border-radius: var(--r-lg);
  overflow: hidden;
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: 72px;
  align-items: center;
}
.assessment__body h2 { color: var(--white); font-size: 48px; line-height: 1.1; letter-spacing: 0; }
.assessment__body p { margin: 15px 0 15px; font-family: var(--font-alt); font-size: 16px; color: rgba(255, 255, 255, 0.85); max-width: 636px; }
.assessment__subhead { font-weight: 700; color: var(--yellow); }
.assessment__receive { display: flex; flex-direction: column; gap: 10px; margin-bottom: 28px; }
.assessment__receive li { display: flex; align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 14px; color: var(--white); }
.check { width: 16px; height: 16px; flex-shrink: 0; }
.check path { fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.assessment__receive .check circle { fill: var(--white); }
.assessment__receive .check path { stroke: var(--ink); }

.assessment .assess-card { padding: 36px; gap: 24px; box-shadow: none; }
/* ---- The hidden contract.
   The `hidden` attribute works through a UA rule, `[hidden] { display: none }`,
   and ANY author `display` declaration outranks it. Every component that parks
   an element with `hidden` while also giving it a display - a flex locale
   panel, a grid tab panel, a stepper button - therefore stays on screen, and
   the attribute silently does nothing.
   The codebase had been patching this one component at a time. This states it
   once, for every element, so a future component cannot inherit the bug.
   Safe because nothing here shows an element while leaving the attribute set:
   app.js toggles the property, which removes the attribute. ---- */
[hidden] { display: none !important; }
.assessment .assess-card[hidden] { display: none; }
.assessment .assess-card fieldset { margin: 0; padding: 0; border: 0; }
.assessment .assess-card h3 { font-size: 28px; line-height: 1.15; letter-spacing: -0.5px; color: var(--near-black); margin-bottom: 24px; }
.assessment .assess-progress-label { font-size: 13px; }
.assessment .assess-option { min-height: 54px; padding: 14px 18px; font-size: 15px; gap: 12px; }
.assessment .assess-option .radio { width: 20px; height: 20px; }
.assessment .assess-option:has(input:checked) .radio { box-shadow: inset 0 0 0 4px #fff, inset 0 0 0 6px var(--purple-deep); }
.assessment .assess-footer { padding-top: 8px; }
.assessment .assess-footer .btn { height: 46px; padding: 0 26px; }

.quiz-result {
  background: var(--white);
  border-radius: 24px;
  padding: 38px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.quiz-result[hidden] { display: none; }
.quiz-result h3 { font-size: 24px; letter-spacing: -0.5px; color: var(--near-black); }
.quiz-result__intro { font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.quiz-result h4 { font-size: 18px; color: var(--purple-deep); margin-top: 8px; }
.quiz-result__desc { font-family: var(--font-ui); font-size: 14px; line-height: 1.55; color: var(--body); }
.quiz-result__facts { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.quiz-fact {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  background: #f2f0f5;
  border-radius: 10px;
  padding: 14px 18px;
  font-family: var(--font-ui);
  font-size: 14px;
}
.quiz-fact b { font-weight: 700; color: var(--near-black); }
.quiz-fact span { color: var(--muted); }
.quiz-result__for { font-weight: 700; font-size: 16px; color: var(--near-black); margin-top: 10px; }
.quiz-result__tags { display: flex; flex-direction: column; gap: 8px; }
.quiz-result__tags li { display: flex; align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.quiz-result__tags .check circle { fill: var(--purple); }
.quiz-result__tags .check path { stroke: var(--white); }
.quiz-result .btn { width: 100%; margin-top: 14px; }

/* ================================= FAQ =================================== */
.faq {
  padding: 40px 0 120px;
  background-image:
    url("../images/bg-swoosh-purple.svg"),
    url("../images/bg-bolt-yellow.svg"),
    url("../images/bg-scribbles-2.svg");
  background-repeat: no-repeat;
  background-position:
    right -70px top -90px,
    left -80px bottom 30px,
    right -170px bottom -390px;
}
.faq h2 { text-align: center; font-size: 65px; line-height: 60px; text-transform: capitalize; color: var(--near-black); margin-bottom: 48px; }
.faq__list { max-width: 820px; margin-inline: auto; display: flex; flex-direction: column; gap: 16px; }
.faq-item {
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: 14px;
  overflow: hidden;
}
.faq-item[open] { background: var(--ink); border-color: var(--ink); }
.faq-item summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 22px 24px;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 17px;
  letter-spacing: -0.3px;
  color: var(--ink);
  text-transform: capitalize;
}
.faq-item[open] summary { color: var(--white); padding-bottom: 8px; }
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary .plus {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
  font-size: 20px;
  font-weight: 500;
  color: var(--near-black);
}
.faq-item[open] summary .plus { transform: rotate(45deg); color: var(--white); }
.faq-item p { padding-block: 0 20px; padding-inline: 24px 48px; font-family: var(--font-alt); font-size: 14px; line-height: 1.6; color: rgba(255, 255, 255, 0.75); }

/* ================================ FOOTER ================================= */
.closing { padding: 0 22px; }
.closing__cta {
  position: relative;
  margin-bottom: -223px;
  z-index: 2;
  padding: 86px 100px;
  background: var(--yellow) url("../images/closing-doodles.svg") no-repeat center / cover;
  border-radius: var(--r-lg);
  text-align: center;
  overflow: hidden;
}
.closing__cta h2 { font-size: 65px; line-height: 60px; text-transform: capitalize; color: var(--near-black); }
.closing__cta p { margin: 25px auto; max-width: 650px; font-size: 18px; color: var(--near-black); }

.site-footer {
  background: var(--ink);
  color: var(--white);
  padding: 320px 0 40px;
}
.footer__grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1.4fr;
  gap: 40px;
  padding-bottom: 40px;
}
/* The reversed lock-up (white wordmark, brand-purple icon): height fixed,
   width from the file's ratio - 152px (EN) / 136px (AR). */
.footer__brand img { height: 44px; width: auto; margin-bottom: 20px; }
.footer__brand p { font-size: 16px; line-height: 1.6; color: rgba(255, 255, 255, 0.85); max-width: 272px; margin-bottom: 24px; }
.social { display: flex; gap: 12px; }
.social a {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  box-shadow: inset 0 0 0 1px var(--white);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--white);
  transition: background-color 0.15s ease, color 0.15s ease;
}
.social a:hover { background: var(--white); color: var(--ink); }
.social svg { width: 18px; height: 18px; fill: currentColor; }

.footer__col h4 { color: var(--yellow); font-size: 18px; margin-bottom: 16px; letter-spacing: -0.96px; }
.footer__col li { margin-bottom: 16px; }
.footer__col a { color: var(--white); font-size: 16px; }
.footer__col a:hover { color: var(--yellow); }

.footer__news h4 { color: var(--yellow); font-size: 18px; margin-bottom: 12px; }
.footer__news p { color: rgba(255, 255, 255, 0.9); margin-bottom: 12px; }
.news-form { display: flex; gap: 8px; }
.news-form input {
  flex: 1;
  height: 50px;
  padding: 0 24px;
  border: 0;
  border-radius: var(--r-pill);
  background: var(--card);
  box-shadow: inset 0 0 0 1px var(--border);
  font-family: var(--font-display);
  font-size: 16px;
  color: var(--ink);
}
.news-form input::placeholder { color: #6b7280; }
.news-form button {
  width: 48px;
  height: 48px;
  border: 0;
  border-radius: 50%;
  background: var(--purple-logo);
  box-shadow: var(--shadow-soft);
  color: var(--white);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.news-form button:hover { background: var(--purple); }
.news-form svg { width: 20px; height: 20px; fill: currentColor; }
/* Newsletter states. Invalid is announced by the live region and marked
   aria-invalid, so the yellow ring is never the only signal. */
.news-form button:disabled { cursor: progress; opacity: 0.75; }
.news-form[aria-busy="true"] button svg { animation: news-form-pulse 0.9s ease-in-out infinite; }
.news-form input[aria-invalid="true"] { box-shadow: inset 0 0 0 2px var(--yellow); }
.news-form__feedback { margin-top: 10px; font-size: 14px; line-height: 1.5; color: rgba(255, 255, 255, 0.9); }
.news-form__feedback:empty { display: none; }
@keyframes news-form-pulse { 50% { opacity: 0.35; } }
@media (prefers-reduced-motion: reduce) {
  .news-form[aria-busy="true"] button svg { animation: none; }
}

/* SweetAlert2 answers for the newsletter only: every rule is scoped to the
   .circl-swal popup class the footer script passes, so no other dialog, and
   no page, is restyled. */
.swal2-popup.circl-swal { padding: 32px 28px 28px; border-radius: var(--r-md); font-family: var(--font-display); color: var(--body); }
html[dir="rtl"] .swal2-popup.circl-swal { font-family: var(--font-ar); }
.circl-swal .circl-swal__title { padding: 6px 0 0; font-size: 26px; line-height: 1.2; color: var(--near-black); }
.circl-swal .circl-swal__title::after { content: ""; display: block; width: 48px; height: 5px; margin: 14px auto 0; border-radius: var(--r-pill); background: var(--yellow); }
.circl-swal .circl-swal__text { margin-top: 12px; font-size: 16px; line-height: 1.6; color: var(--body); }
.circl-swal .swal2-actions { margin-top: 22px; }
.circl-swal .circl-swal__confirm { min-width: 150px; }
.circl-swal .swal2-icon.swal2-success { border-color: var(--green); color: var(--green); }
.circl-swal .swal2-icon.swal2-success .swal2-success-ring { border-color: rgba(70, 206, 153, 0.3); }
.circl-swal .swal2-icon.swal2-success [class^="swal2-success-line"] { background-color: var(--green); }
.circl-swal .swal2-icon.swal2-info { border-color: var(--purple); color: var(--purple); }
.circl-swal .swal2-icon.swal2-warning { border-color: var(--yellow); color: #b5850b; }
.circl-swal .swal2-icon.swal2-error { border-color: #e0605e; color: #e0605e; }
.circl-swal .swal2-icon.swal2-error [class^="swal2-x-mark-line"] { background-color: #e0605e; }

.footer__bottom {
  border-top: 1px solid rgba(253, 248, 246, 0.1);
  padding-top: 24px;
  display: flex;
  justify-content: space-between;
  gap: 16px;
  font-size: 16px;
  color: rgba(255, 255, 255, 0.9);
}
.footer__bottom a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
.footer__bottom a:hover { color: var(--yellow-light); }
/* QA-FIX-01: the facilitator entry reads as a labelled action, not prose. */
.footer__bottom a.footer__facilitators { display: inline-flex; align-items: center; gap: 7px; text-decoration: none; font-weight: 700; }
.footer__bottom a.footer__facilitators:hover, .footer__bottom a.footer__facilitators:focus-visible { color: var(--yellow-light); }
.footer__facilitators svg { width: 17px; height: 17px; flex-shrink: 0; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* =============================== RESPONSIVE ============================== */
@media (max-width: 1200px) {
  :root { --gutter: 56px; }
  .steps__grid { grid-template-columns: repeat(2, 1fr); }
  .assessment { margin: 100px 56px; padding: 64px 56px; gap: 48px; }
}

@media (max-width: 1023px) {
  :root { --gutter: 40px; }
  .section-title,
  .hero h1,
  .steps__title,
  .programs__head h2,
  .faq h2,
  .closing__cta h2 { font-size: 48px; line-height: 1.05; }
  .hero .container { grid-template-columns: 1fr; gap: 40px; }
  .hero__media { max-width: 560px; }
  .benefits .container { grid-template-columns: 1fr; gap: 48px; }
  .benefits__media { max-width: 460px; }
  .assessment { grid-template-columns: 1fr; }
  .assessment__body { order: -1; }
  .footer__grid { grid-template-columns: 1fr 1fr; }
  .nav-wrap { display: none; }
  .nav-toggle { display: flex; }
  .nav-checkbox:checked ~ .nav-wrap {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 20px;
    position: absolute;
    top: 100px;
    left: 0;
    right: 0;
    background: var(--white);
    box-shadow: 0 20px 40px -20px rgba(0, 0, 0, 0.25);
    padding: 24px var(--gutter) 32px;
  }
  .nav-checkbox:checked ~ .nav-wrap .main-nav ul { flex-direction: column; align-items: flex-start; gap: 4px; }
  .nav-checkbox:checked ~ .nav-wrap .main-nav a { display: block; width: 100%; padding: 14px 0; }
  .nav-checkbox:checked ~ .nav-wrap .header-actions { display: flex; gap: 12px; }
  .nav-checkbox:checked ~ .nav-wrap .header-actions .btn { flex: 1; }
  .nav-checkbox:checked ~ .nav-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
  .nav-checkbox:checked ~ .nav-toggle span:nth-child(2) { opacity: 0; }
  .nav-checkbox:checked ~ .nav-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
}

@media (max-width: 767px) {
  :root { --gutter: 20px; }
  .steps,
  .programs { margin: 0 12px; padding: 48px 24px; }
  .steps__grid { grid-template-columns: 1fr; }
  .steps__title { margin-bottom: 32px; }
  .stats .container { gap: 32px; }
  .stat { flex: 1 0 40%; }
  .benefits { padding: 72px 0; }
  .assessment { margin: 72px 12px; padding: 48px 20px; }
  .assessment .assess-card { padding: 24px; }
  .quiz-result { padding: 26px 20px; }
  .programs__head { flex-direction: column; align-items: flex-start; }
  .footer__grid { grid-template-columns: 1fr; }
  .footer__bottom { flex-direction: column; }
  .section-title,
  .hero h1,
  .steps__title,
  .programs__head h2,
  .faq h2,
  .benefits__intro .section-title,
  .assessment__body h2,
  .closing__cta h2 { font-size: 38px; letter-spacing: -0.5px; }
  .hero h1 { font-size: 40px; line-height: 1.05; }
  .faq-item summary { font-size: 16px; }
  .faq { background-image: none; }
}

/* Keep each mobile slide within the track and separate its content from its
   image. At this size a full-width card needs no desktop end spacer. */
@media (max-width: 768px) {
  .programs__track {
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }
  .programs__track::after { content: none; }
  .program-card {
    display: flex;
    flex: 0 0 100%;
    flex-direction: column;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    height: auto;
    min-height: 0;
  }
  .program-card:not(.is-active) { transform: none; }
  .programs__track .program-card::before {
    background-position:
      right 12px bottom calc(clamp(190px, 55vw, 300px) - 80px),
      right -30px bottom calc(clamp(95px, 27.5vw, 150px) - 47.5px),
      left -24px bottom 10px;
  }
  .program-card__body {
    order: 1;
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
    height: auto;
    padding: 28px 24px;
  }
  .program-card__body > * { min-width: 0; }
  .program-card__desc {
    width: 100%;
    max-width: none;
  }
  .program-card__tags { min-width: 0; }
  .program-card__tags .tag {
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  .program-card .btn { max-width: 100%; }
  .program-card__img {
    position: static;
    order: 2;
    flex: 0 0 auto;
    width: 100%;
    min-width: 0;
    height: clamp(190px, 55vw, 300px);
    opacity: 1;
    object-fit: contain;
    object-position: center;
    -webkit-mask-image: none;
    mask-image: none;
  }
}

/* ================================ AUTH =================================== */
.auth {
  min-height: 100vh;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  padding: 24px;
  background: var(--white);
}
.auth__aside {
  position: relative;
  border-radius: 20px;
  overflow: hidden;
  color: var(--white);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 66px 72px;
  background-size: cover;
  background-position: center;
  min-height: 640px;
  min-width: 0;
}
.auth__aside::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(81,40,204,0) 0%, var(--purple-deep) 108%);
}
.auth__aside.is-signup::after { background: linear-gradient(180deg, rgba(106,72,229,0) 0%, var(--purple) 112%); }
.auth__aside > * { position: relative; z-index: 2; }
.auth__eyebrow {
  align-self: flex-start;
  padding: 6px 16px;
  border-radius: var(--r-pill);
  background: rgba(255,255,255,0.2);
  backdrop-filter: blur(12px);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.3);
  font-weight: 500;
  font-size: 16px;
  text-transform: uppercase;
  margin-bottom: 16px;
  white-space: nowrap;
  max-width: 100%;
  overflow-wrap: anywhere;
}
.auth__aside h2 { color: var(--white); font-size: 46px; line-height: 1; letter-spacing: -0.96px; margin-bottom: 16px; }
.auth__aside p { font-family: var(--font-ui); font-size: 16px; line-height: 1.5; color: #e6deff; margin-bottom: 16px; max-width: 520px; }
.auth__list { display: flex; flex-direction: column; gap: 16px; }
.auth__list li { display: flex; align-items: center; gap: 12px; font-family: var(--font-ui); font-size: 16px; color: var(--white); }
.auth__list svg { width: 22px; height: 22px; flex-shrink: 0; fill: var(--yellow); }

.auth__panel { display: flex; align-items: center; justify-content: center; padding: 40px; }
.auth__form { width: 100%; max-width: 485px; display: flex; flex-direction: column; gap: 24px; }
.auth__head { text-align: center; }
.auth__head h1 { font-size: 36px; line-height: 1; color: var(--near-black); }
.auth__head p { margin-top: 8px; font-size: 16px; color: var(--body); }
.auth__fields { display: flex; flex-direction: column; gap: 12px; }
.auth__row { display: flex; gap: 12px; }
/* Sign-up gender choice (QA-FIX-02): a plain radio group, no custom JS. */
.auth__choice { border: 0; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
.auth__choice legend { padding: 0; margin-bottom: 4px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.auth__choice-opts { display: flex; flex-wrap: wrap; gap: 10px 22px; }
.auth__row .field { flex: 1; }

.field {
  display: flex;
  align-items: center;
  gap: 12px;
  height: 68px;
  padding: 0 20px;
  border-radius: 10px;
  box-shadow: inset 0 0 0 1px rgba(28,27,26,0.6);
  background: var(--white);
}
.field:focus-within { box-shadow: inset 0 0 0 2px var(--purple); }
.field svg { width: 20px; height: 20px; flex-shrink: 0; fill: none; stroke: #b3b3b3; stroke-width: 1.6; }
.field input {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: none;
  background: transparent;
  font-family: var(--font-ui);
  font-size: 18px;
  color: var(--near-black);
}
.field input::placeholder { color: #b3b3b3; }

/* ------------------- "Where do you live?" country selector ---------------- */
/* Phase 4B. A native <select> is the form control; app.js enhances it into a
   searchable ARIA combobox and hides the select (which keeps the submitted
   value). Every row shows flag + localized name - the name carries the
   meaning, the flag is decoration. */
.auth__country { display: grid; gap: 8px; }
.auth__label { font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.field--select { position: relative; }
.field select,
.field .cselect__input {
  flex: 1; min-width: 0; border: 0; outline: none; background: transparent;
  font-family: var(--font-ui); font-size: 18px; color: var(--near-black);
}
.field select {
  appearance: none; -webkit-appearance: none; cursor: pointer; padding-inline-end: 24px;
  background-image: linear-gradient(45deg, transparent 50%, var(--body) 50%), linear-gradient(135deg, var(--body) 50%, transparent 50%);
  background-position: calc(100% - 10px) 50%, calc(100% - 4px) 50%;
  background-size: 6px 6px, 6px 6px; background-repeat: no-repeat;
}
html[dir="rtl"] .field select { background-position: 10px 50%, 4px 50%; }
.cselect { position: relative; flex: 1; min-width: 0; display: flex; }
.cselect__native { width: 100%; }
.cselect__combo { position: relative; flex: 1; min-width: 0; display: flex; }
.cselect__input::placeholder { color: #b3b3b3; }
/* Inside .field the FIELD is the positioning box, so the list spans it. */
.field--select .cselect, .field--select .cselect__combo { position: static; }
.cselect__list {
  position: absolute; top: calc(100% + 8px); inset-inline: 0; z-index: 40;
  margin: 0; padding: 6px; list-style: none;
  max-height: min(320px, 45vh); overflow-y: auto; overscroll-behavior: contain;
  background: var(--white); border-radius: 12px;
  box-shadow: 0 12px 40px rgba(28,27,26,.16), inset 0 0 0 1px var(--border);
}
.cselect__list[hidden] { display: none; }
.cselect__option {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 14px; border-radius: 8px; cursor: pointer;
  font-family: var(--font-ui); font-size: 16px; line-height: 1.3; color: var(--near-black);
}
.cselect__option.is-active { background: var(--cream); box-shadow: inset 0 0 0 2px var(--purple); }
.cselect__option[aria-selected="true"] { font-weight: 700; }
.cselect__option[aria-selected="true"]::after { content: "\2713"; margin-inline-start: auto; color: var(--purple-deep); }
.cselect__flag { font-size: 20px; line-height: 1; flex-shrink: 0; }
.cselect__name { min-width: 0; overflow-wrap: anywhere; }
.cselect__empty { padding: 12px 14px; font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.cselect__status { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
/* Admin / plain forms: the wrapper itself positions the list. */
.pfield .cselect select { width: 100%; }
html[dir="rtl"] .cselect__input, html[dir="rtl"] .cselect__option, html[dir="rtl"] .field select, html[dir="rtl"] .auth__label { font-family: var(--font-ar); }
@media (max-width: 500px) {
  .cselect__list { max-height: 40vh; }
  .cselect__option { padding: 12px; }
}

/* Show/hide password control (QA-FIX-01). One wrapper for every password
   input on the site: the input keeps its surrounding form styling, the eye
   sits at the inline end, and only input.type ever changes. */
.pwfield { position: relative; display: flex; align-items: center; flex: 1 1 auto; min-width: 0; }
.pwfield input { width: 100%; padding-inline-end: 44px; }
.pwfield__toggle { position: absolute; inset-inline-end: 6px; top: 50%; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: 0; border-radius: 8px; background: transparent; cursor: pointer; padding: 0; }
.pwfield__toggle:hover { background: rgba(28,27,26,0.07); }
.pwfield__toggle:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--purple); }
.pwfield__toggle svg { width: 19px; height: 19px; fill: none; stroke: #8a8a8a; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.pwfield__toggle:hover svg { stroke: var(--near-black); }
.pwfield__toggle .pwfield__eye-off { display: none; }
.pwfield__toggle.is-visible .pwfield__eye { display: none; }
.pwfield__toggle.is-visible .pwfield__eye-off { display: block; }

.auth__meta { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.checkbox { display: inline-flex; align-items: center; gap: 7px; font-size: 15px; color: var(--body); cursor: pointer; }
.checkbox input { width: 20px; height: 20px; accent-color: var(--purple-deep); }
.link-strong { font-weight: 500; color: var(--purple-deep); }
.link-strong:hover { color: var(--purple); }

.divider { display: flex; align-items: center; gap: 16px; color: rgba(72,69,85,0.6); }
.divider::before, .divider::after { content: ""; flex: 1; height: 1px; background: var(--border); }

.social-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  height: 54px;
  border-radius: var(--r-pill);
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  font-family: var(--font-ui);
  font-size: 16px;
  color: var(--near-black);
  cursor: pointer;
  transition: background-color 0.15s ease;
}
.social-btn:hover { background: var(--cream); }
.social-btn svg { width: 20px; height: 20px; }
.auth__switch { text-align: center; font-weight: 500; font-size: 16px; color: var(--body); }

@media (max-width: 1023px) {
  .auth { grid-template-columns: 1fr; }
  .auth__aside { min-height: 320px; padding: 40px; order: -1; }
  .auth__aside h2 { font-size: 34px; }
}
@media (max-width: 767px) {
  .auth { padding: 12px; }
  .auth__panel { padding: 28px 4px; }
  .auth__head h1 { font-size: 30px; }
  .auth__row { flex-direction: column; }
  .auth__eyebrow { white-space: normal; }
}

/* ============================ FLOW PAGES ================================= */
.flow { min-height: 100vh; padding: 80px 40px; display: flex; flex-direction: column; align-items: center; gap: 40px; background: var(--white); }
.flow__title { font-size: 56px; line-height: 60px; text-align: center; max-width: 715px; color: var(--near-black); }

/* Plan cards (Choose Your Support Path) */
.pricing-grid { display: flex; gap: 20px; width: 100%; max-width: 1240px; justify-content: center; flex-wrap: wrap; align-items: stretch; }
.plan-card { flex: 1 1 340px; max-width: 400px; border-radius: 24px; padding: 40px 25px 25px; display: flex; flex-direction: column; align-items: center; text-align: center; }
.plan-card h3 { font-size: 24px; line-height: 1.2; margin-top: 22px; }
.plan-card__tagline { font-family: var(--font-ui); font-size: 15px; line-height: 1.3; margin-top: 10px; }
.plan-card .btn { margin-top: auto; width: 100%; height: 48px; }

/* Feature tiles shared by all three plans */
.plan-tiles { display: flex; gap: 12px; width: 100%; margin-top: 36px; margin-bottom: 28px; align-items: stretch; }
.plan-tile { flex: 1; border-radius: 12px; padding: 16px 8px; display: flex; flex-direction: column; align-items: center; gap: 10px; }
.plan-tile svg { width: auto; height: 19px; flex-shrink: 0; }
.plan-tile span { font-family: var(--font-ui); font-size: 12px; line-height: 1.35; }

/* Featured plan card - still the Membership page's explainer card (.mship-explain). */
.plan-card--featured { background: #f4f1ff; box-shadow: inset 0 0 0 1px rgba(106,72,229,0.45); margin-block: -32px; }
.plan-card--featured h3 { color: var(--near-black); }
.plan-card--featured .plan-card__tagline { color: var(--muted); }
.plan-card--featured .plan-tiles { margin-top: 20px; }
.plan-card--featured .plan-tile { background: #eae3ff; }
.plan-card--featured .plan-tile span { color: var(--body); }

.plan-group { display: flex; align-items: center; gap: 10px; }
.plan-group span { font-family: var(--font-ui); font-size: 13px; color: var(--body); }
.plan-avatars { display: flex; align-items: center; flex-shrink: 0; }
.plan-avatars:empty { display: none; }
.plan-avatars img { width: 28px; height: 28px; border-radius: 50%; object-fit: cover; box-shadow: 0 0 0 2px #eee8ff; }
.plan-avatars img + img { margin-left: -9px; }

/* ===================== SCREEN 1 - CHOOSE YOUR SUPPORT TYPE ================ */
/* Phase 3C. Two EQUAL support-type cards, then two quiet helper strips.
   Logical properties only, so the Arabic page mirrors for free; the grid
   stretches both cards to one height and pins the CTAs to one baseline. */
.support-start { gap: 28px; }
.support-start .flow__lead { margin-top: -12px; }
/* The Circl the visitor arrived with (?circl=): name and a way out, one line
   that wraps rather than widening the page under a long Circl name. */
.support-start__circl { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: center; gap: 4px 10px; max-width: 640px; margin: -14px 0 0; font-family: var(--font-ui); font-size: 15px; line-height: 1.5; color: var(--body); text-align: center; }
.support-start__circl strong { min-width: 0; color: var(--near-black); overflow-wrap: anywhere; }
.support-start__circl .alink { color: var(--purple-deep); font-weight: 600; text-decoration: underline; }
html[dir="rtl"] .support-start__circl { font-family: var(--font-ar); }
.support-start__notices { width: 100%; max-width: 900px; display: grid; gap: 0; }
.support-start__notices:empty { display: none; }
.support-start__notices .flash { margin: 0 0 12px; }

.support-types { list-style: none; margin: 0; padding: 0; width: 100%; max-width: 900px; display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; align-items: stretch; }
.support-types > li { display: flex; min-width: 0; }
/* One track on sale: a single card should not stretch across the whole row. */
.support-types > li:only-child { justify-self: center; width: min(100%, 560px); }
.support-type { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; align-items: center; text-align: center; padding: 36px 26px 26px; border-radius: 24px; background: #f4f1ff; box-shadow: inset 0 0 0 1px rgba(106, 72, 229, 0.35); }
.support-type__icon { display: flex; align-items: center; justify-content: center; height: 48px; }
.support-type__icon svg { width: 52px; height: 48px; }
.support-type h2 { font-size: 24px; line-height: 1.2; margin: 20px 0 0; color: var(--near-black); }
.support-type__tagline { font-family: var(--font-ui); font-size: 15px; line-height: 1.45; color: var(--muted); margin: 10px 0 0; max-width: 340px; }
.support-type__facts { list-style: none; margin: 24px 0 26px; padding: 0; width: 100%; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.support-type__facts li { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 14px 6px; border-radius: 12px; background: #eae3ff; font-family: var(--font-ui); font-size: 12px; line-height: 1.35; color: var(--body); text-align: center; }
.support-type__facts svg { height: 18px; width: auto; flex-shrink: 0; }
.support-type .btn { margin-top: auto; width: 100%; height: 48px; }

.support-helpers { width: 100%; max-width: 900px; display: grid; gap: 14px; }
/* min-width: 0 because this is a GRID ITEM: the automatic minimum size of a
   grid item is its min-content width, and the non-shrinking CTA inside made
   that 345px - so at 375px the card burst out of its own 320px track and
   pushed the page sideways. Shrinking is what lets the CTA wrap instead. */
.support-helper { min-width: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 14px 24px; padding: 22px 26px; border-radius: 18px; background: var(--card); box-shadow: inset 0 0 0 1px rgba(245, 201, 82, 0.55); text-align: start; }
.support-helper__copy { flex: 1 1 320px; min-width: 0; }
.support-helper h2 { font-size: 20px; line-height: 1.25; margin: 0; color: var(--near-black); }
.support-helper p { font-family: var(--font-ui); font-size: 14px; line-height: 1.55; color: var(--muted); margin: 6px 0 0; }
.support-helper__eyebrow { font-family: var(--font-ui); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--purple-deep); margin: 0 0 4px; }
.support-helper .btn { flex: 0 0 auto; height: 44px; }

.support-start__closed { width: 100%; max-width: 640px; }
.support-start__closed-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 8px; }

@media (max-width: 767px) {
  .support-start { gap: 22px; }
  .support-type { padding: 28px 18px 18px; }
  .support-type__facts { gap: 8px; margin: 20px 0 22px; }
  .support-helper { padding: 20px 18px; }
  .support-helper .btn { width: 100%; }
  .support-start__closed-actions .btn { width: 100%; }
}
@media (max-width: 420px) {
  .support-type__facts { grid-template-columns: minmax(0, 1fr); }
  .support-type__facts li { flex-direction: row; justify-content: flex-start; text-align: start; padding: 12px 14px; gap: 12px; }
}

/* ===================== SCREEN 2 - CHOOSE A CIRCL (topic index) ============ */
/* Phase 3D. The catalogue card language (white card, purple ring, rounded
   cover) applied to topics: equal-height cards, CTA on one baseline, logical
   properties so Arabic mirrors for free. */
.topic-index { gap: 18px; }
.topic-index__type { margin: 0; font-family: var(--font-ui); font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--purple-deep); }
.topic-index .flow__title { margin-top: -4px; }
.topic-index .flow__lead { margin-top: -6px; }
.topic-index__change { margin: -4px 0 4px; font-family: var(--font-ui); font-size: 14px; }
.topic-index__change .alink { color: var(--purple-deep); font-weight: 600; text-decoration: underline; }

.topic-grid { list-style: none; margin: 8px 0 0; padding: 0; width: 100%; max-width: 1240px; display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; align-items: stretch; }
.topic-grid > li { display: flex; min-width: 0; justify-self: center; width: 100%; max-width: 420px; }
.topic-card { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; background: var(--white); border-radius: var(--r-lg); box-shadow: inset 0 0 0 1px rgba(106, 72, 229, 0.35), 0 4px 25px rgba(0, 0, 0, 0.08); padding: 15px; }
.topic-card__img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 10; object-fit: cover; border-radius: 24px; }
.topic-card__body { flex: 1; display: flex; flex-direction: column; gap: 8px; padding: 20px 12px 8px; text-align: start; }
.topic-card__type { margin: 0; font-family: var(--font-ui); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--purple); }
.topic-card h2 { margin: 0; font-size: 24px; line-height: 1.15; color: var(--near-black); overflow-wrap: anywhere; }
.topic-card__tagline { margin: 0; font-family: var(--font-ui); font-size: 15px; line-height: 1.5; color: var(--body); }
.topic-card__meta { list-style: none; margin: 10px 0 0; padding: 12px 0 0; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 6px; font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.topic-card__meta li { display: flex; align-items: center; gap: 8px; min-width: 0; }
.topic-card__meta svg { flex-shrink: 0; width: 16px; height: 16px; color: var(--purple-deep); }
.topic-card__meta time { color: var(--near-black); font-weight: 600; }
.topic-card .btn { margin-top: 18px; width: 100%; height: 48px; }
.topic-card__body .btn { margin-top: auto; padding-top: 0; }
.topic-card__meta + .btn { margin-top: 18px; }
.topic-index__empty { width: 100%; max-width: 640px; }
.topic-index__more { max-width: 640px; margin: 4px 0 0; font-family: var(--font-ui); font-size: 14px; line-height: 1.6; color: var(--muted); text-align: center; }
.topic-index__more .alink { color: var(--purple-deep); font-weight: 600; text-decoration: underline; white-space: nowrap; }
html[dir="rtl"] .topic-index__more { font-family: var(--font-ar); }

@media (max-width: 767px) {
  .topic-index { gap: 14px; }
  .topic-grid { gap: 16px; }
  .topic-card { padding: 12px; }
  .topic-card__body { padding: 16px 8px 6px; }
}

/* ------------------------ Screen 3: Available options ------------------- */
/* Phase 3E - one card per real open offering, for BOTH support types. The
   same centred .flow shell and grid discipline as Screen 2: equal-height
   cards, the CTA on one baseline, logical properties so Arabic mirrors for
   free. Colours and radii are the existing tokens only. */
.options-index { gap: 18px; }
.options-index .flow__lead { margin-top: -6px; }
.options-index__circl { color: var(--near-black); }
.options-index__nav { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 22px; margin: -4px 0 4px; font-family: var(--font-ui); font-size: 14px; }
.options-index__nav .alink { color: var(--purple-deep); font-weight: 600; text-decoration: underline; }
.options-index__filter { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px 14px; width: 100%; max-width: 900px; }
.options-index__filter label { font-family: var(--font-ui); font-weight: 700; font-size: 15px; color: var(--near-black); }
.options-index__filter .book-select { flex: 0 1 300px; min-width: 240px; }

.option-grid { list-style: none; margin: 8px 0 0; padding: 0; width: 100%; max-width: 1240px; display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; align-items: stretch; }
.option-grid > li { display: flex; min-width: 0; justify-self: center; width: 100%; max-width: 420px; }
.option-card { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 12px; background: var(--white); border-radius: var(--r-lg); box-shadow: inset 0 0 0 1px rgba(106, 72, 229, 0.35), 0 4px 25px rgba(0, 0, 0, 0.08); padding: 24px 22px 20px; text-align: start; }
.option-card.is-selected { box-shadow: inset 0 0 0 2px var(--purple-deep), 0 8px 30px rgba(28, 27, 26, 0.12); }
.option-card__type { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 10px; margin: 0; font-family: var(--font-ui); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--purple); }
.option-card h2 { margin: 0; font-size: 22px; line-height: 1.2; color: var(--near-black); overflow-wrap: anywhere; }
.option-card__when { margin: -4px 0 0; font-family: var(--font-ui); font-size: 15px; line-height: 1.5; color: var(--body); }
.option-card__when time { font-weight: 600; color: var(--near-black); }
.option-card__when small { display: block; font-size: 12.5px; color: var(--muted); }
.option-card__facts { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; font-family: var(--font-ui); font-size: 14px; line-height: 1.45; color: var(--muted); }
.option-card__facts li { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }
.option-card__facts svg { flex-shrink: 0; width: 16px; height: 16px; margin-top: 2px; color: var(--purple-deep); }
.option-card__facilitator { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.option-card__facilitator > div { min-width: 0; }
.option-card__facilitator p { margin: 0; font-family: var(--font-ui); }
/* The facilitator's uploaded photo (NF-5), or a neutral initial when there is
   none - never a stock photograph. Both fill ONE fixed avatar slot, so a
   photo can never grow with its source dimensions and squeeze the name. */
.option-card__initial, .option-card__photo { flex-shrink: 0; width: 44px; height: 44px; border-radius: 50%; }
.option-card__initial { display: flex; align-items: center; justify-content: center; background: #eef2ff; color: var(--purple-deep); font-family: var(--font-display); font-weight: 700; font-size: 19px; }
.option-card__photo { display: block; object-fit: cover; }
.option-card__name { font-weight: 700; font-size: 15px; color: var(--near-black); overflow-wrap: anywhere; }
.option-card__role { font-size: 13px; color: var(--muted); }
.option-card__rating { font-size: 13px; color: var(--body); }
.option-card__rating .offering__stars { color: var(--yellow); }
.option-card__price { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin: auto 0 0; }
.option-card__amount { font-family: var(--font-display); font-weight: 700; font-size: 22px; color: var(--purple-deep); }
.option-card__was { font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.option-card__member, .option-card__fee { flex-basis: 100%; margin: 0; font-family: var(--font-ui); font-size: 12.5px; line-height: 1.45; }
.option-card__member { font-weight: 700; color: var(--purple-deep); }
.option-card__fee { color: var(--muted); }
.option-card__foot { display: flex; flex-direction: column; align-items: stretch; gap: 12px; }
.option-card__foot .book-badge { align-self: flex-start; }
.option-card__foot .btn { width: 100%; height: 48px; }
.option-card__foot form { margin: 0; }
.option-card__code { margin: 0; font-family: var(--font-ui); font-size: 11px; letter-spacing: 0.04em; color: var(--muted); text-align: end; }
.options-index__empty { width: 100%; max-width: 640px; }

@media (max-width: 767px) {
  .options-index { gap: 14px; }
  .option-grid { gap: 16px; }
  .option-card { padding: 20px 18px 18px; }
  .options-index__filter .book-select { flex: 1 1 100%; }
}

html[dir="rtl"] .options-index__nav, html[dir="rtl"] .options-index__filter label, html[dir="rtl"] .option-card__when,
html[dir="rtl"] .option-card__facts, html[dir="rtl"] .option-card__facilitator p, html[dir="rtl"] .option-card__member,
html[dir="rtl"] .option-card__fee, html[dir="rtl"] .option-card__was { font-family: var(--font-ar); }
/* ------------------------- Screen 4: Offering detail --------------------- */
/* Phase 3F - one real offering, one shell for both support types: header,
   booking summary (sticky aside on wide screens, first in reading order on
   narrow ones) and the detail column (schedule, what you're booking,
   facilitator). Existing tokens, radii and badge/review styles only; logical
   properties so Arabic mirrors for free. */
.detail { max-width: 1180px; margin-inline: auto; padding: 56px 24px 100px; display: flex; flex-direction: column; gap: 22px; }
.detail__nav { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 22px; font-family: var(--font-ui); font-size: 14px; }
.detail__nav .alink { display: inline-flex; align-items: center; gap: 6px; color: var(--purple-deep); font-weight: 600; text-decoration: underline; }
.detail__nav .arrow--back { width: 13px; height: 13px; fill: currentColor; }
.detail__head { display: flex; flex-direction: column; gap: 8px; max-width: 780px; }
.detail__head h1 { margin: 0; font-size: 44px; line-height: 1.1; color: var(--near-black); overflow-wrap: anywhere; }
.detail__sub { margin: 0; font-family: var(--font-ui); font-size: 17px; line-height: 1.5; color: var(--body); }
.detail__sub time { font-weight: 600; color: var(--near-black); }
.detail__lead { margin: 0; font-family: var(--font-ui); font-size: 15px; line-height: 1.65; color: var(--muted); }
.detail__notices { display: grid; gap: 12px; max-width: 900px; }
.detail__notices:empty { display: none; }
.detail__notices .flash { margin: 0; }

.detail__grid { display: grid; grid-template-columns: minmax(0, 1fr) 380px; grid-template-areas: "main aside"; gap: 28px; align-items: start; }
.detail__main { grid-area: main; min-width: 0; display: flex; flex-direction: column; gap: 20px; }
.detail__aside { grid-area: aside; min-width: 0; position: sticky; top: 24px; }
.detail__card, .detail__summary { background: var(--white); border-radius: var(--r-lg); box-shadow: inset 0 0 0 1px var(--border), 0 4px 25px rgba(0, 0, 0, 0.06); padding: 26px 28px; }
.detail__card h2, .detail__summary h2 { margin: 0 0 16px; font-size: 22px; line-height: 1.2; color: var(--near-black); }
.detail__card h3 { margin: 22px 0 10px; font-size: 16px; color: var(--near-black); }

.detail__schedule-summary { margin: 0 0 14px; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--body); }
.detail__schedule-summary time { font-weight: 600; color: var(--near-black); }
.detail__sessions { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.detail__sessions li { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 4px 16px; padding: 12px 0; border-top: 1px solid var(--border); font-family: var(--font-ui); font-size: 15px; line-height: 1.45; color: var(--ink); }
.detail__sessions li:first-child { border-top: 0; padding-top: 0; }
.detail__session-n { font-weight: 700; color: var(--purple-deep); }
.detail__session-when { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; min-width: 0; }
.detail__session-when > time { font-weight: 600; color: var(--near-black); }
.detail__session-title { grid-column: 2; font-size: 14px; color: var(--muted); overflow-wrap: anywhere; }
.detail__sessions li.is-cancelled .detail__session-when > time, .detail__sessions li.is-cancelled .detail__session-when > span { text-decoration: line-through; color: var(--muted); }
.detail__rows { margin: 0; display: flex; flex-direction: column; }
.detail__rows > div { padding: 12px 0; border-top: 1px solid var(--border); }
.detail__rows > div:first-child { border-top: 0; padding-top: 0; }
.detail__rows dt { font-family: var(--font-ui); font-size: 13px; color: var(--muted); }
.detail__rows dd { margin: 4px 0 0; font-family: var(--font-display); font-weight: 700; font-size: 16px; line-height: 1.35; color: var(--near-black); overflow-wrap: anywhere; }
.detail__row-note { display: block; margin-top: 2px; font-family: var(--font-ui); font-weight: 400; font-size: 13px; color: var(--muted); }
.detail__code { font-family: var(--font-ui); letter-spacing: 0.04em; }
.detail__facts { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; font-family: var(--font-ui); font-size: 15px; line-height: 1.5; color: var(--ink); }
.detail__facts li { display: flex; gap: 10px; align-items: flex-start; min-width: 0; }
.detail__facts svg { flex-shrink: 0; width: 18px; height: 18px; margin-top: 2px; color: var(--purple-deep); }

.detail__person { display: flex; gap: 16px; align-items: center; }
.detail__person > div { min-width: 0; }
.detail__person p { margin: 0; font-family: var(--font-ui); overflow-wrap: anywhere; }
/* Same contract as the option card, one size up: photo and initial share
   one fixed slot. */
.detail__initial, .detail__photo { flex-shrink: 0; width: 64px; height: 64px; border-radius: 50%; }
.detail__initial { display: flex; align-items: center; justify-content: center; background: #eef2ff; color: var(--purple-deep); font-family: var(--font-display); font-weight: 700; font-size: 26px; }
.detail__photo { display: block; object-fit: cover; }
.detail__name { font-weight: 700; font-size: 18px; color: var(--near-black); }
.detail__role { font-size: 14px; color: var(--muted); }
.detail__years { font-size: 14px; font-weight: 600; color: var(--purple-deep); }
.detail__rating { font-size: 14px; color: var(--body); }
.detail__rating .offering__stars { color: var(--yellow); }
.detail__chips { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.detail__chips li { padding: 6px 14px; border-radius: var(--r-pill); background: #eef2ff; color: var(--purple-deep); font-family: var(--font-ui); font-size: 14px; }
.detail__bio { margin: 0; font-family: var(--font-ui); font-size: 15px; line-height: 1.65; color: var(--body); white-space: pre-line; }
.detail__reviews { display: grid; gap: 14px; }

.detail__price { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.detail__amount { font-size: 22px; color: var(--purple-deep); }
.detail__was { font-family: var(--font-ui); font-weight: 400; font-size: 14px; color: var(--muted); }
.detail__member, .detail__fee { flex-basis: 100%; font-family: var(--font-ui); font-weight: 400; font-size: 13px; line-height: 1.45; }
.detail__member { font-weight: 700; color: var(--purple-deep); }
.detail__fee { color: var(--muted); }
.detail__cta { margin-top: 18px; display: flex; flex-direction: column; gap: 12px; }
.detail__cta .btn { width: 100%; height: 50px; }
.detail__cta form { margin: 0; }
.detail__cta .flash { margin: 0; }
.detail__cta > .alink { align-self: center; text-decoration: underline; }
.detail__status { margin: 0; padding: 14px 16px; border-radius: 12px; background: #fdecea; color: #a12d20; font-family: var(--font-ui); font-size: 14px; line-height: 1.5; }
.detail__status--paused { background: #eef2ff; color: var(--purple-deep); }
/* NF-9: the 1-to-1 states - approved reads as good news, a decline as a
   neutral fact, never as an error. */
.detail__status--ok { background: #e7f8f0; color: #0b5d3b; }
.detail__status--neutral { background: #f4f2f7; color: var(--body); }
.detail__status strong { display: block; margin-bottom: 2px; }
.detail__hint { margin: 0; font-family: var(--font-ui); font-size: 13.5px; line-height: 1.55; color: var(--body); }
.detail__nohold { margin: 0; font-family: var(--font-ui); font-size: 12.5px; line-height: 1.5; color: var(--muted); }

@media (max-width: 1023px) {
  .detail__grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: "aside" "main"; }
  .detail__aside { position: static; }
  .detail__head h1 { font-size: 36px; }
}
@media (max-width: 767px) {
  .detail { padding: 40px 18px 80px; gap: 18px; }
  .detail__card, .detail__summary { padding: 20px 18px; }
  .detail__head h1 { font-size: 30px; }
  .detail__sessions li { grid-template-columns: minmax(0, 1fr); }
  .detail__session-title { grid-column: 1; }
}

html[dir="rtl"] .detail__nav, html[dir="rtl"] .detail__sub, html[dir="rtl"] .detail__lead, html[dir="rtl"] .detail__sessions,
html[dir="rtl"] .detail__schedule-summary, html[dir="rtl"] .detail__facts, html[dir="rtl"] .detail__person p,
html[dir="rtl"] .detail__bio, html[dir="rtl"] .detail__rows dt, html[dir="rtl"] .detail__row-note, html[dir="rtl"] .detail__hint,
html[dir="rtl"] .detail__nohold, html[dir="rtl"] .detail__status, html[dir="rtl"] .detail__chips li,
html[dir="rtl"] .detail__member, html[dir="rtl"] .detail__fee, html[dir="rtl"] .detail__was { font-family: var(--font-ar); }
/* Below one row the featured card stops being raised (Membership page). */
@media (max-width: 1139px) {
  .plan-card--featured { margin-block: 0; }
}

@media (max-width: 480px) {
  .plan-tiles { flex-direction: column; }
  .plan-tile { flex-direction: row; align-items: center; text-align: start; padding: 12px 14px; gap: 12px; }
}

/* Program cards (Select Group Program) */
.circl-grid { display: flex; gap: 20px; width: 100%; max-width: 1240px; justify-content: center; flex-wrap: wrap; align-items: stretch; }
.circl-card { flex: 1 1 340px; max-width: 400px; background: var(--white); border-radius: var(--r-lg); box-shadow: inset 0 0 0 1px rgba(106,72,229,0.5), 0 4px 25px rgba(0,0,0,0.15); padding: 15px; display: flex; flex-direction: column; }
.circl-card__img { border-radius: 35px; height: 224px; width: 100%; object-fit: cover; }
.circl-card__body { padding: 24px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.circl-card h3 { font-size: 24px; color: var(--near-black); }
.circl-card__role { font-family: var(--font-alt); font-weight: 500; font-size: 15px; color: var(--purple); }
.circl-card__desc { font-size: 15px; line-height: 1.5; color: var(--body); }
.circl-card__price { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border); display: flex; flex-direction: column; align-items: flex-end; }
.circl-card__price small { font-size: 14px; color: var(--body); }
.circl-card__price b { font-size: 24px; color: var(--purple-deep); }
.circl-card .btn { margin: 16px 24px 8px; }
/* The card's button label is Website Content now, so the card has to survive any
   value the editor allows rather than only the short ones it shipped with. A
   flex item will not shrink below its content by default, and .btn never wraps,
   so a forty-character label set the card's width and pushed the page sideways
   on a phone. The label wraps inside the card instead; min-height keeps a short
   one exactly the pill it was. */
.circl-card { min-width: 0; }
.circl-card .btn {
  max-width: 100%;
  white-space: normal;
  height: auto;
  min-height: 56px;
  padding: 12px 24px;
}


/* Assessment */
.assess { min-height: 100vh; display: flex; flex-direction: column; align-items: center; gap: 29px; padding: 65px 40px; background: var(--white); }
.assess-card { position: relative; width: 100%; max-width: 819px; background: var(--white); border-radius: 24px; box-shadow: inset 0 0 0 1px var(--border), 0 1px 2px rgba(0,0,0,0.05); padding: 48px; display: flex; flex-direction: column; gap: 32px; overflow: hidden; }
.assess-progress-label { font-family: var(--font-ui); font-size: 16px; color: var(--body); }
.assess-progress { display: flex; gap: 6px; width: 192px; margin-top: 8px; }
.assess-progress span { flex: 1; height: 6px; border-radius: 3px; background: var(--border); }
.assess-progress span.done { background: var(--purple-deep); }
.assess-card h1 { font-size: 36px; line-height: 1.1; color: var(--near-black); }
/* Breathing room between the question and its first answer option. */
.assess-card fieldset h1 { margin-bottom: 20px; }
.assess-options { display: flex; flex-direction: column; gap: 16px; }
.assess-option { display: flex; align-items: center; gap: 16px; min-height: 70px; padding: 20px; border-radius: 50px; box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 18px; color: var(--near-black); cursor: pointer; background: var(--white); }
.assess-option input { position: absolute; opacity: 0; }
.assess-option .radio { width: 24px; height: 24px; border-radius: 50%; box-shadow: inset 0 0 0 2px #797586; flex-shrink: 0; }
.assess-option:has(input:checked) { background: #e9e1ff; box-shadow: inset 0 0 0 1px var(--purple-deep); }
.assess-option:has(input:checked) .radio { background: var(--purple-deep); box-shadow: inset 0 0 0 5px #fff, inset 0 0 0 7px var(--purple-deep); }
.assess-footer { display: flex; justify-content: space-between; align-items: center; padding-top: 16px; }
/* The stepper parks controls with the hidden attribute, and .btn / .assess-back
   set display themselves - which beats the UA's [hidden] rule. This is why
   "See my recommendation" used to sit beside "Next" from question 1. */
.assess-card [hidden] { display: none; }
.assess-footer noscript { margin-inline-start: auto; }
.assess-back { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-ui); font-size: 16px; color: var(--body); background: none; border: 0; }
.assess-back svg { width: 16px; height: 16px; fill: currentColor; }
.assess-quote { font-family: var(--font-ui); font-style: italic; font-size: 16px; color: var(--body); text-align: center; max-width: 389px; }
/* ASSESSMENT-01 additions: the truthful non-medical note on the intro card,
   the outcome page's small quote reuse, and the explicit continue-anyway
   control rendered as a quiet link-style button. */
.preassess__note { margin-top: 18px; font-family: var(--font-ui); font-size: 13px; color: var(--muted); max-width: 460px; }
.result-card .assess-quote { margin-top: 8px; font-size: 13px; max-width: 460px; }
.result-card form { margin: 0; }
.result-card .alink { background: none; border: 0; padding: 0; cursor: pointer; font-family: var(--font-ui); font-size: 15px; color: var(--purple-deep); text-decoration: underline; }
.result-card .alink:hover { color: var(--purple); }

@media (max-width: 767px) {
  .flow { padding: 56px 20px; }
  .flow__title, .assess-card h1 { font-size: 32px; line-height: 1.1; }
  .plan-card { padding: 32px 18px 18px; }
  .plan-card .btn { padding: 0 12px; }
  .assess { padding: 40px 16px; }
  .assess-card { padding: 28px; }
  .assess-option { font-size: 16px; }
}

/* ============================== BOOKING ================================= */
.book { max-width: 1030px; margin-inline: auto; padding: 80px 20px 100px; display: flex; flex-direction: column; gap: 24px; }
.book__intro { text-align: center; margin-bottom: 16px; }
.book__intro h1 { font-size: 56px; line-height: 60px; color: var(--near-black); }
.book__intro p { margin: 12px auto 0; max-width: 585px; font-size: 16px; color: var(--body); }
.book-section-title { font-size: 22px; color: var(--near-black); margin-top: 8px; }

@media (max-width: 900px) {
  .book__intro h1 { font-size: 40px; line-height: 1.05; }
}

/* ============================ RESULT / CONFIRM ========================== */
.result { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 24px; padding: 80px 20px; background: var(--white); }
.result-card { position: relative; width: 100%; max-width: 819px; background: var(--white); border-radius: 24px; box-shadow: inset 0 0 0 1px var(--border), 0 1px 2px rgba(0,0,0,0.05); padding: 48px; display: flex; flex-direction: column; align-items: center; gap: 20px; text-align: center; overflow: hidden; }
.result-card h1 { font-size: 36px; line-height: 1.1; color: var(--near-black); max-width: 620px; }
.result-card p { font-size: 16px; line-height: 1.5; color: var(--body); max-width: 600px; }
.result-card--glow { background: radial-gradient(120% 90% at 0% 100%, rgba(70,206,153,0.12) 0%, rgba(255,255,255,0) 55%), var(--white); }
.mood-face { width: 93px; height: 93px; border-radius: 50%; background: var(--yellow); box-shadow: inset 0 0 0 3px #232333; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.mood-face svg { width: 58px; height: 58px; }
/* Supplied face artwork carries its own disc, outline and sparks, so the
   CSS-drawn circle is cleared and the box just matches the artwork's viewBox. */
.mood-face--art { background: none; box-shadow: none; }
.mood-face--art svg { width: 100%; height: 100%; }
.mood-face--sad { width: 126px; height: 106px; }
.mood-face--happy { width: 148px; height: 112px; }
.rec-panel { width: 100%; max-width: 819px; }
.rec-panel h2 { display: flex; align-items: center; gap: 12px; font-size: 24px; color: var(--near-black); margin-bottom: 16px; }
.rec-panel h2 img { width: 22px; height: 23px; flex-shrink: 0; }
.rec-card { background: var(--white); border-radius: 24px; box-shadow: inset 0 0 0 1px var(--border); padding: 30px; display: grid; grid-template-columns: minmax(0, 1fr) 222px; gap: 36px; align-items: center; }
.rec-card__photo { width: 100%; height: 230px; border-radius: 12px; object-fit: cover; }
.rec-card h3 { font-size: 20px; color: #0f172a; }
.rec-card p { font-size: 16px; color: var(--body); text-align: start; margin-top: 8px; }
.rec-card__features { display: grid; grid-template-columns: repeat(2, max-content); gap: 14px 32px; margin-top: 22px; }
.rec-card__features li { display: grid; grid-template-columns: 20px minmax(0, 1fr); align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 15px; color: var(--near-black); }
.rec-card__features svg { justify-self: center; }
.rec-note { margin-top: 16px; padding: 16px; border-radius: 12px; background: rgba(81,40,204,0.05); text-align: center; font-weight: 500; color: var(--near-black); }

/* Receipt submitted (transfer methods awaiting review) */
.receipt-check { width: 84px; height: 84px; border-radius: 50%; background: #eee8ff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.receipt-check svg { width: 40px; height: 40px; fill: var(--purple-deep); }
/* Decision 12A: what was actually submitted, on the receipt-received page. */
.receipt-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px 24px; width: 100%; max-width: 620px; margin: 4px 0 0; padding: 20px 24px; border-radius: 14px; background: var(--card); text-align: start; }
.receipt-facts dt { font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.receipt-facts dd { margin: 4px 0 0; font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--near-black); word-break: break-word; }
.receipt-pending { padding: 14px 20px; border-radius: 10px; background: rgba(81,40,204,0.06); font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--purple-deep); }

@media (max-width: 767px) {
  .result-card { padding: 32px 24px; }
  .result-card h1 { font-size: 28px; }
  .rec-card { grid-template-columns: minmax(0, 1fr); gap: 24px; padding: 24px; }
  .rec-card__photo { height: 200px; }
}

@media (max-width: 559px) {
  .rec-panel h2 { font-size: 20px; }
  .rec-card__features { grid-template-columns: minmax(0, 1fr); }
}

/* ====================== PAYMENT UNSUCCESSFUL ============================= */
/*
   Richer variant of .result-card: the intro stays centred, then two detail
   panels, a hold notice, the actions row and a support link. Panels are
   left-aligned, so they opt out of the card's centred text.
*/
/*
   Card decoration mapped from the supplied 819x854 artboard, which matches the
   card box 1:1. Two 256px circles sit mostly outside the card and are cropped
   by its overflow:hidden - lavender centred 33px in from the top-right, mint
   centred 33px from the left and 31px below the bottom edge. Both are 10%
   opacity as drawn, so they read as a tint rather than a visible blob. Their
   blur radii were in the truncated <defs>, so the falloff is approximated.
   .result-card--glow is deliberately not used here: this replaces it.
*/
.payfail {
  gap: 0;
  background:
    radial-gradient(circle 150px at calc(100% - 33px) 33px, rgba(230,222,255,0.10) 0%, rgba(230,222,255,0.10) 38%, rgba(230,222,255,0) 100%),
    radial-gradient(circle 150px at 33px calc(100% + 31px), rgba(119,250,194,0.10) 0%, rgba(119,250,194,0.10) 38%, rgba(119,250,194,0) 100%),
    var(--white);
}

/* Flat 91px disc behind the icon - no blur on this one in the source. The 47%
   offset lands its centre on the artboard's cy=99.5 rather than the box centre. */
.payfail__icon {
  width: 148px;
  height: 109px;
  flex-shrink: 0;
  background: radial-gradient(circle 45.5px at 50% 47%, rgba(81,40,204,0.05) 99%, transparent 100%);
}
.payfail h1 { margin-top: 10px; font-size: 30px; line-height: 1.2; max-width: 660px; }
.payfail > p { margin-top: 10px; font-size: 16px; line-height: 1.5; max-width: 665px; }

.payfail__grid { width: 100%; margin-top: 28px; display: grid; grid-template-columns: 1.44fr 1fr; gap: 18px; align-items: start; text-align: start; }

.payfail__panel { background: var(--white); border-radius: 16px; box-shadow: inset 0 0 0 1px rgba(28,27,26,0.10); padding: 24px; }
.payfail__panel h2 { font-size: 19px; letter-spacing: -0.2px; }
.payfail__panel-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.payfail__pill { display: inline-flex; align-items: center; gap: 7px; padding: 5px 14px; border-radius: var(--r-pill); background: #fdecec; font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: #ef4444; white-space: nowrap; }
.payfail__pill::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }

/* letter-spacing reset: the global h1-h4 rule sets -0.96px, far too tight for
   a 14px UI-font label. */
.payfail__panel h3 { margin-top: 22px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; letter-spacing: 0; color: var(--near-black); }
.payfail__reasons { margin-top: 14px; display: grid; gap: 11px; }
.payfail__reasons li { display: grid; grid-template-columns: 17px minmax(0, 1fr); align-items: center; gap: 12px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.payfail__reasons svg { justify-self: center; }

.payfail__saved { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 12px; margin-top: 20px; padding: 14px 16px; border-radius: 10px; background: rgba(81,40,204,0.06); font-family: var(--font-ui); font-size: 13px; line-height: 1.55; color: var(--body); }
.payfail__saved svg { margin-top: 1px; }
.payfail__saved b { color: var(--purple-deep); }

.payfail__who { display: flex; align-items: center; gap: 12px; margin-top: 18px; }
.payfail__who img { width: 46px; height: 46px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.payfail__who div { min-width: 0; display: flex; flex-direction: column; }
.payfail__who span { font-family: var(--font-ui); font-weight: 700; font-size: 12px; color: var(--purple-deep); }
.payfail__who b { font-family: var(--font-display); font-weight: 700; font-size: 17px; color: var(--near-black); }

.payfail__meta { margin-top: 16px; padding-top: 16px; border-top: 1px solid rgba(28,27,26,0.10); display: grid; gap: 12px; }
.payfail__meta li { display: grid; grid-template-columns: 17px minmax(0, 1fr); align-items: center; gap: 12px; font-family: var(--font-ui); font-size: 14px; color: var(--near-black); }
.payfail__meta svg { width: 16px; height: 16px; justify-self: center; }

.payfail__total { margin-top: 16px; padding-top: 16px; border-top: 1px solid rgba(28,27,26,0.10); display: flex; align-items: center; justify-content: space-between; gap: 12px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.payfail__total b { font-family: var(--font-display); font-weight: 700; font-size: 19px; color: var(--purple-deep); }

/* max-width reset: .result-card p caps paragraphs at 600px, but this notice
   is a full-width bar. */
.payfail__hold { display: flex; align-items: center; gap: 12px; width: 100%; max-width: none; margin-top: 18px; padding: 18px 20px; border-radius: 12px; background: var(--card); font-family: var(--font-ui); font-size: 14px; color: var(--near-black); text-align: start; }
.payfail__hold svg { flex-shrink: 0; }

.payfail__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 28px; }
.payfail__actions .btn { height: 52px; padding: 0 28px; }
.payfail__actions .btn--outline { box-shadow: inset 0 0 0 1px rgba(28,27,26,0.18); }
.payfail__actions .btn svg { flex-shrink: 0; }

.payfail__help { margin-top: 18px; font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--purple-deep); }
.payfail__help:hover { text-decoration: underline; text-underline-offset: 3px; }

@media (max-width: 767px) {
  .payfail h1 { font-size: 24px; }
  .payfail__grid { grid-template-columns: minmax(0, 1fr); }
  .payfail__panel { padding: 20px; }
  .payfail__hold { align-items: flex-start; }
  /* .btn is nowrap, so give each action its own row rather than overflow. */
  .payfail__actions { flex-direction: column; align-items: stretch; }
}

/* ===================== ASSESSMENT RESULT - NON-SUITABLE ================== */
/* Two panels side by side; the other three .result pages stay single-column. */
.result--split { justify-content: center; }
.nonfit { width: 100%; max-width: 1250px; display: grid; grid-template-columns: 1fr 1fr; gap: 30px; align-items: stretch; }

.nonfit__verdict { max-width: none; border-radius: 16px; padding: 56px 48px; justify-content: center; background: radial-gradient(120% 90% at 0% 100%, rgba(70,206,153,0.12) 0%, rgba(255,255,255,0) 55%), var(--white); }
.nonfit__verdict h1 { font-size: 30px; line-height: 1.25; max-width: 520px; }
.nonfit__verdict p { font-size: 15px; max-width: 440px; }

.nonfit__rec { background: var(--card); border-radius: 16px; padding: 48px; display: flex; flex-direction: column; gap: 18px; }
.nonfit__rec h2 { font-size: 20px; color: var(--near-black); }
.nonfit__therapist { display: flex; align-items: center; gap: 28px; margin: 12px 0 6px; }
.nonfit__avatar { width: 150px; height: 150px; flex-shrink: 0; border-radius: 50%; object-fit: cover; box-shadow: 0 0 0 3px #b5b3b3; }
.nonfit__who { min-width: 0; }
.nonfit__who h3 { font-size: 22px; letter-spacing: 0; color: var(--near-black); }
.nonfit__tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.nonfit__tags li { padding: 5px 12px; border-radius: var(--r-pill); background: var(--white); box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 11px; color: var(--muted); white-space: nowrap; }
.nonfit__rating { display: flex; align-items: center; gap: 10px; margin-top: 12px; font-family: var(--font-ui); font-size: 13px; color: var(--near-black); }
.nonfit__stars { display: inline-flex; align-items: center; gap: 2px; }
.nonfit__stars svg { width: 13px; height: 13px; fill: var(--purple-deep); }
.nonfit__note { display: flex; align-items: center; gap: 12px; padding: 16px 20px; border-radius: 10px; background: rgba(81,40,204,0.06); font-family: var(--font-ui); font-weight: 500; font-size: 14px; color: var(--near-black); }
.nonfit__contact a { font-weight: 700; color: var(--purple-deep); text-decoration: underline; }
.nonfit__whatsapp { display: inline-flex; flex-shrink: 0; }
.nonfit__whatsapp svg { width: 22px; height: 22px; }
.nonfit__rec .btn { margin-top: auto; width: 100%; height: 52px; }
/* QA-FIX-04: the recommendation is a CIRCL, not a therapist - its real
   catalogue cover replaces the prototype's fake avatar/rating block. */
.nonfit__cover { width: 100%; height: 200px; object-fit: cover; border-radius: 12px; }
.nonfit__desc { margin-top: 12px; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--body); }
.nonfit__continue { margin-top: 14px; text-align: center; }
.nonfit__continue .alink { background: none; border: 0; padding: 0; cursor: pointer; font-family: var(--font-ui); font-size: 14px; color: var(--purple-deep); text-decoration: underline; }
.nonfit__continue .alink:hover { color: var(--purple); }

@media (max-width: 1023px) {
  .nonfit { grid-template-columns: 1fr; }
  .nonfit__verdict { padding: 40px 32px; }
  .nonfit__rec { padding: 32px; }
}

@media (max-width: 767px) {
  .nonfit__verdict h1 { font-size: 24px; }
  .nonfit__rec { padding: 24px 20px; }
  .nonfit__therapist { flex-direction: column; align-items: flex-start; gap: 18px; }
  .nonfit__avatar { width: 110px; height: 110px; }
}

/* ============================== PAYMENT ================================= */
.pay { max-width: 1288px; margin-inline: auto; padding: 60px 24px 100px; }
.pay-card { background: var(--white); border-radius: 24px; box-shadow: inset 0 0 0 1px var(--border), 0 8px 40px rgba(0,0,0,0.06); padding: 32px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.12fr); gap: 40px; align-items: start; }
.pay h1, .pay h2 { font-size: 22px; line-height: 1.3; color: var(--near-black); margin-bottom: 24px; }

.pay-order,
.pay-form { min-width: 0; }
.pay-order__img { width: 100%; height: 320px; object-fit: cover; border-radius: 12px; }
.pay-order h1 { margin: 26px 0 22px; }
.pay-order__rows { display: flex; flex-direction: column; }
.pay-order__rows > div { padding: 14px 0; border-top: 1px solid var(--border); }
.pay-order__rows > div:first-child { border-top: 0; padding-top: 0; }
.pay-order__rows dt { font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.pay-order__rows dd { margin: 5px 0 0; font-family: var(--font-display); font-weight: 700; font-size: 16px; color: var(--near-black); }
.pay-total { display: flex; justify-content: space-between; align-items: center; margin-top: 20px; padding: 22px 24px; border-radius: 10px; background: var(--card); }
.pay-total span { font-family: var(--font-display); font-weight: 700; font-size: 17px; color: var(--near-black); }
.pay-total b { font-family: var(--font-display); font-weight: 700; font-size: 18px; color: var(--purple-deep); }

.pay-form { background: var(--card); border-radius: 16px; padding: 32px; }
.pay-methods { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 26px; }
.pay-method { min-width: 0; min-height: 92px; border-radius: 10px; background: var(--white); box-shadow: inset 0 0 0 1px var(--border); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 10px 6px; cursor: pointer; text-align: center; }
.pay-method input { position: absolute; opacity: 0; }
.pay-method__logo { display: flex; align-items: center; justify-content: center; height: 30px; }
.pay-method__logo svg { width: auto; height: 20px; }
.pay-method__logo img { width: auto; height: 100%; max-width: 48px; object-fit: contain; }
.pay-method__name { font-family: var(--font-display); font-weight: 700; font-size: 11px; color: var(--near-black); }
.pay-method:has(input:checked) { box-shadow: inset 0 0 0 2px var(--purple); }

/* Card and MyFawry are on the roadmap, not in the flow: they render muted and
   carry no radio at all, so there is nothing for the server to accept. The
   same treatment covers a real method left unconfigured in Site Settings. */
.pay-method.is-disabled { cursor: default; opacity: 0.55; background: var(--card); box-shadow: inset 0 0 0 1px var(--border); }
.pay-method.is-disabled .pay-method__logo img { filter: grayscale(1); }
.pay-method__soon { font-family: var(--font-ui); font-weight: 700; font-size: 10px; line-height: 1.2; color: var(--muted); }

/* Method-specific field sets: only the checked one is shown. */
.pay-body { min-height: 260px; }
.pay-fields { display: none; }
.pay-form:has(#pm-instapay:checked) .pay-fields--instapay,
.pay-form:has(#pm-vodafone_cash:checked) .pay-fields--vodafone_cash { display: block; }

/* What the participant does in their own banking app, in order. */
.pay-steps { margin: 0 0 18px; padding-inline-start: 20px; display: flex; flex-direction: column; gap: 6px; font-family: var(--font-ui); font-size: 13px; line-height: 1.5; color: var(--body); }
.pay-steps li::marker { font-weight: 700; color: var(--purple-deep); }
.pay-hint { margin-bottom: 14px; font-family: var(--font-ui); font-style: italic; font-size: 13px; color: var(--muted); }
.pay-prefix { font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--near-black); flex-shrink: 0; }

/* Read-only account to copy into the external app. */
.pay-input--copy { padding-inline-end: 6px; }
.pay-input--copy input { font-weight: 700; }
.pay-copy { display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; height: 40px; padding: 0 16px; border: 0; border-radius: var(--r-pill); background: #eee8ff; color: var(--purple-deep); font-family: var(--font-ui); font-weight: 700; font-size: 13px; transition: background-color 0.15s ease, color 0.15s ease; }
.pay-copy svg { width: 15px; height: 15px; flex-shrink: 0; }
.pay-copy:hover { background: var(--purple-deep); color: var(--white); }
.pay-copy.is-copied { background: var(--green); color: var(--near-black); }

/* Receipt upload: preview replaces the drop zone once a file is chosen. */
.pay-upload__input { position: absolute; width: 1px; height: 1px; opacity: 0; }
.pay-upload__drop { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 4px 10px; padding: 16px 20px; border-radius: 14px; background: var(--white); box-shadow: inset 0 0 0 1.5px var(--border); color: var(--purple-deep); cursor: pointer; transition: box-shadow 0.15s ease; }
.pay-upload__drop:hover { box-shadow: inset 0 0 0 1.5px var(--purple); }
.pay-upload__drop svg { width: 20px; height: 20px; flex-shrink: 0; }
.pay-upload__drop b { font-family: var(--font-display); font-size: 15px; color: var(--near-black); }
.pay-upload__drop span { font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.pay-upload__input:focus-visible + .pay-upload__drop { box-shadow: inset 0 0 0 2px var(--purple), 0 0 0 3px rgba(106,72,229,0.3); }
.pay-upload__preview { border-radius: 14px; background: var(--white); box-shadow: inset 0 0 0 1px var(--border); padding: 10px; }
.pay-upload__preview img { width: 100%; max-height: 220px; object-fit: contain; border-radius: 8px; background: var(--card); }
.pay-upload__meta { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 8px; padding: 0 4px; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.pay-upload__meta span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pay-upload__remove { flex-shrink: 0; border: 0; background: none; padding: 0; font-family: var(--font-ui); font-weight: 700; font-size: 12px; color: var(--purple-deep); text-decoration: underline; }

.pay-field { min-width: 0; margin-bottom: 16px; }
/* Direct child only: the upload drop zone is also a label, and a descendant
   selector here would override its flex layout with display: block. */
.pay-field > label { display: block; font-family: var(--font-display); font-weight: 700; font-size: 13px; color: var(--near-black); margin-bottom: 6px; padding: 0 4px; }
.pay-input { display: flex; align-items: center; gap: 10px; width: 100%; min-width: 0; height: 56px; padding: 0 20px; border-radius: var(--r-pill); background: var(--white); }
.pay-input img { width: 31px; height: 16.5px; border-radius: 5px; flex-shrink: 0; }
.pay-input input { flex: 1; width: 100%; min-width: 0; border: 0; outline: none; background: transparent; font-family: var(--font-display); font-size: 16px; color: var(--near-black); }
.pay-input input::placeholder { color: #6b7280; }
.pay-row2 { display: flex; gap: 16px; }
.pay-row2 .pay-field { flex: 1; }
/* Every method in this phase is a manual transfer, so there is exactly one
   CTA and it submits the receipt. A charge button would need a gateway. */
.pay-actions { display: none; flex-direction: column; gap: 14px; margin-top: 8px; }
.pay-actions--receipt { display: flex; }
.pay-actions .btn { height: 56px; width: 100%; font-size: 15px; }
.pay-actions .btn--purple { box-shadow: 0 10px 15px -3px rgba(81,40,204,0.2); }
/* QA-FIX-04: when no manual method is operational the upload/submit controls
   stay in the layout but read and behave as disabled. */
.pay-field.is-disabled { opacity: .55; pointer-events: none; }
.pay-secure { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 18px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.pay-secure svg { width: 13px; height: 15px; fill: var(--body); }

@media (max-width: 1023px) {
  .pay-card { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  .pay-body { min-height: 0; }
}

@media (max-width: 767px) {
  .pay { padding: 32px 12px 72px; }
  .pay-card { padding: 16px; border-radius: 18px; }
  .pay-order__img { height: 220px; }
  .pay-form { padding: 20px 16px; }
  .pay-methods { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pay-input { padding: 0 14px; }
}

@media (max-width: 479px) {
  .pay-row2 { flex-direction: column; gap: 0; }
}

@media (max-width: 360px) {
  .pay-input--copy { flex-direction: column; align-items: stretch; height: auto; padding-block: 10px; border-radius: 20px; }
  .pay-input--copy input { flex: none; height: 32px; }
  .pay-copy { width: 100%; justify-content: center; }
}

/* ==================== PROFESSIONAL PROFILE FORM ========================= */
.pform { max-width: 1240px; margin-inline: auto; padding: 60px 40px 100px; }
.pform__head { display: flex; flex-direction: column; gap: 16px; margin-bottom: 40px; }
.pform__badge { align-self: flex-start; display: inline-flex; align-items: center; gap: 8px; background: #ffdf93; color: #241a00; padding: 4px 16px; border-radius: var(--r-pill); font-size: 16px; }
.pform__head h2 { font-size: 24px; color: var(--near-black); }
.pform__head p { font-size: 18px; color: var(--body); }
.pform__grid { display: grid; grid-template-columns: 1fr 336px; gap: 26px; align-items: start; }
.pform__sections { display: flex; flex-direction: column; gap: 26px; }
.pform-section { background: var(--white); border-radius: 20px; box-shadow: var(--dash-card-shadow); padding: 26px 28px; display: flex; flex-direction: column; gap: 20px; }
.pform-section h3 { display: flex; align-items: center; gap: 11px; font-size: 16px; letter-spacing: -0.2px; color: var(--near-black); }
.pform-section h3 svg { flex-shrink: 0; max-width: 20px; max-height: 20px; }
.pform-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.pfield { display: flex; flex-direction: column; gap: 8px; }
.pfield.full { grid-column: 1 / -1; }
.pfield label { font-size: 16px; color: var(--body); }
.pfield input, .pfield select, .pfield textarea { border: 0; border-radius: 24px; background: #f8f3f1; padding: 12px 16px; font-family: var(--font-display); font-size: 16px; color: var(--near-black); outline: none; height: 48px; }
.pfield input:focus, .pfield select:focus, .pfield textarea:focus { box-shadow: inset 0 0 0 2px var(--purple); }
.pfield textarea { height: auto; min-height: 120px; border-radius: 16px; resize: vertical; }
/* Regional Pricing multipliers (4C): a short decimal input with a × suffix. */
.pfield__row { display: flex; align-items: center; gap: 10px; }
.pfield__row input { width: 160px; max-width: 100%; }
.pfield__suffix { font-size: 18px; font-weight: 600; color: var(--body); }
.expertise { display: flex; flex-wrap: wrap; gap: 10px; }
.expertise .chip { cursor: pointer; box-shadow: inset 0 0 0 1px var(--border); background: var(--white); color: var(--body); }
.expertise .chip.is-on { background: #e9e1ff; color: var(--purple-deep); box-shadow: inset 0 0 0 1px var(--purple-deep); }
.pill-toggle { display: flex; gap: 10px; flex-wrap: wrap; }
.pill-toggle span { padding: 10px 18px; border-radius: var(--r-pill); box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.pill-toggle span.is-on { background: var(--purple-deep); color: #fff; box-shadow: none; }
.day-grid { display: flex; gap: 8px; flex-wrap: wrap; }
.day-grid span { min-width: 56px; text-align: center; padding: 10px 8px; border-radius: 12px; box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 13px; color: var(--body); }
.day-grid span.is-on { background: var(--purple-deep); color: #fff; box-shadow: none; }
/* The aside is a stack now, not a single card: two cards then the two CTAs. */
.pform-aside { position: sticky; top: 24px; display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.pform-card { background: var(--white); border-radius: 20px; box-shadow: var(--dash-card-shadow); padding: 24px; }
.pform-aside .btn { width: 100%; height: 52px; }
.pform-aside__draft { box-shadow: inset 0 0 0 1px var(--purple-deep); color: var(--purple-deep); }
.pform-aside__draft:hover { background: var(--purple-deep); color: var(--white); }

@media (max-width: 900px) {
  .pform__grid { grid-template-columns: 1fr; }
  .pform-aside { position: static; }
}
@media (max-width: 600px) {
  .pform-fields { grid-template-columns: 1fr; }
  .pform { padding: 48px 20px 80px; }
}

/* ============================ HOW IT WORKS ============================== */
.how-hero {
  margin: 24px 22px 0;
  padding: 80px 40px 90px;
  background: var(--purple) url("../images/steps-doodles.svg") no-repeat center / cover;
  border-radius: var(--r-lg);
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
}
.how-hero h1 { color: var(--white); font-size: 56px; line-height: 1.05; max-width: 760px; }
.how-hero p { color: rgba(255, 255, 255, 0.95); font-family: var(--font-ui); font-size: 15px; line-height: 1.6; max-width: 640px; }

.how-steps { padding: 90px 0 60px; }
.how-steps__title { text-align: center; font-size: 48px; line-height: 1.1; color: var(--near-black); margin-bottom: 20px; }

.how-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 64px;
  align-items: center;
  /* padding-block only: the shorthand would reset .container's padding-inline
     and drop these rows flush against the viewport edge. */
  padding-block: 50px;
}
/*
   Steps 2 and 4 are cards rather than plain rows, so they cannot use
   .container directly. Mirroring the container's geometry inset by the 22px
   card gutter keeps their content on the same left/right edges as the plain
   rows at every width, including the breakpoints where --gutter changes.
*/
.how-row--boxed {
  width: calc(100% - 44px);
  max-width: calc(var(--container) + var(--gutter) * 2 - 44px);
  margin: 40px auto;
  padding: 80px calc(var(--gutter) - 22px);
  background: var(--cream) url("../images/how-it-works/back-2&4.webp") no-repeat center / cover;
  border-radius: var(--r-lg);
}
.how-row__media img { width: 100%; height: auto; }

.how-step__badge {
  display: inline-block;
  padding: 5px 16px;
  border-radius: var(--r-pill);
  background: var(--purple);
  color: var(--white);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 12px;
  letter-spacing: 0.04em;
}
.how-row__copy > h2 { font-size: 38px; line-height: 1.1; letter-spacing: -0.5px; color: var(--near-black); margin: 16px 0 10px; }
.how-row__copy > h3 { font-size: 18px; letter-spacing: 0; color: var(--near-black); }
.how-row__copy > p { margin-top: 10px; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--body); max-width: 480px; }
.how-list__lead { margin-top: 16px; font-weight: 700; font-size: 15px; color: var(--purple-deep); font-family: var(--font-display); }
.how-list { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.how-list li { position: relative; padding-inline-start: 14px; font-family: var(--font-ui); font-size: 14px; line-height: 1.5; color: var(--body); }
.how-list li::before { content: "\2022"; position: absolute; inset-inline-start: 0; color: var(--body); }
.how-list b { color: var(--near-black); font-weight: 700; }
.how-row__copy .btn { margin-top: 24px; }

.how-row .benefit__body h3 { font-size: 18px; letter-spacing: 0; color: var(--ink); }
.how-row .benefit__body .how-list { margin-top: 6px; }

@media (max-width: 1023px) {
  .how-row { grid-template-columns: 1fr; gap: 40px; }
  .how-row__copy { order: 0; }
  .how-row__media { order: 1; max-width: 560px; }
}
@media (max-width: 767px) {
  .how-hero { margin: 20px 12px 0; padding: 56px 24px; }
  .how-hero h1 { font-size: 38px; line-height: 1.05; }
  .how-steps { padding: 64px 0 40px; }
  .how-steps__title { font-size: 34px; line-height: 1.1; }
  .how-row { padding-block: 32px; }
  .how-row--boxed { width: calc(100% - 24px); margin: 24px auto; padding: 48px 24px; }
  .how-row__copy > h2 { font-size: 28px; }
}

/* =========================== BUSINESS CIRCLE ============================ */
.biz-hero { border-radius: 30px; gap: 18px; }
.biz-pill { display: inline-block; padding: 7px 18px; border-radius: var(--r-pill); background: var(--yellow); color: var(--near-black); font-family: var(--font-ui); font-weight: 700; font-size: 12px; letter-spacing: 0.04em; }
.biz-hero__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 16px; margin-top: 8px; }

.biz-choose { max-width: 1240px; margin: 0 auto; padding: 100px 40px 80px; text-align: center; }
.biz-choose h2 { font-size: 44px; line-height: 1.15; color: var(--near-black); margin-bottom: 44px; }
.biz-choose__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; text-align: start; }
.biz-choose-card { background: var(--white); border-radius: 14px; box-shadow: var(--ring); padding: 22px 20px 24px; display: flex; flex-direction: column; gap: 10px; }
.biz-choose-card__icon { width: 42px; height: 42px; border-radius: 50%; background: var(--yellow-light); display: flex; align-items: center; justify-content: center; margin-bottom: 6px; }
.biz-choose-card__icon--program svg { width: 20px; height: 20px; }
.biz-choose-card__icon--questions svg { width: 18px; height: 20px; }
.biz-choose-card__icon--payment svg { width: 28px; height: 14px; }
.biz-choose-card__icon--session svg { width: 22px; height: 20px; }
.biz-choose-card h3 { font-size: 17px; line-height: 1.25; letter-spacing: 0; color: var(--near-black); }
.biz-choose-card p { font-family: var(--font-ui); font-size: 13px; line-height: 1.5; color: var(--body); }

.biz-matters { margin: 0 22px; padding: 60px; background: var(--card); border-radius: var(--r-lg); display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: center; }
.biz-matters__media { position: relative; }
.biz-matters__media img { width: 100%; height: auto; }
.biz-stat { position: absolute; background: var(--white); border-radius: 14px; box-shadow: 0 8px 24px rgba(0,0,0,0.12); padding: 14px 20px; display: flex; flex-direction: column; gap: 2px; }
.biz-stat b { font-family: var(--font-display); font-weight: 700; font-size: 28px; line-height: 1; color: var(--purple-deep); }
.biz-stat span { font-family: var(--font-ui); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.biz-stat--stress { top: 12%; left: -28px; }
.biz-stat--value { bottom: 10%; right: -20px; }
.biz-matters__copy h2 { font-size: 40px; line-height: 1.15; color: var(--near-black); }
.biz-matters__copy > p { margin-top: 16px; font-family: var(--font-ui); font-size: 14px; line-height: 1.6; color: var(--body); }
.biz-points { margin-top: 22px; display: flex; flex-direction: column; gap: 16px; }
.biz-points h3 { font-family: var(--font-ui); font-weight: 700; font-size: 14px; letter-spacing: 0; color: var(--purple-deep); }
.biz-points p { margin-top: 4px; font-family: var(--font-ui); font-size: 13px; line-height: 1.55; color: var(--body); }

.biz-receives { max-width: 1240px; margin: 0 auto; padding: 100px 40px; display: grid; grid-template-columns: 1fr 1.05fr; gap: 64px; align-items: center; }
.biz-receives__copy h2 { font-size: 44px; line-height: 1.15; color: var(--near-black); }
.biz-checklist { margin-top: 26px; display: flex; flex-direction: column; gap: 12px; }
.biz-checklist li { display: flex; align-items: center; gap: 12px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.biz-checklist svg { width: 17px; height: 17px; flex-shrink: 0; fill: var(--purple-deep); }
.biz-receives__media { position: relative; }
.biz-receives__media img { width: 100%; height: auto; }
.biz-receives__decor { position: absolute; pointer-events: none; }
.biz-receives__decor--top { width: 60px; height: 58px; top: -22px; right: -18px; }
.biz-receives__decor--bottom { width: 64px; height: 64px; bottom: -20px; left: -22px; }

.biz-process { max-width: 1240px; margin: 0 auto; padding: 80px 40px 100px; text-align: center; }
.biz-process h2 { font-size: 44px; line-height: 1.15; color: var(--near-black); }
.biz-process__lead { max-width: 560px; margin: 12px auto 44px; font-family: var(--font-ui); font-size: 13px; line-height: 1.6; color: var(--body); }
.biz-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.biz-step { background: var(--white); border-radius: 14px; box-shadow: var(--ring); padding: 26px 20px 28px; display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }
.biz-step .n { width: 34px; height: 34px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--purple-deep); color: var(--purple-deep); display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-weight: 700; font-size: 15px; margin-bottom: 6px; }
.biz-step h3 { font-size: 17px; color: var(--near-black); letter-spacing: 0; }
.biz-step p { font-family: var(--font-ui); font-size: 13px; color: var(--body); line-height: 1.5; }

.consult { max-width: 1152px; margin: 0 auto 100px; border-radius: 20px; box-shadow: var(--ring); overflow: hidden; display: grid; grid-template-columns: 0.72fr 1.28fr; }
.consult__aside { background: var(--purple-deep); color: #fff; padding: 40px 34px; display: flex; flex-direction: column; gap: 16px; }
.consult__aside h2 { color: #fff; font-size: 28px; line-height: 1.2; }
.consult__aside p { color: #e0d6ff; font-family: var(--font-ui); font-size: 13px; line-height: 1.6; }
.consult__contact { display: flex; flex-direction: column; gap: 6px; margin-top: auto; font-family: var(--font-ui); }
.consult__contact b { font-size: 14px; }
.consult__contact span { font-size: 13px; color: rgba(255,255,255,0.8); }
.consult__main { display: flex; flex-direction: column; }
.consult__main .flash { margin: 24px 34px 0; }
.consult__form { padding: 34px; display: flex; flex-direction: column; gap: 14px; }
.consult__services { border: 0; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
.consult__services legend { font-family: var(--font-ui); font-size: 12px; color: var(--muted); margin-bottom: 8px; padding: 0; }
.consult__services .checkbox { font-family: var(--font-ui); font-size: 13px; }
.consult__row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.consult__form .pfield input, .consult__form .pfield select, .consult__form .pfield textarea { background: var(--white); }
.consult__consent { font-size: 12px; line-height: 1.5; color: var(--body); align-items: flex-start; }
.consult__form .btn { margin-top: 2px; width: 100%; }
.consult__form .pfield label { font-size: 12px; color: var(--muted); }
.consult__form .pfield input,
.consult__form .pfield textarea { border-radius: 8px; box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 13px; height: 42px; }
.consult__form .pfield textarea { height: auto; min-height: 92px; }
.consult__form .pfield input:focus,
.consult__form .pfield textarea:focus { box-shadow: inset 0 0 0 2px var(--purple); }

@media (max-width: 1023px) {
  .biz-choose__grid,
  .biz-steps { grid-template-columns: repeat(2, 1fr); }
  .biz-matters,
  .biz-receives { grid-template-columns: 1fr; gap: 40px; }
  .biz-receives__copy { order: 0; }
  .biz-receives__media { order: 1; }
  .consult { grid-template-columns: 1fr; }
}

@media (max-width: 767px) {
  .biz-hero { border-radius: 24px; }
  .biz-choose { padding: 64px 20px 48px; }
  .biz-choose h2,
  .biz-receives__copy h2,
  .biz-process h2 { font-size: 30px; }
  .biz-choose__grid,
  .biz-steps { grid-template-columns: 1fr; }
  .biz-matters { margin: 0 12px; padding: 32px 20px; }
  .biz-matters__copy h2 { font-size: 28px; }
  .biz-stat { padding: 10px 14px; }
  .biz-stat b { font-size: 22px; }
  .biz-stat--stress { left: -8px; }
  .biz-stat--value { right: -6px; }
  .biz-receives { padding: 64px 20px; }
  .biz-receives__decor--top { width: 46px; height: 44px; top: -14px; right: -10px; }
  .biz-receives__decor--bottom { width: 48px; height: 48px; bottom: -14px; left: -12px; }
  .biz-process { padding: 56px 20px 72px; }
  .consult { margin-inline: 12px; }
  .consult__aside,
  .consult__form { padding: 26px 20px; }
  .consult__row { grid-template-columns: 1fr; }
}

/* =============================== ABOUT US ================================ */
/* Built from the existing tokens and shapes only: the purple doodle panel of
   .how-hero, the boxed geometry of .how-row--boxed, the ring cards of
   .biz-choose and the yellow .closing__cta. Every photograph sits in one
   shared frame whose yellow accent is offset toward the inline end, so it
   mirrors in Arabic without a single RTL rule. */
/* The site-wide doodle layer sits behind every page at fixed offsets, so on a
   page whose section heights follow CMS copy it would eventually cross a
   paragraph. The copy sections are opaque instead: doodles still frame the
   panels and the wide-screen margins, but never run through text. */
.about-who,
.about-split,
.about-services,
.about-purpose { background: var(--white); }

.about-hero,
.about-different,
.about-community {
  width: calc(100% - 44px);
  max-width: calc(var(--container) + var(--gutter) * 2 - 44px);
  margin-inline: auto;
  border-radius: var(--r-lg);
}
.about-hero {
  margin-top: 24px;
  padding: 72px calc(var(--gutter) - 22px) 80px;
  display: grid;
  grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);
  gap: 56px;
  align-items: center;
  background: var(--purple) url("../images/steps-doodles.svg") no-repeat center / cover;
}
.about-hero h1 { color: var(--white); font-size: 56px; line-height: 1.05; }
.about-hero__lines { margin-top: 24px; display: flex; flex-direction: column; gap: 8px; }
.about-hero__lines p { color: rgba(255, 255, 255, 0.92); font-size: 16px; line-height: 1.5; }

.about-photo { position: relative; margin: 0; padding-block-end: 18px; padding-inline-end: 18px; isolation: isolate; }
.about-photo::after {
  content: "";
  position: absolute;
  inset-block: 18px 0;
  inset-inline: 18px 0;
  z-index: -1;
  border-radius: var(--r-md);
  background: var(--yellow);
}
.about-photo img { width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover; border-radius: var(--r-md); }

.about-who h2,
.about-split__copy h2,
.about-services h2,
.about-different h2 { font-size: 44px; line-height: 1.1; color: var(--near-black); }
.about-who h2::after,
.about-split__copy h2::after,
.about-services h2::after,
.about-different h2::after {
  content: "";
  display: block;
  width: 56px;
  height: 6px;
  margin-top: 18px;
  border-radius: var(--r-pill);
  background: var(--yellow);
}
.about-services h2::after,
.about-different h2::after { margin-inline: auto; }

.about-prose { display: flex; flex-direction: column; gap: 16px; }
.about-prose p { font-size: 16px; line-height: 1.7; color: var(--body); }
.about-prose--lead p:first-child { font-size: 20px; line-height: 1.55; font-weight: 500; color: var(--near-black); }

.about-who {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
  gap: 64px;
  align-items: start;
  padding-block: 100px 50px;
}

.about-split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 64px;
  align-items: center;
  padding-block: 50px;
}
.about-split__copy { display: flex; flex-direction: column; gap: 22px; }
.about-split--media-start .about-split__media,
.about-community .about-split__media { order: -1; }

.about-services { padding-block: 70px 50px; text-align: center; }
.about-services__grid { margin-top: 44px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; text-align: start; }
.about-card { background: var(--white); border-radius: var(--r-md); box-shadow: var(--ring); padding: 32px 28px; display: flex; flex-direction: column; gap: 12px; }
.about-card__icon { width: 52px; height: 52px; margin-bottom: 6px; border-radius: 50%; background: var(--yellow-light); color: var(--ink); display: flex; align-items: center; justify-content: center; }
.about-card__icon svg { width: 26px; height: 26px; }
.about-card h3 { font-size: 20px; line-height: 1.25; letter-spacing: 0; color: var(--near-black); }
.about-card p { font-size: 15px; line-height: 1.65; color: var(--body); }

.about-purpose { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; padding-block: 50px; }
.about-purpose__card { border-radius: var(--r-lg); padding: 48px 44px; display: flex; flex-direction: column; gap: 16px; }
.about-purpose__card--mission { background: var(--purple); color: var(--white); }
.about-purpose__card--vision { background: var(--yellow); color: var(--near-black); }
.about-purpose__card h2 { font-size: 36px; line-height: 1.1; color: inherit; }
.about-purpose__card p { font-size: 16px; line-height: 1.7; }
.about-purpose__card--mission p { color: rgba(255, 255, 255, 0.92); }
.about-purpose__icon { width: 52px; height: 52px; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.about-purpose__card--mission .about-purpose__icon { background: var(--yellow); color: var(--ink); }
.about-purpose__card--vision .about-purpose__icon { background: var(--white); color: var(--ink); }
.about-purpose__icon svg { width: 26px; height: 26px; }

.about-different { margin-block: 50px; padding: 80px calc(var(--gutter) - 22px); background: var(--cream); text-align: center; }
.about-different__grid { margin-top: 44px; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 18px; text-align: start; }
.about-feature { background: var(--white); border-radius: var(--r-sm); box-shadow: var(--ring); padding: 26px 22px; display: flex; flex-direction: column; gap: 10px; }
.about-feature__icon { width: 44px; height: 44px; margin-bottom: 4px; border-radius: 50%; background: var(--purple); color: var(--white); display: flex; align-items: center; justify-content: center; }
.about-feature__icon svg { width: 22px; height: 22px; }
.about-feature h3 { font-size: 17px; line-height: 1.3; letter-spacing: 0; color: var(--near-black); }
.about-feature p { font-size: 14px; line-height: 1.6; color: var(--body); }

.about-community {
  margin-block: 50px 100px;
  padding: 64px calc(var(--gutter) - 22px);
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 64px;
  align-items: center;
  background: linear-gradient(rgba(106, 72, 229, 0.08), rgba(106, 72, 229, 0.08)), var(--white);
}

.about-join__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 14px; margin-top: 8px; }

@media (max-width: 1199px) {
  .about-different__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 1023px) {
  .about-hero,
  .about-who,
  .about-split,
  .about-community { grid-template-columns: 1fr; gap: 40px; }
  .about-split--media-start .about-split__media,
  .about-community .about-split__media { order: 0; }
  .about-split__media { max-width: 560px; }
  .about-services__grid,
  .about-purpose { grid-template-columns: 1fr; }
}
@media (max-width: 767px) {
  .about-hero,
  .about-different,
  .about-community { width: calc(100% - 24px); }
  .about-hero { margin-top: 20px; padding: 48px 24px 40px; }
  .about-hero h1 { font-size: 38px; }
  .about-who h2,
  .about-split__copy h2,
  .about-services h2,
  .about-different h2 { font-size: 30px; }
  .about-who { padding-block: 64px 24px; gap: 24px; }
  .about-split { padding-block: 32px; }
  .about-services { padding-block: 48px 24px; }
  .about-services__grid,
  .about-different__grid { margin-top: 32px; }
  .about-card { padding: 26px 22px; }
  .about-purpose { padding-block: 32px; }
  .about-purpose__card { padding: 36px 24px; }
  .about-purpose__card h2 { font-size: 28px; }
  .about-different { margin-block: 32px; padding: 48px 20px; }
  .about-different__grid { grid-template-columns: 1fr; }
  .about-community { margin-block: 32px 72px; padding: 40px 20px; }
  .about-prose--lead p:first-child { font-size: 18px; }
  .about-photo { padding-block-end: 12px; padding-inline-end: 12px; }
  .about-photo::after { inset-block: 12px 0; inset-inline: 12px 0; }
  /* The shared yellow card keeps 100px of side padding everywhere; the About
     CTA row needs the width for its three buttons. */
  .about-join { padding: 56px 24px; }
  .about-join__actions { flex-direction: column; align-items: stretch; }
}

/* ================================ 404 ==================================== */
/* Reuses the .result / .result-card shell from the assessment-result pages. */
.notfound__logo { width: 132px; height: auto; }
.notfound__code {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 96px;
  line-height: 1;
  letter-spacing: -2px;
  color: var(--purple);
}

@media (max-width: 767px) {
  .notfound__code { font-size: 64px; }
}

/* ========================= FLOW PAGE DECORATIONS ========================= */
/*
   Shared background artwork for the sign-up → enrollment journey, opted into
   per page with .flow-decor. The shapes are wrapper background layers, so they
   paint above the wrapper's own background colour but beneath its content:
   they cannot overlap text, receive pointer events, or add scrollable width.
   Marketing pages and the 404 keep the global .page-doodles instead.
*/
body:has(.flow-decor) .page-doodles { display: none; }

.flow-decor { background-repeat: no-repeat; }

/* Auth: the photo aside fills the left column, so artwork stays off the right edge. */
.flow-decor--auth {
  background-image:
    url("../images/bg-loop-yellow.svg"),
    url("../images/bg-swoosh-purple.svg");
  background-position: right -130px top 30px, right -150px bottom 40px;
  background-size: 260px auto, 280px auto;
}

/* Support path / programs: placement follows the approved reference for this screen. */
.flow-decor--flow {
  background-image:
    url("../images/bg-loop-yellow.svg"),
    url("../images/bg-scribbles-1.svg"),
    url("../images/bg-swoosh-purple.svg");
  background-position: left -110px top 30px, right -60px top -40px, right -70px bottom -30px;
  background-size: 290px auto, 330px auto, 300px auto;
}

/* Assessment: wide gutters either side of the 819px card. */
.flow-decor--assess {
  background-image:
    url("../images/bg-scribbles-1.svg"),
    url("../images/bg-loop-yellow.svg"),
    url("../images/bg-swoosh-purple.svg");
  background-position: left -70px top 40px, right -90px top 80px, left -80px bottom 40px;
  background-size: 300px auto, 250px auto, 260px auto;
}

/* Result / confirmation: a centred card leaves both gutters open. */
.flow-decor--result {
  background-image:
    url("../images/bg-loop-yellow.svg"),
    url("../images/bg-scribbles-1.svg"),
    url("../images/bg-swoosh-purple.svg");
  background-position: right -80px top 50px, left -60px top 120px, right -60px bottom 30px;
  background-size: 270px auto, 320px auto, 280px auto;
}

/* Booking and payment are dense centred columns: one shape, kept inside the box. */
.flow-decor--book {
  background-image: url("../images/bg-loop-yellow.svg");
  background-position: right 0 top 10px;
  background-size: 200px auto;
}

.flow-decor--pay {
  background-image: url("../images/bg-scribbles-1.svg");
  background-position: right 0 top 0;
  background-size: 240px auto;
}

@media (max-width: 1239px) {
  .flow-decor--auth { background-image: none; }
}

@media (max-width: 1023px) {
  .flow-decor--book,
  .flow-decor--pay { background-image: none; }
  .flow-decor--flow,
  .flow-decor--assess,
  .flow-decor--result {
    background-image: url("../images/bg-scribbles-1.svg");
    background-position: right -90px top 0;
    background-size: 260px auto;
  }
}

@media (max-width: 767px) {
  .flow-decor { background-image: none; }
}

/* =========================== PROGRAM DETAIL ============================== */
.pdetail { max-width: 1288px; margin-inline: auto; padding: 60px 24px 100px; }
.pdetail__card { background: var(--white); border-radius: 24px; box-shadow: 0 8px 40px rgba(0,0,0,0.08); padding: 24px; }
.pdetail__hero { width: 100%; height: 552px; object-fit: cover; border-radius: 16px; }
.pdetail__body { padding: 24px; }
.pdetail__badge { display: inline-block; padding: 6px 14px; border-radius: var(--r-pill); background: var(--yellow); font-family: var(--font-ui); font-weight: 700; font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--near-black); }
.pdetail__body h1 { margin-top: 22px; font-size: 46px; line-height: 1.1; color: var(--near-black); }
.pdetail__intro { margin-top: 22px; max-width: 1000px; font-family: var(--font-ui); font-size: 15px; line-height: 1.75; color: var(--body); }

.pdetail__stats { margin-top: 30px; display: flex; flex-wrap: wrap; gap: 14px; }
.pdetail-stat { display: flex; align-items: center; gap: 12px; padding: 12px 22px; border-radius: var(--r-pill); background: var(--card); }
.pdetail-stat__icon { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; flex-shrink: 0; }
.pdetail-stat__icon--duration svg { width: 16px; height: 17px; }
.pdetail-stat__icon--session svg { width: 14px; height: 17px; }
.pdetail-stat__icon--group svg { width: 21px; height: 10px; }
.pdetail-stat__icon--rating svg { width: 18px; height: 17px; }
.pdetail-stat__text { display: flex; flex-direction: column; gap: 2px; }
.pdetail-stat__text small { font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.pdetail-stat__text b { font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--near-black); }

.pdetail__price { margin-top: 28px; display: flex; flex-direction: column; gap: 4px; }
.pdetail__price small { font-family: var(--font-ui); font-size: 13px; color: var(--muted); }
.pdetail__price b { font-family: var(--font-display); font-weight: 700; font-size: 30px; color: var(--purple-deep); }

.pdetail__body h2 { margin-top: 26px; font-size: 21px; letter-spacing: 0; color: var(--near-black); }
.pdetail__about { margin-top: 12px; font-family: var(--font-ui); font-size: 15px; line-height: 1.75; color: var(--body); }
.pdetail__body .btn { margin-top: 34px; }

/* Phase 3G - the real support-type choice on the Circl page: one or two
   equal-weight cards from live inventory, or a truthful empty state. Logical
   properties only, so Arabic mirrors for free. */
.pdetail__join { margin-top: 34px; padding-top: 26px; border-top: 1px solid var(--border); }
.pdetail__join h2 { margin-top: 0; }
.pdetail__join-lead { margin: 8px 0 0; max-width: 640px; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--muted); }
.pdetail__join-list { list-style: none; margin: 18px 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; align-items: stretch; max-width: 900px; }
.pdetail__join-list > li { display: flex; min-width: 0; }
.pdetail__join-card { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 10px; padding: 22px 22px 20px; border-radius: 18px; background: #f4f1ff; box-shadow: inset 0 0 0 1px rgba(106, 72, 229, 0.35); text-align: start; }
.pdetail__join-card h3 { margin: 0; font-size: 21px; line-height: 1.2; color: var(--near-black); overflow-wrap: anywhere; }
.pdetail__join-tagline { margin: 0; font-family: var(--font-ui); font-size: 14px; line-height: 1.55; color: var(--body); }
.pdetail__join-meta { list-style: none; margin: 4px 0 4px; padding: 10px 0 0; border-top: 1px solid rgba(106, 72, 229, 0.2); display: flex; flex-direction: column; gap: 6px; font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.pdetail__join-meta li { display: flex; align-items: center; gap: 8px; min-width: 0; }
.pdetail__join-meta svg { flex-shrink: 0; width: 16px; height: 16px; color: var(--purple-deep); }
.pdetail__join-meta time { font-weight: 600; color: var(--near-black); }
.pdetail__join-card .btn { margin-top: auto; width: 100%; height: 48px; }
.pdetail__join-empty { margin-top: 14px; max-width: 640px; padding: 22px 24px; border-radius: 18px; background: var(--card); box-shadow: inset 0 0 0 1px var(--border); }
.pdetail__join-empty p { margin: 0; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--body); }
.pdetail__join-empty p + p { margin-top: 6px; font-size: 14px; color: var(--muted); }
.pdetail__join-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 16px; }
.pdetail__join-actions .btn { margin-top: 0; }
html[dir="rtl"] .pdetail__join-lead, html[dir="rtl"] .pdetail__join-tagline, html[dir="rtl"] .pdetail__join-meta,
html[dir="rtl"] .pdetail__join-empty p { font-family: var(--font-ar); }
@media (max-width: 1023px) {
  .pdetail__hero { height: 380px; }
  .pdetail__body h1 { font-size: 36px; }
}

@media (max-width: 767px) {
  .pdetail { padding: 32px 12px 72px; }
  .pdetail__card { padding: 12px; border-radius: 18px; }
  .pdetail__hero { height: 240px; }
  .pdetail__body { padding: 16px 8px 8px; }
  .pdetail__body h1 { font-size: 28px; }
  .pdetail__stats { gap: 10px; }
  .pdetail-stat { padding: 10px 16px; flex: 1 1 44%; }
  .pdetail__body .btn { width: 100%; }
}

/* ============================ PRE-ASSESSMENT ============================= */
.preassess { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 80px 40px; }
.preassess__card { width: 100%; max-width: 1030px; background: var(--white); border-radius: 16px; box-shadow: inset 0 0 0 1px var(--border), 0 4px 24px rgba(0,0,0,0.06); padding: 24px; display: flex; align-items: center; gap: 40px; }
.preassess__copy { flex: 1; min-width: 0; padding-block: 24px; padding-inline: 34px 0; }
.preassess__copy h1 { font-size: 34px; line-height: 1.2; color: var(--near-black); }
.preassess__copy > p { margin-top: 14px; max-width: 430px; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--body); }
.preassess-points { margin-top: 30px; display: flex; flex-direction: column; gap: 19px; }
.preassess-points li { display: flex; align-items: center; gap: 14px; font-family: var(--font-ui); font-size: 15px; color: var(--near-black); }
.preassess-points .icon { width: 26px; height: 26px; border-radius: 50%; background: var(--yellow); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.preassess-points .icon svg { width: auto; height: 14px; max-width: 16px; }
.preassess__actions { margin-top: 34px; display: flex; align-items: center; flex-wrap: wrap; gap: 24px; }
/* Collapses to a single column until the photo is supplied. */
.preassess__media { flex: 0 0 445px; }
.preassess__media:empty { display: none; }
.preassess__media img { width: 100%; height: 526px; object-fit: cover; border-radius: 16px; }

@media (max-width: 1023px) {
  .preassess__card { flex-direction: column; }
  .preassess__copy { padding: 8px 8px 0; }
  .preassess__media { flex: 0 0 auto; width: 100%; }
  .preassess__media img { height: 320px; }
}

@media (max-width: 767px) {
  .preassess { padding: 48px 16px; }
  .preassess__card { padding: 16px; gap: 24px; }
  .preassess__copy h1 { font-size: 26px; }
  .preassess__actions { gap: 16px; }
  .preassess__actions .btn { width: 100%; }
}

/* ============================ FLOW PAGE SHELL ============================ */
/*
   The footer reserves 320px of top padding for the yellow .closing__cta that
   overlaps it by -223px. Flow pages have no closing card, so that reservation
   renders as dead purple space - they get a normal footer padding instead.
*/
body:has(.flow-decor) .site-footer { padding-top: 72px; }

/*
   On flow pages the shell parks off-screen and slides back in when the
   pointer reaches the top or bottom edge, so the journey fills the viewport.

   The gate is deliberately three conditions, not one:

     hover: hover      the pointer can rest on the edge strip at all
     pointer: fine     it can AIM at a 26px strip - a fingertip cannot, and
                       Chrome reports hover:hover on plenty of touch devices
                       that Safari reports as hover:none (which is exactly why
                       the same page behaved differently in the two browsers)
     min-width: 1024   below the project's desktop breakpoint the layout is
                       the mobile one, where a parked bar is navigation that
                       is simply gone

   :focus-within keeps both bars reachable by keyboard.
*/
@media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
  body:has(.flow-decor) .site-header,
  body:has(.flow-decor) .site-footer {
    position: fixed;
    left: 0;
    right: 0;
    z-index: 40;
    transition: transform 0.28s ease;
  }
  body:has(.flow-decor) .site-header { top: 0; transform: translateY(-100%); }
  body:has(.flow-decor) .site-footer { bottom: 0; transform: translateY(100%); }

  /* Invisible strip just past each edge - while a bar is parked this is the
     only part of it on screen, and it is what the pointer has to reach. */
  body:has(.flow-decor) .site-header::after,
  body:has(.flow-decor) .site-footer::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    height: 26px;
  }
  body:has(.flow-decor) .site-header::after { top: 100%; }
  body:has(.flow-decor) .site-footer::before { bottom: 100%; }

  body:has(.flow-decor) .site-header:hover,
  body:has(.flow-decor) .site-header:focus-within,
  body:has(.flow-decor) .site-footer:hover,
  body:has(.flow-decor) .site-footer:focus-within { transform: translateY(0); }
}

@media (hover: hover) and (pointer: fine) and (min-width: 1024px) and (prefers-reduced-motion: reduce) {
  body:has(.flow-decor) .site-header,
  body:has(.flow-decor) .site-footer { transition: none; }
}

/* ========================= MY SPACE (DASHBOARD) ========================== */
/*
   First dashboard screen, so this block sets the conventions later dashboard
   modules must reuse: .dash-header for the member top bar, .dash__grid for the
   main + sidebar shell, .dash-card for every panel surface, and .dash-h /
   .dash-sub for section headings. The marketing doodle layer is suppressed
   here - the dashboard is a working surface, not a marketing page.
*/
body:has(.dash) .page-doodles { display: none; }

/* ------------------------------ Header ---------------------------------- */
.dash-header {
  position: sticky;
  top: 0;
  z-index: 40;
  background: rgba(255, 255, 255, 0.92);
  backdrop-filter: blur(10px);
}
.dash-header .container { display: flex; align-items: center; gap: 16px; height: 120px; }
.dash-brand { display: flex; align-items: center; gap: 10px; flex-shrink: 0; color: inherit; }
.dash-brand img { width: 34px; height: 36px; }
.dash-brand span { font-family: var(--font-display); font-weight: 700; font-size: 24px; letter-spacing: -0.5px; color: var(--ink); }
/* This bar carries five links, four tools, the locale pill, the user block
   and a logout on ONE row, so its nav runs a step smaller and tighter than
   the marketing header's. The measured widest-desktop total (1240px content
   box) is what these numbers are tuned against: at 15px/22px the row needed
   1276px and dropped "Business Circl" onto a second line. nowrap makes that
   second row structurally impossible rather than merely unlikely. */
.dash-header .main-nav { margin-inline: 18px auto; }
.dash-header .main-nav ul { gap: 8px 18px; flex-wrap: nowrap; }
.dash-header .main-nav a { font-size: 14px; }

.dash-tools { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.dash-tool {
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border: 0;
  border-radius: 50%;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  color: var(--body);
  transition: box-shadow 0.15s ease, color 0.15s ease;
}
.dash-tool:hover { box-shadow: inset 0 0 0 1px var(--purple); color: var(--purple-deep); }
.dash-tool:focus-visible { outline: 3px solid rgba(106,72,229,0.4); outline-offset: 2px; }

/* Logical padding/border: in Arabic the divider belongs on the other side. */
.dash-user { display: flex; align-items: center; gap: 12px; flex-shrink: 0; padding-inline-start: 16px; border-inline-start: 1px solid var(--border); color: inherit; }
.dash-user__text { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.3; }
/* A long real name is bounded, never allowed to squeeze the nav. */
.dash-user__text b { font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--purple-deep); max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-user__text span { font-family: var(--font-ui); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.dash-user img { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }

/* --------------------------- Page shell --------------------------------- */
/* Card surfaces are shadow-only - no ring. Borders stay on form controls,
   chips, buttons and row separators, where the design does show a line. */
.dash { padding: 28px 0 100px; }
/* In-page targets (#programme-sessions, #membership, #insights, #mood, a
   focused field) land below the sticky member bar instead of under it: the
   bar is 120px tall here and 100px under 1024px. */
.dash [id] { scroll-margin-top: 140px; }

.dash-welcome { display: flex; align-items: flex-start; justify-content: space-between; gap: 32px; margin-bottom: 34px; }
.dash-welcome h1 { font-size: 28px; letter-spacing: -0.5px; }
.dash-welcome p { margin-top: 8px; font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--body); }
.dash-welcome__actions { display: flex; align-items: center; gap: 14px; flex-shrink: 0; }
.dash-welcome__actions .btn { height: 48px; padding: 0 26px; }

.dash__grid { display: grid; grid-template-columns: minmax(0, 1fr) 288px; gap: 21px; align-items: start; }
.dash__main { display: grid; gap: 26px; min-width: 0; }
/* An explicit minmax(0, 1fr) track, never the implicit `auto` one: an auto
   track sizes to its widest card's MAX-CONTENT, so a horizontal scroller
   in any sidebar card would size the column to all of its slides laid out
   side by side and push every card in the aside past the container. */
.dash__aside { display: grid; grid-template-columns: minmax(0, 1fr); gap: 26px; min-width: 0; }

/* Stacked full-width cards on the single-column dashboard pages (reviews,
   and anything else outside the two-column .dash__grid): the same 26px
   rhythm .dash__main gives its cards, instead of leaving them flush. */
.dash-stack { display: grid; gap: 26px; min-width: 0; }

.dash-card {
  min-width: 0;
  background: var(--white);
  border-radius: 16px;
  box-shadow: var(--dash-card-shadow);
  padding: 24px;
}
/* Both follow the supplied type spec exactly: display face, 100% leading,
   zero tracking - so they override the global h1-h4 -0.96px letter-spacing. */
.dash-h { font-family: var(--font-display); font-weight: 700; font-size: 18px; line-height: 1; letter-spacing: 0; color: var(--purple-deep); }
.dash-sub { margin-top: 10px; font-family: var(--font-display); font-weight: 400; font-size: 16px; line-height: 1; letter-spacing: 0; color: var(--body); }
/* A held place has no joining link yet - the line says so rather than
   leaving a gap where a Zoom button will later appear. */
.dash-sub--placeholder { font-family: var(--font-ui); font-size: 13px; font-style: italic; line-height: 1.5; color: var(--muted); }

.dash-plus { width: 13px; height: 13px; flex-shrink: 0; }

/* ----------------------------- Profile ---------------------------------- */
.dash-profile { display: flex; align-items: center; gap: 28px; }
.dash-profile__figure { position: relative; flex-shrink: 0; }
.dash-profile__avatar { width: 110px; height: 110px; border-radius: 50%; object-fit: cover; background: #efe7fb; }
/* Neutral fallback (QA-FIX-02): the participant's own initials, used when
   they preferred not to say and for rows that predate the question. Sized
   inline by the partial so one rule serves every surface. */
.avatar-initials {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: #efe7fb;
  color: var(--purple-deep);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 32px;
  letter-spacing: 0.02em;
  -webkit-user-select: none;
  user-select: none;
}

/* Mood section heading row: title on the inline start, history link on the
   inline end, so RTL swaps them with no direction-specific rule. */
.dash-mood__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.dash-mood__head .btn { flex-shrink: 0; }
/* The mood glyph in the history table: decorative, so it keeps its own
   colour emoji rendering and never inherits the cell's text colour. */
.mood-glyph { margin-inline-end: 6px; font-size: 17px; line-height: 1; }

/* Same flush problem on the support-group card, where Join on Zoom is a
   direct child rather than wrapped in a .dash-sub paragraph. */
.dash-sessions > .btn { margin-top: 18px; }
.dash-profile__badge {
  position: absolute;
  left: 50%;
  bottom: -4px;
  transform: translateX(-50%);
  padding: 3px 13px;
  border-radius: var(--r-pill);
  background: var(--green);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #08301f;
  white-space: nowrap;
}
.dash-profile__body { min-width: 0; }
.dash-profile h2 { font-size: 20px; letter-spacing: -0.3px; }
.dash-profile__since { display: flex; align-items: center; gap: 8px; margin-top: 8px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.dash-profile__since svg { width: 15px; height: 15px; flex-shrink: 0; }
.dash-profile__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 18px; }
.dash-profile__actions .btn { height: 44px; padding: 0 22px; font-size: 13px; letter-spacing: 0.3px; }
.dash-profile__actions .btn--outline { box-shadow: inset 0 0 0 1px var(--border); color: var(--near-black); }
.dash-profile__actions .btn--outline:hover { background: var(--near-black); color: var(--white); }
.dash-profile__actions .btn svg { width: 13px; height: 16px; flex-shrink: 0; }

/* ------------------------- Upcoming sessions ---------------------------- */
.dash-sessions__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; margin-top: 18px; }
/* Scoped to My Space only - .atable-wrap is shared with the admin screens,
   which keep their own spacing. Gives the programme schedule table air below
   the Join on Zoom control. */
.dash-sessions .atable-wrap { margin-top: 18px; }
.sess-card {
  background: var(--white);
  border-radius: 16px;
  box-shadow: var(--dash-card-shadow);
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.sess-card__img { width: 100%; height: 205px; border-radius: 12px; object-fit: cover; }
.sess-card__meta { display: grid; gap: 12px; }
.sess-card__row { display: flex; align-items: center; gap: 12px; }
.sess-card__row svg { width: 17px; height: 17px; flex-shrink: 0; }
.sess-card__row > span { display: flex; flex-direction: column; min-width: 0; font-family: var(--font-ui); line-height: 1.35; }
.sess-card__row small { font-size: 11px; color: var(--muted); }
.sess-card__row b { font-size: 13px; color: var(--near-black); }
.sess-card .btn { width: 100%; height: 44px; padding: 0 14px; font-size: 13px; letter-spacing: 0.3px; }
.sess-card .btn--outline { box-shadow: inset 0 0 0 1px var(--near-black); margin-top: auto; }
.sess-card .btn svg { flex-shrink: 0; }
/* QA: the under-review booking card. The pill stays visibly a control but
   reads disabled; the whole card keeps the approved max width even when it is
   the only child of the grid. */
.sess-card--review { max-width: 300px; }
.sess-card--review .btn--outline:disabled {
  opacity: .6; cursor: not-allowed;
  box-shadow: inset 0 0 0 1px var(--near-black); background: var(--white); color: var(--near-black);
  /* The placeholder sentence is longer than a normal CTA: smaller type and no
     letter-spacing keep it on one line where the card is wide enough, and it
     wraps inside the pill rather than running past it where it is not. */
  height: auto; min-height: 44px; padding: 8px 14px;
  font-size: 11px; letter-spacing: 0; line-height: 1.35; white-space: normal; text-align: center;
}

/* Completed variant: same card, plus a status badge over the image. */
/* Upcoming Sessions cards: a title line above the date/time rows, and the
   in-section back control for the detail view. */
.sess-card__title { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: 16px; line-height: 1.3; color: var(--ink); display: flex; flex-direction: column; gap: 2px; }
.sess-card__title small { font-family: var(--font-ui); font-weight: 400; font-size: 12px; color: var(--muted); }
.upcoming-back { display: inline-flex; align-items: center; gap: 8px; background: none; border: 0; padding: 0; cursor: pointer; font-family: var(--font-ui); font-size: 14px; }
.upcoming-back .arrow { width: 14px; height: 14px; fill: currentColor; }

.sess-card__figure { position: relative; }
.sess-card__badge {
  position: absolute;
  top: 10px;
  inset-inline-start: 10px;
  padding: 4px 12px;
  border-radius: var(--r-pill);
  background: rgba(255,255,255,0.94);
  box-shadow: 0 1px 4px rgba(0,0,0,0.10);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--purple-deep);
}

/* --------------------------- Session Insights --------------------------- */
/* Full width in the main column (client feedback, phase 2): the two newest
   packs side by side on desktop, stacked under 768px. The head mirrors
   .dash-mood__head - title at the inline start, View all at the inline end,
   so RTL swaps them with no direction-specific rule. */
.dash-insights__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.dash-insights__head .btn { flex-shrink: 0; height: 44px; padding: 0 22px; font-size: 13px; letter-spacing: 0.3px; }
.dash-insights__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; margin-top: 18px; }
.dash-insights__grid .insight-pack { margin-top: 0; }
.dash-insights__empty { margin-top: 14px; }
/* NF-9: the participant's 1-to-1 requests on My Space - one row each: the
   offering, its state and the next step, wrapping under 560px. */
.iar-list { margin-top: 18px; padding-block: 6px; }
.iar-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; min-width: 0; padding-block: 14px; border-block-end: 1px solid var(--border); }
.iar-row:last-child { border-block-end: 0; }
.iar-row__name { display: flex; flex-direction: column; flex: 1 1 200px; min-width: 0; font-family: var(--font-ui); line-height: 1.35; }
.iar-row__name b { font-size: 15px; color: var(--near-black); overflow-wrap: anywhere; }
.iar-row__name small { font-size: 12px; color: var(--muted); }
.iar-row__note { flex: 1 1 100%; order: 3; font-family: var(--font-ui); font-size: 13px; line-height: 1.5; color: var(--body); }
.iar-row > a { order: 4; }
.iar-row .btn { height: 44px; padding: 0 20px; font-size: 13px; letter-spacing: 0.3px; }
html[dir="rtl"] .iar-row__name, html[dir="rtl"] .iar-row__note { font-family: var(--font-ar); }
.insight h4 { font-size: 15px; letter-spacing: -0.2px; }
.dash-chip { padding: 5px 14px; border-radius: var(--r-pill); background: var(--white); box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 11px; color: var(--muted); white-space: nowrap; }
.insight-list { margin-top: 14px; display: grid; gap: 14px; }
.insight { display: flex; align-items: flex-start; gap: 14px; padding: 16px; border-radius: 12px; background: #f3eefe; }
.insight__ic { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: #e2d7fb; }
/* Width only - the supplied glyphs are 27x24 and 26x23, so height stays derived. */
.insight__ic svg { width: 21px; height: auto; }
.insight h3 { font-size: 15px; letter-spacing: -0.2px; }

/* Session Insights: a pack groups its items under one real context header
   (Circl / session / facilitator), because a participant may hold several
   Circls with several facilitators at once. */
.insight-pack { margin-top: 14px; }
.insight-pack + .insight-pack { margin-top: 18px; }
.insight-pack__head { padding-bottom: 12px; border-bottom: 1px solid var(--border); }
.insight-pack__circl { font-family: var(--font-display); font-weight: 700; font-size: 17px; letter-spacing: -0.2px; color: var(--ink); margin: 0; }
.insight-pack__session { margin: 4px 0 0; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.insight-pack__meta { margin: 6px 0 0; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.insight-pack .insight-list { margin-top: 14px; }

/* The curated icon picker. A real radio group: the tile is the visual, the
   input stays focusable, and the selected state is a ring plus a label -
   never colour alone. Wraps rather than scrolling on narrow screens. */
.icon-picker { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 10px; margin-top: 8px; }
.icon-picker__option { display: block; cursor: pointer; }
.icon-picker__option input { position: absolute; opacity: 0; width: 0; height: 0; }
.icon-picker__tile {
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 12px 8px; border-radius: 12px; background: #f3eefe;
  box-shadow: inset 0 0 0 1px transparent;
  color: var(--purple-deep); text-align: center;
  transition: box-shadow 0.15s ease, background 0.15s ease;
}
.icon-picker__tile svg { width: 22px; height: 22px; }
.icon-picker__name { font-family: var(--font-ui); font-size: 11px; line-height: 1.3; color: var(--body); }
.icon-picker__option:hover .icon-picker__tile { background: #e9e1ff; }
.icon-picker__option input:checked + .icon-picker__tile { background: #e2d7fb; box-shadow: inset 0 0 0 2px var(--purple-deep); }
.icon-picker__option input:focus-visible + .icon-picker__tile { outline: 3px solid rgba(106,72,229,0.4); outline-offset: 2px; }

.insight-edit { border: 0; padding: 0; margin: 22px 0 0; }
.insight-edit legend { padding: 0; font-family: var(--font-display); font-weight: 700; font-size: 16px; color: var(--ink); }
.insight-edit__label { display: block; font-family: var(--font-ui); font-size: 14px; color: var(--near-black); }
.insight-edit__actions { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 10px; }

html[dir="rtl"] .insight-pack__session,
html[dir="rtl"] .insight-pack__meta,
html[dir="rtl"] .icon-picker__name { font-family: var(--font-ar); }
.insight p { margin-top: 4px; font-family: var(--font-ui); font-size: 13px; line-height: 1.5; color: var(--body); }

.billing { margin-top: 14px; border-radius: 12px; box-shadow: var(--dash-card-shadow); background: var(--white); overflow: hidden; }
/* The empty state is a bare paragraph inside the card, so it needs the
   padding the table cells below carry - otherwise it sits flush against the
   card edges. Same markup on the dashboard block and the full history page. */
.billing > .dash-sub { margin: 0; padding: 20px 18px; }
.billing table { width: 100%; border-collapse: collapse; }
.billing th {
  background: var(--purple-deep);
  color: var(--white);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  text-align: start;
  padding: 14px 18px;
  white-space: nowrap;
}
.billing td { padding: 20px 18px; border-top: 1px solid var(--border); font-family: var(--font-ui); font-size: 13px; color: var(--near-black); }
.billing tbody tr:first-child td { border-top: 0; }

/* -------------------------- Mood tracking ------------------------------- */
.mood { margin-top: 18px; }
.mood__set { border: 0; padding: 0; margin: 0; }
.mood__q { padding: 0; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.mood__opts { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; margin-top: 14px; }
.mood-opt {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 18px 8px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  cursor: pointer;
  transition: box-shadow 0.15s ease;
}
.mood-opt:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.mood-opt input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.mood-opt:has(input:checked) { box-shadow: inset 0 0 0 2px var(--purple-deep); }
.mood-opt:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* Only the hovered / focused / selected face warms up; the rest stay grey.
   Reuses the yellow gradient already defined inside the Very Happy artwork,
   so no extra asset is needed - the discs share one 48x48 user space. */
.mood-opt:hover .mood-disc,
.mood-opt:focus-within .mood-disc,
.mood-opt:has(input:checked) .mood-disc {
  fill: url(#paint0_radial_266_410);
  fill-opacity: 1;
}

/* Very Happy ships a permanently warm disc plus pink mouth, blushes and a
   spark, so it needs muting at rest for all five to read the same. Its own
   gradient is what the active rule above paints with, hence the grey borrow. */
.mood-opt--joy .mood-disc { fill: url(#paint0_radial_266_427); fill-opacity: 0.2; }
.mood-opt--joy .mood-joy-tint { fill: #232333; stroke: #232333; }
.mood-opt--joy .mood-joy-extra { opacity: 0; }

.mood-opt--joy:hover .mood-joy-tint,
.mood-opt--joy:focus-within .mood-joy-tint,
.mood-opt--joy:has(input:checked) .mood-joy-tint { fill: #F72859; stroke: #F72859; }

.mood-opt--joy:hover .mood-joy-extra,
.mood-opt--joy:focus-within .mood-joy-extra,
.mood-opt--joy:has(input:checked) .mood-joy-extra { opacity: 1; }
/* Each supplied face carries its own disc, so no CSS-drawn circle behind it. */
.mood-opt__face { display: grid; place-items: center; width: 42px; height: 42px; }
.mood-opt__face svg { width: 100%; height: 100%; }
.mood-opt__label { font-family: var(--font-ui); font-size: 12px; color: var(--body); text-align: center; }

.mood__label { display: block; margin-top: 22px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.mood textarea {
  display: block;
  width: 100%;
  min-height: 118px;
  margin-top: 10px;
  padding: 16px;
  border: 0;
  border-radius: 12px;
  box-shadow: inset 0 0 0 1px var(--border);
  background: var(--white);
  font-family: var(--font-ui);
  font-size: 13px;
  line-height: 1.6;
  color: var(--near-black);
  resize: vertical;
}
.mood textarea::placeholder { color: var(--muted); }
.mood textarea:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--purple-deep); }
.mood > .btn { width: 100%; height: 52px; margin-top: 20px; }

/* ------------------------- Therapy progress ----------------------------- */
.progress__inner { margin-top: 16px; padding: 22px 18px; border-radius: 12px; box-shadow: inset 0 0 0 1px rgba(28,27,26,0.10); text-align: center; }
/* No confirmed programme: an honest card, not a ring at 0% (QA-FIX-02). */
.progress__inner--empty { display: flex; flex-direction: column; gap: 16px; align-items: center; }
.progress__empty { font-family: var(--font-ui); font-size: 14px; line-height: 1.6; color: var(--body); }
.progress__ring { position: relative; width: 148px; height: 148px; margin-inline: auto; }
.progress__ring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.progress__ring circle { fill: none; stroke-width: 14; }
.progress__track { stroke: #eae8ef; }
.progress__value { stroke: var(--green); stroke-linecap: round; }
.progress__num { position: absolute; inset: 0; display: grid; place-content: center; gap: 2px; }
.progress__num b { font-family: var(--font-display); font-weight: 700; font-size: 26px; color: var(--near-black); }
.progress__num span { font-family: var(--font-ui); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); }
.progress h3 { margin-top: 16px; font-size: 19px; line-height: 1.25; letter-spacing: -0.3px; }
.progress__legend { display: grid; gap: 8px; margin-top: 14px; text-align: start; }
.progress__legend li { display: flex; align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 13px; color: var(--body); }
.progress__legend b { color: var(--near-black); }
.progress__dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.progress__dot--done { background: var(--green); }
.progress__dot--left { background: #e0dfe6; }
.progress .btn { width: 100%; height: 46px; margin-top: 18px; font-size: 13px; letter-spacing: 0.3px; }


/* Therapy Progress carousel: one programme at a time when several run at
   once. A native scroll-snap track (touch swipe free, JS only for the
   arrows/dots), and with a single programme it renders as the plain card it
   always was - no track, no controls. */
/* width:100% + min-width:0 all the way down, exactly as .biz-quotes does:
   without them the track's max-content width (every slide side by side) is
   what the fixed 288px sidebar column measures itself against, and the aside
   pushes out of the container. */
.progress-carousel { margin-top: 16px; min-width: 0; }
.progress-carousel__viewport { display: flex; width: 100%; min-width: 0; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; }
.progress-carousel__viewport::-webkit-scrollbar { display: none; }
.progress-carousel__slide { flex: 0 0 100%; min-width: 0; scroll-snap-align: start; }
.progress-carousel__slide .progress__inner { margin-top: 12px; }
.progress-carousel__controls { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 12px; }
.progress-carousel__arrow {
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  color: var(--purple-deep);
  cursor: pointer;
}
.progress-carousel__arrow svg { width: 11px; height: 11px; fill: currentColor; }
.progress-carousel__arrow:disabled { opacity: 0.35; cursor: default; }
.progress-carousel__arrow:focus-visible { outline: 2px solid var(--purple-deep); outline-offset: 2px; }
.progress-carousel__dots { display: flex; align-items: center; gap: 8px; }
.progress-carousel__dots button { width: 8px; height: 8px; border-radius: 50%; background: #e0dfe6; cursor: pointer; }
.progress-carousel__dots button.is-active { background: var(--purple-deep); }
.progress-carousel__dots button:focus-visible { outline: 2px solid var(--purple-deep); outline-offset: 3px; }

/* The arrows point in reading order, so Arabic mirrors the glyphs. */
[dir="rtl"] .progress-carousel__arrow svg { transform: scaleX(-1); }

/* The empty timeline is one sentence, not a grid row: without the li in the
   selector the two-column .history__list li rule wins and squeezes the
   sentence into the 22px dot track, one word per line. */
.history__list li.history__empty { display: block; font-family: var(--font-ui); font-size: 13px; line-height: 1.6; color: var(--muted); }

/* -------------------------- Circle history ------------------------------ */
.history h2,
.settings h2 { font-size: 16px; letter-spacing: -0.2px; }
.history__list { margin-top: 16px; }
.history__list li { position: relative; display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 14px; padding-bottom: 20px; }
.history__list li:last-child { padding-bottom: 0; }
.history__list li:not(:last-child)::before { content: ""; position: absolute; inset-inline-start: 10px; top: 24px; bottom: 2px; width: 2px; background: var(--border); }
.history__dot { position: relative; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--purple-deep); }
.history__dot svg { width: 12px; height: 12px; fill: var(--white); }
.history__list b { display: block; font-family: var(--font-display); font-weight: 700; font-size: 14px; color: var(--near-black); }
.history__list small { font-family: var(--font-ui); font-size: 11px; color: var(--muted); }
.history__list .is-active small { font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--purple-deep); }

/* Journal photos already attached to an entry, shown in the editor so each
   one can be removed. The favourite control is a real form button now, so it
   inherits the heart styling the checkbox used to carry. */
.jup__current { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; }
.jup__current li { display: grid; gap: 6px; justify-items: center; }
.jup__current img { width: 64px; height: 64px; border-radius: 10px; object-fit: cover; }
.jup__remove { display: flex; align-items: center; gap: 6px; font-family: var(--font-ui); font-size: 11px; color: var(--muted); }
.jcard__fav button { display: grid; place-items: center; background: none; border: 0; cursor: pointer; color: var(--muted); }
.jcard__fav button.is-on { color: #F72859; }
.jcard__fav button:focus-visible { outline: 2px solid var(--purple-deep); outline-offset: 3px; border-radius: 50%; }
.jent__photos { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 14px; }
.jent__photos img { width: 150px; height: 150px; border-radius: 12px; object-fit: cover; }
.jent__acts { display: grid; gap: 10px; }
.jent__acts .btn { width: 100%; }

/* ----------------------------- Settings --------------------------------- */
.settings__list { margin-top: 6px; }
.settings__list a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 15px 0;
  border-bottom: 1px solid var(--border);
  font-family: var(--font-ui);
  font-size: 13px;
  color: var(--near-black);
}
.settings__list li:last-child a { border-bottom: 0; }
.settings__list a:hover { color: var(--purple-deep); }
.settings__chevron { width: 8px; height: 14px; flex-shrink: 0; color: var(--muted); }
.settings__list a:hover .settings__chevron { color: inherit; }

/* ---------------------------- Responsive -------------------------------- */
/* The burger only takes over at 1023px, but this header carries four tool
   buttons, the locale pill and a user block on top of the nav, so it runs out
   of room far earlier - the container itself is 1240px wide inside 100px
   gutters, so anything under ~1460px viewport is already squeezed. Tighten
   and drop to the avatar alone rather than let labels clip or wrap. */
@media (max-width: 1459px) {
  .dash-header .container { gap: 12px; }
  .dash-header .main-nav { margin-inline: 16px auto; }
  .dash-header .main-nav ul { gap: 8px 14px; }
  .dash-header .main-nav a { font-size: 14px; }
  .dash-header .dash-tools { gap: 6px; }
  .dash-header .dash-user { padding-inline-start: 14px; }
  .dash-header .dash-user__text { display: none; }
}

/* Laptop widths: the marketing container keeps its 100px gutters down to
   1201px, which on this working surface left the main column ~770px wide at
   1280 with 200px of empty margin. The member bar and the page take the
   narrower gutter together, so their edges stay aligned. */
@media (min-width: 1201px) and (max-width: 1439px) {
  .dash-header, .dash { --gutter: 56px; }
}

@media (max-width: 1239px) {
  .dash__grid { grid-template-columns: minmax(0, 1fr); }
  .dash__aside { grid-template-columns: repeat(auto-fit, minmax(272px, 1fr)); align-items: start; }
}

/* The last desktop tier before the burger (1024–1139px): measured at exactly
   1024px the English header row still ran 15px past the viewport and clipped
   the sign-out button. Tighter gaps only - every control stays. */
@media (min-width: 1024px) and (max-width: 1139px) {
  .dash-header .container { gap: 8px; }
  .dash-header .main-nav { margin-inline: 8px auto; }
  .dash-header .main-nav ul { gap: 8px 10px; }
  .dash-header .dash-tools { gap: 4px; }
  .dash-header .dash-user { padding-inline-start: 10px; }
}

@media (max-width: 1023px) {
  .dash-header .container { height: 100px; }
  .dash-header .main-nav { margin-left: 0; margin-right: 0; }
  .nav-checkbox:checked ~ .nav-wrap .dash-tools { justify-content: flex-start; }
  .nav-checkbox:checked ~ .nav-wrap .dash-user { padding-inline-start: 0; border-inline-start: 0; }
  /* Room is no longer tight inside the dropdown, so bring the name back. */
  .nav-checkbox:checked ~ .nav-wrap .dash-user__text { display: flex; align-items: flex-start; }
  .dash [id] { scroll-margin-top: 116px; }
  /* auto-fill keeps the empty tracks, so a lone card keeps a card's width
     instead of stretching across the whole tablet column. */
  .dash-sessions__grid { grid-template-columns: repeat(auto-fill, minmax(238px, 1fr)); }
  /* Stack from here rather than at 767, where the row layout squeezes the
     heading into an awkward "Welcome / Back, Sarah" break. */
  .dash-welcome { flex-direction: column; gap: 22px; }
}

@media (max-width: 767px) {
  .dash { padding: 20px 0 72px; }
  /* The 100% leading from the type spec assumes one line; give wrapped
     sub-headings room so the lines do not touch on narrow screens. */
  .dash-sub { line-height: 1.35; }
  .dash-welcome h1 { font-size: 24px; }
  .dash-welcome__actions { width: 100%; }
  .dash-welcome__actions .btn { flex: 1; padding: 0 16px; }
  .dash-profile { flex-direction: column; text-align: center; gap: 20px; }
  .dash-profile__since { justify-content: center; }
  .dash-profile__actions { justify-content: center; }
  .billing { overflow-x: auto; }
  .mood__opts { grid-template-columns: repeat(auto-fit, minmax(92px, 1fr)); }
  .dash-insights__grid { grid-template-columns: minmax(0, 1fr); }
  .dash-insights__head .btn { width: 100%; }
}

@media (max-width: 559px) {
  .dash-brand span { display: none; }
  .dash-sessions__grid { grid-template-columns: minmax(0, 1fr); }
  .dash-card { padding: 20px; }
  /* .btn is nowrap, so these two cannot share a row this narrow - stack them
     instead of letting the labels push past the viewport. In a column the
     767px `flex: 1` would set a zero HEIGHT basis and crush each button to
     its line box, so the stacked buttons keep their own 48px height. */
  .dash-welcome__actions { flex-direction: column; align-items: stretch; }
  .dash-welcome__actions .btn { flex: none; }
  /* One column: the under-review card lines up with every other card. */
  .sess-card--review { max-width: none; }
}

/* ========================== SESSION SUMMARY ============================== */
/*
   Detail view for a completed session, reached from a .sess-card--done card.
   Reuses the dashboard shell (.dash + .container + .dash-card).
*/
.ssum__status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 15px;
  border-radius: var(--r-pill);
  background: #eceaf1;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 12px;
  color: var(--body);
}
.ssum h1 { margin-top: 16px; font-size: 28px; letter-spacing: -0.5px; }
.ssum__sub { margin-top: 8px; font-family: var(--font-display); font-size: 16px; line-height: 1; letter-spacing: 0; color: var(--body); }

.ssum__meta { display: flex; flex-wrap: wrap; gap: 12px 28px; margin-top: 18px; }
.ssum__meta li { display: flex; align-items: center; gap: 9px; font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--near-black); }
.ssum__meta svg { width: 17px; height: 17px; flex-shrink: 0; }

.ssum__lead { display: flex; align-items: center; gap: 16px; margin-top: 26px; padding: 22px 24px; border-radius: 16px; background: #efeafe; }
.ssum__lead img { width: 56px; height: 56px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.ssum__lead > div { min-width: 0; margin-inline-end: auto; }
.ssum__lead h2 { font-size: 20px; letter-spacing: -0.3px; }
.ssum__lead p { margin-top: 2px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.ssum__lead .btn { height: 48px; padding: 0 28px; flex-shrink: 0; }

.ssum__row { display: grid; grid-template-columns: 1.41fr 1fr; gap: 24px; align-items: start; margin-top: 24px; }
.ssum__panel { display: flex; flex-direction: column; }

.ssum__panel-head { display: flex; align-items: center; gap: 14px; }
.ssum__panel-head h2 { font-size: 20px; letter-spacing: -0.3px; margin-inline-end: auto; }
.ssum__ic { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: #e9e1fd; flex-shrink: 0; }

.ssum__takeaways { display: grid; gap: 16px; margin-top: 22px; }
.ssum__takeaways li { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 12px; font-family: var(--font-ui); font-size: 15px; line-height: 1.45; color: var(--body); }
.ssum__takeaways svg { width: 18px; height: 18px; fill: var(--green); }

.ssum__files { display: grid; gap: 14px; margin-top: 22px; }
.ssum__files li { display: flex; align-items: center; gap: 14px; padding: 16px; border-radius: 12px; background: #f3eefe; }
.ssum__file-ic { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 8px; background: var(--white); flex-shrink: 0; }
.ssum__file-txt { display: flex; flex-direction: column; min-width: 0; margin-inline-end: auto; font-family: var(--font-ui); }
.ssum__file-txt b { font-size: 15px; color: var(--near-black); }
.ssum__file-txt small { margin-top: 2px; font-size: 13px; color: var(--body); }
.ssum__file-act { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: var(--purple-deep); flex-shrink: 0; }
.ssum__file-act:hover { background: rgba(81,40,204,0.08); }

.ssum__notes { margin-top: 24px; }
.ssum__edit { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--purple-deep); flex-shrink: 0; }
.ssum__edit:hover { text-decoration: underline; text-underline-offset: 3px; }
.ssum__notes blockquote { margin: 20px 0 0; padding: 20px 22px; border-radius: 12px; background: #f3eefe; font-family: var(--font-ui); font-weight: 700; font-size: 15px; line-height: 1.6; color: var(--near-black); }

.ssum__ask { margin-top: 24px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 20px; }
.ssum__ask h2 { font-size: 20px; letter-spacing: -0.3px; }
.ssum__ask p { margin-top: 6px; max-width: 380px; font-family: var(--font-ui); font-size: 14px; line-height: 1.5; color: var(--body); }
.ssum__ask .btn { height: 52px; padding: 0 28px; flex-shrink: 0; }
.ssum__ask .btn svg { flex-shrink: 0; }

.ssum__zoom { margin-top: 26px; height: 52px; padding: 0 32px; }

@media (max-width: 1023px) {
  .ssum__row { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 767px) {
  .ssum h1 { font-size: 24px; }
  .ssum__lead { flex-wrap: wrap; }
  .ssum__lead .btn { width: 100%; }
  .ssum__ask .btn { width: 100%; }
  .ssum__zoom { width: 100%; }
}

/* ========================== SESSION REVIEW =============================== */
/*
   Rating form for a completed session. Stars and traits are real radio /
   checkbox inputs styled with :has(), so the selection works without JS.
*/
.srev h1 { font-size: 28px; letter-spacing: -0.5px; }
.srev__sub { margin-top: 8px; font-family: var(--font-display); font-size: 16px; line-height: 1; letter-spacing: 0; color: var(--body); }

.srev__lead { display: flex; align-items: center; gap: 22px; margin-top: 26px; padding: 26px 28px; border-radius: 16px; background: #efeafe; }
.srev__lead img { width: 96px; height: 96px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.srev__lead > div { min-width: 0; }
.srev__lead h2 { font-size: 22px; letter-spacing: -0.3px; }
.srev__lead p { margin-top: 3px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.srev__tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.srev__tags li { padding: 4px 13px; border-radius: var(--r-pill); background: #dcd0fb; font-family: var(--font-ui); font-weight: 700; font-size: 12px; color: var(--purple-deep); }

.srev__form { margin-top: 22px; }

.srev__rate { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px; padding: 26px 28px; }
.srev__rate-q { font-family: var(--font-display); font-weight: 700; font-size: 20px; letter-spacing: -0.3px; color: var(--ink); }
.srev__stars { display: flex; align-items: center; gap: 12px; margin-inline-start: auto; }
.srev__star { display: grid; place-items: center; cursor: pointer; color: #d9d7de; transition: color 0.12s ease; }
.srev__star input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.srev__star-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
/* Fill the chosen star and every star before it, so the row reads as a score. */
.srev__stars:has(.srev__star:nth-child(1) input:checked) .srev__star:nth-child(-n+1),
.srev__stars:has(.srev__star:nth-child(2) input:checked) .srev__star:nth-child(-n+2),
.srev__stars:has(.srev__star:nth-child(3) input:checked) .srev__star:nth-child(-n+3),
.srev__stars:has(.srev__star:nth-child(4) input:checked) .srev__star:nth-child(-n+4),
.srev__stars:has(.srev__star:nth-child(5) input:checked) .srev__star:nth-child(-n+5) { color: var(--yellow); }
.srev__star:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 3px; border-radius: 4px; }

/* Own reset rather than a generic `fieldset` one, which would out-specify the
   margin below it. */
.srev__traits { border: 0; padding: 0; margin: 30px 0 0; }
.srev__traits legend { padding: 0; font-family: var(--font-display); font-weight: 700; font-size: 20px; letter-spacing: -0.3px; color: var(--ink); }
.srev__chips { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 16px; }
.srev__chip {
  padding: 12px 24px;
  border-radius: var(--r-pill);
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--body);
  cursor: pointer;
  transition: box-shadow 0.12s ease, color 0.12s ease;
}
.srev__chip input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.srev__chip:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.srev__chip:has(input:checked) { box-shadow: inset 0 0 0 2px var(--purple-deep); font-weight: 700; color: var(--purple-deep); }
.srev__chip:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

.srev__label { display: block; margin-top: 30px; font-family: var(--font-display); font-weight: 700; font-size: 20px; letter-spacing: -0.3px; color: var(--ink); }
.srev textarea {
  display: block;
  width: 100%;
  min-height: 148px;
  margin-top: 16px;
  padding: 20px 22px;
  border: 0;
  border-radius: 12px;
  background: var(--card);
  font-family: var(--font-ui);
  font-size: 14px;
  line-height: 1.6;
  color: var(--near-black);
  resize: vertical;
}
.srev textarea::placeholder { color: var(--muted); }
.srev textarea:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--purple-deep); }

.srev__privacy {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-top: 20px;
  padding: 20px 24px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: var(--dash-card-shadow);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--body);
}
.srev__privacy svg { flex-shrink: 0; }

.srev__anon { display: inline-flex; align-items: center; gap: 12px; margin-top: 22px; font-family: var(--font-ui); font-size: 14px; color: var(--near-black); cursor: pointer; }
.srev__anon input { width: 20px; height: 20px; margin: 0; accent-color: var(--purple-deep); flex-shrink: 0; }

.srev__actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 22px; }
.srev__actions .btn { height: 52px; padding: 0 30px; }
.srev__actions .btn--outline { box-shadow: inset 0 0 0 1px rgba(28,27,26,0.22); }

@media (max-width: 767px) {
  .srev h1 { font-size: 24px; }
  .srev__lead { flex-direction: column; align-items: flex-start; gap: 18px; }
  .srev__lead img { width: 76px; height: 76px; }
  .srev__rate { padding: 22px 20px; }
  .srev__stars { margin-inline-start: 0; }
  .srev__privacy { align-items: flex-start; gap: 12px; }
  .srev__actions .btn { flex: 1; }
}

/* ====================== THERAPIST DASHBOARD (SHELL) ====================== */
/*
   Facilitator-side dashboard: fixed sidebar + topbar, content in .tdash__main.
   Reuses the conventions set by My Space - .dash-card, .dash-h, .dash-sub and
   --dash-card-shadow - so both dashboards stay one system. The sidebar slides
   in below 1023px via the same checkbox pattern as the marketing nav, so no
   JavaScript is involved.
*/
body:has(.tdash) .page-doodles,
body:has(.tlogin) .page-doodles { display: none; }

.tdash { display: flex; min-height: 100vh; background: #f7f6fa; }
.tdash__toggle { position: absolute; opacity: 0; pointer-events: none; }

.tdash__side {
  position: sticky;
  top: 0;
  align-self: flex-start;
  flex-shrink: 0;
  width: 268px;
  height: 100vh;
  padding: 26px 18px;
  background: var(--white);
  border-inline-end: 1px solid rgba(28,27,26,0.08);
  display: flex;
  flex-direction: column;
  overflow-y: auto;
}
.tdash__brand { display: flex; align-items: center; gap: 10px; padding: 0 10px; color: inherit; }
.tdash__brand img { width: 30px; height: 32px; }
.tdash__brand span { font-family: var(--font-display); font-weight: 700; font-size: 20px; letter-spacing: -0.4px; color: var(--ink); }

.tdash__nav { flex: 1; margin-top: 30px; }
.tdash__nav ul { display: grid; gap: 4px; }
.tdash__nav a {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 12px 14px;
  border-radius: 10px;
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--body);
  transition: background-color 0.14s ease, color 0.14s ease;
}
.tdash__nav a svg { flex-shrink: 0; }
.tdash__nav a:hover { background: #f3eefe; color: var(--purple-deep); }
.tdash__nav a.is-active { background: var(--purple-deep); font-weight: 700; color: var(--white); }

.tdash__signout {
  display: flex;
  align-items: center;
  gap: 13px;
  margin-top: auto;
  padding: 12px 14px;
  border-radius: 10px;
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--body);
}
.tdash__signout svg { flex-shrink: 0; }
.tdash__signout { justify-content: center; width: 100%; cursor: pointer; border: 0; background: #dc2626; color: var(--white); font-weight: 700; }
.tdash__signout:hover { background: #b91c1c; color: var(--white); }

.tdash__scrim { display: none; }

.tdash__body { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.tdash__top {
  position: sticky;
  top: 0;
  z-index: 30;
  display: flex;
  align-items: center;
  gap: 16px;
  height: 84px;
  padding: 0 32px;
  background: var(--purple-deep);
}
.tdash__top h1 { margin-inline-end: auto; font-size: 22px; letter-spacing: -0.4px; color: var(--white); }

.tdash__burger { display: none; flex-direction: column; gap: 5px; width: 40px; height: 40px; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0; }
.tdash__burger span { width: 22px; height: 2px; border-radius: 2px; background: var(--ink); }

/* --------------------------- Avatar dropdown ---------------------------- */
.tdash-user { position: relative; flex-shrink: 0; }
.tdash-user summary {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 6px 12px 6px 6px;
  border-radius: var(--r-pill);
  background: var(--white);
  box-shadow: inset 0 0 0 1px rgba(28,27,26,0.10);
  cursor: pointer;
  list-style: none;
}
.tdash-user summary::-webkit-details-marker { display: none; }
.tdash-user summary:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.tdash-user summary:focus-visible { outline: 3px solid rgba(106,72,229,0.4); outline-offset: 2px; }
.tdash-user img { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.tdash-user__id { display: flex; flex-direction: column; line-height: 1.3; }
.tdash-user__id b { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.tdash-user__id small { font-family: var(--font-ui); font-size: 11px; color: var(--muted); }
.tdash-user__caret { flex-shrink: 0; color: var(--body); transition: transform 0.15s ease; }
.tdash-user[open] .tdash-user__caret { transform: rotate(180deg); }

.tdash-user__menu {
  position: absolute;
  top: calc(100% + 10px);
  inset-inline-end: 0;
  z-index: 40;
  min-width: 196px;
  padding: 8px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: 0 12px 32px rgba(28,27,26,0.14), inset 0 0 0 1px rgba(28,27,26,0.08);
}
.tdash-user__menu a {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 11px 12px;
  border-radius: 8px;
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--near-black);
}
.tdash-user__menu svg { flex-shrink: 0; color: var(--body); }
.tdash-user__menu a:hover { background: #f3eefe; color: var(--purple-deep); }
.tdash-user__menu a:hover svg { color: var(--purple-deep); }

.tdash__main { padding: 28px 32px 64px; }
/* The moved profile form carried its own page container; the shell owns that. */
.tdash__main .pform { max-width: none; margin: 0; padding: 0; }
/*
   That form was laid out for a full-width page. Inside the shell its column is
   ~330px narrower (sidebar + padding), so it has to collapse at wider viewports
   than its own 900/600px breakpoints, and its flexible tracks need an explicit
   zero minimum - `1fr` keeps a min-content floor and the inputs would push past
   the viewport.
*/
.tdash__main .pform__grid { grid-template-columns: minmax(0, 1fr) 320px; }
.tdash__main .pform-fields { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.tdash__main .pfield input,
.tdash__main .pfield select,
.tdash__main .pfield textarea { width: 100%; min-width: 0; }

@media (max-width: 1279px) {
  .tdash__main .pform__grid { grid-template-columns: minmax(0, 1fr); }
  .tdash__main .pform-aside { position: static; }
}

@media (max-width: 859px) {
  .tdash__main .pform-fields { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 559px) {
  .tdash__main .pform-section { padding: 22px 18px; }
}

.tsr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* ======================= THERAPIST DASHBOARD (HOME) ===================== */
.tdash-welcome { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 20px; }
.tdash-welcome h2 { font-size: 24px; letter-spacing: -0.4px; }
.tdash-welcome p { margin-top: 6px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.tdash-welcome .btn { height: 48px; padding: 0 24px; flex-shrink: 0; }
.tdash-welcome .btn svg { flex-shrink: 0; }

.tstats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; margin-top: 24px; }
.tstat { display: flex; flex-direction: column; gap: 6px; }
.tstat__label { font-family: var(--font-ui); font-size: 13px; color: var(--body); }
.tstat__value { font-family: var(--font-display); font-weight: 700; font-size: 30px; line-height: 1; color: var(--purple-deep); }
.tstat__note { font-family: var(--font-ui); font-size: 12px; color: var(--muted); }

.tdash-cols { display: grid; grid-template-columns: 1.5fr 1fr; gap: 20px; align-items: start; margin-top: 20px; }

.tsec-head { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.tsec-link { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--purple-deep); flex-shrink: 0; }
.tsec-link:hover { text-decoration: underline; text-underline-offset: 3px; }

.tslots { display: grid; gap: 12px; margin-top: 18px; }
.tslot {
  display: grid;
  grid-template-columns: 58px minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 16px;
  padding: 14px 16px;
  border-radius: 12px;
  background: #f7f6fa;
  box-shadow: inset 0 0 0 1px rgba(28,27,26,0.07);
}
.tslot--next { background: #f3eefe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); }
.tslot__time { display: flex; flex-direction: column; align-items: center; font-family: var(--font-display); }
.tslot__time b { font-weight: 700; font-size: 17px; color: var(--near-black); }
.tslot__time small { font-family: var(--font-ui); font-size: 11px; color: var(--muted); }
.tslot__body { display: flex; flex-direction: column; min-width: 0; }
.tslot__body b { font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--near-black); }
.tslot__body small { margin-top: 2px; font-family: var(--font-ui); font-size: 12px; color: var(--body); }
.tslot__state { font-family: var(--font-ui); font-weight: 700; font-size: 12px; color: var(--muted); white-space: nowrap; }
.tslot--next .tslot__state { color: var(--purple-deep); }
.tslot .btn { height: 40px; padding: 0 18px; font-size: 12px; letter-spacing: 0.2px; }
.tslot .btn--outline { box-shadow: inset 0 0 0 1px rgba(28,27,26,0.2); }

/* Fixed 7 columns so the week never wraps a single day onto its own row. */
.tdays { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 7px; margin-top: 18px; }
.tday {
  padding: 9px 4px;
  text-align: center;
  border-radius: 10px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px rgba(28,27,26,0.12);
  font-family: var(--font-ui);
  font-size: 13px;
  color: var(--body);
  cursor: pointer;
  transition: box-shadow 0.12s ease, color 0.12s ease, background-color 0.12s ease;
}
.tday input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.tday:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.tday:has(input:checked) { background: #f3eefe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); font-weight: 700; color: var(--purple-deep); }
.tday:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

.tmeta { display: grid; gap: 12px; margin: 22px 0 0; padding-top: 18px; border-top: 1px solid rgba(28,27,26,0.09); }
.tmeta div { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.tmeta dt { font-family: var(--font-ui); font-size: 13px; color: var(--body); }
.tmeta dd { margin: 0; font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.tdash-cols .btn--outline { width: 100%; height: 46px; margin-top: 20px; font-size: 13px; box-shadow: inset 0 0 0 1px rgba(28,27,26,0.2); }

.tupcoming { margin-top: 26px; }
.ttable { margin-top: 16px; border-radius: 14px; background: var(--white); box-shadow: var(--dash-card-shadow); overflow-x: auto; }
.ttable table { width: 100%; border-collapse: collapse; }
.ttable th {
  padding: 15px 20px;
  background: #f3eefe;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  text-align: start;
  color: var(--purple-deep);
  white-space: nowrap;
}
.ttable td { padding: 17px 20px; border-top: 1px solid rgba(28,27,26,0.08); font-family: var(--font-ui); font-size: 13px; color: var(--near-black); white-space: nowrap; }
.ttable__act a { font-weight: 700; color: var(--purple-deep); }
.ttable__act a:hover { text-decoration: underline; text-underline-offset: 3px; }

.tpill { display: inline-block; padding: 5px 12px; border-radius: var(--r-pill); font-family: var(--font-ui); font-weight: 700; font-size: 11px; white-space: nowrap; }
.tpill--ok { background: #e4f8ef; color: #12805c; }
.tpill--wait { background: #fdf3e2; color: #9a6a12; }

/* ======================== THERAPIST LOGIN =============================== */
.tlogin { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 48px 20px; background: #f7f6fa; }
.tlogin__card { width: 100%; max-width: 452px; padding: 40px; border-radius: 20px; background: var(--white); box-shadow: 0 18px 48px rgba(28,27,26,0.10); }
.tlogin__brand { display: flex; align-items: center; justify-content: center; gap: 10px; color: inherit; }
.tlogin__brand img { width: 38px; height: 40px; }
.tlogin__brand span { font-family: var(--font-display); font-weight: 700; font-size: 22px; letter-spacing: -0.4px; color: var(--ink); }
.tlogin h1 { margin-top: 26px; font-size: 26px; letter-spacing: -0.4px; text-align: center; }
.tlogin__card > p { margin-top: 8px; font-family: var(--font-ui); font-size: 14px; line-height: 1.5; color: var(--body); text-align: center; }

.tlogin__form { display: grid; gap: 16px; margin-top: 28px; }
.tlogin__field { display: grid; gap: 7px; }
.tlogin__field span { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.tlogin__field input {
  height: 50px;
  padding: 0 16px;
  border: 0;
  border-radius: 10px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px rgba(28,27,26,0.16);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--near-black);
}
.tlogin__field input::placeholder { color: var(--muted); }
.tlogin__field input:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--purple-deep); }

.tlogin__meta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; font-family: var(--font-ui); font-size: 13px; }
.tlogin__remember { display: inline-flex; align-items: center; gap: 9px; color: var(--body); cursor: pointer; }
.tlogin__remember input { width: 18px; height: 18px; margin: 0; accent-color: var(--purple-deep); }
.tlogin__meta a { font-weight: 700; color: var(--purple-deep); }

.tlogin__form .btn { width: 100%; height: 52px; margin-top: 6px; }
.tlogin__foot { margin-top: 24px; font-family: var(--font-ui); font-size: 13px; color: var(--body); text-align: center; }
.tlogin__foot a { font-weight: 700; color: var(--purple-deep); }

/* ---------------------------- Responsive -------------------------------- */
@media (max-width: 1239px) {
  .tstats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tdash-cols { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 1023px) {
  .tdash__side {
    position: fixed;
    inset-block-start: 0;
    inset-inline-start: 0;
    z-index: 60;
    transform: translateX(-100%);
    transition: transform 0.22s ease;
    box-shadow: 0 0 40px rgba(28,27,26,0.2);
  }
  .tdash__toggle:checked ~ .tdash__side { transform: translateX(0); }
  .tdash__toggle:checked ~ .tdash__scrim {
    display: block;
    position: fixed;
    inset: 0;
    z-index: 50;
    background: rgba(28,27,26,0.42);
  }
  .tdash__burger { display: flex; }
  .tdash__top { padding: 0 20px; height: 74px; }
  .tdash__top h1 { font-size: 19px; }
  .tdash__main { padding: 22px 20px 56px; }
  .tdash-user__id { display: none; }
}

@media (max-width: 767px) {
  .tdash-welcome .btn { width: 100%; }
  .tstats { grid-template-columns: minmax(0, 1fr); }
  /* Time, title and status stack; the action takes a full-width row below. */
  .tslot { grid-template-columns: 52px minmax(0, 1fr); gap: 12px 14px; }
  .tslot__state { grid-column: 2; }
  .tslot .btn { grid-column: 1 / -1; width: 100%; }
  .tlogin__card { padding: 28px 22px; }
}

@media (prefers-reduced-motion: reduce) {
  .tdash__side { transition: none; }
}

/* =========================== SETTINGS PAGES ============================== */
/*
   The four destinations of the Settings card on My Space. They share the .set-*
   components below - fields, checkboxes, pills, switches, rows - so the four
   screens stay one system and later settings modules reuse them rather than
   inventing new controls. All controls are real inputs styled with :has(), so
   selection and toggle states work without JavaScript.
*/
.set__head { max-width: 640px; }
.set__head h1 { font-size: 28px; letter-spacing: -0.5px; }
.set__head p { margin-top: 8px; font-family: var(--font-display); font-size: 16px; line-height: 1.4; letter-spacing: 0; color: var(--body); }

.set__grid { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 22px; align-items: start; margin-top: 26px; }
.set__grid--wide { grid-template-columns: minmax(0, 1fr) 316px; }
.set__main { display: grid; gap: 22px; min-width: 0; }
.set__aside { display: grid; gap: 22px; min-width: 0; }
.set__stack { display: grid; gap: 22px; margin-top: 26px; }
/*
   Grid items default to min-width:auto, so a card holding a wide table keeps a
   min-content floor and pushes past the track - which also stops the table's
   own overflow-x:auto from ever scrolling. Zero minimum lets the card match the
   track and the table scroll inside it.
*/
.set__main > *,
.set__aside > *,
.set__stack > * { min-width: 0; }

.set .dash-card { padding: 26px 28px; }
.set__title { display: flex; align-items: center; gap: 11px; font-size: 17px; letter-spacing: -0.2px; color: var(--near-black); }
/* max-width guards against an inline svg that ships no width/height: it would
   otherwise resolve to 100% and fill the card. */
.set__title svg { flex-shrink: 0; max-width: 22px; max-height: 22px; }
.set__label { margin-top: 22px; padding: 0; font-family: var(--font-ui); font-weight: 700; font-size: 13px; letter-spacing: 0; color: var(--near-black); }
.set__cta { width: 100%; height: 46px; margin-top: 18px; font-size: 13px; }
.set .dash-sub { margin-top: 8px; line-height: 1.45; }

.set__actions { display: flex; flex-wrap: wrap; gap: 12px; }
.set__actions .btn { height: 50px; padding: 0 28px; }
.set__actions .btn--outline { box-shadow: inset 0 0 0 1px rgba(28,27,26,0.2); }

/* ------------------------------- Fields --------------------------------- */
.set-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; margin-top: 22px; }
.set-field { display: grid; gap: 8px; min-width: 0; }
.set-field--full { grid-column: 1 / -1; }
.set-field > span { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.set-field input,
.set-field select {
  width: 100%;
  min-width: 0;
  height: 50px;
  padding: 0 18px;
  border: 0;
  border-radius: var(--r-pill);
  background: var(--card);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--near-black);
  appearance: none;
}
.set-field input::placeholder { color: var(--muted); }
.set-field input:focus-visible,
.set-field select:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--purple-deep); }
/* Caret drawn in CSS because appearance:none removes the native one. */
.set-field select {
  padding-inline-end: 44px;
  background-image: linear-gradient(45deg, transparent 50%, var(--body) 50%), linear-gradient(135deg, var(--body) 50%, transparent 50%);
  background-position: calc(100% - 22px) 22px, calc(100% - 16px) 22px;
  background-size: 6px 6px, 6px 6px;
  background-repeat: no-repeat;
}
.set-fields .btn { height: 48px; padding: 0 28px; }

/* ----------------------------- Checkboxes -------------------------------- */
/* QA: the real profile-photo controls on the settings page. */
.set-photo { display: flex; align-items: flex-start; gap: 20px; flex-wrap: wrap; margin-bottom: 22px; padding-bottom: 22px; border-bottom: 1px solid var(--border); }
.set-photo__img { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
span.set-photo__img { display: inline-flex; align-items: center; justify-content: center; background: #eef2ff; color: var(--purple-deep); font-family: var(--font-ui); font-weight: 700; font-size: 22px; }
.set-photo__form { display: flex; flex-direction: column; gap: 8px; }
.set-photo__own { margin-top: 6px; }
/* QA: the customizable anonymous avatar - the image OTHER people see. */
.set-avatar { display: flex; align-items: flex-start; gap: 18px; flex-wrap: wrap; margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--border); }
.set-avatar__img { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.set-avatar__body { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.set-avatar__body > b { font-family: var(--font-ui); font-size: 14px; color: var(--near-black); }
.set-avatar__form { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
/* QA: the settings file inputs reuse the payment page's upload control
   (.pay-upload__*), which is unscoped and shares initReceiptUploads. This
   only supplies the surrounding stack and the small field label. */
.set-upload { display: flex; flex-direction: column; gap: 8px; width: 100%; max-width: 420px; }
.set-upload__label { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.set-upload .pay-upload__drop { justify-content: flex-start; }
.set-checks { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 26px; margin-top: 22px; }
.set-check { display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 12px; cursor: pointer; }
.set-check input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.set-check__box {
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: 6px;
  background: var(--white);
  box-shadow: inset 0 0 0 1.5px var(--border);
  color: transparent;
  transition: background-color 0.12s ease, box-shadow 0.12s ease, color 0.12s ease;
}
.set-check:has(input:checked) .set-check__box { background: var(--purple-deep); box-shadow: none; color: var(--white); }
.set-check:focus-within .set-check__box { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }
.set-check__txt { display: flex; flex-direction: column; min-width: 0; }
.set-check__txt b { font-family: var(--font-ui); font-weight: 700; font-size: 14px; line-height: 1.35; color: var(--near-black); }
.set-check__txt small { margin-top: 4px; font-family: var(--font-ui); font-size: 12px; line-height: 1.45; color: var(--body); }

/* -------------------------- Notification matrix -------------------------- */
.set-matrix { margin-top: 20px; overflow-x: auto; }
.set-matrix table { width: 100%; border-collapse: collapse; }
.set-matrix th {
  padding: 0 12px 14px;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 0;
  text-align: center;
  color: var(--near-black);
  border-bottom: 1px solid rgba(28,27,26,0.10);
  white-space: nowrap;
}
.set-matrix thead th:first-child { text-align: left; padding-left: 0; }
.set-matrix tbody th { padding: 18px 12px 18px 0; text-align: left; font-weight: 400; font-size: 14px; color: var(--near-black); border-bottom: 1px solid rgba(28,27,26,0.08); }
.set-matrix td { padding: 18px 12px; text-align: center; border-bottom: 1px solid rgba(28,27,26,0.08); }
.set-matrix tbody tr:last-child th,
.set-matrix tbody tr:last-child td { border-bottom: 0; }

.set-dot { display: inline-grid; place-items: center; cursor: pointer; }
.set-dot input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.set-dot__mark {
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  box-shadow: inset 0 0 0 1.5px var(--border);
  color: transparent;
  transition: background-color 0.12s ease, box-shadow 0.12s ease, color 0.12s ease;
}
.set-dot:has(input:checked) .set-dot__mark { background: var(--purple-deep); box-shadow: none; color: var(--white); }
.set-dot:focus-within .set-dot__mark { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* -------------------------------- Pills ---------------------------------- */
.set-pills { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 12px; }
.set-pills--even { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.set-pill {
  flex: 1 1 0;
  min-width: 0;
  padding: 16px 18px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  font-family: var(--font-display);
  font-size: 15px;
  color: var(--body);
  text-align: center;
  cursor: pointer;
  transition: box-shadow 0.12s ease, background-color 0.12s ease, color 0.12s ease;
}
.set-pill input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.set-pill:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.set-pill:has(input:checked) { background: #f6f2fe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); color: var(--purple-deep); }
.set-pill:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* ------------------------------- Radios ---------------------------------- */
/* Spacing lives on the fieldset: a <legend> does not honour margin-top. */
.set-group { border: 0; padding: 0; margin: 24px 0 0; }
.set-group > .set__label { margin-top: 0; }
.set-radios { display: flex; flex-wrap: wrap; gap: 22px; margin-top: 12px; }
.set-radio { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-display); font-size: 15px; color: var(--body); cursor: pointer; }
.set-radio input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.set-radio__mark {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  box-shadow: inset 0 0 0 1.5px var(--border);
  flex-shrink: 0;
  transition: box-shadow 0.12s ease;
}
.set-radio:has(input:checked) .set-radio__mark { box-shadow: inset 0 0 0 5px var(--purple-deep); }
.set-radio:has(input:checked) { color: var(--purple-deep); }
.set-radio:focus-within .set-radio__mark { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* ------------------------------ Switches --------------------------------- */
.set-switches { display: grid; gap: 12px; margin-top: 20px; }
.set-switch {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 16px 20px;
  border-radius: 12px;
  background: #f3eefe;
  cursor: pointer;
}
.set-switch input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.set-switch__txt { display: flex; flex-direction: column; min-width: 0; margin-inline-end: auto; }
.set-switch__txt b { font-family: var(--font-ui); font-weight: 700; font-size: 14px; line-height: 1.35; color: var(--near-black); }
.set-switch__txt small { margin-top: 3px; font-family: var(--font-ui); font-size: 12px; line-height: 1.45; color: var(--body); }
.set-switch__track {
  position: relative;
  width: 46px;
  height: 26px;
  border-radius: var(--r-pill);
  background: #d7d4de;
  flex-shrink: 0;
  transition: background-color 0.16s ease;
}
.set-switch__track::after {
  content: "";
  position: absolute;
  top: 3px;
  left: 3px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--white);
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
  transition: transform 0.16s ease;
}
.set-switch:has(input:checked) .set-switch__track { background: var(--purple-deep); }
.set-switch:has(input:checked) .set-switch__track::after { transform: translateX(20px); }
.set-switch:focus-within .set-switch__track { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* ------------------------------- Rows ------------------------------------ */
.set-rows { margin-top: 8px; }
.set-rows li { border-bottom: 1px solid rgba(28,27,26,0.09); }
.set-rows li:last-child { border-bottom: 0; }
.set-rows a,
.set-rows > li > span {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 15px 0;
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--near-black);
}
.set-rows a:hover { color: var(--purple-deep); }
.set-rows svg { flex-shrink: 0; color: var(--muted); }
.set-rows a:hover svg { color: var(--purple-deep); }

.set-badge { padding: 4px 12px; border-radius: var(--r-pill); background: #b9f4d8; font-family: var(--font-ui); font-weight: 700; font-size: 11px; color: #0c6b48; white-space: nowrap; }
.set-state { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 18px; font-family: var(--font-ui); font-size: 14px; color: var(--body); }

.set-meta { display: grid; gap: 12px; margin: 20px 0 0; }
.set-meta div { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.set-meta dt { font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.set-meta dd { margin: 0; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.set-meta dd.is-accent { font-family: var(--font-display); font-size: 17px; color: var(--purple-deep); }

.set-note { display: flex; gap: 14px; margin-top: 20px; padding: 16px 18px; border-radius: 12px; background: rgba(81,40,204,0.05); font-family: var(--font-ui); font-size: 12px; line-height: 1.55; color: var(--body); }
.set-note svg { flex-shrink: 0; margin-top: 2px; }

.set-devices { display: grid; gap: 2px; margin-top: 18px; }
.set-devices li { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 0; border-bottom: 1px solid rgba(28,27,26,0.08); }
.set-devices li:last-child { border-bottom: 0; }
.set-devices__txt { display: flex; flex-direction: column; min-width: 0; }
.set-devices__txt b { display: flex; align-items: center; gap: 9px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.set-devices__txt em { padding: 3px 9px; border-radius: var(--r-pill); background: #eee8ff; font-style: normal; font-weight: 700; font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--purple-deep); }
.set-devices__txt small { margin-top: 3px; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.set-devices a { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--purple-deep); flex-shrink: 0; }
.set-devices a:hover { text-decoration: underline; text-underline-offset: 3px; }

/* ------------------------------- Danger ---------------------------------- */
.set-danger .set__title { color: #dc2626; }
.set-danger .set__title svg { color: #dc2626; }
.set-danger__box { display: block; margin-top: 18px; padding: 16px 18px; border-radius: 12px; background: #fdecec; }
.set-danger__box b { display: block; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: #dc2626; }
.set-danger__box small { display: block; margin-top: 4px; font-family: var(--font-ui); font-size: 12px; line-height: 1.45; color: #a33; }
.set-danger__box:hover { background: #fbdede; }
.set-danger__link { display: block; margin-top: 18px; }
.set-danger__link b { display: block; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: #dc2626; }
.set-danger__link small { display: block; margin-top: 4px; font-family: var(--font-ui); font-size: 12px; line-height: 1.45; color: var(--body); }
.set-danger__link:hover b { text-decoration: underline; text-underline-offset: 3px; }

/* ============================ BILLING PAGE =============================== */
.bill-plan__eyebrow { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--purple-deep); }
.bill-plan h2 { margin-top: 8px; font-size: 22px; letter-spacing: -0.3px; }
.bill-plan__facts { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 20px; }
.bill-plan__facts div { flex: 1 1 180px; min-width: 0; padding: 16px 18px; border-radius: 12px; background: #f3eefe; }
.bill-plan__facts small { display: block; font-family: var(--font-ui); font-size: 12px; color: var(--body); }
.bill-plan__facts b { display: block; margin-top: 5px; font-family: var(--font-display); font-weight: 700; font-size: 17px; color: var(--near-black); }
.bill-plan__facts b span { font-family: var(--font-ui); font-weight: 400; font-size: 12px; color: var(--body); }
.bill-plan__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 22px; }
.bill-plan__actions .btn { height: 48px; padding: 0 26px; }
.bill-plan__actions .btn--outline { box-shadow: inset 0 0 0 1px rgba(28,27,26,0.2); }

.bill-method h2 { font-size: 19px; letter-spacing: -0.2px; }
.bill-method > p { margin-top: 6px; font-family: var(--font-ui); font-size: 14px; line-height: 1.45; color: var(--body); }
.bill-card { display: flex; align-items: center; gap: 14px; margin-top: 18px; padding: 16px; border-radius: 12px; background: #f3eefe; }
.bill-card__ic { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: var(--ink); flex-shrink: 0; }
.bill-card__txt { display: flex; flex-direction: column; min-width: 0; }
.bill-card__txt b { font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.bill-card__txt small { margin-top: 3px; font-family: var(--font-ui); font-size: 12px; color: var(--body); }
.bill-method .btn { width: 100%; height: 48px; margin-top: 18px; font-size: 13px; }

.bill-history { margin-top: 22px; border-radius: 16px; background: var(--white); box-shadow: var(--dash-card-shadow); overflow: hidden; }
.bill-history__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; padding: 22px 28px; background: var(--purple-deep); }
.bill-history__head h2 { font-size: 20px; letter-spacing: -0.3px; color: var(--white); }
.bill-history__dl {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  height: 44px;
  padding: 0 22px;
  border-radius: var(--r-pill);
  background: var(--white);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 13px;
  color: var(--near-black);
  flex-shrink: 0;
}
.bill-history__dl:hover { background: var(--cream); color: var(--near-black); }
.bill-history__table { overflow-x: auto; min-width: 600px; }
.bill-history table { width: 100%; border-collapse: collapse; }
.bill-history th {
  padding: 18px 28px;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 0;
  text-align: start;
  color: var(--near-black);
  border-bottom: 1px solid rgba(28,27,26,0.10);
  white-space: nowrap;
}
.bill-history td { padding: 20px 28px; border-bottom: 1px solid rgba(28,27,26,0.08); font-family: var(--font-ui); font-size: 14px; color: var(--body); white-space: nowrap; }
.bill-history tbody tr:last-child td { border-bottom: 0; }

.bill-paid { display: inline-flex; align-items: center; gap: 7px; padding: 5px 13px; border-radius: var(--r-pill); background: #efe9ff; font-family: var(--font-ui); font-weight: 700; font-size: 12px; color: var(--purple-deep); }
.bill-invoice { display: inline-grid; place-items: center; width: 34px; height: 34px; border-radius: 8px; color: var(--ink); }
.bill-invoice:hover { background: #f3eefe; color: var(--purple-deep); }


/* ------------------------- Refunds (NF-7) -------------------------------
   Billing & Payments' refund section. Two halves: payments whose window is
   still open (each with a disclosure form), and the audit trail of every
   request made. Logical properties throughout, so RTL needs no mirror rule.

   Both billing tables also gained a sixth column here (Refund). Six columns do
   not fit a phone, so the TABLE scrolls sideways inside its own card - the one
   exception the frontend rules allow - and the page itself never does. */
.billing__scroll { overflow-x: auto; }
.billing__scroll table { min-width: 600px; }

.bill-refunds { display: grid; gap: 16px; }
.bill-refunds__item {
  padding: 16px 18px;
  border-radius: var(--r-sm, 12px);
  background: var(--cream);
  box-shadow: inset 0 0 0 1px rgba(28,27,26,0.08);
}
.bill-refunds__item-head { margin: 0 0 6px; font-family: var(--font-ui); font-size: 14px; color: var(--body); overflow-wrap: anywhere; }
.bill-refunds__item-head b { color: var(--near-black); }
.bill-refunds__form { margin-top: 12px; }
/* A real disclosure control: the summary IS the button, so it keeps the
   keyboard and screen-reader behaviour the element already has. */
.bill-refunds__form > summary { display: inline-flex; align-items: center; justify-content: center; cursor: pointer; list-style: none; }
.bill-refunds__form > summary::-webkit-details-marker { display: none; }
.bill-refunds__form form { display: grid; gap: 10px; margin-top: 14px; }
.bill-refunds__form label { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.bill-refunds__form textarea {
  width: 100%;
  min-height: 108px;
  padding: 12px 14px;
  border: 1px solid rgba(28,27,26,0.16);
  border-radius: var(--r-sm, 12px);
  background: var(--white);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--near-black);
  resize: vertical;
}
.bill-refunds__form .btn { justify-self: start; }
.bill-refunds__h { margin: 4px 0 0; font-family: var(--font-display); font-size: 17px; color: var(--near-black); }
.bill-refunds__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
.bill-refunds__list > li { padding-inline-start: 14px; border-inline-start: 3px solid var(--purple-deep); }
.bill-refunds__list .dash-sub { overflow-wrap: anywhere; }

/* ---------------------------- Responsive -------------------------------- */
@media (max-width: 1239px) {
  .set__grid,
  .set__grid--wide { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 767px) {
  .set__head h1 { font-size: 24px; }
  .set .dash-card { padding: 22px 20px; }
  .set-fields { grid-template-columns: minmax(0, 1fr); }
  .set-checks { grid-template-columns: minmax(0, 1fr); }
  .set-pills { flex-direction: column; }
  .set-pills--even { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .set-switch { gap: 14px; padding: 14px 16px; }
  .set__actions .btn { flex: 1; }
  .bill-plan__actions .btn { width: 100%; }
  .bill-history__head { padding: 18px 20px; }
  .bill-history th,
  .bill-history td { padding: 16px 20px; }
}

@media (max-width: 559px) {
  .set-pills--even { grid-template-columns: minmax(0, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  .set-switch__track,
  .set-switch__track::after { transition: none; }
}

/* ===================== THERAPIST PROFILE - COMPONENTS ==================== */
/*
   Added for the redesigned profile form: expertise tags, circle-leadership
   cards, format pills, availability chips, and the aside's live preview and
   completion cards. All selections are real inputs driven by :has(), so the
   form has no JavaScript. .pfield is left untouched - Business Circl uses it.
*/
.pform-label { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }

/* Icon sitting inside a text input. */
.pform-input-ic { position: relative; display: block; }
.pform-input-ic svg { position: absolute; top: 50%; inset-inline-start: 18px; transform: translateY(-50%); pointer-events: none; }
.pform-input-ic input { width: 100%; padding-inline-start: 44px; }

.pform-bio { min-height: 132px; }
.pform-count { text-align: end; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }

/* ----------------------------- Expertise --------------------------------- */
.pform-tags { display: flex; flex-wrap: wrap; gap: 10px; }
.pform-tag {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 9px 18px;
  border-radius: var(--r-pill);
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--body);
  cursor: pointer;
  transition: box-shadow 0.12s ease, background-color 0.12s ease, color 0.12s ease;
}
.pform-tag input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.pform-tag__tick { width: 0; overflow: hidden; transition: width 0.12s ease; }
.pform-tag:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.pform-tag:has(input:checked) { background: #f1ecfe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); font-weight: 700; color: var(--purple-deep); }
.pform-tag:has(input:checked) .pform-tag__tick { width: 13px; }
.pform-tag:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* ------------------------- Circle leadership ----------------------------- */
.pform-circles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.pform-circle {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 20px;
  gap: 6px 10px;
  padding: 18px 20px;
  border-radius: 14px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  cursor: pointer;
  transition: box-shadow 0.12s ease, background-color 0.12s ease;
}
.pform-circle input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.pform-circle__ic { grid-column: 1; color: var(--purple-deep); }
.pform-circle__mark { grid-column: 2; grid-row: 1; justify-self: end; color: var(--border); }
/* The tick only shows once the radio is picked; the ring is always drawn. */
.pform-circle__tick { opacity: 0; transition: opacity 0.12s ease; }
.pform-circle b { grid-column: 1 / -1; font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--near-black); }
.pform-circle small { grid-column: 1 / -1; font-family: var(--font-ui); font-size: 13px; line-height: 1.45; color: var(--body); }
.pform-circle:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.pform-circle:has(input:checked) { background: #f6f2fe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); }
.pform-circle:has(input:checked) .pform-circle__mark { color: var(--purple-deep); }
.pform-circle:has(input:checked) .pform-circle__tick { opacity: 1; }
.pform-circle:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* ------------------------------- Format ---------------------------------- */
.pform-formats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.pform-format {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  padding: 13px 14px;
  border-radius: var(--r-pill);
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--body);
  cursor: pointer;
  transition: box-shadow 0.12s ease, background-color 0.12s ease, color 0.12s ease;
}
.pform-format input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.pform-format svg { flex-shrink: 0; }
.pform-format:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.pform-format:has(input:checked) { background: #f1ecfe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); font-weight: 700; color: var(--purple-deep); }
.pform-format:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* --------------------------- Availability -------------------------------- */
.pform-days { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; }
.pform-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 10px 4px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  cursor: pointer;
  transition: box-shadow 0.12s ease, background-color 0.12s ease;
}
.pform-day input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.pform-day b { font-family: var(--font-ui); font-weight: 700; font-size: 10px; letter-spacing: 0.06em; color: var(--muted); }
.pform-day small { font-family: var(--font-ui); font-size: 11px; color: var(--muted); }
.pform-day:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.pform-day:has(input:checked) { background: #f6f2fe; box-shadow: inset 0 0 0 1.5px var(--purple-deep); }
.pform-day:has(input:checked) b,
.pform-day:has(input:checked) small { color: var(--purple-deep); }
.pform-day:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }

/* ---------------------------- Live preview ------------------------------- */
.ppreview { position: relative; display: flex; flex-direction: column; align-items: center; text-align: center; padding-top: 30px; }
.ppreview__badge {
  position: absolute;
  top: 14px;
  inset-inline-end: 14px;
  padding: 4px 10px;
  border-radius: var(--r-pill);
  background: #ece5fd;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--purple-deep);
}
.ppreview img { width: 86px; height: 86px; border-radius: 50%; object-fit: cover; box-shadow: 0 0 0 4px var(--white), 0 0 0 5px var(--border); }
.ppreview__name { margin-top: 14px; font-family: var(--font-display); font-weight: 700; font-size: 17px; color: var(--near-black); }
.ppreview__role { margin-top: 3px; font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--purple-deep); }
.ppreview__exp { margin-top: 3px; font-family: var(--font-ui); font-size: 11px; color: var(--muted); }
.ppreview__label { align-self: flex-start; margin-top: 18px; font-family: var(--font-ui); font-weight: 700; font-size: 9px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.ppreview__tags { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 9px; }
.ppreview__tags li { padding: 4px 11px; border-radius: var(--r-pill); background: #ffe6a3; font-family: var(--font-ui); font-size: 11px; color: #6b4b00; }
.ppreview__facts { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; margin-top: 18px; padding-top: 14px; border-top: 1px solid rgba(28,27,26,0.09); }
.ppreview__facts li { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-ui); font-size: 11px; color: var(--body); }
.ppreview__facts svg { flex-shrink: 0; }
.ppreview blockquote { margin: 14px 0 0; padding-top: 14px; border-top: 1px solid rgba(28,27,26,0.09); font-family: var(--font-ui); font-size: 11px; line-height: 1.6; text-align: start; color: var(--body); }

/* --------------------------- Completion --------------------------------- */
.pcomplete__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.pcomplete__head h3 { font-size: 15px; letter-spacing: -0.2px; color: var(--near-black); }
.pcomplete__head b { font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--purple-deep); }
.pcomplete__bar { height: 6px; margin-top: 12px; border-radius: var(--r-pill); background: #eae7f2; overflow: hidden; }
.pcomplete__bar span { display: block; height: 100%; border-radius: var(--r-pill); background: var(--purple-deep); }
.pcomplete__list { display: grid; gap: 10px; margin-top: 18px; }
.pcomplete__list li { display: flex; align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.pcomplete__list svg { flex-shrink: 0; color: #d5d2dd; }
.pcomplete__list li.is-done { color: var(--near-black); }
.pcomplete__list li.is-done svg { color: var(--green); }

/* ---------------------------- Responsive -------------------------------- */
@media (max-width: 1439px) {
  .pform-circles { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 767px) {
  .pform-section { padding: 22px 20px; }
  .pform-formats { grid-template-columns: minmax(0, 1fr); }
  .pform-days { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .pform-aside { position: static; }
}

@media (max-width: 419px) {
  .pform-days { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (prefers-reduced-motion: reduce) {
  .pform-tag__tick,
  .pform-circle__tick { transition: none; }
}

/* ============================== JOURNALS ================================= */
/*
   Four screens reached from My Space: the list, the create form, the saved
   confirmation, and a single entry. They reuse .dash-card / .dash shell and the
   .set-switch__track toggle from the settings pages, so nothing is duplicated.
   Every control is a real input driven by :has() - no JavaScript.
*/
.jrn__badge,
.jlist .jrn__badge,
.jent .jrn__badge {
  display: inline-block;
  padding: 6px 16px;
  border-radius: var(--r-pill);
  background: #ffdf93;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 13px;
  color: #241a00;
}

.jrn__head { max-width: 700px; }
.jrn__head h1 { margin-top: 14px; font-size: 26px; letter-spacing: -0.4px; }
.jrn__head p { margin-top: 10px; font-family: var(--font-display); font-size: 16px; line-height: 1.5; letter-spacing: 0; color: var(--body); }
.jrn__label { font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }

.jrn__form { display: grid; gap: 20px; margin-top: 26px; }
.jrn__cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px; align-items: stretch; }
.jrn__cols > * { min-width: 0; }

.jrn__actions { display: flex; flex-wrap: wrap; gap: 14px; }
.jrn__actions .btn { height: 50px; padding: 0 30px; }
.jrn__actions .btn--outline { box-shadow: inset 0 0 0 1px rgba(28,27,26,0.22); }
.jrn__draft { box-shadow: inset 0 0 0 1px var(--purple-deep) !important; color: var(--purple-deep); }
.jrn__draft:hover { background: var(--purple-deep); color: var(--white); }
.jrn__save { background: #7b5ce0; }
.jrn__save:hover { background: var(--purple-deep); }

/* ------------------------------ Mood grid -------------------------------- */
.jmood__defs { position: absolute; width: 0; height: 0; overflow: hidden; }
.jmood__q { font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.jmood__grid { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); gap: 12px; margin-top: 16px; }
.jmood__opt {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 9px;
  padding: 16px 6px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: inset 0 0 0 1px var(--border);
  cursor: pointer;
  transition: box-shadow 0.12s ease;
}
.jmood__opt input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.jmood__opt:hover { box-shadow: inset 0 0 0 1px var(--purple); }
.jmood__opt:has(input:checked) { box-shadow: inset 0 0 0 2px var(--purple-deep); }
.jmood__opt:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }
.jmood__face { display: grid; place-items: center; width: 40px; height: 40px; }
.jmood__face svg { width: 100%; height: 100%; }
.jmood__label { font-family: var(--font-ui); font-size: 12px; line-height: 1.3; color: var(--body); text-align: center; }
/* Only the picked face warms up; every other disc stays grey. Very Happy also
   carries a pink mouth, blushes and a spark, muted here so all nine read the
   same at rest - matching the mood picker on My Space. */
.jmood__opt:hover .jmood__disc,
.jmood__opt:focus-within .jmood__disc,
.jmood__opt:has(input:checked) .jmood__disc { fill: url(#jm_warm); fill-opacity: 1; }
.jmood__tint { fill: #232333; stroke: #232333; }
.jmood__extra { opacity: 0; }
.jmood__opt:hover .jmood__tint,
.jmood__opt:focus-within .jmood__tint,
.jmood__opt:has(input:checked) .jmood__tint { fill: #F72859; stroke: #F72859; }
.jmood__opt:hover .jmood__extra,
.jmood__opt:focus-within .jmood__extra,
.jmood__opt:has(input:checked) .jmood__extra { opacity: 1; }
.jmood__opt--other .jmood__face svg { width: 78%; height: 78%; }

/* ------------------------------- Editor ---------------------------------- */
.jed { padding: 0 !important; overflow: hidden; }
.jed__bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 14px 18px; background: var(--card); }
.jed__set { display: flex; align-items: center; gap: 4px; padding-inline-end: 10px; border-inline-end: 1px solid rgba(28,27,26,0.12); }
.jed__set:last-of-type { border-inline-end: 0; padding-inline-end: 0; }
.jed__set--end { margin-inline-start: auto; border-right: 0; padding-right: 0; }
.jed__bar button {
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  font-family: var(--font-display);
  font-size: 15px;
  color: var(--ink);
  transition: background-color 0.12s ease, color 0.12s ease;
}
.jed__bar button:hover { background: rgba(81,40,204,0.10); color: var(--purple-deep); }
.jed__bar button:focus-visible { outline: 3px solid rgba(106,72,229,0.4); outline-offset: 1px; }
.jed__area {
  display: block;
  width: 100%;
  min-height: 320px;
  margin: 18px;
  width: calc(100% - 36px);
  padding: 20px 22px;
  border: 0;
  border-radius: 14px;
  background: var(--card);
  font-family: var(--font-ui);
  font-size: 14px;
  line-height: 1.7;
  color: var(--near-black);
  resize: vertical;
}
.jed__area::placeholder { color: var(--muted); }
.jed__area:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--purple-deep); }

/* ------------------------------- Upload ---------------------------------- */
.jup__drop {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 250px;
  margin-top: 16px;
  padding: 24px;
  border: 1.5px dashed var(--border);
  border-radius: 14px;
  background: var(--card);
  cursor: pointer;
  transition: border-color 0.12s ease, background-color 0.12s ease;
}
.jup__drop input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.jup__drop:hover { border-color: var(--purple-deep); background: #f6f2fe; }
.jup__drop:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }
.jup__ic { display: grid; place-items: center; width: 46px; height: 46px; margin-bottom: 8px; border-radius: 50%; background: #ece5fd; color: var(--purple-deep); }
.jup__drop b { font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--near-black); }
.jup__drop small { font-family: var(--font-ui); font-size: 13px; color: var(--body); }

/* ------------------------------- Privacy --------------------------------- */
.jpriv { display: flex; flex-direction: column; }
.jpriv__row { display: flex; align-items: center; gap: 16px; cursor: pointer; }
.jpriv__row input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.jpriv__title { margin-inline-end: auto; font-family: var(--font-ui); font-weight: 700; font-size: 15px; color: var(--near-black); }
.jpriv__row:has(input:checked) .set-switch__track { background: var(--purple-deep); }
.jpriv__row:has(input:checked) .set-switch__track::after { transform: translateX(20px); }
.jpriv__row:focus-within .set-switch__track { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; }
.jpriv__note { margin-top: 16px; font-family: var(--font-display); font-size: 15px; line-height: 1.6; color: var(--body); }
.jpriv__seal { display: flex; align-items: center; gap: 12px; margin-top: auto; padding: 16px 18px; border-radius: 12px; background: var(--card); font-family: var(--font-ui); font-weight: 700; font-size: 13px; line-height: 1.45; color: var(--near-black); }
.jpriv__seal svg { flex-shrink: 0; }

/* ---------------------------- Saved screen ------------------------------- */
.jsaved__mark { width: 148px; height: 112px; flex-shrink: 0; object-fit: contain; }
.jsaved h1 { margin-top: 10px; font-size: 30px; line-height: 1.2; }
.jsaved > p { margin-top: 10px; font-size: 16px; }
.jsaved__quote { width: 100%; max-width: 528px; margin: 22px 0 0; padding: 20px 26px; border-radius: 12px; background: var(--card); font-family: var(--font-display); font-size: 16px; line-height: 1.55; color: var(--body); }
.jsaved__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 14px; margin-top: 26px; }
.jsaved__actions .btn { height: 52px; padding: 0 30px; }
.jsaved__back { box-shadow: inset 0 0 0 1px var(--purple-deep); color: var(--purple-deep); }
.jsaved__back:hover { background: var(--purple-deep); color: var(--white); }

/* ----------------------------- Entry view -------------------------------- */
.jent__grid { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 34px; align-items: start; }
.jent__main { min-width: 0; }
.jent__main h1 { margin-top: 14px; font-size: 42px; line-height: 1.1; letter-spacing: -1px; }
.jent__sub { margin-top: 10px; font-family: var(--font-display); font-size: 16px; letter-spacing: 0; color: var(--body); }

.jent__meta { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 20px; }
.jent__meta li { display: inline-flex; align-items: center; gap: 10px; padding: 11px 18px; border-radius: 12px; background: var(--card); font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.jent__meta svg { flex-shrink: 0; }

.jent__body { margin-top: 28px; }
.jent__body p { font-family: var(--font-display); font-size: 16px; line-height: 1.75; color: var(--body); }
.jent__body p + p { margin-top: 20px; }

.jent__photos { margin-top: 32px; padding-top: 28px; border-top: 1px solid rgba(28,27,26,0.10); }
.jent__photos h2 { font-size: 22px; letter-spacing: -0.3px; }
.jent__photos ul { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; margin-top: 18px; }
.jent__photos img { width: 100%; height: 204px; border-radius: 14px; object-fit: cover; }

.jent__back { display: inline-flex; align-items: center; gap: 10px; margin-top: 30px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--purple-deep); }
.jent__back:hover { text-decoration: underline; text-underline-offset: 3px; }

.jent__aside { display: grid; gap: 20px; min-width: 0; }
.jent__aside > * { min-width: 0; }
.jent__insight-h { display: flex; align-items: center; gap: 12px; font-size: 20px; letter-spacing: -0.3px; }
.jent__insight-ic { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: #35c98f; flex-shrink: 0; }
.jent__insight { margin-top: 18px; padding: 18px 20px; border-radius: 12px; background: var(--card); }
.jent__insight-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.jent__insight-top span { font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--near-black); }
.jent__insight-top b { padding: 4px 13px; border-radius: var(--r-pill); background: #e6ddff; font-family: var(--font-ui); font-weight: 700; font-size: 12px; color: var(--purple-deep); }
.jent__insight blockquote { margin: 14px 0 0; font-family: var(--font-display); font-size: 14px; line-height: 1.65; color: var(--body); }

.jent__acts { display: grid; gap: 12px; }
.jent__acts .btn { width: 100%; height: 50px; font-size: 14px; }
.jent__acts .btn svg { flex-shrink: 0; }
.jent__acts-share { box-shadow: inset 0 0 0 1px var(--purple-deep); color: var(--purple-deep); }
.jent__acts-share:hover { background: var(--purple-deep); color: var(--white); }
.jent__acts-pdf { background: #e6e4ea; color: var(--body); }
.jent__acts-pdf:hover { background: #dcd9e2; color: var(--near-black); }

/* ------------------------------ List view -------------------------------- */
.jlist__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 20px; }
.jlist__head > div { max-width: 640px; }
.jlist__head h1 { margin-top: 14px; font-size: 26px; letter-spacing: -0.4px; }
.jlist__head p { margin-top: 10px; font-family: var(--font-display); font-size: 16px; line-height: 1.5; letter-spacing: 0; color: var(--body); }
.jlist__head .btn { height: 48px; padding: 0 26px; flex-shrink: 0; }
.jlist__head .btn svg { flex-shrink: 0; }

/* Three stats, icon beside the text rather than above it. */
.jlist__stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; margin-top: 24px; }
.jstat { display: flex; align-items: center; gap: 14px; padding: 18px 22px; border-radius: 16px; background: var(--white); box-shadow: var(--dash-card-shadow); min-width: 0; }
/* Each supplied glyph carries its own colour, so the tile only tints behind it. */
.jstat__ic { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 12px; flex-shrink: 0; }
.jstat__ic--book { background: #ece5fd; }
.jstat__ic--streak { background: #fdf0c9; }
.jstat__ic--mood { background: #d4f4e5; }
.jstat__txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.jstat__txt small { font-family: var(--font-ui); font-size: 12px; color: var(--body); }
.jstat__txt b { font-family: var(--font-display); font-weight: 700; font-size: 19px; line-height: 1.15; color: var(--near-black); }

.jlist__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px; margin-top: 24px; }
.jcard { display: flex; height: 100%; border-radius: 16px; background: var(--white); box-shadow: var(--dash-card-shadow); overflow: hidden; }
.jcard__body { display: flex; flex-direction: column; flex: 1; min-width: 0; padding: 22px 24px; }

/* Photo variant: a fixed-width thumbnail column with the mood pill over it. */
.jcard__figure { position: relative; width: 200px; flex-shrink: 0; }
.jcard__figure img { width: 100%; height: 100%; object-fit: cover; }
.jcard__mood--onphoto { position: absolute; top: 12px; inset-inline-start: 12px; }

.jcard__top { display: flex; align-items: flex-start; gap: 10px; min-height: 26px; }
.jcard__mood { padding: 5px 14px; border-radius: var(--r-pill); font-family: var(--font-ui); font-weight: 700; font-size: 12px; white-space: nowrap; }
.jcard__mood--calm { background: #2fbf87; color: var(--white); }
.jcard__mood--grateful { background: #ece5fd; color: var(--purple-deep); }
.jcard__mood--stressed { background: #fdf0c9; color: #765B00; }

/* Row menu: native disclosure, so it opens by keyboard and closes on Esc. */
.jcard__menu { position: relative; margin-inline-start: auto; flex-shrink: 0; }
.jcard__menu summary { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 8px; color: var(--muted); cursor: pointer; list-style: none; }
.jcard__menu summary::-webkit-details-marker { display: none; }
.jcard__menu summary:hover { background: #f3eefe; color: var(--purple-deep); }
.jcard__menu summary:focus-visible { outline: 3px solid rgba(106,72,229,0.4); outline-offset: 1px; }
.jcard__menu ul {
  position: absolute;
  top: calc(100% + 8px);
  inset-inline-end: 0;
  z-index: 20;
  min-width: 192px;
  padding: 7px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: 0 12px 30px rgba(28,27,26,0.16), inset 0 0 0 1px rgba(28,27,26,0.08);
}
.jcard__menu a { display: block; padding: 10px 12px; border-radius: 8px; font-family: var(--font-ui); font-size: 13px; color: var(--near-black); white-space: nowrap; }
.jcard__menu a:hover { background: #f3eefe; color: var(--purple-deep); }
.jcard__menu a.is-danger { color: #dc2626; }
.jcard__menu a.is-danger:hover { background: #fdecec; color: #dc2626; }

.jcard h2 { margin-top: 12px; font-size: 20px; letter-spacing: -0.3px; }
.jcard h2 a { color: var(--near-black); }
.jcard h2 a:hover { color: var(--purple-deep); }
.jcard__when { margin-top: 7px; font-family: var(--font-ui); font-weight: 700; font-size: 13px; color: var(--purple-deep); }
.jcard__excerpt { margin-top: 10px; font-family: var(--font-display); font-size: 15px; line-height: 1.6; color: var(--body); }

.jcard__foot { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-top: auto; padding-top: 18px; }
.jcard__read { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-ui); font-weight: 700; font-size: 14px; color: var(--purple-deep); }
.jcard__read:hover { text-decoration: underline; text-underline-offset: 3px; }
.jcard__read svg { flex-shrink: 0; }

.jcard__fav { display: grid; place-items: center; width: 30px; height: 30px; color: #c9c6d2; cursor: pointer; transition: color 0.12s ease; }
.jcard__fav input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.jcard__fav:hover { color: var(--purple); }
/* Checked fills the heart rather than just recolouring the outline. */
.jcard__fav:has(input:checked) { color: var(--purple-deep); }
.jcard__fav:has(input:checked) svg path { fill: currentColor; }
.jcard__fav:focus-within { outline: 3px solid rgba(106,72,229,0.35); outline-offset: 2px; border-radius: 6px; }

/* ---------------------------- Responsive -------------------------------- */
@media (max-width: 1239px) {
  .jent__grid { grid-template-columns: minmax(0, 1fr); }
  .jmood__grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}

@media (max-width: 1023px) {
  .jent__main h1 { font-size: 34px; }
}

@media (max-width: 767px) {
  .jrn__head h1,
  .jlist__head h1 { font-size: 23px; }
  .jrn__cols { grid-template-columns: minmax(0, 1fr); }
  .jmood__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .jed__bar { gap: 6px; padding: 12px; }
  .jed__set { padding-inline-end: 6px; }
  .jed__set--end { margin-inline-start: 0; }
  .jed__area { min-height: 260px; margin: 14px; width: calc(100% - 28px); }
  .jrn__actions .btn { flex: 1 1 100%; }
  .jlist__grid { grid-template-columns: minmax(0, 1fr); }
  .jlist__head .btn { width: 100%; }
  .jent__main h1 { font-size: 28px; }
  .jent__photos ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .jsaved__actions .btn { flex: 1 1 100%; }
}

/* The three stats stay one row as long as the icon + text pair has room; below
   that they stack, and the card thumbnail moves above the text. */
@media (max-width: 639px) {
  .jlist__stats { grid-template-columns: minmax(0, 1fr); }
  .jcard { flex-direction: column; }
  .jcard__figure { width: 100%; height: 190px; }
}

@media (max-width: 479px) {
  .jmood__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .jent__photos ul { grid-template-columns: minmax(0, 1fr); }
  /* .btn is nowrap and "Share with My Therapist" is long: trim the generous
     32px side padding so the label fits instead of pushing past the card. */
  .jent__acts .btn { padding: 0 14px; font-size: 13px; }
}

/* ==================== ASSESSMENT GATE ("Don't know how to start") ======== */
/*
   The intro card stands in for the assessment section until the visitor asks
   for it. Checkbox toggle, same pattern as the mobile nav, so no JavaScript is
   involved: checking it hides the intro and reveals .assessment. The checkbox
   stays focusable (not display:none) and the CTA shows its focus ring.
*/
.dks__toggle { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }

.dks__intro {
  position: relative;
  margin: 120px 22px;
  padding: 64px 80px;
  border-radius: var(--r-lg);
  background: var(--ink) url("../images/assessment-doodles.svg") no-repeat center / cover;
  overflow: hidden;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 360px);
  gap: 40px;
  align-items: end;
}
.dks__copy { padding-bottom: 16px; }
.dks__intro h2 { font-size: 48px; line-height: 1.1; letter-spacing: 0; color: var(--white); max-width: 460px; }
.dks__intro p { margin-top: 18px; max-width: 520px; font-family: var(--font-alt); font-size: 16px; line-height: 1.6; color: rgba(255,255,255,0.85); }
.dks__cta { margin-top: 26px; cursor: pointer; }
/* The label is the visible control, so surface the checkbox's focus on it. */
.dks__toggle:focus-visible ~ .dks__intro .dks__cta { outline: 3px solid rgba(245,201,82,0.75); outline-offset: 3px; }

.dks__photo { align-self: end; justify-self: end; width: 100%; max-width: 360px; height: auto; margin-bottom: -64px; }

/* Swap: intro out, assessment in. */
.dks .assessment { display: none; }
.dks__toggle:checked ~ .dks__intro { display: none; }
.dks__toggle:checked ~ .assessment { display: grid; }

@media (max-width: 1023px) {
  .dks__intro { padding: 52px 56px; gap: 28px; }
  .dks__intro h2 { font-size: 38px; }
  .dks__photo { max-width: 280px; margin-bottom: -52px; }
}

@media (max-width: 767px) {
  .dks__intro {
    margin: 72px 12px;
    padding: 40px 24px 0;
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
    text-align: center;
  }
  .dks__intro h2 { font-size: 30px; max-width: none; }
  .dks__intro p { max-width: none; }
  .dks__copy { padding-bottom: 0; }
  .dks__cta { width: 100%; }
  .dks__photo { justify-self: center; max-width: 240px; margin: 24px 0 0; }
}

/* ===================== DECISION 01 - SHARED FORM BITS =================== */
/* Field hints, inline validation errors and flash messages. Reused by the
   participant auth pages, the recruitment form, the facilitator profile and
   every admin screen, so they live here rather than per-module. */

.field-hint { font-family: var(--font-ui); font-size: 13px; color: var(--muted); margin: 4px 0 0; }
.pfield__error { font-family: var(--font-ui); font-size: 13px; color: #c0392b; margin: 6px 0 0; }
.visually-hidden {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.flash {
  display: flex; gap: 10px; align-items: flex-start; width: 100%;
  font-family: var(--font-ui); font-size: 14px; line-height: 1.5;
  padding: 12px 16px; border-radius: var(--r-sm); margin: 0 0 18px;
}
.flash svg { flex-shrink: 0; margin-top: 2px; }
.flash ul { margin: 0; padding-inline-start: 16px; }
.flash--success { background: #eaf9f2; color: #16794f; border: 1px solid #b6e6d0; }
.flash--error { background: #fdecea; color: #a12d20; border: 1px solid #f5c6c0; }
/* QA: a booking block is neither success nor validation error - it explains
   a rule the participant can act on. */
.flash--notice { background: #eef2ff; color: var(--purple-deep); box-shadow: inset 0 0 0 1px #e0e7ff; }
.flash--notice .alink { margin-inline-start: 8px; font-weight: 700; color: var(--purple-deep); text-decoration: underline; }

.locale-switch { margin: 0; }
.locale-switch button {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  font-family: var(--font-ui); font-size: 13px; font-weight: 700;
  color: var(--body); background: transparent; border: 1px solid var(--border);
  border-radius: var(--r-pill); padding: 6px 12px;
}
.locale-switch button:hover { color: var(--purple-deep); border-color: var(--purple); }

.dash-logout { margin: 0; }
.dash-logout button {
  cursor: pointer; font-family: var(--font-ui); font-size: 13px; font-weight: 700;
  color: var(--body); background: transparent; border: 1px solid var(--border);
  border-radius: var(--r-pill); padding: 8px 14px;
}
.dash-logout button:hover { color: var(--purple-deep); border-color: var(--purple); }

.auth--narrow { grid-template-columns: 1fr; max-width: 560px; margin-inline: auto; }
.tdash__signout-form, .adash__signout-form { margin: 0; }
.tdash__signout-form button { width: 100%; cursor: pointer; }
.tdash-user--static { display: flex; align-items: center; gap: 10px; }
.tstat__value--sm { font-size: 20px; }
.tdash-next__list { list-style: none; margin: 12px 0 0; padding: 0; font-family: var(--font-ui); }
.tdash-next__list a { color: var(--purple-deep); font-weight: 700; }

/* ================== FACILITATOR RECRUITMENT (/facilitators) ============== */

.recruit { display: block; }
.recruit-h2 { font-family: var(--font-display); font-size: 38px; color: var(--ink); margin: 0 0 12px; }
.recruit-lead { font-family: var(--font-ui); font-size: 17px; line-height: 1.7; color: var(--body); max-width: 720px; margin: 0 0 32px; }

.recruit-hero { background: var(--cream); padding: 72px 0 80px; }
.recruit-hero__inner { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 56px; align-items: center; }
.recruit-hero__copy h1 { font-family: var(--font-display); font-size: 52px; line-height: 1.1; color: var(--ink); margin: 12px 0 18px; }
.recruit-hero__lead { font-family: var(--font-ui); font-size: 18px; line-height: 1.75; color: var(--body); margin: 0 0 28px; }
.recruit-hero__actions { display: flex; flex-wrap: wrap; gap: 14px; }
.recruit-hero__figure img { width: 100%; height: auto; border-radius: var(--r-lg); box-shadow: 0 12px 40px rgba(0,0,0,.12); }
/* The eyebrow, the heading and both calls to action are Website Content now, so
   this hero has to survive any value the editor allows rather than only the
   short ones it shipped with. The eyebrow shares its class with the auth aside,
   where the wording is code-owned and must stay on one line, so nowrap is
   relaxed here and nowhere else; min-width lets the column shrink with it. */
.recruit-hero__inner > * { min-width: 0; }
.recruit-hero__copy .auth__eyebrow { white-space: normal; }

.recruit-join { padding: 80px 0; }
.recruit-join__inner { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: start; }
.recruit-join h2 { font-family: var(--font-display); font-size: 38px; color: var(--ink); margin: 0 0 14px; }
.recruit-join p { font-family: var(--font-ui); font-size: 17px; line-height: 1.75; color: var(--body); margin: 0; }

.recruit-checks { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
.recruit-checks li {
  display: flex; gap: 12px; align-items: flex-start;
  font-family: var(--font-ui); font-size: 16px; line-height: 1.65; color: var(--body);
}
.recruit-checks svg { width: 22px; height: 22px; flex-shrink: 0; fill: var(--purple); margin-top: 1px; }

.recruit-why { background: var(--card); padding: 80px 0; }
.recruit-cards { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; }
.recruit-cards--values { grid-template-columns: repeat(2, 1fr); }
.recruit-card { background: var(--white); border-radius: var(--r-md); padding: 28px; box-shadow: 0 4px 22px rgba(0,0,0,.07); }
.recruit-card h3 { font-family: var(--font-display); font-size: 21px; color: var(--ink); margin: 0 0 10px; }
.recruit-card p { font-family: var(--font-ui); font-size: 15px; line-height: 1.7; color: var(--body); margin: 0; }

.recruit-looking { padding: 80px 0; }
.recruit-looking__inner { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 56px; align-items: center; }
.recruit-looking__figure img { width: 100%; height: auto; border-radius: var(--r-lg); }
.recruit-looking h2 { font-family: var(--font-display); font-size: 38px; color: var(--ink); margin: 0 0 12px; }
.recruit-looking p { font-family: var(--font-ui); font-size: 17px; line-height: 1.7; color: var(--body); margin: 0 0 22px; }

.recruit-values { background: var(--cream); padding: 80px 0; }

.recruit-process { padding: 80px 0; }
.recruit-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; counter-reset: step; }
.recruit-step { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-md); padding: 26px; }
.recruit-step__num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 50%; margin-bottom: 14px;
  background: var(--purple); color: var(--white);
  font-family: var(--font-display); font-weight: 700; font-size: 17px;
}
.recruit-step h3 { font-family: var(--font-display); font-size: 19px; color: var(--ink); margin: 0 0 8px; }
.recruit-step p { font-family: var(--font-ui); font-size: 15px; line-height: 1.65; color: var(--body); margin: 0; }

.recruit-apply { background: var(--card); padding: 80px 0 96px; scroll-margin-top: 90px; }
.recruit-apply__head { max-width: 720px; margin-bottom: 32px; }
.recruit-form { background: var(--white); border-radius: var(--r-lg); padding: 40px; box-shadow: 0 8px 34px rgba(0,0,0,.08); }
.recruit-fieldset { border: 0; margin: 0 0 34px; padding: 0; min-inline-size: 0; width: 100%; }
.recruit-fieldset legend {
  font-family: var(--font-display); font-size: 22px; font-weight: 700;
  color: var(--ink); padding: 0; margin-bottom: 18px;
}
.recruit-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.recruit-grid > * { min-width: 0; }
.recruit-grid .pfield.full, .recruit-fieldset > .pfield.full { grid-column: 1 / -1; }
.recruit-form__submit { width: 100%; justify-content: center; }

@media (max-width: 980px) {
  .recruit-hero__inner, .recruit-join__inner, .recruit-looking__inner { grid-template-columns: 1fr; gap: 36px; }
  .recruit-hero__copy h1 { font-size: 38px; }
  .recruit-h2, .recruit-join h2, .recruit-looking h2 { font-size: 30px; }
  .recruit-cards, .recruit-cards--values { grid-template-columns: 1fr; }
  .recruit-steps { grid-template-columns: repeat(2, 1fr); }
  .recruit-grid { grid-template-columns: 1fr; }
  .recruit-form { padding: 26px; }
}

@media (max-width: 620px) {
  .recruit-steps { grid-template-columns: 1fr; }
  .recruit-hero { padding: 48px 0 56px; }
}

/* ========================= ADMIN DASHBOARD SHELL ======================== */
/* First admin module: these table / filter / pager / badge patterns are the
   convention later CMS modules must reuse. */

.adash { display: flex; min-height: 100vh; background: var(--cream); }
.adash__toggle { position: absolute; opacity: 0; pointer-events: none; }

.adash__side {
  display: flex; flex-direction: column; flex-shrink: 0;
  position: sticky; top: 0; align-self: flex-start; height: 100vh;
  width: 264px; padding: 26px 20px; background: var(--white);
  border-inline-end: 1px solid var(--border);
}
.adash__brand {
  display: flex; align-items: center; gap: 10px; margin-bottom: 30px;
  font-family: var(--font-display); font-weight: 700; font-size: 16px; color: var(--ink);
}
.adash__nav { flex: 1; }
/* Both sidemenus scroll their nav with a slim lilac scrollbar that fills to
   the brand purple on hover - never the browser default grey block. */
.adash__nav, .tdash__nav { overflow-y: auto; min-height: 0; scrollbar-width: thin; scrollbar-color: #cdbdf5 transparent; }
.adash__nav::-webkit-scrollbar, .tdash__nav::-webkit-scrollbar { width: 6px; }
.adash__nav::-webkit-scrollbar-track, .tdash__nav::-webkit-scrollbar-track { background: transparent; }
.adash__nav::-webkit-scrollbar-thumb, .tdash__nav::-webkit-scrollbar-thumb { background: #cdbdf5; border-radius: 999px; }
.adash__nav::-webkit-scrollbar-thumb:hover, .tdash__nav::-webkit-scrollbar-thumb:hover { background: var(--purple); }
.adash__group {
  margin: 18px 14px 6px; font-family: var(--font-ui); font-size: 11px;
  font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted);
}
.adash__group:first-child { margin-top: 0; }
html[dir="rtl"] .adash__group { font-family: var(--font-ar); letter-spacing: 0; }
.adash__nav ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.adash__nav a {
  display: flex; align-items: center; gap: 10px;
  padding: 11px 14px; border-radius: var(--r-sm);
  font-family: var(--font-ui); font-size: 15px; color: var(--body);
}
.adash__nav a svg { flex-shrink: 0; }
.adash__nav a:hover { background: var(--cream); color: var(--purple-deep); }
.adash__nav a.is-active { background: var(--purple); color: var(--white); font-weight: 700; }
.adash__signout {
  width: 100%; cursor: pointer; text-align: center; padding: 11px 14px; margin-top: 14px;
  font-family: var(--font-ui); font-size: 15px; font-weight: 700; color: var(--white);
  background: #dc2626; border: 0; border-radius: var(--r-sm);
}
.adash__signout:hover { background: #b91c1c; color: var(--white); }

.adash__footer, .tdash__footer {
  padding: 16px 32px; text-align: center;
  font-family: var(--font-ui); font-size: 12px; color: var(--muted);
  border-top: 1px solid var(--border); background: var(--white);
}
.adash__footer a, .tdash__footer a { color: var(--purple-deep); font-weight: 700; }
.adash__footer a:hover, .tdash__footer a:hover { text-decoration: underline; }
html[dir="rtl"] .adash__footer, html[dir="rtl"] .tdash__footer { font-family: var(--font-ar); }

.adash__scrim { display: none; }
.adash__body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.adash__top {
  display: flex; align-items: center; gap: 16px; padding: 18px 32px;
  background: var(--purple-deep); border-bottom: 0;
}
.adash__top h1 { flex: 1; font-family: var(--font-display); font-size: 24px; color: var(--white); margin: 0; }
.adash__burger { display: none; }
.adash-user { display: flex; flex-direction: column; font-family: var(--font-ui); line-height: 1.3; }
.adash-user b { font-size: 14px; color: var(--white); }
.adash-user small { font-size: 12px; color: rgba(255,255,255,0.72); }

/* Everything that sits on the purple bar reads in white. */
.adash__top .locale-switch button, .tdash__top .locale-switch button {
  color: var(--white); border-color: rgba(255,255,255,0.45);
}
.adash__top .locale-switch button:hover, .tdash__top .locale-switch button:hover {
  color: var(--white); border-color: var(--white);
}
.tdash__top .tdash-user__id b { color: var(--white); }
.tdash__top .tdash-user__id small { color: rgba(255,255,255,0.72); }
.tdash__top .tdash__burger span, .adash__burger span { background: var(--white); }
.adash__main { padding: 32px; }

.ahead { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 22px; }
.acard {
  background: var(--white); border-radius: var(--r-md); padding: 26px;
  box-shadow: 0 3px 18px rgba(0,0,0,.06); margin-bottom: 22px;
}
.acard--form { max-width: 1140px; }
.acard__h { font-family: var(--font-display); font-size: 20px; color: var(--ink); margin: 0 0 16px; }
.acard__sub { font-family: var(--font-display); font-size: 16px; color: var(--ink); margin: 18px 0 6px; }
.acard__lead { font-family: var(--font-ui); font-size: 15px; color: var(--body); margin: 0 0 18px; }
.aprose { font-family: var(--font-ui); font-size: 15px; line-height: 1.75; color: var(--body); margin: 0; white-space: pre-line; }

.astats { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.astat { background: var(--white); border-radius: var(--r-md); box-shadow: 0 3px 18px rgba(0,0,0,.06); }
.astat a { display: block; padding: 22px; }
.astat__label { display: block; font-family: var(--font-ui); font-size: 13px; color: var(--muted); margin-bottom: 8px; }
.astat__value { font-family: var(--font-display); font-size: 32px; color: var(--purple-deep); }

.aform { display: grid; gap: 18px; margin: 0; }
.aform--decide { margin-top: 14px; }
.aform__actions { display: flex; flex-wrap: wrap; gap: 12px; }
.aform input[type="text"], .aform input[type="email"], .aform input[type="tel"],
.aform input[type="password"], .aform input[type="number"], .aform select, .aform textarea,
.asearch input, .asearch select,
.abar input, .abar select {
  width: 100%; font-family: var(--font-ui); font-size: 15px; color: var(--ink);
  padding: 11px 14px; background: var(--white);
  border: 1px solid var(--border); border-radius: var(--r-sm);
}
.aform input:disabled { background: var(--cream); color: var(--muted); }
.aform label, .asearch label { display: block; font-family: var(--font-ui); font-size: 14px; font-weight: 700; color: var(--ink); margin-bottom: 6px; }

/* Multi-select list of catalogue topics (facilitator Circl preferences). */
.acheck { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
/* QA-FIX-04: inline checkbox label on the admin settings form. */
.acheck-inline { display: flex; align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 14px; color: var(--near-black); cursor: pointer; }
.acheck-inline input { width: 16px; height: 16px; accent-color: var(--purple-deep); }
.acheck__item { display: grid; gap: 4px; }
.aform .acheck__label { display: flex; align-items: center; gap: 10px; margin-bottom: 0; font-weight: 500; cursor: pointer; }
.acheck__label input { flex: none; width: 18px; height: 18px; margin: 0; accent-color: var(--purple-deep); }
.acheck__item .field-hint { margin: 0; padding-inline-start: 28px; }

.asearch { display: flex; gap: 12px; align-items: flex-end; margin-bottom: 22px; max-width: 520px; }

.afilter { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.afilter__chip {
  font-family: var(--font-ui); font-size: 13px; font-weight: 700; color: var(--body);
  padding: 7px 15px; background: var(--white);
  border: 1px solid var(--border); border-radius: var(--r-pill);
}
.afilter__chip:hover { border-color: var(--purple); color: var(--purple-deep); }
.afilter__chip.is-active { background: var(--purple); border-color: var(--purple); color: var(--white); }

.atable-wrap { overflow-x: auto; background: var(--white); border-radius: var(--r-md); box-shadow: 0 3px 18px rgba(0,0,0,.06); }
.atable { width: 100%; border-collapse: collapse; font-family: var(--font-ui); font-size: 14px; }
.atable th, .atable td { padding: 14px 18px; text-align: start; vertical-align: top; }
.atable thead th { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); border-bottom: 1px solid var(--border); white-space: nowrap; }
.atable tbody tr + tr td { border-top: 1px solid var(--border); }
.atable td { color: var(--body); }
.atable__sub { display: block; font-size: 12px; color: var(--muted); margin-top: 3px; }
.atable__actions { display: flex; gap: 12px; align-items: center; white-space: nowrap; }
.atable__actions form { margin: 0; }

.alink { font-weight: 700; color: var(--purple-deep); background: transparent; border: 0; padding: 0; cursor: pointer; font-family: var(--font-ui); font-size: 14px; }
.alink--danger { color: #c0392b; }
.aempty { font-family: var(--font-ui); font-size: 15px; color: var(--muted); padding: 26px 0; margin: 0; }

.abadge {
  display: inline-block; font-family: var(--font-ui); font-size: 12px; font-weight: 700;
  padding: 4px 10px; border-radius: var(--r-pill); background: var(--cream); color: var(--body);
}
.abadge--active, .abadge--approved { background: #eaf9f2; color: #16794f; }
.abadge--invited, .abadge--submitted { background: #eef0fd; color: #4338ca; }
.abadge--under_review { background: #fff6e0; color: #8a5b00; }
.abadge--rejected, .abadge--disabled { background: #fdecea; color: #a12d20; }
.abadge--suspended { background: #fdf0e2; color: #9a5a12; }
.abadge--protected { background: var(--yellow-light); color: #241a00; margin-inline-start: 8px; }

.adetail { display: grid; grid-template-columns: 1.6fr 1fr; gap: 24px; align-items: start; }
.adl { display: grid; grid-template-columns: minmax(140px, auto) 1fr; gap: 8px 20px; margin: 0; font-family: var(--font-ui); font-size: 14px; }
.adl dt { color: var(--muted); }
.adl dd { margin: 0; color: var(--ink); word-break: break-word; }
/* Financial evidence, served from the private disk by the admin-only
   endpoint - never a public URL, so it is bounded rather than full-bleed. */
.apayment-receipt { display: block; width: 100%; max-width: 520px; margin-top: 12px; border-radius: 10px; background: var(--card); box-shadow: inset 0 0 0 1px var(--border); }

/* ================= Admin payment review layout (UI-FIX) =================
   The page used to drop six loose blocks straight into the .adetail grid, so
   auto-placement scattered them: a lone reference beside a tall field list,
   a heading beside a link, then a tall receipt facing an empty column. It is
   now the main/side split every other admin detail page uses, and everything
   below is scoped to .apay-review so no other detail page is touched. */
.apay-review .apay-summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px 28px; }
.apay-review .apay-summary__id { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 8px; font-family: var(--font-display); font-size: 20px; color: var(--ink); }
.apay-review .apay-summary__who { margin: 0; font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.apay-review .apay-summary__who b { display: block; color: var(--ink); }
.apay-review .apay-summary__total { margin: 0; text-align: end; }
.apay-review .apay-summary__label { display: block; font-family: var(--font-ui); font-size: 13px; color: var(--muted); margin-bottom: 4px; }
.apay-review .apay-summary__value { font-family: var(--font-display); font-size: 30px; line-height: 1.1; color: var(--purple-deep); }

.apay-review .acard__head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 10px 16px; margin-bottom: 14px; }
.apay-review .acard__head .acard__h { margin: 0; }
.apay-review .adetail__side .acard__h { font-size: 16px; margin-bottom: 14px; }

/* Financial evidence, bounded rather than full-bleed: a tall phone
   photograph must not stretch the page past the facts it is checked
   against. "Open receipt" remains one click to the full-size original. */
.apay-review .apay-receipt { margin: 0; }
.apay-review .apay-receipt__frame {
  display: flex; align-items: center; justify-content: center; padding: 14px;
  border-radius: var(--r-sm); background: var(--cream); box-shadow: inset 0 0 0 1px var(--border);
}
.apay-review .apay-receipt__frame .apayment-receipt {
  width: auto; max-width: 100%; max-height: 700px; margin: 0;
  object-fit: contain; box-shadow: 0 2px 12px rgba(0,0,0,.10);
}
.apay-review .apay-receipt__empty { padding: 44px 0; text-align: center; }

/* Money reads as an invoice: label at the start, figure at the end, the
   total ruled off. Every figure is the frozen snapshot. */
.apay-review .apay-rows { display: grid; gap: 11px; margin: 0; font-family: var(--font-ui); font-size: 14px; }
.apay-review .apay-rows > div { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }
.apay-review .apay-rows dt { color: var(--muted); }
.apay-review .apay-rows dd { margin: 0; color: var(--ink); text-align: end; white-space: nowrap; font-variant-numeric: tabular-nums; }
.apay-review .apay-rows__total { padding-top: 12px; border-top: 1px solid var(--border); }
.apay-review .apay-rows__total dt { color: var(--ink); font-weight: 700; }
.apay-review .apay-rows__total dd { font-family: var(--font-display); font-size: 17px; color: var(--purple-deep); }

/* One fact per line in the narrow column - the audit was a run-on stack of
   "Label: value" sentences inside a single cell. */
.apay-review .adl--stack { grid-template-columns: 1fr; gap: 12px; }
.apay-review .adl--stack dd { margin-top: 3px; }

/* The audit explains the figures above it, so it is a ruled-off section of
   the breakdown card rather than a fifth panel competing with them. */
.apay-review .apay-audit { margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }
.apay-review .apay-audit__h { font-family: var(--font-ui); font-size: 13px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: var(--muted); margin: 0 0 12px; }
.apay-review .apay-audit .adl--stack { gap: 10px; font-size: 13px; }


/* The refund block: a later business event about a payment that genuinely
   happened, so it reads beside the decision rather than replacing it. */
.apay-review .apay-refund { display: grid; gap: 14px; }
.apay-review .apay-refund .adl--stack { margin: 0; }
.apay-review .apay-refund .aform--decide { display: grid; gap: 12px; margin: 0; }
.apay-review .apay-refund textarea,
.apay-review .apay-refund input[type="text"] { width: 100%; }
.apay-review .apay-refund .aform__actions { display: flex; flex-wrap: wrap; gap: 10px; }

@media (max-width: 980px) {
  .apay-review .apay-summary { align-items: flex-start; }
  .apay-review .apay-summary__total { text-align: start; }
  .apay-review .apay-receipt__frame .apayment-receipt { max-height: 460px; }
}
.adocs { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }

.pager { display: flex; align-items: center; gap: 14px; margin-top: 22px; font-family: var(--font-ui); font-size: 14px; }
.pager__link { font-weight: 700; color: var(--purple-deep); }
.pager__link.is-disabled { color: var(--muted); pointer-events: none; }
.pager__count { color: var(--muted); }

.tlogin--admin .tlogin__card { border-top: 4px solid var(--purple); }

@media (max-width: 980px) {
  .astats { grid-template-columns: repeat(2, 1fr); }
  .adetail { grid-template-columns: 1fr; }
  .adash__side {
    position: fixed; inset-block: 0; inset-inline-start: 0; z-index: 40;
    transform: translateX(-100%); transition: transform .2s ease;
  }
  html[dir="rtl"] .adash__side { transform: translateX(100%); }
  .adash__toggle:checked ~ .adash__side { transform: translateX(0); }
  .adash__toggle:checked ~ .adash__scrim { display: block; position: fixed; inset: 0; z-index: 30; background: rgba(0,0,0,.35); }
  .adash__burger { display: flex; flex-direction: column; gap: 4px; cursor: pointer; }
  .adash__burger span { display: block; width: 22px; height: 2px; background: var(--white); }
  .adash__main, .adash__top { padding-inline: 18px; }
}

@media (max-width: 620px) {
  .astats { grid-template-columns: 1fr; }
  .adash__top h1 { font-size: 19px; }
}

/* ============================ RTL / ARABIC ============================== */
/* One direction-aware layer instead of a mirrored stylesheet. Most of the
   layout already uses flex/grid, so only the physical properties, the Arabic
   type stack and the directional icons need flipping. */

html[dir="rtl"] body { font-family: var(--font-ar); }
html[dir="rtl"] h1, html[dir="rtl"] h2, html[dir="rtl"] h3,
html[dir="rtl"] h4, html[dir="rtl"] .brand, html[dir="rtl"] .adash__brand,
html[dir="rtl"] .tdash__brand, html[dir="rtl"] .tlogin__brand { font-family: var(--font-ar); }
html[dir="rtl"] .recruit-hero__copy h1, html[dir="rtl"] .recruit-h2,
html[dir="rtl"] .recruit-card h3, html[dir="rtl"] .recruit-step h3,
html[dir="rtl"] .acard__h, html[dir="rtl"] .astat__value { font-family: var(--font-ar); }
html[dir="rtl"] .contact__intro p, html[dir="rtl"] .contact__safety,
html[dir="rtl"] .cform, html[dir="rtl"] .contact__links,
html[dir="rtl"] .content-page__summary, html[dir="rtl"] .content-page__body,
html[dir="rtl"] .content-page__meta,
html[dir="rtl"] .field-hint, html[dir="rtl"] .pfield__error,

/* ------------------- Dashboard home (admin + facilitator) ---------------- */
/* One containment rule for both operator shells: the working area caps at a
   readable width and centers, instead of stretching across an ultrawide
   monitor. Tables keep scrolling inside .atable-wrap, so nothing overflows. */
.adash__main, .tdash__main { width: 100%; max-width: 1320px; margin-inline: auto; flex: 1; }

/* Six headline cards: two tidy rows of three, falling back to the existing
   2-up / 1-up breakpoints below. */
.astats--wide { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.astat__go { display: block; margin-top: 10px; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.astat a:hover .astat__go { color: var(--purple-deep); }

.acard__title { margin: 0 0 6px; font-family: var(--font-display); font-size: 18px; color: var(--ink); }

/* Attention queue + quick actions, side by side. */
.ahome { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 20px; align-items: start; margin-top: 20px; }
.ahome > .acard { min-width: 0; }

.aqueue { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 8px; }
.aqueue__row {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--r-sm);
  font-family: var(--font-ui); color: var(--ink);
}
.aqueue__row:hover { border-color: var(--purple); }
.aqueue__what { display: grid; gap: 2px; min-width: 0; }
.aqueue__what b { font-size: 14px; }
.aqueue__what small { font-size: 12px; color: var(--muted); }
.aqueue__count { flex-shrink: 0; }

.aquick { list-style: none; margin: 8px 0 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.aquick--stack { grid-template-columns: minmax(0, 1fr); }
.aquick__item {
  display: block; padding: 11px 14px; text-align: center;
  border: 1px solid var(--border); border-radius: var(--r-pill);
  font-family: var(--font-ui); font-size: 13px; font-weight: 600; color: var(--purple-deep);
}
.aquick__item:hover { border-color: var(--purple); background: #f3eefe; }

/* Facilitator home: work column + side column. */
.tdash-cols { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 20px; align-items: start; margin-top: 24px; }
.tdash-cols__main, .tdash-cols__aside { display: grid; gap: 20px; min-width: 0; }
.tnext__title { margin: 4px 0 14px; font-family: var(--font-display); font-weight: 700; font-size: 20px; color: var(--purple-deep); }
.tnext .btn { margin-top: 16px; }
.tdash-more { margin: 12px 0 0; font-family: var(--font-ui); font-size: 13px; }
.tdash-more a { color: var(--purple-deep); font-weight: 600; }
/* Inside a dash-card the table shell drops its own chrome. */
.atable-wrap--flat { box-shadow: none; border-radius: 0; margin-top: 8px; }

@media (max-width: 1200px) {
  .ahome, .tdash-cols { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 980px) {
  .astats--wide { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 620px) {
  .astats--wide { grid-template-columns: minmax(0, 1fr); }
  .aquick { grid-template-columns: minmax(0, 1fr); }
}

.achev { display: inline-block; }
html[dir="rtl"] .achev { transform: scaleX(-1); }
html[dir="rtl"] .aqueue__row, html[dir="rtl"] .aquick__item,
html[dir="rtl"] .astat__go, html[dir="rtl"] .tdash-more,
html[dir="rtl"] .acard__title, html[dir="rtl"] .tnext__title { font-family: var(--font-ar); }

html[dir="rtl"] .atable, html[dir="rtl"] .adl, html[dir="rtl"] .aform,
html[dir="rtl"] .acheck,
html[dir="rtl"] .aprose, html[dir="rtl"] .flash,
html[dir="rtl"] .recruit-checks li, html[dir="rtl"] .recruit-card p,
html[dir="rtl"] .pay-order__rows, html[dir="rtl"] .pay-total,
html[dir="rtl"] .pay-steps, html[dir="rtl"] .pay-hint,
html[dir="rtl"] .pay-method__name, html[dir="rtl"] .pay-method__soon,
html[dir="rtl"] .receipt-facts, html[dir="rtl"] .receipt-pending,
html[dir="rtl"] .awc-panel, html[dir="rtl"] .awc-item,
html[dir="rtl"] .awc-source, html[dir="rtl"] .awc-mirror { font-family: var(--font-ar); }

/* Arrow glyphs point at the reading direction, not a fixed side. */
html[dir="rtl"] .arrow, html[dir="rtl"] .recruit-checks svg { transform: scaleX(-1); }

/* Circl cards: the photo flips side with the logical inset, so its fade must
   flip too - otherwise the mask dissolves the wrong edge and the picture
   collides with the Arabic copy. The decorative faces mirror with it.
   Bounded to the side-by-side layout: below 769px the card stacks, the photo
   is static and unmasked, and these would out-specify that. */
@media (min-width: 769px) {
  html[dir="rtl"] .program-card__img {
    -webkit-mask-image: linear-gradient(270deg, transparent 0%, #000 44%);
    mask-image: linear-gradient(270deg, transparent 0%, #000 44%);
  }
  html[dir="rtl"] .programs__track .program-card::before {
    background-position:
      left 12px top 16px,
      left -30px top 128px,
      right -24px bottom 10px;
  }
}

/* The few remaining physical offsets in the legacy sheet. */
html[dir="rtl"] .auth__list, html[dir="rtl"] .flash ul { padding-inline-start: 16px; padding-inline-end: 0; }
/* The facilitator drawer mirrors like the admin one - it must enter from the
   edge its own burger sits on. */
@media (max-width: 1023px) {
  html[dir="rtl"] .tdash__side { transform: translateX(100%); }
  .tdash__toggle:checked ~ .tdash__side { transform: translateX(0); }
}

/* Directional glyphs that predate the .arrow convention: back/forward arrows
   and drill-in chevrons must point along the reading direction. Down carets
   (.book-select, .tdash-user__caret) are vertical and deliberately excluded. */
html[dir="rtl"] .carousel-nav button svg,
html[dir="rtl"] .assess-back svg,
html[dir="rtl"] .jent__back svg,
html[dir="rtl"] .jcard__read svg,
html[dir="rtl"] .settings__chevron,
html[dir="rtl"] .set-rows svg { transform: scaleX(-1); }

/* Numerals stay Latin inside data tables so IDs and counts remain scannable. */
html[dir="rtl"] .astat__value, html[dir="rtl"] .pager__count,
html[dir="rtl"] .tstat__value { font-variant-numeric: lining-nums; direction: ltr; unicode-bidi: embed; }

html[dir="rtl"] input[type="email"], html[dir="rtl"] input[type="url"],
html[dir="rtl"] input[type="tel"], html[dir="rtl"] input[type="password"],
html[dir="rtl"] input[type="date"], html[dir="rtl"] input[type="number"] {
  direction: ltr; text-align: right;
}

/* =============== DECISION 01.1 - TRUSTED ADULT CONTACT ================== */

/* First-time recommendation modal. A native <dialog> gives dialog semantics,
   a focus trap and top-layer stacking without any z-index bookkeeping. The
   element is rendered with [open] by the server, so the panel is still centred
   and usable when app.js has not upgraded it to showModal(). */
.tamodal {
  position: fixed; inset: 0; margin: auto;
  width: 100%; max-width: min(560px, calc(100vw - 32px));
  max-height: calc(100dvh - 48px);
  padding: 0; border: 0; background: transparent; overflow: visible;
}
.tamodal::backdrop { background: rgba(28, 27, 26, 0.55); }
.tamodal__panel {
  background: var(--white); border-radius: var(--r-md);
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.28);
  padding: 30px; max-height: calc(100dvh - 48px);
  overflow-y: auto; overscroll-behavior: contain;
}
.tamodal__head { display: flex; gap: 12px; align-items: center; margin-bottom: 14px; }
.tamodal__icon { display: inline-flex; flex-shrink: 0; }
.tamodal__heading {
  font-family: var(--font-display); font-size: 22px; line-height: 1.3;
  color: var(--ink); margin: 0;
}
.tamodal__body {
  font-family: var(--font-ui); font-size: 15px; line-height: 1.65;
  color: var(--body); margin: 0;
}
.tamodal__optional {
  font-family: var(--font-ui); font-size: 13px; color: var(--muted); margin: 8px 0 0;
}
.tamodal .tadult-form { margin-top: 22px; }
.tamodal__submit { width: 100%; justify-content: center; }
.tamodal__skip { width: 100%; justify-content: center; margin-top: 12px; }

/* The Settings section keeps its disclosure pattern. */
.tadult-edit > summary { display: inline-flex; cursor: pointer; list-style: none; }
.tadult-edit > summary::-webkit-details-marker { display: none; }

.tadult-form { margin: 20px 0 0; }
.tadult-form__grid {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px; margin-bottom: 18px;
}
.tadult-form input, .tadult-form select {
  width: 100%; font-family: var(--font-ui); font-size: 15px; color: var(--ink);
  padding: 11px 14px; background: var(--white);
  border: 1px solid var(--border); border-radius: var(--r-sm);
}
.tadult-form label {
  display: block; font-family: var(--font-ui); font-size: 14px;
  font-weight: 700; color: var(--ink); margin-bottom: 6px;
}

.tadult-summary {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px 24px; margin: 16px 0 20px; font-family: var(--font-ui);
}
.tadult-summary dt { font-size: 13px; color: var(--muted); margin-bottom: 2px; }
.tadult-summary dd { font-size: 15px; color: var(--ink); margin: 0; word-break: break-word; }
.tadult-empty { font-family: var(--font-ui); font-size: 15px; color: var(--muted); margin: 14px 0 18px; }
.tadult-remove { margin: 16px 0 0; }
.set__hint { font-family: var(--font-ui); font-size: 14px; color: var(--muted); margin: 0 0 4px; }

@media (max-width: 720px) {
  .tadult-form__grid, .tadult-summary { grid-template-columns: 1fr; }
}

/* ============ DECISION 01.1 - FACILITATOR FIRST-TIME SETUP ============== */

.tlogin__first {
  font-family: var(--font-ui); font-size: 14px; color: var(--body);
  text-align: center; margin: 18px 0 0; padding-top: 18px;
  border-top: 1px solid var(--border);
}
.fsteps { list-style: none; display: flex; gap: 10px; margin: 20px 0 22px; padding: 0; }
.fsteps__item {
  display: flex; align-items: center; gap: 8px; flex: 1;
  font-family: var(--font-ui); font-size: 13px; color: var(--muted);
}
.fsteps__item span {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; flex-shrink: 0; border-radius: 50%;
  border: 1px solid var(--border); font-weight: 700; font-size: 12px;
}
.fsteps__item.is-current { color: var(--purple-deep); font-weight: 700; }
.fsteps__item.is-current span { border-color: var(--purple); background: var(--purple); color: var(--white); }
.fsteps__item.is-done span { border-color: var(--green); background: var(--green); color: var(--white); }
.fresend { margin: 14px 0 0; text-align: center; }

/* Grouped digits read better than a cramped field, and stay LTR in Arabic. */
.tlogin__form input[autocomplete="one-time-code"] {
  letter-spacing: .5em; text-align: center; font-size: 20px;
  direction: ltr; unicode-bidi: embed;
}

html[dir="rtl"] .tamodal__heading, html[dir="rtl"] .tamodal__body,
html[dir="rtl"] .tamodal__optional,
html[dir="rtl"] .tadult-summary, html[dir="rtl"] .tadult-form,
html[dir="rtl"] .tadult-empty, html[dir="rtl"] .set__hint,
html[dir="rtl"] .fsteps__item, html[dir="rtl"] .tlogin__first { font-family: var(--font-ar); }

/* Modal responsive + focus polish (Decision 01.1a). */
@media (max-width: 620px) {
  .tamodal { max-width: calc(100vw - 20px); max-height: calc(100dvh - 24px); }
  .tamodal__panel { padding: 22px; max-height: calc(100dvh - 24px); border-radius: var(--r-sm); }
  .tamodal__heading { font-size: 19px; }
  /* Single column so the dialog never scrolls sideways. */
  .tamodal .tadult-form__grid { grid-template-columns: 1fr; }
}

.tamodal__panel :focus-visible { outline: 3px solid rgba(106, 72, 229, 0.45); outline-offset: 2px; }

/* ============= DECISION 01.2b - LIVEWIRE ADMIN TABLE ADDITIONS ========== */
/* Extends the Decision 01 admin conventions for Livewire-driven tables:
   filter chips become buttons, the search box gains a pending indicator, and
   the confirmation dialog reuses the Pilot 1 .tamodal shell. */

.afilter__chip {
  cursor: pointer; font-family: var(--font-ui); line-height: 1.2;
}
button.afilter__chip { appearance: none; }

.asearch { position: relative; align-items: center; }
.asearch__spinner {
  font-family: var(--font-ui); font-size: 12px; color: var(--muted); white-space: nowrap;
}

/* Dim the table while a filter/search/page request is in flight. */
.is-busy { opacity: .55; transition: opacity .12s ease; pointer-events: none; }

.tamodal__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 20px; }
.tamodal__actions .btn { flex: 1 1 auto; justify-content: center; }
.tamodal .pfield { margin-top: 18px; }
.tamodal .pfield textarea {
  width: 100%; font-family: var(--font-ui); font-size: 15px; color: var(--ink);
  padding: 11px 14px; background: var(--white);
  border: 1px solid var(--border); border-radius: var(--r-sm);
}
.tamodal .pfield input {
  width: 100%; min-width: 0; font-family: var(--font-ui); font-size: 15px; color: var(--ink);
  padding: 11px 14px; background: var(--white);
  border: 1px solid var(--border); border-radius: var(--r-sm);
}
.apay-approval-form { margin-top: 18px; }
.apay-duplicate {
  margin-top: 18px; padding: 16px; border: 1px solid #d9a4a4;
  border-radius: var(--r-sm); background: #fff6f6; color: var(--ink);
  font-family: var(--font-ui); font-size: 14px; overflow-wrap: anywhere;
}
.apay-duplicate__title { margin: 0 0 12px; color: #a32828; font-weight: 700; }
.apay-duplicate .adl { margin: 0 0 12px; }
.apay-duplicate > p:last-of-type { margin: 0 0 10px; }
.apay-receipt-number { overflow-wrap: anywhere; }

.atable__actions .alink { white-space: nowrap; }

html[dir="rtl"] .asearch__spinner, html[dir="rtl"] .afilter__chip,
html[dir="rtl"] .apay-approval-form, html[dir="rtl"] .apay-duplicate { font-family: var(--font-ar); }

/* ========== DECISION 01.2c - LIVEWIRE FIRST-LOGIN ADDITIONS ============= */
/* Alpine sets [x-cloak] until it initializes; without this the countdown
   flashes its alternate label on first paint. */
[x-cloak] { display: none !important; }

.fresend .alink[disabled] { color: var(--muted); cursor: default; }

/* ===== Public content pages (Privacy, Terms, Safety, Refund, Help, Contact) ===== */
.content-page { width: 100%; max-width: 860px; }
.content-page__summary { font-size: 19px; line-height: 1.7; color: var(--ink); margin-bottom: 28px; }
.content-page__body { font-size: 16px; line-height: 1.8; color: var(--body); }
.content-page__body h2 { font-size: 28px; line-height: 1.3; color: var(--near-black); margin: 36px 0 12px; }
.content-page__body h3 { font-size: 21px; line-height: 1.35; color: var(--near-black); margin: 28px 0 10px; }
.content-page__body h4 { font-size: 17px; line-height: 1.4; color: var(--near-black); margin: 22px 0 8px; }
.content-page__body p { margin: 0 0 16px; }
.content-page__body ul,
.content-page__body ol { margin: 0 0 16px; padding-inline-start: 22px; }
.content-page__body li { margin-bottom: 8px; }
.content-page__body a { color: var(--purple-deep); text-decoration: underline; }
.content-page__body a:hover { color: var(--violet); }
.content-page__body strong { color: var(--near-black); }
.content-page__body hr { border: 0; border-top: 1px solid var(--border); margin: 32px 0; }
.content-page__meta { margin-top: 40px; padding-top: 20px; border-top: 1px solid var(--border);
  font-size: 14px; color: var(--muted); }
@media (max-width: 640px) {
  .content-page__body h2 { font-size: 23px; }
  .content-page__body h3 { font-size: 19px; }
}

/* ===== Contact Us (form-first layout) ===== */
.contact { padding: 72px 0 100px; background: var(--white); }
.contact__intro { max-width: 720px; margin: 0 auto 40px; text-align: center; }
.contact__intro h1 { font-size: 56px; line-height: 60px; color: var(--near-black); margin: 0 0 14px; }
.contact__intro p { font-size: 18px; line-height: 1.7; color: var(--body); margin: 0; }
.contact__grid { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: 48px; align-items: start; }
.contact__figure img { width: 100%; height: auto; border-radius: var(--r-lg); }
.contact__safety { margin-top: 24px; padding: 22px 24px; background: var(--cream);
  border-radius: var(--r-lg); border-inline-start: 4px solid var(--yellow); }
.contact__safety h2 { font-size: 19px; color: var(--near-black); margin: 0 0 8px; }
.contact__safety p { font-size: 15px; line-height: 1.7; color: var(--body); margin: 0; }

.cform { background: var(--card); border: 1px solid var(--border); border-radius: var(--r-lg);
  padding: 32px; box-shadow: 0 12px 40px rgba(0,0,0,.06); }
.cform__title { font-size: 28px; color: var(--near-black); margin: 0 0 6px; }
.cform__lead { font-size: 15px; line-height: 1.6; color: var(--muted); margin: 0 0 24px; }
.cform .pfield { margin-bottom: 18px; }
.cform__row { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.cform textarea { min-height: 160px; resize: vertical; }
.cform__submit { width: 100%; justify-content: center; margin-top: 6px; }
.cform__privacy { font-size: 13px; line-height: 1.6; color: var(--muted); margin: 16px 0 0; text-align: center; }
.cform__privacy a { color: var(--purple-deep); text-decoration: underline; }
/* Honeypot: removed from layout and from the accessibility tree, never
   display:none alone, so naive bots still fill it in. */
.cform__trap { position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap; border: 0; padding: 0; margin: -1px; }

.contact__support { margin-top: 64px; padding-top: 36px; border-top: 1px solid var(--border); }
.contact__support h2 { font-size: 22px; color: var(--near-black); margin: 0 0 18px; }
.contact__links { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px;
  list-style: none; padding: 0; margin: 0; }
.contact__links li { display: flex; flex-direction: column; gap: 4px; }
.contact__links a { font-weight: 700; color: var(--purple-deep); text-decoration: none; }
.contact__links a:hover { text-decoration: underline; }
.contact__links span { font-size: 14px; line-height: 1.6; color: var(--muted); }
.contact__editorial { margin-top: 56px; max-width: 780px; }

@media (max-width: 900px) {
  .contact__grid { grid-template-columns: 1fr; gap: 32px; }
  .contact__links { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .contact { padding: 44px 0 72px; }
  .contact__intro h1 { font-size: 34px; line-height: 40px; }
  .cform { padding: 22px; }
  .cform__row { grid-template-columns: 1fr; gap: 0; }
}

/* ========= BOOKING - SHARED CONTROLS (Decision 06 / QA-FIX-03) =========== */
/*
  Pill selects, availability badges, review rows and the empty-state card
  shared by the canonical booking screens (Screens 1–4), Billing History and
  the admin settings page. They were born on the browse-all list at /booking,
  in the marketing site's visual language - pill controls, soft cards,
  generous radii - rather than the admin shell's compact table language. That
  list was retired in Phase 3H (/booking is now a compatibility redirect), and
  its track tabs, filter toolbar, offering rows, on-demand review panel and
  pager rules went with it. Everything below stays scoped to .book-* /
  .offering__stars so no admin or My Space surface is affected.
*/

/* Native <select>, restyled - Screen 3's facilitator filter. No JavaScript
   dropdown was built for cosmetics. The chevron is a pseudo-element rather
   than a background-image, so its placement follows inset-inline-end and
   needs no RTL override. Its own two borders are physical because a downward
   chevron is direction-neutral. */
.book-select { position: relative; display: flex; }
.book-select::after {
  content: ""; position: absolute; inset-inline-end: 22px; top: 50%;
  width: 9px; height: 9px; margin-top: -6px;
  border-right: 2px solid var(--muted); border-bottom: 2px solid var(--muted);
  transform: rotate(45deg); pointer-events: none;
}
.book-select select {
  -webkit-appearance: none; appearance: none;
  width: 100%; height: 52px;
  padding-inline: 22px 46px;
  font-family: var(--font-ui); font-size: 14px; color: var(--ink);
  background: var(--white); border: 0; border-radius: var(--r-pill);
  box-shadow: inset 0 0 0 1.5px var(--border);
  outline: none; cursor: pointer;
}
.book-select select:hover { box-shadow: inset 0 0 0 1.5px var(--purple); }
.book-select select:focus-visible { box-shadow: inset 0 0 0 2px var(--purple); }

/* The published-rating star on Screen 3's option cards and Screen 4. */
.offering__stars { color: var(--yellow); }

/* --------------------------- Availability badge ------------------------- */
.book-badge {
  display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--font-ui); font-size: 13px; font-weight: 700;
  padding: 8px 15px; border-radius: var(--r-pill);
}
.book-badge::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex-shrink: 0; }
.book-badge--open { background: #eaf9f2; color: #16794f; }
.book-badge--low { background: #fff6e0; color: #8a5b00; }
.book-badge--none { background: #fdecea; color: #a12d20; }

/* ------------------------------ Review rows ----------------------------- */
/* Screen 4's latest published reviews: rating, the neutral verified label,
   the date and the body - never a participant identity. */
.book-review { display: grid; gap: 6px; padding-block-end: 16px; border-block-end: 1px solid var(--border); }
.book-review:last-child { padding-block-end: 0; border-block-end: 0; }
.book-review__head { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font-family: var(--font-ui); font-size: 13px; color: var(--muted); }
.book-review__rating { font-weight: 700; color: var(--ink); }
.book-review__verified { font-weight: 700; color: var(--purple-deep); }
.book-review__body { font-family: var(--font-ui); font-size: 14.5px; line-height: 1.65; color: var(--body); margin: 0; white-space: pre-line; }

/* ------------------------------ Empty state ----------------------------- */
.book-empty {
  background: var(--white); border-radius: var(--r-md); box-shadow: var(--dash-card-shadow);
  padding: 48px 32px; display: grid; gap: 12px; justify-items: center; text-align: center;
}
.book-empty__title { font-family: var(--font-display); font-weight: 700; font-size: 21px; color: var(--ink); margin: 0; }
.book-empty__body { font-family: var(--font-ui); font-size: 15px; line-height: 1.6; color: var(--muted); margin: 0; max-width: 420px; }

/* ------------------------ Back link (Billing History) ------------------- */
.book-back { margin: 28px 0 0; text-align: center; font-family: var(--font-ui); font-size: 14px; }

@media (max-width: 720px) {
  .book-badge { align-self: flex-start; }
}

html[dir="rtl"] .book-select select, html[dir="rtl"] .book-badge,
html[dir="rtl"] .book-empty__body, html[dir="rtl"] .book-review__body { font-family: var(--font-ar); }

/* Derived seat counts on the admin offering detail (Decision 06) are styled
   with the key/value tiles (.akv.aseats) in the admin offering block below. */

/* ============ DECISION 07 - MEMBERSHIP PANEL (My Space) ================= */
/*
  Reuses the existing .dash-card, .adl, .abadge and .recruit-checks systems;
  only the state line and the benefit spacing are new.
*/

/* Air between the card heading and the state line ("Membership active"). */
.mship__state { font-family: var(--font-ui); font-size: 15px; color: var(--body); margin: 14px 0 16px; display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.mship__benefits { margin-top: 10px; }
.mship__benefits .abadge { margin-inline-start: 8px; }

/* The two member surfaces as compact icon buttons, with air below so the
   renewal row never sits flush against them. */
.mship__links { display: flex; flex-wrap: wrap; gap: 12px; margin-block: 16px 18px; }
.mship__links .btn { height: 44px; padding: 0 20px; font-size: 13px; gap: 10px; }
.mship__links .btn svg { width: 16px; height: 16px; flex-shrink: 0; }

/* Remaining secured Membership time on a 30-day horizon. The fill anchors
   to the inline start, so RTL depletes naturally in the other direction. */
.mship-progress { margin-top: 18px; }
.mship-progress__track { height: 8px; border-radius: var(--r-pill); background: #ece7f4; overflow: hidden; }
.mship-progress__fill { display: block; height: 100%; border-radius: var(--r-pill); background: #23B33A; transition: width 0.3s ease; }
.mship-progress__fill.is-warning { background: #e8a13a; }
.mship-progress__fill.is-urgent { background: #dc2626; }
.mship-progress__meta { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 4px 16px; margin: 8px 0 0; font-family: var(--font-ui); font-size: 12px; color: var(--muted); }
.mship-progress__days { font-weight: 700; color: var(--near-black); }
.mship-progress__days.is-warning { color: #b47712; }
.mship-progress__days.is-urgent { color: #dc2626; }

html[dir="rtl"] .mship-progress__meta { font-family: var(--font-ar); }

/* Stop renewing: a small, quiet danger control at the card's end - hint at
   the reading start, button at the end. Wraps on narrow screens. */
.mship__stop-row { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px 16px; margin-top: 18px; }
.mship__stop-row .field-hint { margin: 0; flex: 1 1 260px; }
/* Renew + Stop pair; margin-inline-start keeps the pair at the inline end
   even when no hint is rendered on the row. */
.mship__stop-actions { display: flex; align-items: center; gap: 10px; margin-inline-start: auto; }
.mship__stop-actions .btn { height: 44px; padding: 0 20px; font-size: 13px; }
/* Same geometry as the Renew button beside it - the two read as one pair of
   decisions. Only COLOUR marks this one as the destructive choice, never a
   smaller hit area. */
.mship__stop {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  height: 44px;
  padding: 0 20px;
  cursor: pointer;
  font-family: var(--font-ui); font-weight: 600; font-size: 13px;
  color: #dc2626; background: transparent;
  border: 0; box-shadow: inset 0 0 0 1px #dc2626;
  border-radius: var(--r-pill);
  transition: background 0.15s ease, color 0.15s ease;
}
.mship__stop:hover { background: #dc2626; color: var(--white); }

html[dir="rtl"] .mship__stop { font-family: var(--font-ar); }

html[dir="rtl"] .mship__state { font-family: var(--font-ar); }

/* The compact My Space summary (client feedback, phase 2): status badge,
   remaining secured time in the same warning/urgent tiers as the panel's
   progress bar, and one next step. Sized for the 288px sidebar track. */
.mship-summary__status { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.mship-summary__none { font-family: var(--font-ui); font-size: 14px; color: var(--body); }
.mship-summary__days { margin-top: 14px; font-family: var(--font-display); font-weight: 700; font-size: 24px; line-height: 1.1; letter-spacing: -0.3px; color: var(--near-black); }
.mship-summary__days.is-warning { color: #b47712; }
.mship-summary__days.is-urgent { color: #dc2626; }
.mship-summary__meta { margin-top: 6px; font-family: var(--font-ui); font-size: 13px; line-height: 1.5; color: var(--body); }
.mship-summary__actions { display: grid; gap: 10px; margin-top: 16px; }
/* The facilitator proposal form: five short sections, each one decision.
   Choices are native radios inside labelled tiles - neither ever pre-selected
   (NF-4, NF-9). Every track is minmax(0, 1fr) and every tile min-width: 0, so
   a long localized label wraps instead of widening the form (the grid-item
   lesson from NF-2.1). Selectors carry .proposal-form so they outrank the
   generic `.aform label` block style, which used to flatten the tiles. */
.acard--form .aform.proposal-form .proposal-form__section { display: flex; flex-direction: column; gap: 14px; padding: 20px 22px; }
.proposal-form__section h3 { margin: 0; font-family: var(--font-display); font-size: 16px; line-height: 1.3; color: var(--ink); }
.proposal-form__section h3 label { display: inline; margin: 0; font: inherit; color: inherit; }
.proposal-form__grid { display: grid; gap: 16px 22px; min-width: 0; }
.proposal-form__grid > * { min-width: 0; }
.proposal-form input[type="datetime-local"] {
  width: 100%; font-family: var(--font-ui); font-size: 15px; color: var(--ink);
  padding: 11px 14px; background: var(--white); border: 1px solid var(--border); border-radius: var(--r-sm);
}
.proposal-form .pfield textarea { min-height: 96px; }
@media (min-width: 720px) {
  .proposal-form__grid--schedule { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .proposal-form__grid--schedule > :first-child { grid-column: 1 / -1; }
  .proposal-form__grid--group { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); align-items: start; }
}
@media (min-width: 1180px) {
  .proposal-form__grid--schedule { grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, 1fr); }
  .proposal-form__grid--schedule > :first-child { grid-column: auto; }
}

.proposal-choice { min-width: 0; margin: 0; padding: 0; border: 0; display: grid; gap: 10px; }
.proposal-choice legend { padding: 0; margin: 0 0 4px; }
.proposal-choice > .field-hint { margin: 0; }
.proposal-choice__options { display: grid; gap: 10px; min-width: 0; }
.proposal-choice__options--cards { grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); }
.proposal-choice__options--compact { grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); max-width: 760px; }
.proposal-form .proposal-choice__option {
  display: flex; align-items: flex-start; gap: 12px; min-width: 0; margin: 0; padding: 14px 16px;
  border-radius: 14px; cursor: pointer; background: var(--white); box-shadow: inset 0 0 0 1px var(--border);
  font-weight: 400; transition: box-shadow .15s ease, background-color .15s ease;
}
.proposal-form .proposal-choice__options--compact .proposal-choice__option { padding: 11px 14px; }
.proposal-form .proposal-choice__option:hover { box-shadow: inset 0 0 0 1px var(--purple-deep); }
.proposal-choice__option input { flex-shrink: 0; width: 18px; height: 18px; margin: 2px 0 0; accent-color: var(--purple-deep); }
.proposal-choice__option > span { display: grid; gap: 2px; min-width: 0; }
.proposal-choice__option strong { font-family: var(--font-ui); font-size: 15px; color: var(--near-black); overflow-wrap: anywhere; }
.proposal-choice__option .field-hint { margin: 0; }
.proposal-form .proposal-choice__option:has(input:checked) { box-shadow: inset 0 0 0 2px var(--purple-deep); background: rgba(81, 40, 204, 0.04); }
.proposal-form .proposal-choice__option:has(input:focus-visible) { outline: 2px solid var(--purple-deep); outline-offset: 2px; }

/* Minimum and maximum read as ONE concept: the group size. */
.proposal-capacity { display: grid; gap: 10px; min-width: 0; padding: 14px 16px 16px; border-radius: 14px; box-shadow: inset 0 0 0 1px var(--border); }
.proposal-capacity__title { margin: 0; font-family: var(--font-ui); font-size: 13px; font-weight: 700; color: var(--muted); }
.proposal-capacity__pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 96px), 1fr)); gap: 12px 14px; }
.proposal-capacity__pair > .pfield { min-width: 0; }
.proposal-form__problems { margin: 0; }
@media (max-width: 620px) {
  .acard--form .aform.proposal-form .proposal-form__section { padding: 16px 14px; }
  .proposal-capacity { padding: 12px; }
}
html[dir="rtl"] .proposal-choice__option strong, html[dir="rtl"] .proposal-capacity__title { font-family: var(--font-ar); }

/* NF-3: the guidance note's optional private attachment. */
.guidance-attachment { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 14px; }
.guidance-attachment .btn { min-width: 0; height: 42px; padding: 0 16px; font-size: 13px; gap: 8px; }
.guidance-attachment .btn svg { flex-shrink: 0; }
.guidance-attachment a { overflow-wrap: anywhere; }
/* NF-3: the member surfaces on Home. The two links are longer than any label
   .btn was sized for: at the 288px sidebar they measured 6-7px wider than
   their pill, so the text and icon ran over the border. They stack full
   width, wrap inside the pill when a label (or its Arabic) needs a second
   line, and share one row height. */
.mship-summary__benefits { display: grid; grid-auto-rows: 1fr; gap: 10px; margin-top: 14px; }
.mship-summary__benefits .btn { width: 100%; min-width: 0; height: auto; min-height: 44px; padding: 10px 18px; font-size: 13px; letter-spacing: 0.3px; line-height: 1.3; white-space: normal; text-align: center; gap: 8px; }
.mship-summary__benefits .btn svg { width: 16px; height: 16px; flex-shrink: 0; }
.mship-summary__actions .btn { width: 100%; height: 44px; padding: 0 16px; font-size: 13px; letter-spacing: 0.3px; }
.mship-summary__actions .btn--outline,
.mship-summary__benefits .btn--outline { box-shadow: inset 0 0 0 1px var(--border); color: var(--near-black); }
.mship-summary__actions .btn--outline:hover,
.mship-summary__benefits .btn--outline:hover { background: var(--near-black); color: var(--white); }
.mship-summary__more { margin-top: 14px; font-family: var(--font-ui); font-size: 13px; }
.mship-summary__more .alink { font-size: 13px; }
html[dir="rtl"] .mship-summary__none, html[dir="rtl"] .mship-summary__meta,
html[dir="rtl"] .mship-summary__more { font-family: var(--font-ar); }

/* The /membership explanation page - one wide plan-card reused as a plain,
   start-aligned document. The featured card's raised margin only makes sense
   inside the three-card pricing row, so it is reset here. */
.flow__lead { font-family: var(--font-ui); font-size: 17px; line-height: 1.7; color: var(--body); text-align: center; max-width: 640px; margin: -16px 0 0; }
.pricing-grid--solo .plan-card { max-width: 620px; }
.mship-explain { margin-block: 0; align-items: stretch; text-align: start; }
.mship-explain h3 { margin-top: 0; }
.mship-explain .plan-card__tagline { margin: 10px 0 20px; }
.mship-explain .acard__sub { margin-top: 26px; font-size: 18px; }
.mship-explain__note { margin: 16px 0 0; }
.mship-explain form { margin-top: auto; }
.mship-explain form .btn, .mship-explain > .btn { margin-top: 24px; width: 100%; }

html[dir="rtl"] .flow__lead { font-family: var(--font-ar); }


/* ============== DASHBOARD UI CONSOLIDATION (Admin + Facilitator) ==============
   One shared system for the operational pages of BOTH dashboards: wide
   responsive form grids, one filter/action toolbar (.abar), one table card
   language (already .atable-wrap), one numbered pagination (.dpager), one
   empty state (.aempty) and semantic badge aliases. Purely presentational --
   every control keeps its name, wire model and request payload. */

/* ---- Form pages: use the width. Two readable columns from 900px up; the
   grid never splits a field that genuinely needs the full row (sections,
   textareas, uploads, previews, action bars). .aform--decide stays compact --
   those are small inline decision forms on detail pages. ---- */
@media (min-width: 900px) {
  .acard--form .aform:not(.aform--decide) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 28px;
    align-items: start;
  }
  .acard--form .aform:not(.aform--decide) > h2,
  .acard--form .aform:not(.aform--decide) > .acard__sub,
  .acard--form .aform:not(.aform--decide) > .acard__lead,
  .acard--form .aform:not(.aform--decide) > .field-hint,
  .acard--form .aform:not(.aform--decide) > .afilter,
  .acard--form .aform:not(.aform--decide) > .pform-section,
  .acard--form .aform:not(.aform--decide) > .atable-wrap,
  .acard--form .aform:not(.aform--decide) > .acard,
  .acard--form .aform:not(.aform--decide) > .recruit-checks,
  .acard--form .aform:not(.aform--decide) > .aform__actions,
  .acard--form .aform:not(.aform--decide) > button,
  .acard--form .aform:not(.aform--decide) > .flash,
  .acard--form .aform:not(.aform--decide) > fieldset,
  .acard--form .aform:not(.aform--decide) > .adl,
  .acard--form .aform:not(.aform--decide) > .pfield.full,
  .acard--form .aform:not(.aform--decide) > .pfield:has(textarea),
  .acard--form .aform:not(.aform--decide) > .pfield:has(input[type="file"]),
  .acard--form .aform:not(.aform--decide) > .pfield:has(.aprice-breakdown),
  .acard--form .aform:not(.aform--decide) > .pfield:has(.set-upload) { grid-column: 1 / -1; }

  /* Sections keep their own two-column field grid; the title and its lead
     hint span the section. */
  .acard--form .aform .pform-section {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px 28px;
  }
  .acard--form .aform .pform-section > h3,
  .acard--form .aform .pform-section > .field-hint,
  .acard--form .aform .pform-section > .pfield.full,
  .acard--form .aform .pform-section > .pfield:has(textarea) { grid-column: 1 / -1; }
}
/* Inside the admin shell the section is a grouping, not a second card. */
.acard--form .aform .pform-section { box-shadow: inset 0 0 0 1px var(--border); border-radius: var(--r-md); }
.acard--form .aform .pform-section h3 { margin: 0; font-family: var(--font-display); font-size: 16px; color: var(--ink); }

/* Save/Cancel rows: primary first in reading order, danger separated to the
   far edge. */
.aform__actions { align-items: center; }
.aform__actions .alink--danger { margin-inline-start: auto; }
@media (max-width: 620px) {
  .aform__actions { flex-direction: column; align-items: stretch; }
  .aform__actions .btn { text-align: center; }
  .aform__actions .alink--danger { margin-inline-start: 0; }
}

/* ---- The list toolbar: search + filters at the start, page actions at the
   logical end. Replaces the old 520px .asearch strip on list pages. ---- */
.abar { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-bottom: 20px; }
.abar__filters { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; flex: 1 1 340px; min-width: 0; }
.abar__filters input[type="search"], .abar__filters input[type="text"] { flex: 1 1 220px; max-width: 400px; }
.abar__filters select { width: auto; min-width: 150px; }
.abar input, .abar select { padding-block: 10px; }
.abar__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-inline-start: auto; }
.abar .btn { padding: 10px 22px; }
@media (max-width: 620px) {
  .abar__filters > * { flex: 1 1 100%; }
  .abar__filters input[type="search"], .abar__filters input[type="text"] { max-width: none; }
  .abar__filters select { width: 100%; }
  .abar__actions { width: 100%; margin-inline-start: 0; }
  .abar__actions .btn { flex: 1 1 auto; text-align: center; }
}

/* ---- One dashboard pagination (.dpager): numbered, purple current page,
   result summary, logical-direction safe. Rendered exclusively by
   partials/dash-pagination.blade.php. ---- */
.dpager { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; margin-top: 22px; font-family: var(--font-ui); }
.dpager__summary { margin: 0; font-size: 13px; color: var(--muted); }
.dpager__list { list-style: none; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0; margin-inline-start: auto; padding: 0; }
.dpager__btn {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 38px; height: 38px; padding: 0 12px;
  border: 1px solid var(--border); border-radius: 12px;
  background: var(--white); color: var(--ink);
  font-family: inherit; font-size: 14px; font-weight: 700; cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
a.dpager__btn { text-decoration: none; }
.dpager__btn:hover { border-color: var(--purple); color: var(--purple-deep); background: #f6f2ff; }
.dpager__btn:focus-visible { outline: 3px solid rgba(106, 72, 229, .35); outline-offset: 1px; }
.dpager__btn.is-current { background: var(--purple); border-color: var(--purple); color: var(--white); cursor: default; }
.dpager__btn.is-disabled, .dpager__btn:disabled { color: var(--muted); background: var(--cream); cursor: default; pointer-events: none; }
.dpager__gap { min-width: 24px; text-align: center; color: var(--muted); font-weight: 700; }
@media (max-width: 620px) {
  .dpager { justify-content: center; }
  .dpager__summary { flex: 1 1 100%; text-align: center; }
  .dpager__list { margin-inline: auto; }
}
html[dir="rtl"] .dpager__summary { font-family: var(--font-ar); }
/* Page numbers stay Latin and LTR, like every other count in the shell. */
html[dir="rtl"] .dpager__btn { direction: ltr; unicode-bidi: embed; font-variant-numeric: lining-nums; }

/* ---- One empty state. The bare <p class="aempty"> pages inherit this too;
   inside an existing card it flattens to plain centred copy. ---- */
.aempty {
  display: block; margin: 0; padding: 40px 22px; text-align: center;
  font-family: var(--font-ui); font-size: 15px; color: var(--muted);
  background: var(--white); border-radius: var(--r-md); box-shadow: 0 3px 18px rgba(0,0,0,.06);
}
.aempty p { margin: 0; }
.aempty svg { display: inline-block; margin-bottom: 10px; color: var(--purple); opacity: .55; }
.acard .aempty, .atable-wrap .aempty { background: transparent; box-shadow: none; padding: 26px 12px; }

/* ---- Semantic badge aliases: map any status to one of five variants
   without inventing new palettes. ---- */
.abadge--success { background: #eaf9f2; color: #16794f; }
.abadge--warning { background: #fff6e0; color: #8a5b00; }
.abadge--danger { background: #fdecea; color: #a12d20; }
.abadge--info { background: #eef0fd; color: #4338ca; }
.abadge--neutral { background: var(--card); color: var(--muted); }

/* ---- Admin schedule agenda filters: one compact row of controls, not a
   stack of full-width fields. ---- */
.aschedule-filters { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 14px 18px; align-items: end; }
.aschedule-filters .pfield { gap: 6px; }
.aschedule-filters .pfield label { font-family: var(--font-ui); font-size: 13px; font-weight: 700; color: var(--ink); }
.aschedule-filters .aform__actions { align-self: end; }
@media (max-width: 620px) { .aschedule-filters { grid-template-columns: 1fr 1fr; } .aschedule-filters .aform__actions { grid-column: 1 / -1; } }

/* ---- CMS-3 · Admin Website Content editor.
   Reuses the admin system above - .acard, .aform, .pfield, .afilter, .abadge,
   .atable - and adds only what the four-tab editor genuinely needs: the tab
   bar's selected state, repeater item framing, image slot layout, and the
   read-only panels for content another domain owns. No new colour tokens. ---- */
.awc-tabs { margin: 0 0 18px; gap: 10px; }
.awc-tabs .afilter__chip[aria-selected="true"] { font-weight: 800; }
.awc-panel { display: grid; gap: 0; }
.awc-panel > .acard:last-of-type { margin-bottom: 22px; }

.awc-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px 18px; padding-block: 16px; }
.awc-head__title { margin: 0; font-family: var(--font-display); font-size: 20px; color: var(--ink); }
.awc-head__state { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 10px; }
.awc-head__badges { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0; }

.awc-optional { font-weight: 500; color: var(--muted); font-size: 13px; margin-inline-start: 6px; }
.awc-count { color: var(--muted); margin-inline-start: 8px; }
.awc-fallback { color: var(--muted); font-style: italic; }

.awc-problems { margin: 8px 0 0; padding-inline-start: 20px; display: grid; gap: 4px; }

/* A repeater item is framed so its boundaries are obvious when several sit in
   a row, and so the move/remove controls clearly belong to one item. */
.awc-repeater { display: grid; gap: 16px; }
.awc-repeater__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; margin: 0; }
.awc-item { display: grid; gap: 14px; padding: 16px; border: 1px solid var(--border); border-radius: var(--r-sm); }
.awc-item__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.awc-item__actions { display: flex; align-items: center; gap: 12px; }

.awc-slot__body { display: grid; grid-template-columns: minmax(0, 260px) minmax(0, 1fr); gap: 22px; align-items: start; }
.awc-slot__preview { position: relative; display: grid; place-items: center; min-height: 150px; padding: 12px; border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--cream); }
.awc-slot__preview img { max-width: 100%; height: auto; border-radius: var(--r-sm); }
.awc-slot__empty { margin: 0; color: var(--muted); font-size: 14px; }
.awc-slot__detail { display: grid; gap: 14px; }
.awc-slot__source { position: absolute; inset-inline-start: 10px; bottom: 10px; }
.awc-file { display: grid; grid-template-columns: max-content minmax(0, 1fr); align-items: center; gap: 8px 12px; min-width: 0; }
.awc-file .pfield__label, .awc-file .field-hint, .awc-file .pfield__error { grid-column: 1 / -1; }
.awc-file__choose { display: inline-flex; align-items: center; gap: 8px; width: max-content; max-width: 100%; padding: 10px 14px; border: 1px solid var(--purple); border-radius: var(--r-sm); color: var(--purple-deep); background: var(--white); cursor: pointer; font-family: var(--font-ui); font-size: 13px; font-weight: 700; }
.awc-file__choose:hover { background: #faf7ff; }
.awc-file input.visually-hidden { width: 1px; height: 1px; padding: 0; }
.awc-file input:focus-visible + .awc-file__choose { outline: 3px solid var(--yellow); outline-offset: 2px; }
.awc-file__choose svg, .awc-slot .btn svg, .awc-sec--canonical .btn svg { width: 18px; height: 18px; flex: 0 0 auto; }
.awc-file__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted); font-family: var(--font-ui); font-size: 12px; unicode-bidi: isolate; }
.awc-slot .btn, .awc-sec--canonical .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; }

/* Read-only panels: visibly not an input, so nobody looks for a save button. */
.awc-source, .awc-mirror { padding: 14px 16px; border: 1px dashed var(--border); border-radius: var(--r-sm); display: grid; gap: 6px; }
.awc-source + .awc-source { margin-top: 12px; }
.awc-source__owner, .awc-source__text, .awc-mirror__label { margin: 0; }
.awc-mirror__label { font-weight: 700; font-size: 14px; }

/* Grid and flex children default to min-width:auto, which refuses to shrink
   below their content and pushes the whole editor wider than a phone viewport.
   Every container the editor introduces opts out explicitly. */
.awc-panel, .awc-panel > *, .awc-repeater > *, .awc-item > *,
.awc-item__bar > *, .awc-slot__detail > *, .awc-head__state > *,
.awc-source > *, .awc-mirror > * { min-width: 0; }

/* A long unbroken string an admin pastes must wrap rather than widen the page. */
.awc-source__text, .awc-mirror__label, .awc-problems li { overflow-wrap: anywhere; }

@media (max-width: 900px) { .awc-slot__body { grid-template-columns: 1fr; } }
@media (max-width: 620px) {
  .awc-tabs { gap: 8px; }
  .awc-item { padding: 12px; }
  .awc-item__bar { align-items: flex-start; }
}

/* ---- CMS-3.5 · Website Content usability.
   Index summary, filter bar, responsive rows, the purple live-page eye, the
   dashboard shortcut, and the editor's sticky tab bar and action row. All built
   on the admin tokens and classes above; no new colour is introduced. ---- */

/* The eye means exactly one thing everywhere in this admin: open the public
   page. Compact on purpose so it never outweighs the row's primary action. */
.awc-eye {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; flex: 0 0 auto;
  border-radius: var(--r-sm); background: var(--purple); color: var(--white);
  transition: background .15s ease, transform .15s ease;
}
.awc-eye:hover { background: var(--purple-deep); }
.awc-eye:focus-visible { outline: 3px solid var(--yellow); outline-offset: 2px; }
.awc-eye[data-tooltip] { position: relative; }
.awc-eye svg { display: block; }

/* ---- Index ---- */
.awc-summary { margin-bottom: 18px; }
.awc-summary .astat { padding: 0; }
.awc-summary__cell { display: block; padding: 18px 22px; }

.awc-group { padding-block: 20px; }
.awc-group__head { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }

.awc-row__name { display: block; font-size: 15px; }

/* Column widths. Actions is fixed so no label length can change a row shape;
   the two short columns are sized to their content so the page name absorbs
   the slack instead of every column drifting apart. */
.awc-table__actions-head, .awc-table__actions { width: 140px; text-align: end; }
.awc-table__owner { width: 20%; min-width: 120px; }
.awc-table__state { width: 18%; min-width: 130px; }
.awc-toolbar { display: flex; align-items: center; justify-content: flex-end; gap: 8px; }

/* This table never needs a horizontal scrollbar: it fits above the breakpoint
   and becomes stacked cards below -t. Leaving the scroll container in place
   cost a-permanent 42px scrollbar — the hidden tooltips count toward scroll
   width — and would have clipped every tooltip that opened above a row. */
.awc-group .atable-wrap { overflow: visible; }

/* Below this width the table becomes a stack of cards. Same markup, -o the row
   an admin reads on a phone is the row that was tested on a desktop — and the
   primary action is reachable without scrolling anything sideways. */
@media (max-width: 860px) {
  .awc-table, .awc-table tbody, .awc-table tr, .awc-table td, .awc-table th { display: block; }
  .awc-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .awc-table tbody tr {
    border: 1px solid var(--border); border-radius: var(--r-sm);
    padding: 14px; margin-bottom: 12px; display: grid; gap: 8px;
  }
  .awc-table tbody tr + tr td { border-top: 0; }
  .awc-table td, .awc-table th { padding: 0; border: 0; text-align: start; }
  .awc-table td[data-label]::before {
    content: attr(data-label) ": ";
    font-family: var(--font-ui); font-size: 12px; color: var(--muted);
  }
  .awc-table td:last-child::before { content: none; }
  /* Still one compact row of icons, never full-width buttons. Aligned to
     the reading direction so the first action is where the eye starts. */
  .awc-table__actions { width: auto; text-align: start; }
  .awc-toolbar { justify-content: flex-start; margin-top: 4px; }
}

/* ---- Dashboard shortcut ---- */
/* The stats grid above sets no bottom margin and .acard sets no top one, so
   this card sat flush against the numbers. Matches the 20px rhythm .ahome
   already uses between the dashboard blocks below it. */
.awc-shortcut { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-top: 20px; }
.awc-shortcut__icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 46px; height: 46px; flex: 0 0 auto;
  border-radius: var(--r-sm); background: #f3eefe; color: var(--purple-deep);
}
.awc-shortcut__text { flex: 1 1 220px; min-width: 0; }
.awc-shortcut__text .acard__title, .awc-shortcut__text .acard__lead { margin: 0; }
.awc-shortcut .btn { flex: 0 0 auto; }

/* ---- Editor: sticky tab bar ---- */
.awc-tabs-dock {
  position: sticky; top: 0; z-index: 3;
  margin: 0 0 18px; padding: 10px 0;
  background: var(--cream);
  border-bottom: 1px solid var(--border);
}
.awc-tabs { margin: 0; }

/* ---- Editor: collapsible sections.
   One flat list of headers instead of a stack of open cards. A closed body
   keeps its fields in the DOM so no unsaved value is lost, and costs zero
   height because the hidden contract at the top of this file makes it so. ---- */
.awc-sections { display: grid; gap: 10px; margin-bottom: 18px; }
.awc-sec { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-sm); overflow: hidden; }
.awc-sec.is-open { border-color: var(--purple); }
.awc-sec__head { margin: 0; font-size: inherit; font-weight: inherit; }
.awc-sec__toggle {
  width: 100%; display: flex; align-items: center; gap: 12px;
  padding: 14px 18px; background: none; border: 0; cursor: pointer;
  font-family: var(--font-ui); font-size: 15px; font-weight: 700; color: var(--ink);
  text-align: start;
}
.awc-sec__toggle:hover { background: #faf7ff; }
.awc-sec__toggle:focus-visible { outline: 3px solid var(--yellow); outline-offset: -3px; }
.awc-sec__chevron { display: inline-flex; flex: 0 0 auto; color: var(--purple-deep); transition: transform .15s ease; }
.awc-sec.is-open .awc-sec__chevron { transform: rotate(90deg); }
/* Mirrored, so the closed chevron always points along the reading direction. */
html[dir="rtl"] .awc-sec__chevron { transform: scaleX(-1); }
html[dir="rtl"] .awc-sec.is-open .awc-sec__chevron { transform: scaleX(-1) rotate(-90deg); }
.awc-sec__name { flex: 1 1 auto; min-width: 0; }
.awc-sec__body { display: grid; gap: 18px; padding: 4px 18px 20px; border-top: 1px solid var(--border); }
.awc-elsewhere { margin-top: 4px; }

/* ---- Editor: sticky actions ---- */
.awc-actions {
  position: sticky; bottom: 0; z-index: 2;
  margin-top: 8px; padding: 12px 0;
  background: var(--cream); border-top: 1px solid var(--border);
}
.awc-actions .aform__actions { flex-wrap: wrap; margin: 0; }
.awc-actions__hint { color: var(--muted); font-family: var(--font-ui); font-size: 12px; flex: 1 1 200px; }

/* Editor help is visible to both pointer and keyboard users. It uses the same
   compact dark tooltip language as the Website Content row actions. */
.awc-help[data-tooltip] { position: relative; }
.awc-help[data-tooltip]::after {
  content: attr(data-tooltip); display: none; position: absolute;
  bottom: calc(100% + 8px); inset-inline-start: 0; width: max-content;
  max-width: min(320px, calc(100vw - 32px)); padding: 7px 10px;
  border-radius: var(--r-sm); background: var(--ink); color: var(--white);
  font-family: var(--font-ui); font-size: 12px; font-weight: 500; line-height: 1.4;
  white-space: normal; text-align: start; pointer-events: none; z-index: 8;
}
.awc-help[data-tooltip]:hover::after, .awc-help[data-tooltip]:focus-visible::after { display: block; }
.awc-head__state .awc-help[data-tooltip]::after { inset-inline-start: auto; inset-inline-end: 0; }
html[dir="rtl"] .awc-help[data-tooltip]::after { font-family: var(--font-ar); }

.awc-subhead { font-family: var(--font-display); font-size: 18px; color: var(--ink); margin: 22px 0 12px; }

/* ---- Editor: search preview ---- */
.awc-preview {
  border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: 14px 16px; margin-bottom: 18px; background: var(--white);
}
.awc-preview p { margin: 0 0 4px; }
.awc-preview__note { font-family: var(--font-ui); font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }
.awc-preview__title { font-size: 17px; color: var(--purple-deep); overflow-wrap: anywhere; }
.awc-preview__url { font-family: var(--font-ui); font-size: 12px; color: var(--green); overflow-wrap: anywhere; }
.awc-preview__body { font-size: 13px; color: var(--body); overflow-wrap: anywhere; }

@media (max-width: 620px) {
  .awc-tabs-dock { padding: 8px 0; }
  .awc-actions { padding: 10px 0; }
  .awc-shortcut .btn { width: 100%; }
  .awc-head, .awc-head__state { align-items: flex-start; }
  .awc-head__state { justify-content: flex-start; width: 100%; }
  .awc-file { grid-template-columns: 1fr; }
  .awc-file__name { white-space: normal; overflow-wrap: anywhere; }
  .awc-slot .aform__actions .btn { width: 100%; }
}

/* Arabic face for the content this module renders, like every admin block. */
html[dir="rtl"] .awc-sec, html[dir="rtl"] .awc-preview,
html[dir="rtl"] .awc-tooltip-host::after, html[dir="rtl"] .awc-shortcut__text { font-family: var(--font-ar); }

/* ---- CMS-4 · Row action controls and their tooltips.
   Every action is the same square whatever it does, so the Actions column lands
   on one grid and a long label can never stretch a row. Meaning is carried by
   the icon and the tooltip, and emphasis by fill rather than by size. ---- */
.awc-act {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; flex: 0 0 auto;
  border-radius: var(--r-sm); border: 1px solid transparent;
  transition: background .15s ease, border-color .15s ease, color .15s ease;
}
.awc-act svg { display: block; }

/* Filled: the row's management destination. */
.awc-act--solid { background: var(--purple); color: var(--white); }
.awc-act--solid:hover { background: var(--purple-deep); }

/* Tinted: the canonical owner that supplies what this editor does not. A third
   weigh- between the two, so a hybrid row reads as edit-here, manage-there,
   view — three jobs, three weights, still three identical squares. */
.awc-act--outline { background: #f3eefe; border-color: #d9cdfa; color: var(--purple-deep); }
.awc-act--outline:hover { background: #e9e0fb; border-color: var(--purple); }

/* Outlined: viewing the live page. Same size, lighter weight. */
.awc-act--ghost { background: var(--white); border-color: var(--border); color: var(--purple-deep); }
.awc-act--ghost:hover { border-color: var(--purple); background: #f3eefe; }

.awc-act:focus-visible { outline: 3px solid var(--yellow); outline-offset: 2px; }

/* The tooltip.
   Hidden with display, not opacity: a hidden-but-laid-out tooltip still counts
   toward its ancestors' scroll width, which is what put a permanent horizontal
   scrollbar under a table that already fits. Not rendering it at all costs the
   fade, which a utility tooltip does not need.
   It never receives pointer events, so it cannot swallow the click it
   describes, and it is anchored to the control's trailing edge so it opens
   inward on both sides of the table in either writing direction. */
.awc-act[data-tooltip] { position: relative; }
.awc-eye[data-tooltip]::after, .awc-act[data-tooltip]::after {
  content: attr(data-tooltip);
  display: none;
  position: absolute; bottom: calc(100% + 8px); inset-inline-end: 0;
  padding: 6px 10px; border-radius: var(--r-sm);
  background: var(--ink); color: var(--white);
  font-family: var(--font-ui); font-size: 12px; line-height: 1.3;
  white-space: nowrap; pointer-events: none;
  z-index: 6;
}

/* Hover AND keyboard focus: an icon control that only explains itself to a
   mouse is unusable with a keyboard. */
.awc-eye[data-tooltip]:hover::after, .awc-eye[data-tooltip]:focus-visible::after,
.awc-act[data-tooltip]:hover::after,
.awc-act[data-tooltip]:focus-visible::after { display: block; }

html[dir="rtl"] .awc-eye[data-tooltip]::after,
html[dir="rtl"] .awc-act[data-tooltip]::after { font-family: var(--font-ar); }

/* ---- Editor: hybrid sections (CMS-5B) ---- */
/* A canonical section looks like a content section and behaves like a different
   thing, so it is marked rather than left to be discovered: a tinted edge, and
   a lifecycle line above its fields that says whether saving publishes. */

.awc-lifecycle {
  margin: 0 0 14px;
  font-family: var(--font-ui); font-size: 12px; line-height: 1.6; color: var(--muted);
}
.awc-lifecycle--live { color: var(--purple-deep); font-weight: 700; }

.awc-sec--canonical { border-inline-start: 3px solid var(--purple); }
.awc-sec--canonical .awc-sec__name { color: var(--purple-deep); }

.awc-context { margin: 16px 0 0; padding: 14px 16px; border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--white); }
.awc-context__row { display: flex; flex-wrap: wrap; gap: 6px 14px; padding: 6px 0; }
.awc-context__row + .awc-context__row { border-top: 1px solid rgba(28,27,26,0.06); }
.awc-context dt { font-family: var(--font-ui); font-size: 12px; font-weight: 700; color: var(--muted); min-width: 0; flex: 0 0 180px; }
.awc-context dd { margin: 0; font-family: var(--font-ui); font-size: 13px; color: var(--near-black); min-width: 0; flex: 1 1 200px; }

.awc-entity { margin-bottom: 14px; }
.awc-entity select { max-width: 420px; }

@media (max-width: 620px) {
  .awc-context dt, .awc-context dd { flex: 1 1 100%; }
}

/* Facilitator Profile Photo and Professional Documents */
.pform__sections-form { display: flex; flex-direction: column; gap: 26px; }
.fphoto-card { display: flex; flex-direction: column; gap: 14px; }
.fphoto-preview-wrap { display: flex; justify-content: center; align-items: center; margin: 10px 0; }
.fphoto-img { width: 88px; height: 88px; border-radius: 50%; object-fit: cover; display: block; border: 2px solid var(--purple); }
.fphoto-img--lg { width: 72px; height: 72px; }
.fphoto-avatar { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 88px; height: 88px; border-radius: 50%; background: #eef2ff; color: var(--purple-deep); font-family: var(--font-display); font-weight: 700; font-size: 32px; border: 2px solid var(--purple); }
.fphoto-avatar--lg { width: 72px; height: 72px; font-size: 28px; }
.fphoto-admin-header { display: flex; align-items: center; gap: 16px; margin-bottom: 20px; }
.fphoto-upload-form { display: flex; flex-direction: column; gap: 10px; }
.fphoto-remove-form { display: flex; justify-content: center; }
.fdoc-section { display: flex; flex-direction: column; gap: 20px; }
.fdoc-upload-form { padding: 18px; border: 1px dashed var(--border); border-radius: 12px; background: #fafafa; }
.fdoc-row-actions { display: inline-flex; align-items: center; gap: 8px; justify-content: flex-end; }
.fdoc-app-docs { border-top: 1px solid var(--border); padding-top: 18px; }

/* ================= Admin offering detail (8-Week Programme) =================
   One reading order: header with the next step, a summary of what the run IS
   beside its website status, the one setting that still changes, operations,
   and the irreversible action last in its own box. The page used to put
   .adetail's two-column grid on a single card, so auto-placement scattered
   the heading, panels, data list and Zoom form across alternating columns.
   Logical properties throughout, so Arabic mirrors without extra rules. */
.acohort__head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 14px 20px; }
.acohort__title { min-width: 0; flex: 1 1 320px; }
.acohort__head .acard__h { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin: 0; }
.acohort__sub { margin: 6px 0 0; font-family: var(--font-ui); font-size: 14px; color: var(--muted); overflow-wrap: anywhere; }
.acohort__actions { display: flex; flex-wrap: wrap; gap: 10px; }
.acohort__actions .btn, .acohort__zoom-row .btn, .adanger__btn { height: 46px; padding: 0 22px; }
.acohort__notice { flex-basis: 100%; margin: 0; }
.acohort__grid { display: grid; gap: 22px; align-items: start; margin-bottom: 22px; }
.acohort__grid > *, .acohort__side > * { min-width: 0; margin-bottom: 0; }
.acohort__side { display: grid; gap: 22px; min-width: 0; }
@media (min-width: 1200px) {
  .acohort__grid { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
}
.acohort__zoom { max-width: 760px; }
.acohort__zoom-row { display: flex; flex-wrap: wrap; gap: 10px 12px; align-items: center; }
.acohort__zoom-row input[type="url"] { flex: 1 1 280px; min-width: 0; }
.acohort__empty, .apanel__empty { margin: 4px 0 0; font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.acohort__sessions .acard__h, .aparticipation .acard__h { margin-bottom: 12px; }

/* The Zoom link inputs (cohort setup, facilitator 1-to-1) share the admin
   field style rather than the marketing pill. */
.acohort__zoom input[type="url"], .iar-meeting input[type="url"] {
  width: 100%; font-family: var(--font-ui); font-size: 15px; color: var(--ink);
  padding: 11px 14px; background: var(--white); border: 1px solid var(--border); border-radius: var(--r-sm);
}
.iar-meeting input[type="url"] { max-width: 560px; }
.iar-meeting__status { font-family: var(--font-ui); font-size: 13px; color: var(--muted); }

/* Key/value tiles: configuration and seat counts read at a glance. */
.akv { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 140px), 1fr)); gap: 10px; margin: 0; }
.akv > div { min-width: 0; padding: 12px 14px; border-radius: 14px; background: var(--cream); }
.akv dt { margin: 0 0 4px; font-family: var(--font-ui); font-size: 12px; line-height: 1.35; color: var(--muted); }
.akv dd { margin: 0; font-family: var(--font-ui); font-size: 15px; font-weight: 700; color: var(--ink); overflow-wrap: anywhere; }
.akv.aseats { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 10px; }
@media (max-width: 720px) {
  .akv.aseats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Shared status panels: website visibility and the readiness checklist. */
.avis, .areadiness { padding: 18px 20px; }
.apanel__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; }
.apanel__title { margin: 0; font-family: var(--font-display); font-size: 16px; color: var(--ink); }
.apanel__lead { margin: 8px 0 0; font-family: var(--font-ui); font-size: 14px; line-height: 1.55; color: var(--body); }
.avis { border-inline-start: 4px solid #d97706; }
.avis--visible { border-inline-start-color: #16a34a; }
.avis--sold-out { border-inline-start-color: #64748b; }
.avis__reasons { display: grid; gap: 4px; margin: 8px 0 0; padding-inline-start: 20px; list-style: disc; font-family: var(--font-ui); font-size: 14px; line-height: 1.5; color: var(--ink); }
.avis__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.avis__actions .btn { height: 38px; padding: 0 14px; font-size: 13px; letter-spacing: 0.2px; }
.avis__actions .btn svg { width: 12px; height: 12px; }
.avis__checkout { margin: 12px 0 0; padding: 8px 12px; border-radius: 8px; background: rgba(217, 119, 6, 0.1); font-family: var(--font-ui); font-size: 13px; color: #b45309; }
.areadiness__group { margin: 14px 0 6px; font-family: var(--font-ui); font-size: 12px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--muted); }
.areadiness__list { list-style: none; display: grid; gap: 8px; margin: 0; padding: 0; }
.areadiness__item { display: flex; align-items: flex-start; gap: 10px; min-width: 0; font-family: var(--font-ui); font-size: 14px; line-height: 1.45; color: #a12d20; }
.areadiness__item > span:last-child { min-width: 0; overflow-wrap: anywhere; }
.areadiness__item small { display: block; margin-top: 2px; font-size: 12.5px; color: #a12d20; opacity: 0.85; }
.areadiness__mark { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin-top: 1px; border-radius: 50%; background: #fdecea; color: #a12d20; }
.areadiness__done { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; }
.areadiness__done li { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 100%; padding: 4px 10px; border-radius: var(--r-pill); background: #eaf9f2; font-family: var(--font-ui); font-size: 12.5px; line-height: 1.4; color: #16794f; overflow-wrap: anywhere; }
.areadiness__done svg { flex-shrink: 0; }

/* Danger zone: irreversible, last, and visibly apart. */
.adanger { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 20px; box-shadow: inset 0 0 0 1px rgba(192, 57, 43, 0.35), 0 3px 18px rgba(0, 0, 0, 0.06); }
.adanger__copy { flex: 1 1 320px; min-width: 0; }
.adanger h2 { margin: 0 0 4px; font-family: var(--font-display); font-size: 16px; color: #a12d20; }
.adanger p { margin: 0; font-family: var(--font-ui); font-size: 14px; line-height: 1.55; color: var(--body); }
.adanger__btn { background: transparent; color: #a12d20; box-shadow: inset 0 0 0 2px #c0392b; }
.adanger__btn:hover { background: #c0392b; color: var(--white); }
@media (max-width: 620px) {
  .acohort__actions, .acohort__actions .btn, .adanger__btn, .acohort__zoom-row .btn { width: 100%; }
}
html[dir="rtl"] .acohort__sub, html[dir="rtl"] .akv dt, html[dir="rtl"] .akv dd,
html[dir="rtl"] .apanel__lead, html[dir="rtl"] .avis__reasons, html[dir="rtl"] .avis__checkout,
html[dir="rtl"] .areadiness__group, html[dir="rtl"] .areadiness__item, html[dir="rtl"] .areadiness__done li,
html[dir="rtl"] .acohort__empty, html[dir="rtl"] .apanel__empty, html[dir="rtl"] .adanger p,
html[dir="rtl"] .iar-meeting__status { font-family: var(--font-ar); }

/* ================= Admin offering edit: scheduling clarity =================
   Three different answers, never blurred: Programme setup (are the fields
   complete?), Schedule validation (would this calendar work?) and Website
   visibility (is it public?). A clash with another session is HARD and red;
   declared availability is a WARNING and amber, overridden only by its own
   checkbox. Presentation only - every state comes from the component. */
.ablocker { display: flex; align-items: flex-start; gap: 12px; margin: 0 0 22px; padding: 16px 18px; border-radius: var(--r-sm); background: #fdecea; box-shadow: inset 0 0 0 1px rgba(192, 57, 43, 0.4); color: #a12d20; }
.ablocker > svg { flex-shrink: 0; margin-top: 2px; }
.ablocker__body { min-width: 0; font-family: var(--font-ui); font-size: 14px; line-height: 1.55; overflow-wrap: anywhere; }
.ablocker__body p { margin: 0; }
.ablocker__body .ablocker__title { font-weight: 700; font-size: 15px; margin-bottom: 2px; }
.ablocker .alink { display: inline-block; margin-top: 6px; color: #a12d20; text-decoration: underline; }

.alifecycle .apanel__lead { margin-top: 6px; }
.alifecycle__steps { list-style: none; display: flex; flex-wrap: wrap; gap: 8px 18px; margin: 14px 0 0; padding: 0; font-family: var(--font-ui); font-size: 14px; font-weight: 700; color: var(--muted); }
.alifecycle__steps li { display: inline-flex; align-items: center; gap: 8px; }
.alifecycle__steps span { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--border); color: var(--white); font-size: 12px; }
.alifecycle__steps .is-current { color: var(--ink); }
.alifecycle__steps .is-current span { background: var(--purple-deep); }
.alifecycle__status { list-style: none; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 10px; margin: 16px 0 0; padding: 0; }
.alifecycle__status li { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; min-width: 0; padding: 12px 14px; border-radius: 14px; background: var(--cream); }
.alifecycle__status .alink { font-size: 13px; }
.alifecycle__ready { margin: 14px 0 0; padding: 10px 14px; border-radius: 12px; background: #eaf9f2; font-family: var(--font-ui); font-size: 14px; font-weight: 700; color: #16794f; }
.acohort-form__panels { display: grid; gap: 22px; align-items: start; margin-bottom: 22px; }
.acohort-form__panels > * { min-width: 0; margin-bottom: 0; }
@media (min-width: 1200px) {
  .acohort-form__panels { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.avis__derived { margin: 10px 0 0; font-family: var(--font-ui); font-size: 13px; line-height: 1.55; color: var(--muted); }
.avis__actions .btn svg:not(.arrow) { width: 12px; height: 12px; fill: currentColor; }

/* The validation section inside the form: a flex column, outranking the
   form's two-column section grid. */
.acard--form .aform .pform-section.asched { display: flex; flex-direction: column; gap: 14px; min-width: 0; padding: 20px 22px; scroll-margin-top: 24px; }
/* min-width: 0 on the section and its children: as a GRID ITEM with visible
   overflow the section would otherwise keep the preview table's min-content
   width and push the whole form past the card at phone widths. Shrinking lets
   the table fall back to its own intentional scroller instead. */
.asched > * { min-width: 0; max-width: 100%; }
.asched .apanel__head h3 { margin: 0; font-family: var(--font-display); font-size: 16px; color: var(--ink); }
.asched > .field-hint { margin: -6px 0 0; }
.asched__pending { margin: 0; font-family: var(--font-ui); font-size: 14px; color: var(--muted); }
.asched__conflict { padding: 14px 16px; border-radius: 14px; background: #fdecea; box-shadow: inset 0 0 0 1px rgba(192, 57, 43, 0.35); color: #a12d20; font-family: var(--font-ui); font-size: 14px; line-height: 1.5; }
.asched__alert-title { margin: 0; font-weight: 700; font-size: 15px; }
.asched__alert-lead { margin: 2px 0 0; }
.asched__conflicts { list-style: none; display: grid; gap: 10px; margin: 12px 0 0; padding: 0; }
.asched__conflicts > li { min-width: 0; padding: 10px 12px; border-radius: 10px; background: rgba(255, 255, 255, 0.7); color: var(--ink); overflow-wrap: anywhere; }
.asched__conflicts > li > b { color: #a12d20; }
.asched__conflicts ul { margin: 4px 0 0; padding-inline-start: 18px; list-style: disc; }
.asched__when { white-space: nowrap; color: var(--body); }
.asched__tz { margin: 10px 0 0; font-size: 12.5px; color: var(--body); }
.asched__valid { margin: 0; padding: 10px 14px; border-radius: 12px; background: #eaf9f2; font-family: var(--font-ui); font-size: 14px; color: #16794f; }
.asched__sub { margin: 4px 0 0; font-family: var(--font-display); font-size: 15px; color: var(--ink); }
.asched__hint { width: 100%; margin: 0; font-family: var(--font-ui); font-size: 13px; font-weight: 700; color: #a12d20; }
.acohort-form .btn:disabled { opacity: 0.45; cursor: not-allowed; transform: none; }

/* Declared availability against the proposal: grouped by weekday, amber when
   outside (a warning), green when inside. Shared by both edit forms. */
.aavail { padding: 14px 16px; border-radius: 14px; box-shadow: inset 0 0 0 1px var(--border); font-family: var(--font-ui); font-size: 14px; }
.aavail--warn, .aavail--none { background: #fff8e8; box-shadow: inset 0 0 0 1px rgba(217, 119, 6, 0.4); }
.aavail--ok { background: #f3fbf7; box-shadow: inset 0 0 0 1px rgba(22, 121, 79, 0.3); }
.aavail .apanel__title { font-size: 15px; }
.aavail__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); gap: 12px 22px; margin-top: 10px; }
.aavail__block { min-width: 0; }
.aavail__label { margin: 0 0 6px; font-size: 12px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--muted); }
.aavail__empty, .aavail__proposed { margin: 0; color: var(--ink); }
.aavail__proposed { font-weight: 700; }
.aavail__days { list-style: none; display: grid; gap: 6px; margin: 0; padding: 0; }
.aavail__days li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.aavail__days b { min-width: 92px; color: var(--ink); }
.aavail__slots { display: flex; flex-wrap: wrap; gap: 4px 12px; }
.aavail__slot { white-space: nowrap; color: var(--ink); }
.aavail__slot small { margin-inline-start: 4px; color: var(--muted); }
.aavail__slot.is-muted { color: var(--muted); text-decoration: line-through; }
.aavail__ok, .aavail__warn { margin: 12px 0 0; font-weight: 700; }
.aavail__ok { color: #16794f; }
.aavail__warn { color: #8a5b00; }
.aavail__dates { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 0; padding: 0; }
.aavail__dates li { padding: 3px 10px; border-radius: var(--r-pill); background: rgba(217, 119, 6, 0.12); font-size: 12.5px; color: #8a5b00; }
.aavail .aavail__confirm { display: flex; align-items: flex-start; gap: 8px; margin-top: 12px; font-weight: 700; color: var(--ink); cursor: pointer; }
.aavail .aavail__confirm input { flex-shrink: 0; width: 18px; height: 18px; margin: 1px 0 0; accent-color: var(--purple-deep); }
.aavail__override-note { margin: 4px 0 0; }
html[dir="rtl"] .ablocker__body, html[dir="rtl"] .alifecycle__steps, html[dir="rtl"] .alifecycle__ready,
html[dir="rtl"] .avis__derived, html[dir="rtl"] .asched__pending, html[dir="rtl"] .asched__conflict,
html[dir="rtl"] .asched__valid, html[dir="rtl"] .asched__hint, html[dir="rtl"] .aavail { font-family: var(--font-ar); }
