/* The /portal Command Center and the compact Sangat dashboard (assets/js/portal-command.js; tools/patch-spa.py
   PORTAL_COMMAND_PATCHES). Temple Dark first (#0D0B09 canvas, #161311 cards, #FCFBF7 ivory, #D97706 / #F59E0B amber and
   gold), with the app's own tokens (--c-*) so the light theme reads right too. Plain djjs- classes: the precompiled
   bundle has no CSS for Tailwind classes its build never used. */

:root { --pc-card: var(--c-surface); --pc-ink: var(--c-ink); --pc-hair: rgba(217, 119, 6, .2); --pc-gold: var(--c-accent-ink, #92400E); --pc-meta: var(--c-muted); }
:root.dark { --pc-card: #161311; --pc-ink: #FCFBF7; --pc-gold: #F59E0B; --pc-meta: #A8A29E; }

djjs-admin-dock, djjs-practice-status, djjs-ashram-notices { display: block; }
djjs-live-sadhaks { display: inline-flex; }
djjs-live-sadhaks[hidden] { display: none; }

/* ---- admin dock ------------------------------------------------------------------------------------------------- */
djjs-admin-dock {
  margin: 0 0 1rem; border: 1px solid rgba(217, 119, 6, .32); border-radius: 1.25rem; background: var(--pc-card);
  box-shadow: 0 10px 30px -18px rgba(217, 119, 6, .45);
  /* no overflow clip: the admin bar's menus (.desk-topnav__panel, absolute) open past the dock's edge; the bar rounds its
     own gradient instead (schema patch 39.04 section below) */
}
.djjs-pc-dock__bar {
  display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; padding: .5rem .625rem .5rem .875rem;
  background: linear-gradient(90deg, rgba(217, 119, 6, .14), rgba(217, 119, 6, 0) 70%);
}
.djjs-pc-dock__title {
  display: flex; align-items: center; gap: .4rem; margin: 0; white-space: nowrap;
  font: 600 1.05rem/1.2 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink);
}
.djjs-pc-dock__mark { color: #F59E0B; font-size: .9rem; }
.djjs-pc-dock__links { display: flex; gap: .375rem; flex: 1 1 auto; min-width: 0; }
.djjs-pc-dock__link {
  display: inline-flex; align-items: center; gap: .35rem; min-height: 2.25rem; padding: 0 .8rem; border-radius: 999px;
  border: 1px solid rgba(217, 119, 6, .3); background: rgba(217, 119, 6, .06); color: var(--pc-ink);
  font-size: .84rem; font-weight: 500; text-decoration: none; white-space: nowrap; transition: background .2s, border-color .2s;
}
.djjs-pc-dock__link:hover { background: rgba(217, 119, 6, .16); border-color: #D97706; }
.djjs-pc-dock__ico { font-size: .95rem; line-height: 1; }
.djjs-pc-dock__tools { display: flex; align-items: center; gap: .375rem; margin-left: auto; }
.djjs-pc-dock__fold {
  position: relative; flex: none; display: grid; place-items: center; width: 2.25rem; height: 2.25rem; border-radius: 999px; border: 1px solid rgba(217, 119, 6, .3);
  background: transparent; color: var(--pc-ink); cursor: pointer;
}
.djjs-pc-dock__fold svg { width: 1.1rem; height: 1.1rem; transform: rotate(180deg); transition: transform .2s; }
djjs-admin-dock[data-folded] .djjs-pc-dock__fold svg { transform: none; }
djjs-admin-dock :is(a, button):focus-visible { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; }

.djjs-pc-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0; border-top: 1px solid var(--pc-hair); }
.djjs-pc-stat { display: grid; align-content: center; gap: .1rem; min-height: 4.5rem; margin: 0; padding: .55rem .9rem; border-left: 1px solid var(--pc-hair); }
.djjs-pc-stat:first-child { border-left: 0; }
.djjs-pc-stat__k { font-size: .66rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--pc-meta); }
.djjs-pc-stat:is([data-stat="members"], [data-stat="guests"]) .djjs-pc-stat__k::before {
  content: ""; display: inline-block; width: .45rem; height: .45rem; margin: 0 .35rem .05rem 0; border-radius: 50%;
  background: #22C55E; box-shadow: 0 0 0 3px rgba(34, 197, 94, .2); vertical-align: middle;
}
.djjs-pc-stat__n {
  margin: 0; font: 600 1.6rem/1.1 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink);
  font-variant-numeric: lining-nums tabular-nums;
}
.djjs-pc-stat__sub { font-size: .72rem; color: var(--pc-meta); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
djjs-admin-dock[data-stale] .djjs-pc-stat__n { opacity: .55; }
djjs-admin-dock[data-folded] .djjs-pc-body { display: none; }

@media (max-width: 47.99rem) {
  .djjs-pc-dock__links { order: 3; flex-basis: 100%; overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
  .djjs-pc-dock__links::-webkit-scrollbar { display: none; }
  .djjs-pc-dock__bar { gap: .5rem; padding: .5rem .5rem .5rem .75rem; }
  .djjs-pc-dock__title { font-size: 1rem; }
  .djjs-pc-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .djjs-pc-stat { min-height: 3.5rem; padding: .45rem .75rem; }
  .djjs-pc-stat:nth-child(3) { border-left: 0; }
  .djjs-pc-stat:nth-child(n+3) { border-top: 1px solid var(--pc-hair); }
  .djjs-pc-stat__n { font-size: 1.3rem; }
}
@media (max-width: 23.99rem) { .djjs-pc-dock__mark { display: none; } }

/* ---- schema patch 39.04: the Executive Sanctuary Snapshot (assets/js/portal-command.js <djjs-admin-dock>) ------------- */
djjs-admin-dock .djjs-pc-dock__bar { display: block; padding: 0; border-radius: calc(1.25rem - 1px) calc(1.25rem - 1px) 0 0; }
/* folded, the bar is the dock's last visible block: its gradient keeps all four of the dock's corners (39.33: Devotee Mode hides
   the whole dock; the header's <djjs-view-mode> is the one switch) */
djjs-admin-dock[data-folded] .djjs-pc-dock__bar { border-radius: calc(1.25rem - 1px); }
.djjs-pc-dock__head { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; padding: .5rem .625rem .5rem .875rem; }
djjs-admin-dock .djjs-pc-dock__links { padding: 0 .625rem .5rem .875rem; }
.djjs-pc-dock__topnav { border-top: 1px solid var(--pc-hair); }
djjs-admin-dock .djjs-pc-stats { border-top: 1px solid var(--pc-hair); }
.djjs-pc-trend { display: inline-block; margin-left: .25rem; padding: 0 .45rem; border-radius: 999px; border: 1px solid var(--pc-hair);
  font: 700 .72rem/1.5 var(--font-sans, system-ui), sans-serif; vertical-align: .3em; color: var(--pc-ink); }
.djjs-pc-trend--up::first-letter { color: var(--c-success); } .djjs-pc-trend--down::first-letter { color: var(--c-danger); }
.djjs-pc-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: .75rem; padding: .75rem; border-top: 1px solid var(--pc-hair); }
@media (min-width: 48rem) { .djjs-pc-grid { grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); } }
.djjs-pc-card { min-width: 0; padding: .875rem 1rem; border: 1px solid var(--pc-hair); border-radius: 1rem; background: var(--c-sunken); }
:root.dark .djjs-pc-card { background: #120F0C; }
.djjs-pc-card__t { margin: 0; font: 600 1.15rem/1.2 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }
.djjs-pc-card__sub { margin: .15rem 0 .6rem; font-size: .74rem; color: var(--pc-meta); }
.djjs-pc-card__more { display: inline-flex; align-items: center; min-height: 2.75rem; color: var(--pc-gold); font-size: .84rem; font-weight: 600; text-decoration: none; }
.djjs-pc-card__more:hover { text-decoration: underline; text-underline-offset: 3px; }
.djjs-pc-empty { list-style: none; font-size: .84rem; color: var(--pc-meta); }
.djjs-pc-geo__cols { display: grid; grid-template-columns: minmax(0, 1fr); gap: .75rem 1rem; }
@media (min-width: 30rem) { .djjs-pc-geo__cols { grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); } }
.djjs-pc-geo__bars, .djjs-pc-geo__top { margin: 0; padding: 0; list-style: none; display: grid; gap: .3rem; align-content: start; }
.djjs-pc-geo__bar { display: grid; grid-template-columns: 2rem minmax(0, 1fr); align-items: center; gap: .4rem; }
.djjs-pc-geo__code { font-size: .72rem; font-weight: 700; letter-spacing: .06em; color: var(--pc-meta); font-variant-numeric: tabular-nums; }
.djjs-pc-geo__track { height: .55rem; border-radius: 999px; background: rgba(217, 119, 6, .1); overflow: hidden; }
.djjs-pc-geo__fill { display: block; height: 100%; border-radius: inherit; background: #D97706; }
.djjs-pc-geo__top { counter-reset: geo; }
.djjs-pc-geo__row { counter-increment: geo; display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; padding: .2rem 0;
  border-bottom: 1px solid var(--pc-hair); font-size: .86rem; color: var(--pc-ink); }
.djjs-pc-geo__row::before { content: counter(geo); flex: none; width: 1.1rem; font-weight: 700; color: var(--pc-gold); font-variant-numeric: tabular-nums; }
.djjs-pc-geo__name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.djjs-pc-geo__n { flex: none; font-variant-numeric: lining-nums tabular-nums; color: var(--pc-meta); font-size: .8rem; }
.djjs-pc-chain__now { margin: .35rem 0 .6rem; font-size: .9rem; color: var(--pc-ink); }
.djjs-pc-chain__hours { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .3rem; margin: 0; padding: 0; list-style: none; }
.djjs-pc-hour { display: grid; justify-items: center; gap: .1rem; padding: .35rem .1rem; border-radius: .6rem; border: 1px solid var(--pc-hair);
  background: rgba(217, 119, 6, .08); font-variant-numeric: lining-nums tabular-nums; }
.djjs-pc-hour.is-now { border-color: #D97706; box-shadow: inset 0 0 0 1px #D97706; }
.djjs-pc-hour.is-gap { background: transparent; border-style: dashed; border-color: rgba(220, 38, 38, .55); }
.djjs-pc-hour__t { font-size: .66rem; font-weight: 700; color: var(--pc-meta); white-space: nowrap; }
.djjs-pc-hour__n { font-size: .9rem; font-weight: 700; color: var(--pc-ink); }
.djjs-pc-hour.is-gap .djjs-pc-hour__n { font-size: .72rem; color: var(--c-danger); }
:root.dark .djjs-pc-hour.is-gap .djjs-pc-hour__n { color: #F87171; }
.djjs-pc-chain__warn { margin: .6rem 0 0; font-size: .82rem; color: #B91C1C; }
:root.dark .djjs-pc-chain__warn { color: #FCA5A5; }
.djjs-pc-chain__warn[data-ok] { color: var(--pc-meta); }
.djjs-pc-chain__acts { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem 1rem; margin-top: .5rem; }
.djjs-pc-chain__btn { display: inline-flex; align-items: center; gap: .35rem; min-height: 2.75rem; padding: 0 1rem; border-radius: 999px; color: #FFF7EE; font-size: .86rem;
  font-weight: 600; text-decoration: none; background: linear-gradient(180deg, #9B1844 0%, #881337 60%, #7A1131 100%); box-shadow: 0 8px 18px -12px rgba(136, 19, 55, .8); }
.djjs-pc-chain__btn:hover { filter: brightness(1.08); }
@media (max-width: 23.99rem) { .djjs-pc-chain__hours { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* ---- greeting + live presence --------------------------------------------------------------------------------- */
.djjs-greet { margin: 0 0 .75rem; }
.djjs-greet__row { display: flex; flex-wrap: wrap; align-items: center; gap: .375rem .875rem; }
.djjs-greet__name {
  margin: 0; font: 600 1.5rem/2rem var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); letter-spacing: .005em;
}
.djjs-greet__meta { margin: .125rem 0 0; font-size: .75rem; line-height: 1rem; color: var(--pc-meta); }
.djjs-pc-live {
  align-items: center; gap: .45rem; padding: .2rem .7rem; border-radius: 999px; border: 1px solid rgba(34, 197, 94, .35);
  background: rgba(34, 197, 94, .08); color: var(--pc-ink); font-size: .78rem; font-weight: 500; line-height: 1.5rem;
  font-variant-numeric: tabular-nums;
}
.djjs-pc-live__dot { position: relative; width: .5rem; height: .5rem; border-radius: 50%; background: #22C55E; flex: none; }
.djjs-pc-live__dot::after {
  content: ""; position: absolute; inset: 0; border-radius: 50%; background: #22C55E; animation: djjs-pc-pulse 2s ease-out infinite;
}
djjs-live-sadhaks[data-quiet] { border-color: var(--pc-hair); background: transparent; color: var(--pc-meta); }
djjs-live-sadhaks[data-quiet] .djjs-pc-live__dot { background: #78716C; }
djjs-live-sadhaks[data-quiet] .djjs-pc-live__dot::after { display: none; }
@keyframes djjs-pc-pulse { 0% { transform: scale(1); opacity: .7; } 80%, 100% { transform: scale(2.8); opacity: 0; } }

/* ---- hour bar + accumulator strip ------------------------------------------------------------------------------ */
.djjs-crown-bar { margin: 0 0 .75rem; }
.djjs-acc-strip {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: .25rem 1.25rem; margin: 0 0 1rem;
  padding: .625rem 1rem; border: 1px solid var(--pc-hair); border-radius: 1rem; background: var(--pc-card);
}
/* the festival themes' hero ornaments target "[data-testid=home-quick-sadhna] + section" (the old crown, which followed the
   hour bar); the slim strip sits there now and must not carry their 736px glow (it made the page scroll sideways) */
[data-testid="home-quick-sadhna"] + section.djjs-acc-strip::before,
[data-testid="home-quick-sadhna"] + section.djjs-acc-strip::after { content: none !important; display: none !important; }
.djjs-acc-strip__title {
  display: flex; align-items: center; gap: .45rem; margin: 0; max-width: 8.5rem; font-size: .66rem; font-weight: 600; line-height: 1.25;
  letter-spacing: .14em; text-transform: uppercase; color: var(--pc-meta);
}
.djjs-acc-strip__sun { width: 1.25rem; height: 1.25rem; flex: none; }
.djjs-acc-strip__cells { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.25rem; margin: 0; padding: 0; list-style: none; }
.djjs-acc-strip__cell { display: grid; gap: .2rem; min-width: 0; }
.djjs-acc-strip__k { font-size: .66rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--pc-meta); }
.djjs-acc-strip__v { font-size: 1.05rem; font-weight: 600; line-height: 1.25; color: var(--pc-ink); font-variant-numeric: lining-nums tabular-nums; white-space: nowrap; }
.djjs-acc-strip__v small { font-size: .75rem; font-weight: 500; color: var(--pc-meta); }
.djjs-acc-strip__meter { display: block; height: 4px; border-radius: 999px; background: rgba(217, 119, 6, .16); overflow: hidden; }
.djjs-acc-strip__meter > span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #D97706, #F59E0B); transition: width .8s ease; }
.djjs-acc-strip__note { display: block; font-size: .68rem; line-height: 4px; overflow: visible; white-space: nowrap; text-overflow: ellipsis; color: var(--pc-meta); }
.djjs-acc-strip__wait { height: 2.6rem; border-radius: .6rem; background: rgba(217, 119, 6, .08); animation: djjs-pc-wait 1.4s ease-in-out infinite alternate; }
@keyframes djjs-pc-wait { from { opacity: .5; } to { opacity: 1; } }
@media (max-width: 39.99rem) {
  .djjs-acc-strip { grid-template-columns: minmax(0, 1fr); gap: .375rem; padding: .5rem .75rem; }
  .djjs-acc-strip__title { max-width: none; }
  .djjs-acc-strip__sun { width: 1rem; height: 1rem; }
  .djjs-acc-strip__cells { gap: .75rem; }
  .djjs-acc-strip__v { font-size: .95rem; }
  .djjs-acc-strip__v small { font-size: .68rem; }
  .djjs-acc-strip__note { display: none; }
}

/* ---- the 3-column workspace -------------------------------------------------------------------------------------- */
.djjs-dash-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1.25rem; align-items: start; }
@media (min-width: 48rem) {
  .djjs-dash-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .djjs-dash-grid > [data-testid="col-notices"] { grid-column: 1 / -1; }
}
@media (min-width: 72rem) {
  .djjs-dash-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .djjs-dash-grid > [data-testid="col-notices"] { grid-column: auto; }
}
.djjs-col { display: grid; gap: .75rem; min-width: 0; align-content: start; }
.djjs-col__t {
  display: flex; align-items: center; gap: .6rem; margin: 0; font: 600 1.15rem/1.3 var(--font-display, "Cormorant Garamond", Georgia, serif);
  color: var(--pc-ink);
}
.djjs-col__t::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, rgba(217, 119, 6, .45), transparent); }
.djjs-col-card, djjs-ashram-notices {
  padding: 1rem; border: 1px solid var(--pc-hair); border-radius: 1.25rem; background: var(--pc-card);
}
.djjs-col-card__t { margin: 0 0 .625rem; font: 600 1.05rem/1.3 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }

/* column 1 */
.djjs-practice__dial { max-width: 13.5rem; margin: 0 auto; }
.djjs-practice__held { margin: .5rem 0 0; text-align: center; font-size: .84rem; color: var(--pc-meta); }
.djjs-practice__held b { font-weight: 600; color: var(--pc-ink); }
.djjs-practice__cta { display: flex; flex-wrap: wrap; justify-content: center; gap: .5rem; margin: .75rem 0 0; }
.djjs-pc-chain { display: grid; gap: .1rem; margin: 1rem 0 0; padding: 1rem 0 0; border-top: 1px solid var(--pc-hair); }
.djjs-pc-chain__row { display: flex; align-items: baseline; gap: .4rem; }
.djjs-pc-chain__n { font: 600 2rem/1 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-gold); font-variant-numeric: lining-nums tabular-nums; }
.djjs-pc-chain__k { font-size: .85rem; font-weight: 500; color: var(--pc-ink); }
.djjs-pc-chain__sub { font-size: .76rem; color: var(--pc-meta); }
.djjs-pc-sit { margin: .875rem 0 0; }
.djjs-pc-sit__k { margin: 0 0 .4rem; font-size: .66rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--pc-meta); }
.djjs-pc-sit__row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .375rem; }
.djjs-pc-sit__btn {
  display: grid; place-items: center; min-height: 2.75rem; border-radius: 999px; border: 1px solid rgba(217, 119, 6, .35);
  background: rgba(217, 119, 6, .06); color: var(--pc-ink); font-size: .8rem; font-weight: 600; text-decoration: none;
  font-variant-numeric: tabular-nums; transition: background .2s, border-color .2s;
}
.djjs-pc-sit__btn:hover { background: rgba(217, 119, 6, .18); border-color: #D97706; }
.djjs-pc-sit__btn:focus-visible { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; }
.djjs-pc-sync { margin: .75rem 0 0; padding: .5rem .7rem; border-radius: .75rem; background: var(--c-sunken); font-size: .76rem; line-height: 1.4; color: var(--pc-meta); }
.djjs-pc-sync[data-state="ok"] { color: var(--c-success); }
:root.dark .djjs-pc-sync[data-state="ok"] { color: #4ADE80; }
.djjs-pc-sync[data-state="wait"] { color: var(--pc-gold); }

/* column 2 */
/* 39.14: the column no longer opens with the swaroop card (His Holiness's swaroop is in the header, <djjs-darshan-medallion>) */
.djjs-col .djjs-col-bodh { padding: 1.1rem 1.15rem; border-radius: 1.25rem; }
.djjs-col .djjs-col-bodh blockquote { font-size: 1.2rem; }
/* schema patch 39.17: Daily Niyama sits under this card, so the card stays compact: its two actions share one row */
.djjs-col .djjs-col-bodh blockquote { margin-top: .5rem; line-height: 1.35; }
.djjs-col .djjs-col-bodh > p:not([id]) { margin-top: .5rem; }
.djjs-col .djjs-col-bodh > div:last-child { margin-top: .85rem; gap: .5rem; }
.djjs-col .djjs-col-bodh > div:last-child > :is(a, button) { min-height: 2.75rem; padding-inline: .9rem; font-size: .875rem; }
.djjs-col .djjs-col-med { padding: 1rem; border-radius: 1.25rem; }
.djjs-col .djjs-col-med h2 { font-size: 1.15rem; }

/* column 3 */
.djjs-pc-notices__list { display: grid; margin: 0; padding: 0; list-style: none; }
.djjs-pc-notice { display: grid; gap: .15rem; padding: .625rem 0 .625rem .75rem; border-left: 3px solid #D97706; }
.djjs-pc-notice + .djjs-pc-notice { margin-top: .5rem; }
.djjs-pc-notice[data-tone="urgent"] { border-left-color: #DC2626; }
.djjs-pc-notice[data-tone="festival"] { border-left-color: #F59E0B; }
.djjs-pc-notice[data-tone="info"] { border-left-color: #881337; }
.djjs-pc-notice__t { font-size: .9rem; font-weight: 600; line-height: 1.35; color: var(--pc-ink); }
.djjs-pc-notice__b { font-size: .8rem; line-height: 1.45; color: var(--pc-meta); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.djjs-pc-notice__a { justify-self: start; display: inline-flex; align-items: center; min-height: 2rem; font-size: .8rem; font-weight: 600; color: var(--pc-gold); text-underline-offset: 3px; }
.djjs-pc-notices__empty { margin: 0; font-size: .84rem; line-height: 1.5; color: var(--pc-meta); }
.djjs-up-card .djjs-up-grid { grid-template-columns: minmax(0, 1fr); gap: .5rem; }
@media (min-width: 48rem) and (max-width: 71.99rem) { .djjs-up-card .djjs-up-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.djjs-up-card .djjs-up__card { padding: .75rem .875rem; border-radius: 1rem; column-gap: .75rem; box-shadow: none; }
.djjs-up-card .djjs-up__glyph { width: 2.25rem; height: 2.25rem; }
.djjs-up-card .djjs-up__when { font-size: 1rem; }
.djjs-up-card .djjs-up__detail { font-size: .82rem; }
.djjs-up-card .djjs-up__action { min-height: 2.25rem; font-size: .82rem; padding: 0 .8rem; }

/* ---- Inner Lab & Micro-Sadhna (column 1) ------------------------------------------------------------------------ */
djjs-micro-sadhna { display: grid; gap: .6rem; padding: 1rem; border: 1px solid var(--pc-hair); border-radius: 1.25rem; background: var(--pc-card); }
:root { --pc-cyan: #0E7490; }
:root.dark { --pc-cyan: #22D3EE; }
.djjs-pc-micro__head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.djjs-pc-micro__t { margin: 0; font: 600 1.05rem/1.3 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }
.djjs-pc-micro__tag {
  padding: .1rem .55rem; border-radius: 999px; border: 1px solid var(--pc-cyan); color: var(--pc-cyan);
  font-size: .64rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
}
.djjs-pc-micro__lead { margin: 0; font-size: .8rem; line-height: 1.45; color: var(--pc-meta); }
.djjs-pc-micro__pick { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; }
.djjs-pc-micro__pick[hidden], .djjs-pc-micro__run[hidden] { display: none; }
.djjs-pc-micro__btn {
  position: relative; display: grid; gap: .1rem; min-height: 3.25rem; padding: .5rem .75rem; text-align: left; cursor: pointer; font: inherit;
  border-radius: 1rem; border: 1px solid rgba(34, 211, 238, .35); background: rgba(34, 211, 238, .06); color: var(--pc-ink);
  transition: background .2s, border-color .2s;
}
.djjs-pc-micro__btn:hover { background: rgba(34, 211, 238, .14); border-color: var(--pc-cyan); }
.djjs-pc-micro__btn b { font-size: 1rem; font-variant-numeric: tabular-nums; }
.djjs-pc-micro__btn span { font-size: .74rem; color: var(--pc-meta); }
.djjs-pc-micro__run { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .35rem .75rem; }
.djjs-pc-micro__label { grid-column: 1 / -1; margin: 0; font-size: .74rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--pc-cyan); }
.djjs-pc-micro__time { margin: 0; font: 600 1.9rem/1 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); font-variant-numeric: lining-nums tabular-nums; }
.djjs-pc-micro__track { grid-column: 1 / -1; grid-row: 3; display: block; height: 4px; border-radius: 999px; background: rgba(34, 211, 238, .15); overflow: hidden; }
.djjs-pc-micro__track > span { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, #0E7490, #22D3EE); transition: width 1s linear; }
.djjs-pc-micro__end {
  position: relative; min-height: 2.75rem; padding: 0 .9rem; border-radius: 999px; border: 1px solid var(--pc-hair); background: transparent;
  color: var(--pc-ink); font-family: inherit; font-size: .8rem; font-weight: 600; line-height: 1; cursor: pointer;
}
.djjs-pc-micro__ask { display: flex; flex-wrap: wrap; gap: .4rem; }
.djjs-pc-micro__msg { margin: 0; font-size: .78rem; line-height: 1.45; color: var(--pc-meta); }
.djjs-pc-micro__msg:empty { display: none; }
.djjs-pc-micro__msg[data-state="ok"] { color: var(--c-success); }
:root.dark .djjs-pc-micro__msg[data-state="ok"] { color: #4ADE80; }
.djjs-pc-micro__msg[data-state="wait"] { color: var(--pc-gold); }
.djjs-pc-micro__msg[data-state="err"] { color: var(--c-danger); }
:root.dark .djjs-pc-micro__msg[data-state="err"] { color: #F87171; }
.djjs-pc-micro__cta { justify-self: start; display: inline-flex; align-items: center; min-height: 2.25rem; font-size: .82rem; font-weight: 600; color: var(--pc-cyan); text-underline-offset: 3px; }
@media (pointer: coarse) { .djjs-pc-micro__cta, .djjs-pc-notice__a { min-height: 44px; } } /* touch: full 44px targets */
djjs-micro-sadhna :is(a, button):focus-visible { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; }

/* ---- Digital Sewa (column 3) ----------------------------------------------------------------------------------------- */
djjs-sewa-impact, djjs-sadhna-badges { display: grid; gap: .6rem; padding: 1rem; border: 1px solid var(--pc-hair); border-radius: 1.25rem; background: var(--pc-card); min-width: 0; }
djjs-sewa-impact[hidden], djjs-sadhna-badges[hidden] { display: none; }
.djjs-pc-sewa__head { display: grid; gap: .1rem; }
.djjs-pc-sewa__k { margin: 0; font-size: .66rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--pc-gold); }
.djjs-pc-sewa__t { margin: 0; font: 600 1.15rem/1.25 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }
.djjs-pc-sewa__lead { margin: 0; font-size: .8rem; line-height: 1.45; color: var(--pc-meta); }
.djjs-pc-sewa__link { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .4rem; }
.djjs-pc-sewa__url {
  min-width: 0; min-height: 2.75rem; padding: 0 .8rem; border-radius: 999px; border: 1px solid var(--pc-hair); background: var(--c-sunken);
  color: var(--pc-ink); font: 500 .8rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; text-overflow: ellipsis;
}
.djjs-pc-sewa__copy, .djjs-pc-cert__open, .djjs-cert__btn {
  position: relative; min-height: 2.75rem; padding: 0 1rem; border-radius: 999px; border: 1px solid rgba(217, 119, 6, .4); background: rgba(217, 119, 6, .08);
  color: var(--pc-ink); font-family: inherit; font-size: .82rem; font-weight: 600; line-height: 1; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; justify-content: center;
}
/* 39.21: the invitation's share bar (<djjs-invite-share>: the Bodh card's four round buttons, .djjs-bshare below) */
.djjs-pc-sewa__share { display: block; }
.djjs-pc-sewa__share .djjs-bshare { justify-content: flex-start; }
.djjs-pc-sewa__kpis { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; margin: 0; }
.djjs-pc-sewa__kpis div { display: grid; gap: .1rem; padding: .55rem .7rem; border-radius: .9rem; background: var(--c-sunken); }
.djjs-pc-sewa__kpis dt { font-size: .64rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--pc-meta); }
.djjs-pc-sewa__kpis dd { margin: 0; font: 600 1.5rem/1.1 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); font-variant-numeric: lining-nums tabular-nums; }
.djjs-pc-sewa__note { margin: 0; font-size: .76rem; line-height: 1.45; color: var(--pc-meta); }

/* ---- Milestones & the Official Sadhna Certificate (column 1) ------------------------------------------------------- */
.djjs-pc-badges__head { display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; }
.djjs-pc-badges__t { margin: 0; font: 600 1.05rem/1.3 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }
.djjs-pc-badges__hrs { font-size: .76rem; font-weight: 600; color: var(--pc-gold); font-variant-numeric: tabular-nums; }
.djjs-pc-badges__list { display: flex; flex-wrap: wrap; gap: .35rem; margin: 0; padding: 0; list-style: none; }
.djjs-pc-badge { display: inline-grid; gap: 0; padding: .3rem .7rem; border-radius: .8rem; border: 1px solid rgba(217, 119, 6, .35); background: rgba(217, 119, 6, .07); }
.djjs-pc-badge[data-track="streak"] { border-color: rgba(34, 211, 238, .35); background: rgba(34, 211, 238, .06); }
.djjs-pc-badge[data-track="seva"] { border-color: rgba(52, 211, 153, .35); background: rgba(52, 211, 153, .06); }
.djjs-pc-badge__n { font-size: .8rem; font-weight: 600; color: var(--pc-ink); }
.djjs-pc-badge__l { font-size: .66rem; color: var(--pc-meta); font-variant-numeric: tabular-nums; }
.djjs-pc-badges__lines { display: grid; gap: .3rem; margin: 0; padding: 0; list-style: none; font-size: .78rem; line-height: 1.4; color: var(--pc-meta); }
.djjs-pc-badges__lines li { display: flex; gap: .45rem; }
.djjs-pc-cert { display: grid; gap: .35rem; margin-top: .25rem; padding: .75rem .85rem; border-radius: 1rem; border: 1px solid rgba(217, 119, 6, .35);
  background: linear-gradient(135deg, rgba(245, 158, 11, .1), rgba(136, 19, 55, .06)); }
.djjs-pc-cert__t { margin: 0; font: 600 1rem/1.25 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }
.djjs-pc-cert__line { margin: 0; font-size: .78rem; color: var(--pc-meta); font-variant-numeric: tabular-nums; }
.djjs-pc-cert__track { display: block; height: 4px; border-radius: 999px; background: rgba(217, 119, 6, .16); overflow: hidden; }
.djjs-pc-cert__track > span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #D97706, #F59E0B); }
.djjs-pc-cert__open { justify-self: start; }

/* the certificate modal (a <dialog> on <body>, outside the app) */
.djjs-cert { margin: auto; width: min(46rem, calc(100vw - 1.5rem)); max-height: calc(100dvh - 1.5rem); padding: 0; border: 0;  /* margin: the app's reset zeroes dialog margins (its centring) */ border-radius: 1.25rem; background: transparent; overflow: auto; }
.djjs-cert::backdrop { background: rgba(13, 11, 9, .8); backdrop-filter: blur(4px); }
.djjs-cert__sheet {
  position: relative; display: grid; justify-items: center; gap: .35rem; padding: clamp(1.5rem, 5vw, 3rem) clamp(1rem, 5vw, 3rem);
  text-align: center; color: #2A1614; background: #FBF8F1; border-radius: 1.25rem;
  box-shadow: inset 0 0 0 10px #FBF8F1, inset 0 0 0 12px #B8860B, inset 0 0 0 16px #FBF8F1, inset 0 0 0 17px #881337;
}
.djjs-cert__emblem { position: relative; display: grid; place-items: center; width: 7rem; height: 7rem; margin-bottom: .25rem; }
.djjs-cert__emblem::before { content: ""; position: absolute; inset: -10%; border-radius: 50%; background: radial-gradient(circle, rgba(245, 158, 11, .35), rgba(245, 158, 11, 0) 70%); }
.djjs-cert__emblem img { position: relative; width: 6rem; height: 6rem; object-fit: contain; border-radius: 50%; }
.djjs-cert__org { margin: 0; font-size: .8rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: #881337; }
.djjs-cert__deva { margin: .25rem 0 0; font-family: "Tiro Devanagari Hindi", "Mukta", serif; font-size: 1.3rem; color: #8A4B0B; }
.djjs-cert__title { margin: 0; font: 600 clamp(1.9rem, 6vw, 2.8rem)/1.05 "Cormorant Garamond", Georgia, serif; color: #6B3F08; }
.djjs-cert__k { margin: .75rem 0 0; font-style: italic; color: #5A4A40; }
.djjs-cert__name { margin: 0; font: 600 clamp(1.6rem, 5vw, 2.3rem)/1.15 "Cormorant Garamond", Georgia, serif; color: #2A1614; border-bottom: 1px solid #B8860B; padding: 0 1rem .2rem; overflow-wrap: anywhere; }
.djjs-cert__body { max-width: 34rem; margin: .5rem 0 0; font-size: .95rem; line-height: 1.6; color: #3A2A24; }
.djjs-cert__date { margin: .5rem 0 0; font-weight: 600; color: #881337; }
.djjs-cert__code { margin: .75rem 0 0; font: 600 .8rem/1.3 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .04em; color: #3A2A24; }
.djjs-cert__verify { margin: 0; font-size: .72rem; color: #6A564E; overflow-wrap: anywhere; }
.djjs-cert__jmjk { margin: .5rem 0 0; font-weight: 600; color: #881337; }
.djjs-cert__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: .5rem; padding: .85rem; }
.djjs-cert__btn { background: #D97706; border-color: #D97706; color: #1C1206; }
.djjs-cert__btn--ghost { background: transparent; border-color: rgba(252, 251, 247, .4); color: #FCFBF7; }
@media print {
  html.djjs-printing-cert body * { visibility: hidden !important; }
  html.djjs-printing-cert .djjs-cert, html.djjs-printing-cert .djjs-cert * { visibility: visible !important; }
  html.djjs-printing-cert .djjs-cert { position: absolute; inset: 0; width: 100%; max-height: none; overflow: visible; }
  html.djjs-printing-cert .djjs-cert::backdrop { background: none; }
  html.djjs-printing-cert .djjs-cert__actions { display: none; }
  html.djjs-printing-cert .djjs-cert__sheet { border-radius: 0; min-height: 95vh; align-content: center; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}

@media (prefers-reduced-motion: reduce) {
  .djjs-pc-live__dot::after, .djjs-acc-strip__wait { animation: none; }
  .djjs-acc-strip__meter > span, .djjs-pc-micro__track > span { transition: none; }
}
.djjs-pc-stat[data-stat="guests"] .djjs-pc-stat__k::before { background: #0891B2; box-shadow: 0 0 0 3px rgba(8, 145, 178, .2); }

/* ---- Daily Niyama & Abhyas (schema patch 39.12, <djjs-niyama>) ------------------------------------------------------------ */
djjs-niyama { display: grid; gap: .5rem; padding: 1rem; border: 1px solid var(--pc-hair); border-radius: 1.25rem; background: var(--pc-card); min-width: 0; box-sizing: border-box; }
djjs-niyama *, djjs-niyama *::before, djjs-niyama *::after { box-sizing: border-box; }
.djjs-niyama__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: .15rem .6rem; }
.djjs-niyama__t { margin: 0; font: 600 1.2rem/1.2 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-gold); }
.djjs-niyama__deva { font-size: .8rem; color: var(--pc-meta); }
.djjs-niyama__progress { margin: 0; font-size: .78rem; color: var(--pc-meta); font-variant-numeric: lining-nums tabular-nums; }
.djjs-niyama__bar { display: block; height: 3px; border-radius: 3px; background: var(--pc-hair); overflow: hidden; }
.djjs-niyama__fill { display: block; height: 100%; background: linear-gradient(90deg, #D97706, #F59E0B); transform: scaleX(0); transform-origin: left center; }
.djjs-niyama__list { display: grid; margin: .25rem 0 0; padding: 0; list-style: none; }
.djjs-niyama__item { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .25rem .5rem; padding: .125rem 0; border-top: 1px solid var(--pc-hair); }
.djjs-niyama__item:first-child { border-top: 0; }
.djjs-niyama__check { position: relative; display: flex; align-items: center; gap: .625rem; min-height: 2.75rem; min-width: 0; cursor: pointer; }
.djjs-niyama__check input { position: absolute; opacity: 0; width: 1.5rem; height: 1.5rem; margin: 0; left: 0; cursor: pointer; }
.djjs-niyama__mark { position: relative; flex: none; width: 1.375rem; height: 1.375rem; border: 1.5px solid rgba(217, 119, 6, .6); border-radius: .4rem; background: transparent; }
.djjs-niyama__mark::after { content: ""; position: absolute; left: .4rem; top: .15rem; width: .35rem; height: .7rem; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg) scale(0); }
.djjs-niyama__check input:checked + .djjs-niyama__mark { background: #D97706; border-color: #D97706; }
.djjs-niyama__check input:checked + .djjs-niyama__mark::after { transform: rotate(45deg) scale(1); }
.djjs-niyama__check input:focus-visible + .djjs-niyama__mark { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; }
.djjs-niyama__ico { flex: none; width: 1.25rem; font-size: 1.05rem; line-height: 1; text-align: center; }
.djjs-niyama__text { display: grid; min-width: 0; line-height: 1.2; }
.djjs-niyama__name { font-size: .88rem; font-weight: 600; color: var(--pc-ink); }
.djjs-niyama__sub { font-size: .72rem; color: var(--pc-meta); }
.djjs-niyama__item[data-done] .djjs-niyama__name { color: var(--pc-meta); }
.djjs-niyama__go {
  position: relative; display: inline-grid; place-items: center; min-height: 2.75rem; min-width: 2.75rem; padding: 0 .75rem; border-radius: 999px;
  border: 1px solid rgba(217, 119, 6, .35); background: rgba(217, 119, 6, .06); color: var(--pc-ink); font-family: inherit; font-size: .78rem; font-weight: 600; line-height: 1.1; text-decoration: none; cursor: pointer; white-space: nowrap;
}
.djjs-niyama__go:hover { background: rgba(217, 119, 6, .16); border-color: #D97706; }
.djjs-niyama__go:focus-visible { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; }
.djjs-niyama__bodh { grid-column: 1 / -1; margin: 0 0 .5rem; padding: .75rem .875rem; border-left: 3px solid #D97706; border-radius: 0 .75rem .75rem 0; background: var(--c-sunken, rgba(217, 119, 6, .06)); }
.djjs-niyama__quote { margin: 0; font: 500 1.05rem/1.4 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-ink); }
.djjs-niyama__by { margin: .35rem 0 0; font-size: .72rem; color: var(--pc-meta); }
@media (prefers-reduced-motion: no-preference) {
  .djjs-niyama__fill { transition: transform .45s cubic-bezier(.4, 0, .2, 1); }
  .djjs-niyama__mark, .djjs-niyama__mark::after { transition: background-color .2s, border-color .2s, transform .22s cubic-bezier(.34, 1.56, .64, 1); }
  .djjs-niyama__bodh:not([hidden]) { animation: djjs-niyama-in .25s ease-out; }
}
@keyframes djjs-niyama-in { from { opacity: 0; transform: translateY(-3px); } }

/* ---- In sadhna now (schema patch 39.16, <djjs-sadhna-now>): the hour's slot holder in gold, co-sadhaks with a green dot ---- */
djjs-sadhna-now { position: relative; display: block; min-width: 0; }
djjs-sadhna-now[hidden] { display: none; }
.djjs-sn { display: flex; flex-wrap: wrap; gap: .5rem; min-width: 0; margin: .75rem 0 0; padding: 0; list-style: none; }
.djjs-sn__pill {
  display: inline-flex; align-items: center; gap: .45rem; max-width: 100%; min-height: 2rem; padding: .3rem .85rem .3rem .7rem;
  box-sizing: border-box; border: 1px solid var(--pc-hair); border-radius: 999px; background: rgba(217, 119, 6, .05);
  color: var(--pc-ink); font-size: .875rem; line-height: 1.3;
}
.djjs-sn__name { min-width: 0; overflow-wrap: anywhere; }
.djjs-sn__mark { flex: none; }
.djjs-sn__pill:not(.is-slot) .djjs-sn__mark {
  width: .5rem; height: .5rem; border-radius: 50%; background: #16A34A; box-shadow: 0 0 0 3px rgba(22, 163, 74, .16), 0 0 8px rgba(22, 163, 74, .45);
}
.djjs-sn__pill.is-slot {
  border-color: rgba(217, 119, 6, .7); background: rgba(245, 158, 11, .1); box-shadow: 0 0 14px -6px rgba(245, 158, 11, .75);
}
.djjs-sn__pill.is-slot .djjs-sn__mark { color: var(--pc-gold); font-size: .8rem; line-height: 1; }
.djjs-sn__pill.is-more { padding-left: .85rem; color: var(--pc-meta); }
:root.dark .djjs-sn__pill:not(.is-slot) .djjs-sn__mark { background: #22C55E; box-shadow: 0 0 0 3px rgba(34, 197, 94, .18), 0 0 9px rgba(34, 197, 94, .6); }
:root.dark .djjs-sn__pill.is-slot { border-color: #F59E0B; }
.djjs-practice__now { margin: .75rem 0 0; text-align: center; }
.djjs-practice__now-t { margin: 0; font-size: .78rem; letter-spacing: .04em; text-transform: uppercase; color: var(--pc-meta); }
.djjs-practice__now .djjs-sn { justify-content: center; margin-top: .5rem; }

/* ---- schema patch 39.17: the roster's "+ 3 others (PA, NJ, 🇬🇧)" button and its panel of everyone in sadhna now ------------------- */
.djjs-sn__more-wrap { display: inline-flex; max-width: 100%; }
.djjs-sn__more {
  position: relative; cursor: pointer; font: inherit; font-size: .875rem; color: var(--pc-ink); text-align: left;
  border-style: dashed; border-color: rgba(217, 119, 6, .45); background: transparent;
}
.djjs-sn__more[aria-expanded="true"] { border-style: solid; background: rgba(217, 119, 6, .1); }
@media (hover: hover) and (pointer: fine) { .djjs-sn__more:hover { background: rgba(217, 119, 6, .1); } }
.djjs-sn__more:focus-visible { outline: 2px solid #F59E0B; outline-offset: 2px; }
.djjs-sn__pop {
  position: absolute; left: 0; right: 0; top: calc(100% + .45rem); z-index: 30; max-height: min(60vh, 22rem); overflow: auto;
  padding: .75rem; box-sizing: border-box; border: 1px solid rgba(217, 119, 6, .35); border-radius: 1rem; background: var(--pc-card);
  box-shadow: 0 18px 40px -18px rgba(0, 0, 0, .55); text-align: left;
}
.djjs-sn__pop[hidden] { display: none; }
.djjs-sn__pop-t { margin: 0 0 .5rem; font-size: .75rem; letter-spacing: .06em; text-transform: uppercase; color: var(--pc-meta); }
.djjs-sn__pop-list { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0; padding: 0; list-style: none; }
.djjs-practice__now .djjs-sn__pop-list { justify-content: flex-start; }

/* ---- schema patch 39.17: Vrata & Upvas (<djjs-vrata>) ----------------------------------------------------------------------- */
djjs-vrata { display: grid; gap: .6rem; padding: 1rem; border: 1px solid var(--pc-hair); border-radius: 1.25rem; background: var(--pc-card); min-width: 0; box-sizing: border-box; }
djjs-vrata *, djjs-vrata *::before, djjs-vrata *::after { box-sizing: border-box; }
.djjs-vrata__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: .15rem .6rem; }
.djjs-vrata__t { margin: 0; font: 600 1.2rem/1.2 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-gold); }
.djjs-vrata__sub { font-size: .8rem; color: var(--pc-meta); }
.djjs-vrata__status { margin: 0; font-size: .875rem; color: var(--pc-meta); }
.djjs-vrata__status[hidden] { display: none; }
.djjs-vrata__list { display: grid; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.djjs-vrata__row { display: grid; gap: .3rem; padding: .7rem .8rem; border: 1px solid var(--pc-hair); border-radius: .9rem; min-width: 0; }
.djjs-vrata__row.is-mine { border-color: rgba(217, 119, 6, .6); background: rgba(245, 158, 11, .06); }
.djjs-vrata__top { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .1rem .75rem; }
.djjs-vrata__name { font-weight: 600; color: var(--pc-ink); }
.djjs-vrata__when { font-size: .84rem; color: var(--pc-meta); font-variant-numeric: lining-nums tabular-nums; }
.djjs-vrata__times, .djjs-vrata__together { margin: 0; font-size: .8rem; color: var(--pc-meta); font-variant-numeric: lining-nums tabular-nums; overflow-wrap: anywhere; }
.djjs-vrata__together { color: var(--pc-ink); }
.djjs-vrata__btn {
  position: relative; justify-self: start; display: inline-flex; align-items: center; min-height: 2.75rem; max-width: 100%; padding: .4rem 1rem;
  border: 1px solid rgba(217, 119, 6, .45); border-radius: 999px; background: transparent; color: var(--pc-ink);
  font: inherit; font-size: .875rem; font-weight: 600; cursor: pointer; text-align: left;
}
.djjs-vrata__btn[aria-pressed="true"] { background: linear-gradient(135deg, #F8D888, #E7AE45 55%, #C98A22); border-color: #C98A22; color: #2A0A14; }
.djjs-vrata__btn:disabled { opacity: .6; cursor: progress; }
.djjs-vrata__btn:focus-visible { outline: 2px solid #F59E0B; outline-offset: 2px; }
@media (hover: hover) and (pointer: fine) { .djjs-vrata__btn:not([aria-pressed="true"]):hover { background: rgba(217, 119, 6, .1); } }
.djjs-vrata__guide { font-size: .875rem; color: var(--pc-ink); }
.djjs-vrata__guide-s { display: flex; align-items: center; min-height: 2.75rem; cursor: pointer; color: var(--pc-gold); font-weight: 600; }
.djjs-vrata__guide-l { display: grid; gap: .2rem; margin: 0; }
.djjs-vrata__guide-l dt { font-weight: 600; margin-top: .4rem; }
.djjs-vrata__guide-l dd { margin: 0; color: var(--pc-meta); line-height: 1.5; }
.djjs-vrata__note { margin: 0; font-size: .75rem; color: var(--pc-meta); }


/* ---- schema patch 39.19: the Bodh card's share bar (<djjs-bodh-share>) -------------------------------------------------------- */
djjs-bodh-share { display: inline-flex; min-width: 0; max-width: 100%; }
.djjs-bshare { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.djjs-bshare__btn {
  position: relative; display: inline-grid; place-items: center; width: 2.75rem; height: 2.75rem; flex: none; padding: 0; box-sizing: border-box;
  border: 1px solid transparent; border-radius: 999px; cursor: pointer; text-decoration: none; font: inherit;
  transition: transform .15s ease, filter .2s ease, box-shadow .2s ease;
}
.djjs-bshare__btn svg { width: 1.25rem; height: 1.25rem; }
.btn-share-wa { background: #25D366; color: #062B1B; box-shadow: 0 8px 18px -12px rgba(37, 211, 102, .9); }
.btn-share-fb { background: #1877F2; color: #FFFFFF; box-shadow: 0 8px 18px -12px rgba(24, 119, 242, .9); }
.btn-share-x { background: #000000; color: #FFFFFF; }
:root.dark .btn-share-x { background: #E7E9EA; color: #0F1419; }
.btn-share-link { background: #D97706; color: #1A0F00; box-shadow: 0 8px 18px -12px rgba(217, 119, 6, .9); }
@media (hover: hover) and (pointer: fine) { .djjs-bshare__btn:hover { filter: brightness(1.08); box-shadow: 0 0 0 3px rgba(245, 158, 11, .25); } }
@media (prefers-reduced-motion: no-preference) { .djjs-bshare__btn:active { transform: scale(.95); } }
.djjs-bshare__btn:focus-visible { outline: 2px solid #F59E0B; outline-offset: 2px; }
/* the tooltip: the button's own name, above it, on hover or keyboard focus (the label is aria-label; this is visual only) */
.djjs-bshare__btn::before {
  content: attr(data-tip); position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); z-index: 5;
  display: none; padding: .2rem .5rem; border-radius: .4rem; background: #161311; color: #FCFBF7; font-size: .72rem; font-weight: 600;
  line-height: 1.3; white-space: nowrap; pointer-events: none;
}
:root:not(.dark) .djjs-bshare__btn::before { background: #2A1614; }
@media (hover: hover) and (pointer: fine) { .djjs-bshare__btn:hover::before { display: block; } }
.djjs-bshare__btn:focus-visible::before { display: block; }
.djjs-bshare__toast { flex-basis: 100%; min-height: 0; font-size: .8rem; font-weight: 600; color: var(--pc-gold); }
.djjs-bshare__toast:empty { display: none; }

/* ----- schema patch 39.23: the phone header keeps DivyaSangat whole, and one timer while a sitting runs ----------------------
   The fixed "Active Sadhna" bar at the top (play / pause / end) already counts down, so the header's compact quick-sadhna pill
   and the hour card's button right below it give way while a sitting runs (data-live); otherwise on a phone it is its icon alone (its full name stays its aria-label;
   the word is in .djjs-qs-word, tools/patch-spa.py HELD_PATCHES). The brand never shrinks or wraps. Below 400 px the header's
   dial button steps aside too: the dial is the bottom bar's Sadhna tab and the More sheet's dial row. */
header [data-testid="quick-sadhna-compact"][data-live="true"],
.djjs-hourbar__cta [data-testid="quick-sadhna"][data-live="true"] { display: none; }   /* the hour card under it already says what is left of the hour */
header a[aria-label="DivyaSangat home"] { flex-shrink: 0; gap: .5rem; min-width: max-content; }
header a[aria-label="DivyaSangat home"] > span:last-child { white-space: nowrap; flex-shrink: 0; }
@media (max-width: 639px) {
  header [data-testid="quick-sadhna-compact"] { width: 44px; min-width: 44px; padding-inline: 0; gap: 0; }
  header [data-testid="quick-sadhna-compact"] .djjs-qs-word { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  header djjs-sanctuary-menu { display: none; }   /* shown from 40rem; on a phone it is the More sheet's rows */
}
@media (max-width: 399px) {
  header [data-testid="dial-open"], header [data-testid="fasting-badge"] { display: none; }
  header :has(> a[aria-label="DivyaSangat home"]) { column-gap: 6px; }
}

/* ---- schema patch 39.33 (track d-grid): one Fasting, Vrata & Upvas card; equal-height columns ------------------------------
   djjsFastVrata (tools/patch-spa.py FAST_VRATA_PATCHES) closes column 2: the dashboard's own sacred-fast starter (Un in its bare
   mode: the fast stays on the device, the header ring follows it) above the branch's next two fasts (<djjs-vrata compact>). */
.djjs-fv { display: grid; gap: .75rem; align-content: start; min-width: 0; }
.djjs-fv__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: .15rem .6rem; }
.djjs-fv__t { margin: 0; font: 600 1.2rem/1.2 var(--font-display, "Cormorant Garamond", Georgia, serif); color: var(--pc-gold); }
.djjs-fv__deva { font-size: .8rem; color: var(--pc-meta); }
.djjs-fv__fast > p.font-display { font-size: 1.25rem; }
.djjs-fv__fast [role="group"] button { position: relative; min-height: 2.75rem; }
.djjs-fv djjs-vrata[compact] { padding: .75rem 0 0; border: 0; border-top: 1px solid var(--pc-hair); border-radius: 0; background: none; }
.djjs-fv__more { display: inline-flex; align-items: center; gap: .3rem; justify-self: start; min-height: 2.75rem; color: var(--pc-gold); font-weight: 600; text-decoration: none; }
.djjs-fv__more:hover { text-decoration: underline; text-underline-offset: 3px; }
.djjs-fv__more:focus-visible { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; border-radius: .4rem; }

/* "N sadhaks observing together": three fixed amber hairline rings, decorative only (never scaled by the number); the server
   sends the number only once 3 members observe a fast. They breathe slowly (opacity and scale), and are still under reduced motion. */
.djjs-vrata__together { display: flex; align-items: center; gap: .5rem; }
.djjs-vrata__rings { position: relative; flex: none; width: 1.25rem; height: 1.25rem; }
.djjs-vrata__rings i {
  position: absolute; inset: 0; margin: auto; border: 1px solid rgba(217, 119, 6, .35); border-radius: 50%;
  animation: djjs-vrata-breathe 5.4s ease-in-out infinite;
}
.djjs-vrata__rings i:nth-child(2) { width: 70%; height: 70%; animation-delay: -1.8s; }
.djjs-vrata__rings i:nth-child(3) { width: 40%; height: 40%; border-color: rgba(245, 158, 11, .55); animation-delay: -3.6s; }
@keyframes djjs-vrata-breathe { 0%, 100% { opacity: .45; transform: scale(.9); } 50% { opacity: 1; transform: scale(1); } }
@media (prefers-reduced-motion: reduce) { .djjs-vrata__rings i { animation: none; opacity: .8; transform: none; } }

/* Equal-height columns from 48rem: every column ends on the same line, its last visible card stretching (column 1's milestones,
   or Micro-Sadhna while they are hidden; column 2's merged card; column 3's Coming up). From 48rem to 72rem the notices column
   spans its own row, so columns 1 and 2 match there. One column on a phone: unchanged. */
@media (min-width: 48rem) {
  .djjs-dash-grid { align-items: stretch; }
  .djjs-dash-grid > .djjs-col { display: flex; flex-direction: column; gap: .75rem; }
  .djjs-dash-grid > .djjs-col > :not([hidden]):is(:last-child, :has(+ [hidden]:last-child)) { flex-grow: 1; align-content: start; }
}

/* ---- schema patch 39.33 (track e-webgl): the live globe beside the "in sadhna now" roster in the practice card -----------------
   tools/patch-spa.py GLOBE_ROSTER_PATCHES: .djjs-practice__live holds the roster (only while someone sits) and a compact, captionless
   <djjs-pulse-globe bare height="112"> (assets/js/pulse-globe.js, WebGL with a Canvas 2D fallback). Alone, the globe is centred.
   The globe's height attribute reserves its box, so the row never shifts when the WebGL layer or the pulse data arrive. */
.djjs-practice__live { display: flex; align-items: center; justify-content: center; gap: .75rem; margin: .75rem 0 0; min-width: 0; }
.djjs-practice__live .djjs-practice__now { flex: 1 1 0; min-width: 0; margin: 0; text-align: left; }
.djjs-practice__live .djjs-practice__now .djjs-sn { justify-content: flex-start; }
.djjs-practice__globe { display: block; flex: none; color: inherit; min-height: 112px; }

/* ----- schema patch 39.33 (track b-analytics): the Regional Analytics Command Center (<djjs-admin-dock>) and the branch's
   spotlight cards in the Ashram Notices column (<djjs-ashram-notices>). The dock follows the header's Admin View / Devotee Mode
   switch: [hidden] outside Admin View (html.djjs-admin-mode). Six pulse cards: 2 columns on phones, 3 on tablets, 6 on wide
   screens; each card's scope line (every branch / home branch / the branch's domain) may take two lines. ---------------------- */
djjs-admin-dock[hidden] { display: none; }
.djjs-pc-scope {
  display: inline-flex; align-items: center; min-height: 1.5rem; margin-left: .25rem; padding: 0 .55rem; border-radius: 999px;
  border: 1px solid rgba(217, 119, 6, .35); background: rgba(217, 119, 6, .08); color: var(--pc-gold);
  font: 600 .7rem/1 var(--font-sans, system-ui), sans-serif; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap;
  max-width: 12rem; overflow: hidden; text-overflow: ellipsis;
}
.djjs-pc-scope[hidden] { display: none; }
.djjs-pc-off { margin: 0; padding: .75rem .9rem; border-top: 1px solid var(--pc-hair); font-size: .86rem; color: var(--pc-meta); }
.djjs-pc-off[hidden], .djjs-pc-stats[hidden], .djjs-pc-grid[hidden], .djjs-pc-card[hidden] { display: none; }
.djjs-pc-stats.djjs-pc-stats--six { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.djjs-pc-stats--six .djjs-pc-stat { min-height: 4.75rem; align-content: start; border-left: 1px solid var(--pc-hair); border-top: 0; }
.djjs-pc-stats--six .djjs-pc-stat:nth-child(2n+1) { border-left: 0; }
.djjs-pc-stats--six .djjs-pc-stat:nth-child(n+3) { border-top: 1px solid var(--pc-hair); }
.djjs-pc-stats--six .djjs-pc-stat__sub {
  white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.35;
}
.djjs-pc-stat[data-stat="signups"] .djjs-pc-stat__k::before, .djjs-pc-stat[data-stat="hours"] .djjs-pc-stat__k::before { content: none; }
@media (min-width: 48rem) {
  .djjs-pc-stats.djjs-pc-stats--six { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .djjs-pc-stats--six .djjs-pc-stat:nth-child(n) { border-left: 1px solid var(--pc-hair); border-top: 0; }
  .djjs-pc-stats--six .djjs-pc-stat:nth-child(3n+1) { border-left: 0; }
  .djjs-pc-stats--six .djjs-pc-stat:nth-child(n+4) { border-top: 1px solid var(--pc-hair); }
}
@media (min-width: 80rem) {
  .djjs-pc-stats.djjs-pc-stats--six { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .djjs-pc-stats--six .djjs-pc-stat:nth-child(n) { border-left: 1px solid var(--pc-hair); border-top: 0; }
  .djjs-pc-stats--six .djjs-pc-stat:first-child { border-left: 0; }
}
.djjs-pc-geo.is-wide { grid-column: 1 / -1; }
.djjs-pc-geo__links { display: flex; flex-wrap: wrap; align-items: center; gap: 0 1.25rem; }
/* the branch's adaptive chart: rank · area (+ online dot, counties) · bar · sadhaks and 30-day sittings */
.djjs-pc-rgeo { display: grid; gap: .1rem; margin: 0; padding: 0; list-style: none; }
.djjs-pc-rgeo[hidden], .djjs-pc-rgeo__note[hidden], .djjs-pc-geo__cols[hidden] { display: none; }
.djjs-pc-rgeo__row {
  display: grid; grid-template-columns: 1.25rem minmax(0, 1fr) minmax(4rem, 28%) auto; align-items: center; gap: .3rem .6rem;
  padding: .4rem 0; border-bottom: 1px solid var(--pc-hair);
}
.djjs-pc-rgeo__row.is-other { opacity: .85; }
.djjs-pc-rgeo__rank { font-weight: 700; color: var(--pc-gold); font-variant-numeric: lining-nums tabular-nums; text-align: center; }
.djjs-pc-rgeo__who { display: grid; min-width: 0; }
.djjs-pc-rgeo__name { min-width: 0; overflow-wrap: anywhere; font-size: .88rem; font-weight: 600; color: var(--pc-ink); }
.djjs-pc-rgeo__parts { font-size: .74rem; color: var(--pc-meta); overflow-wrap: anywhere; }
.djjs-pc-rgeo__n { display: grid; justify-items: end; font-size: .82rem; font-weight: 600; color: var(--pc-ink); font-variant-numeric: lining-nums tabular-nums; white-space: nowrap; }
.djjs-pc-rgeo__n small { font-size: .7rem; font-weight: 500; color: var(--pc-meta); }
.djjs-pc-rgeo__note { margin: .5rem 0 0; font-size: .76rem; color: var(--pc-meta); }
.djjs-pc-dot {
  display: inline-block; width: .5rem; height: .5rem; border-radius: 50%; background: #22C55E; box-shadow: 0 0 0 3px rgba(34, 197, 94, .2);
  vertical-align: .1em;
}
@media (max-width: 29.99rem) {
  .djjs-pc-rgeo__row { grid-template-columns: 1.25rem minmax(0, 1fr) auto; }
  .djjs-pc-rgeo__track { grid-column: 2 / -1; grid-row: 2; }
}
/* the branch's spotlight under the notices: link cards, the content of the branch's own stores */
.djjs-pc-spot { display: grid; gap: .5rem; margin: .75rem 0 0; padding: .75rem 0 0; border-top: 1px solid var(--pc-hair); list-style: none; }
.djjs-pc-spot__card {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: .15rem; padding: .625rem .75rem; border-radius: .875rem;
  border: 1px solid var(--pc-hair); background: var(--c-sunken); min-width: 0;
}
:root.dark .djjs-pc-spot__card { background: #120F0C; }
.djjs-pc-spot__card:has(.djjs-pc-spot__img) { grid-template-columns: 56px minmax(0, 1fr); column-gap: .75rem; }
.djjs-pc-spot__card:has(.djjs-pc-spot__img) > :not(.djjs-pc-spot__img) { grid-column: 2; }
.djjs-pc-spot__img { grid-row: 1 / span 4; width: 56px; height: 56px; border-radius: .6rem; object-fit: cover; }
.djjs-pc-spot__k { font-size: .66rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--pc-gold); }
.djjs-pc-spot__t { font-size: .9rem; font-weight: 600; line-height: 1.35; color: var(--pc-ink); overflow-wrap: anywhere; }
.djjs-pc-spot__b { font-size: .8rem; line-height: 1.45; color: var(--pc-meta); overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.djjs-pc-spot__a {
  justify-self: start; display: inline-flex; align-items: center; min-height: 2.75rem; font-size: .82rem; font-weight: 600; color: var(--pc-gold);
  text-underline-offset: 3px;
}
.djjs-pc-spot__a:focus-visible { outline: 3px solid var(--focus, #FCD34D); outline-offset: 2px; }

/* ---- schema patch 39.34: the Rudripath page's header actions (tools/patch-spa.py SR_PATCHES (b)): Practice room + Lyrics ---- */
.djjs-rudri-actions { display: flex; flex-wrap: wrap; gap: .5rem; }

/* ---- schema patch 39.35 (track C): /portal's "My practice & sangat" (tools/patch-spa.py P3935_C_PATCHES, djjsMine) ----------
   The six modules moved from /dashboard: the Sadhak Activity Monitor (full width), then two rows of two cards from 1024 px
   (This Week's Gatherings | My roster, the Annual Sangat Odyssey | Sadhna, last 5 weeks), then Sangathan Setu. One column on
   phones and tablets; every cell may shrink (min-width: 0), so nothing widens the page at 320 px. */
.djjs-mine { margin-top: 3.5rem; min-width: 0; }
.djjs-mine__grid { display: grid; gap: 1.5rem; margin-bottom: 2.5rem; min-width: 0; }
.djjs-mine__card { min-width: 0; }
@media (min-width: 64rem) {
  .djjs-mine__grid { grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); align-items: start; }
  .djjs-mine__grid--odyssey { grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); }
}
.djjs-mine .djjs-setu { margin-top: 0; }
#djjs-gatherings, #djjs-setu, #djjs-household { scroll-margin-top: 7rem; }
