/* Charita (owner, 2026-10-10, Phase 2): the Journey calendar with date blocks, shared by the child's Charita tab and
   /admin/journey (charita.js). Each day is one card (its date the sticky header band, days to the boards on the right);
   events are chat bubbles whose width and weight grow with their tier; a sticky runner track follows the scroll; a date
   opens the day pager. */
.journey-sub{margin:0 0 var(--vq-space-2);color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.journey-sub:empty{display:none}
.cal-month{margin-top:var(--vq-space-3)}

/* The runner track, sticky at the top of the workspace. */
.cal-track{position:sticky;top:0;z-index:4;display:flex;align-items:center;gap:var(--vq-space-3);margin:0 0 var(--vq-space-3);padding:calc(var(--vq-space-5) + var(--vq-space-2)) 0 var(--vq-space-3);background:var(--vq-paper);border-bottom:1px solid var(--vq-line)}
.cal-track-line{position:relative;flex:1;height:6px;border-radius:var(--vq-radius-pill);background:var(--vq-grid-strong)}
.cal-track-line i{position:absolute;inset:0 auto 0 0;border-radius:inherit;background:var(--vq-success);transition:width .15s ease-out}
.cal-track-line em{position:absolute;top:-26px;margin-left:-12px;font-style:normal;transform:scaleX(-1);transition:left .15s ease-out}
.cal-track-end{color:var(--vq-warning);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font);white-space:nowrap}

/* A day is one card: the date block is its header band (sticky under the track), its events inside. */
.cal-day{position:relative;display:grid;grid-template-columns:1fr;gap:var(--vq-space-2);margin-bottom:var(--vq-space-4);padding:0 0 var(--vq-space-3);border:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-md);background:var(--vq-surface-muted)}
.cal-day::before{content:"";position:absolute;top:48px;bottom:var(--vq-space-3);left:23px;width:2px;background:var(--vq-line)}
.cal-day.is-past::before{background:var(--vq-success)}
.cal-day.is-today{border-color:var(--vq-accent)}
.cal-date{position:sticky;top:var(--cal-track-h,64px);z-index:3;display:flex;align-items:baseline;gap:var(--vq-space-2);padding:var(--vq-space-2) var(--vq-space-3);border-bottom:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-md) var(--vq-radius-md) 0 0;background:var(--vq-surface);color:var(--vq-ink-muted);cursor:pointer}
.cal-date b{color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-lg)/1.1 var(--vq-font)}
.cal-date small{font:var(--vq-weight-medium) var(--vq-text-sm)/1.2 var(--vq-font);text-transform:uppercase}
.cal-day.is-today .cal-date{color:var(--vq-accent);background:var(--vq-accent-soft)}
.cal-day.is-today .cal-date b{color:var(--vq-accent)}
.cal-left{margin-left:auto;color:var(--vq-warning);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.cal-day.is-free{min-height:0;margin-bottom:var(--vq-space-2);padding:0;background:none}
.cal-day.is-free::before,.cal-day.is-free .cal-items{display:none}
.cal-day.is-free .cal-date{border-bottom:0;border-radius:var(--vq-radius-md);opacity:.6;cursor:default}
.cal-items{display:grid;gap:var(--vq-space-5);align-content:start;justify-items:stretch;min-width:0;padding:var(--vq-space-2) var(--vq-space-3) 0 calc(var(--vq-space-6) + var(--vq-space-3))}
.cal-earned{justify-self:start;padding:2px var(--vq-space-2);border-radius:var(--vq-radius-pill);background:var(--vq-surface);color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-xs)/1.5 var(--vq-font)}
.cal-free{padding-top:var(--vq-space-2);color:var(--vq-ink-subtle);font:var(--vq-weight-medium) var(--vq-text-xs)/1.3 var(--vq-font)}
.cal-runner{color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}

/* Events: a chat bubble with a tail to the spine; one column, the width and weight step with the tier. */
.cal-row{position:relative;display:grid;grid-template-columns:1fr;gap:0}
.journey-bubble{position:relative;box-sizing:border-box;display:grid;grid-template-columns:auto 1fr;column-gap:var(--vq-space-3);row-gap:2px;align-items:center;justify-self:start;min-width:0;padding:var(--vq-space-2) var(--vq-space-3);border:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-md);border-top-left-radius:var(--vq-radius-sm);background:var(--vq-surface);color:var(--vq-ink);text-align:left;font:inherit;cursor:default}
.journey-bubble::before{content:"";position:absolute;top:18px;left:-7px;width:12px;height:12px;margin-top:-6px;border:inherit;border-width:0 0 var(--vq-border-width) var(--vq-border-width);background:inherit;transform:rotate(45deg)}
.journey-bubble>strong,.journey-bubble>small{grid-column:2;min-width:0;overflow-wrap:anywhere}
.journey-bubble strong{font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}
.journey-bubble small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.3 var(--vq-font)}
.journey-earn{color:var(--vq-accent);font-weight:var(--vq-weight-bold)}
.cal-badge{grid-row:1/span 2;display:grid;place-items:center;width:28px;height:28px;border-radius:var(--vq-radius-pill);background:var(--vq-surface-muted);color:var(--vq-accent);line-height:1}
.cal-badge svg{width:60%;height:60%}
.tier-win .cal-badge{color:var(--vq-success)}
.tier-1 .cal-badge{color:var(--vq-paper)}
.cal-event .journey-bubble{padding-right:var(--vq-space-6)}
.cal-event .journey-bubble.is-plan{border-style:dashed;border-color:var(--vq-accent)}
.cal-event.is-school .journey-bubble{border-style:solid;border-color:var(--vq-line);background:var(--vq-surface-muted)}
.cal-grip{position:absolute;top:50%;right:var(--vq-space-1);margin-top:-14px;padding:var(--vq-space-1);color:var(--vq-ink-subtle);line-height:0;cursor:grab;touch-action:none}
.cal-grip svg{width:20px;height:20px}
.cal-event.is-dragging{opacity:.5}
.cal-day.is-drop{outline:2px dashed var(--vq-accent);outline-offset:-2px}
.tier-1 .journey-bubble{width:100%;padding:var(--vq-space-4);border:3px solid var(--vq-warning);box-shadow:0 0 var(--vq-space-5) var(--vq-warning)}
.tier-1 .cal-badge{width:44px;height:44px;background:var(--vq-warning);font-size:var(--vq-text-xl)}
.tier-1 .journey-bubble strong{color:var(--vq-warning);font-size:var(--vq-text-xl);text-transform:uppercase}
.tier-2 .journey-bubble{width:95%;border:3px solid var(--vq-accent);background:var(--vq-surface-tint)}
.tier-2 .cal-badge{width:38px;height:38px;background:var(--vq-accent-soft);font-size:var(--vq-text-lg)}
.tier-2 .journey-bubble strong{font-size:var(--vq-text-lg)}
.tier-3 .journey-bubble{width:90%;border:2px solid var(--vq-accent)}
.tier-3 .cal-badge{width:34px;height:34px;background:var(--vq-accent-soft);font-size:var(--vq-text-md)}
.tier-3 .journey-bubble strong{font-size:var(--vq-text-md)}
.tier-4 .journey-bubble{width:85%}
.tier-4 .cal-badge{width:30px;height:30px}
.tier-4 .journey-bubble strong{font-size:var(--vq-text-md)}
.tier-5 .journey-bubble,.tier-win .journey-bubble{width:80%}
.tier-5 .cal-badge{width:24px;height:24px;font-size:var(--vq-text-xs)}
.tier-win .journey-bubble{border-color:var(--vq-success)}
.tier-win .cal-badge{width:24px;height:24px;background:transparent}
/* Effort events (practice day, streak, best, comeback; owner, 2026-10-11): warm, compact, the same 80% as wins. */
.tier-effort .journey-bubble{width:80%;border-color:var(--vq-warning)}
.tier-effort .cal-badge{width:24px;height:24px;background:transparent;color:var(--vq-warning);font-size:var(--vq-text-sm)}
.tier-effort .journey-bubble strong{font-size:var(--vq-text-sm)}
.cal-event.tier-3 .journey-bubble.is-plan,.cal-event.tier-4 .journey-bubble.is-plan,.cal-event.tier-5 .journey-bubble.is-plan{border-style:dashed}
.cal-event.tier-1 .journey-bubble.is-plan{border-style:solid;border-color:var(--vq-warning)}

/* Plan mode (owner, 2026-10-11): the Plan button above the calendar; drafts dashed and faint with a "Draft" tag; the
   agree bar sticky at the foot of the workspace. */
.cal-plan-start{display:flex;justify-content:flex-end;margin:0 0 var(--vq-space-2)}
.cal-plan-start .primary-action{min-height:var(--vq-tap);padding:0 var(--vq-space-4)}
.cal-plan-note{margin:0 0 var(--vq-space-2);padding:var(--vq-space-2) var(--vq-space-3);border:var(--vq-border-width) dashed var(--vq-accent);border-radius:var(--vq-radius-md);background:var(--vq-accent-soft);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.journey-bubble.is-draft{border-style:dashed;border-color:var(--vq-accent);background:var(--vq-paper);opacity:.75}
.journey-bubble.is-draft strong{color:var(--vq-ink-muted)}
.cal-draft-tag{position:absolute;top:calc(-1 * var(--vq-space-3));right:var(--vq-space-6);padding:0 var(--vq-space-2);border:var(--vq-border-width) dashed var(--vq-accent);border-radius:var(--vq-radius-pill);background:var(--vq-paper);color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-xs)/1.6 var(--vq-font);text-transform:uppercase}
.cal-plan-bar{position:sticky;bottom:0;z-index:5;display:grid;grid-template-columns:1fr 2fr;gap:var(--vq-space-2);margin:var(--vq-space-3) calc(-1 * var(--vq-space-2)) 0;padding:var(--vq-space-3) var(--vq-space-2) calc(var(--vq-space-3) + env(safe-area-inset-bottom));border-top:var(--vq-border-width) solid var(--vq-line);background:var(--vq-paper)}
.cal-plan-bar .primary-action:disabled{opacity:.5;cursor:default}

/* A day full screen: pages side by side, one per day with something on it, snapping as you swipe. */
.cal-pager{position:fixed;inset:0;z-index:60;display:grid;grid-template-rows:1fr auto;background:var(--vq-paper)}
.cal-pager-close{position:absolute;top:var(--vq-space-3);right:var(--vq-space-3);z-index:2;width:var(--vq-tap);height:var(--vq-tap);border:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-pill);background:var(--vq-surface);color:var(--vq-ink);font-size:var(--vq-text-md);cursor:pointer}
.cal-pager-track{display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;overscroll-behavior:contain;scrollbar-width:none}
.cal-page{box-sizing:border-box;flex:0 0 100%;display:grid;align-content:start;gap:var(--vq-space-4);overflow-y:auto;padding:var(--vq-space-5) var(--vq-gutter) var(--vq-space-6);scroll-snap-align:start}
.cal-page-head{display:grid;gap:var(--vq-space-1);padding-right:var(--vq-space-6)}
.cal-page-head b{font:var(--vq-weight-bold) var(--vq-text-2xl)/1.1 var(--vq-font)}
.cal-page.is-today .cal-page-head b{color:var(--vq-accent)}
.cal-page-head span{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-md)/1.3 var(--vq-font)}
.cal-page-head em{color:var(--vq-warning);font:normal var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}
.cal-page .cal-items{padding:0}
.cal-page .cal-grip{display:none}
.cal-pager-dots{padding:var(--vq-space-3);color:var(--vq-ink-subtle);font:var(--vq-weight-medium) var(--vq-text-xs)/1 var(--vq-font);text-align:center}

/* Cheers (owner, 2026-10-11, Phase 3; design /lab/cheers): cheers-view.js. Pills WhatsApp-style on a bubble's lower
   edge, replies stacked on the right on a thread line, the cheer sheet over a dimmed page, the love line in Bhiksha. */
.cal-row[data-key] .journey-bubble{cursor:pointer}
.cal-row.has-cheers .journey-bubble{margin-bottom:var(--vq-space-3);padding-bottom:var(--vq-space-4)}
.cheer-pills{position:absolute;left:var(--vq-space-5);bottom:-13px;z-index:1;display:flex;gap:var(--vq-space-1)}
.tier-1 .cheer-pills,.tier-2 .cheer-pills{bottom:-15px}
.cheer-pill{display:inline-flex;align-items:center;gap:2px;min-height:26px;padding:0 var(--vq-space-2);border:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-pill);background:var(--vq-surface-muted);color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-xs)/1 var(--vq-font);white-space:nowrap;cursor:pointer}
.cheer-pill[aria-pressed="true"]{border-color:var(--vq-accent)}
.cheer-pill.is-love{border-color:var(--vq-accent);color:var(--vq-accent);cursor:default}
.cheer-thread{position:relative;display:grid;gap:var(--vq-space-2);justify-items:end;margin:var(--vq-space-3) 0 0 var(--vq-space-5);padding-left:var(--vq-space-4)}
.cheer-thread::before{content:"";position:absolute;top:calc(-1 * var(--vq-space-3));bottom:var(--vq-space-4);left:0;width:2px;border-radius:var(--vq-radius-pill);background:var(--vq-line)}
.cheer-reply{display:grid;gap:2px;max-width:85%;margin:0;padding:var(--vq-space-2) var(--vq-space-3);border:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-md);border-top-right-radius:var(--vq-radius-sm);background:var(--vq-surface);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.35 var(--vq-font);overflow-wrap:anywhere}
.cheer-reply b{color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-xs)/1.2 var(--vq-font)}
.cheer-reply.is-child{border-color:var(--vq-accent);background:var(--vq-accent-soft)}
.cheer-reply.is-child b{color:var(--vq-ink)}
.cal-row.is-cheer-flash .journey-bubble{border-color:var(--vq-accent);box-shadow:0 0 0 3px var(--vq-accent-soft)}

.cheer-scrim{position:fixed;inset:0;z-index:60;display:grid;align-items:end;background:var(--vq-scrim)}
.cheer-sheet{box-sizing:border-box;display:grid;gap:var(--vq-space-3);width:min(100%,36rem);max-height:88dvh;margin:0 auto;padding:var(--vq-space-2) var(--vq-gutter) calc(var(--vq-space-5) + env(safe-area-inset-bottom));overflow-y:auto;border:var(--vq-border);border-bottom:0;border-radius:var(--vq-radius-lg) var(--vq-radius-lg) 0 0;background:var(--vq-surface);color:var(--vq-ink);box-shadow:var(--vq-shadow-float);animation:cheer-up .2s ease-out}
@keyframes cheer-up{from{transform:translateY(40%);opacity:.4}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.cheer-sheet{animation:none}}
.cheer-handle{justify-self:center;width:40px;height:4px;border-radius:var(--vq-radius-pill);background:var(--vq-grid-strong)}
.cheer-head{display:flex;align-items:flex-start;gap:var(--vq-space-3)}
.cheer-head>div{flex:1;display:grid;gap:2px;min-width:0}
.cheer-head h2{margin:0;font:var(--vq-weight-bold) var(--vq-text-lg)/1.25 var(--vq-font);letter-spacing:var(--vq-tracking-tight)}
.cheer-head small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.3 var(--vq-font)}
.cheer-close{flex:0 0 auto;width:var(--vq-tap);height:var(--vq-tap);border:var(--vq-border);border-radius:var(--vq-radius-pill);background:var(--vq-surface-muted);color:var(--vq-ink);font-size:var(--vq-text-md);cursor:pointer}
.cheer-react{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:var(--vq-space-2)}
.cheer-react button{display:grid;justify-items:center;gap:2px;min-height:var(--vq-button-height);padding:var(--vq-space-2) 0;border:var(--vq-border);border-radius:var(--vq-radius-md);background:var(--vq-surface-muted);color:var(--vq-ink);font:inherit;cursor:pointer}
.cheer-react button span{font-size:var(--vq-text-xl);line-height:1}
.cheer-react button small{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-xs)/1 var(--vq-font)}
.cheer-react button[aria-pressed="true"]{border-color:var(--vq-accent);background:var(--vq-accent-soft)}
.cheer-react button[aria-pressed="true"] small{color:var(--vq-accent)}
.cheer-label{margin:var(--vq-space-1) 0 0;color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}
.cheer-who{display:grid;gap:var(--vq-space-1);margin:0;padding:0;list-style:none}
.cheer-who li{display:flex;align-items:center;justify-content:space-between;gap:var(--vq-space-3);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.cheer-who .cheer-none{color:var(--vq-ink-subtle)}
.cheer-love-tag{color:var(--vq-accent);font-style:normal;font-weight:var(--vq-weight-bold)}
.cheer-reply-form,.cheer-love{display:grid;gap:var(--vq-space-2)}
.cheer-field{display:flex;gap:var(--vq-space-2)}
.cheer-field input,.cheer-note{box-sizing:border-box;flex:1;width:100%;min-width:0;min-height:var(--vq-tap);padding:var(--vq-space-2) var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:var(--vq-paper);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.3 var(--vq-font)}
.cheer-send{display:grid;place-items:center;flex:0 0 var(--vq-tap);height:var(--vq-tap);border:0;border-radius:var(--vq-radius-pill);background:var(--vq-accent);color:var(--vq-paper);cursor:pointer}
.cheer-send svg{width:20px;height:20px}
.cheer-count{justify-self:end;color:var(--vq-ink-subtle);font:var(--vq-weight-medium) var(--vq-text-xs)/1 var(--vq-font)}
.cheer-love{padding-top:var(--vq-space-3);border-top:var(--vq-border)}
.cheer-chips{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--vq-space-2)}
.cheer-chips .vq-chip{min-height:var(--vq-tap);font-size:var(--vq-text-md);cursor:pointer}
.cheer-chips .vq-chip[aria-checked="true"]{border-color:var(--vq-accent);background:var(--vq-accent-soft);color:var(--vq-accent)}
.cheer-love-send{width:100%;margin-top:0}
.cheer-love-send:disabled{opacity:.5}
.cheer-love-note{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.4 var(--vq-font);text-align:center}
.history-round.cheer-love-row{border-color:var(--vq-accent);background:var(--vq-accent-soft)}
