/* Fitness Core — member-facing styles. Theme-agnostic, mobile-first. */

.fitcore-dashboard,
.fitcore-form {
	--fitcore-accent: #ffe24c;
	/* ponytail: #ffe24c on white/tint is ~1.3:1 contrast (invisible) — this
	   darker gold is for accent-colored text/borders that land on light
	   backgrounds instead of the usual dark ink card. */
	--fitcore-accent-ink: #8a6d00;
	--fitcore-accent-warm: #ff6b4a;
	--fitcore-border: #d2d3ce;
	--fitcore-muted: #96998c;
	--fitcore-ink: #061414;
	--fitcore-tint: #e9ebe6;
	--fitcore-font: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	--fitcore-font-display: "Bricolage Grotesque", var(--fitcore-font);

	font-family: var(--fitcore-font);
	font-size: 16px;
	line-height: 1.5;
	color: var(--fitcore-ink);
}

/* Display face for headings and big numbers — a little more character than
   the body face, used with restraint (headings + hero numerals only). */
.fitcore-card h2, .fitcore-form h2, .fitcore-card h3, .fitcore-form h3,
.fitcore-progress-value, .fitcore-stat-value,
.fitcore-stat-tile-value, .fitcore-ticket-num {
	font-family: var(--fitcore-font-display);
	letter-spacing: -.01em;
}
/* Fixed-width digits wherever a number updates live or sits in a column —
   without this, proportional digits (a "1" narrower than an "8") make a
   ticking countdown or streak count visibly shift width, and a column of
   weight values in the ledger won't line up. */
.fitcore-progress-value, .fitcore-stat-tile-value, .fitcore-ticket-num,
.fitcore-ledger-value, .fitcore-countdown {
	font-variant-numeric: tabular-nums;
}

/* Card elevation modeled on Material Design Bootstrap's card system:
   https://github.com/mdbootstrap/bootstrap-cards — a resting shadow instead
   of a flat border, with a stronger layered shadow + lift on hover. */
.fitcore-card {
	background: #fff;
	border: 1px solid rgba(0, 0, 0, .05);
	border-radius: 1.25rem;
	padding: 1.25rem 1.5rem;
	margin: 0 0 1rem;
	box-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 2px 8px rgba(0, 0, 0, .05);
	transition: box-shadow .2s ease, transform .2s ease;
}
.fitcore-card:hover {
	box-shadow: 0 4px 8px rgba(0, 0, 0, .08), 0 8px 24px rgba(0, 0, 0, .07);
	transform: translateY(-2px);
}
/* Tactile press feedback on tappable surfaces — the one touch that most
   reads as "native app" rather than "web page with rounded corners". */
@media (prefers-reduced-motion: no-preference) {
	.fitcore-button:active, .fitcore-tab-fab:active, .fitcore-segment:active,
	.fitcore-tabbar a:active, .fitcore-cta-card:active, .fitcore-stat-tile:active { transform: scale(.97); }
}

.fitcore-card h2, .fitcore-form h2 { font-size: 1.375rem; font-weight: 700; line-height: 1.3; margin: 0 0 .5rem; }
.fitcore-card h3, .fitcore-form h3 { font-size: 1.0625rem; font-weight: 700; line-height: 1.3; margin: 0 0 .6rem; display: flex; align-items: center; gap: .6rem; }
.fitcore-muted { color: var(--fitcore-muted, #6b7280); font-size: .875rem; }

.fitcore-membership-top { display: flex; flex-wrap: wrap; gap: .75rem; align-items: flex-start; padding-right: 2.5rem; }
.fitcore-membership-who { display: flex; flex-wrap: wrap; align-items: center; gap: .75rem; }
.fitcore-membership-top h2 { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.fitcore-membership-plan {
	display: flex; flex-wrap: wrap; align-items: center; gap: .6rem;
	margin-top: .75rem; padding-top: .6rem; border-top: 1px solid var(--fitcore-border);
}
/* Icon-only, pinned to the corner — logout is a low-frequency escape hatch,
   it shouldn't compete with the greeting for the card's primary weight. */
.fitcore-logout {
	position: absolute; top: 1.1rem; right: 1.25rem; flex-shrink: 0;
	display: flex; align-items: center; justify-content: center;
	width: 32px; height: 32px; padding: 0; border-radius: 50%;
	border: 1px solid var(--fitcore-border); color: var(--fitcore-muted, #6b7280);
	text-decoration: none;
}
.fitcore-logout:hover { background: var(--fitcore-tint); color: var(--fitcore-ink); }
.fitcore-logout-icon { width: 15px; height: 15px; }

/* Membership card: dark "hero" treatment, same ink/accent language as the
   stat tiles — this is the one card every member sees first. */
.fitcore-membership {
	position: relative; background: var(--fitcore-ink); border: 0; color: #fff;
}
.fitcore-membership h2, .fitcore-membership .fitcore-stat-value { color: #fff; }
.fitcore-membership .fitcore-muted { color: rgba(255, 255, 255, .68); }
.fitcore-membership .fitcore-membership-plan { border-top-color: rgba(255, 255, 255, .15); }
.fitcore-membership .fitcore-logout { border-color: rgba(255, 255, 255, .3); color: rgba(255, 255, 255, .85); }
.fitcore-membership .fitcore-logout:hover { background: rgba(255, 255, 255, .12); color: #fff; }
.fitcore-lifetime-stats {
	display: flex; align-items: center; gap: .4rem;
	margin: .75rem 0 0; padding-top: .75rem;
	border-top: 1px solid rgba(255, 255, 255, .1);
	font-size: .8125rem; font-weight: 600; color: rgba(255, 255, 255, .68);
}
.fitcore-lifetime-icon { width: 14px; height: 14px; flex-shrink: 0; color: var(--fitcore-accent); }

/* Identity title: a status that only ever goes up (see Fitcore_Admin::
   identity_title) — reads as a personal level, not a comparison to
   anyone else, so it sits quietly under the name rather than as a loud
   badge competing with the streak chip. */
.fitcore-identity-title {
	display: inline-block; font-size: .75rem; font-weight: 700;
	color: var(--fitcore-accent); text-transform: uppercase; letter-spacing: .04em;
	margin-top: .1rem;
}

.fitcore-avatar {
	flex-shrink: 0; width: 44px; height: 44px; border-radius: 50%;
	background: linear-gradient(135deg, var(--fitcore-accent), #e6c943);
	color: var(--fitcore-ink); display: flex; align-items: center; justify-content: center;
	font-weight: 800; font-size: 1.0625rem;
}
/* Avatar ring: conic-gradient progress toward the streak goal, wrapped
   around the initials — check-in streak made visible at a glance. */
.fitcore-avatar-ring {
	flex-shrink: 0; width: 52px; height: 52px; border-radius: 50%; padding: 3px;
	display: flex; align-items: center; justify-content: center;
	background: conic-gradient(var(--fitcore-accent) var(--fitcore-avatar-pct, 0%), rgba(255, 255, 255, .18) 0);
}
.fitcore-avatar-ring .fitcore-avatar { width: 46px; height: 46px; }
.fitcore-hype {
	margin: .15rem 0 0; font-size: .9375rem; font-weight: 600;
	color: rgba(255, 255, 255, .85);
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-badge--active { animation: fitcore-icon-glow 2.6s ease-in-out infinite; }
}

/* Check-in CTA: inverse of the dark cards — bold accent background with
   dark ink text/icon/button, since this is the one action we most want
   noticed. Same palette, flipped which color leads. */
.fitcore-cta-card { position: relative; background: var(--fitcore-accent); border: 0; padding: 1.1rem 1.25rem; }
.fitcore-cta-card .fitcore-button {
	background: var(--fitcore-ink); color: #fff;
}
.fitcore-cta-card .fitcore-button:hover { background: #0d2626; }

/* The whole label row is now the tap target (not just the circle) — a
   plain button reset around the same scan-circle + label markup. */
.fitcore-checkin-tap {
	width: 100%; background: none; border: 0; padding: 0;
	text-align: left; cursor: pointer;
}

/* The check-in "scan target": a radar-ping badge instead of a plain icon —
   rings pulse outward continuously, the same "something here is listening,
   tap it" language as an NFC/contactless payment prompt. The streak flame
   and freeze dot below clip onto THIS circle (not the card), so they scale
   and reposition with the icon and can never collide with the title text
   next to them, at any streak length or screen width. */
.fitcore-scan-target {
	position: relative; flex-shrink: 0; width: 58px; height: 58px;
	display: flex; align-items: center; justify-content: center;
}
/* Streak count as a live counter fused onto the icon, the same "badge
   clipped to an app icon" language as an unread-count bubble — reads as
   the icon itself leveling up, not a status label bolted on beside it. */
.fitcore-flame-badge {
	position: absolute; bottom: -4px; right: -8px; z-index: 2;
	display: flex; align-items: center; gap: .15rem; line-height: 1;
	background: linear-gradient(135deg, #ff8a3d, #ff3d3d); color: #fff;
	font-size: .625rem; padding: .2rem .4rem .2rem .3rem; border-radius: 999px;
	border: 2px solid var(--fitcore-accent); box-shadow: 0 2px 4px rgba(0, 0, 0, .25);
}
.fitcore-flame-badge b { font-size: .75rem; font-weight: 800; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-flame-badge {
		animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both,
			fitcore-flame-flicker 1.8s ease-in-out .4s infinite;
	}
}
@keyframes fitcore-flame-flicker {
	0%, 100% { transform: scale(1) rotate(0deg); }
	25% { transform: scale(1.08) rotate(-4deg); }
	60% { transform: scale(.95) rotate(3deg); }
}
/* Freeze token: a tiny frost dot on the opposite corner — small enough
   to read as "one more thing this icon is carrying," not a second badge
   competing with the flame for attention. */
.fitcore-freeze-dot {
	position: absolute; top: -4px; left: -6px; z-index: 2;
	width: 20px; height: 20px; border-radius: 50%; line-height: 1;
	background: linear-gradient(135deg, #cfeaff, #7dc4ff);
	border: 2px solid var(--fitcore-accent); box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
	display: flex; align-items: center; justify-content: center; font-size: .625rem;
}
.fitcore-scan-core {
	position: relative; z-index: 1; width: 50px; height: 50px; border-radius: 50%;
	background: var(--fitcore-ink); display: flex; align-items: center; justify-content: center;
	box-shadow: 0 3px 8px rgba(0, 0, 0, .2); transition: transform .1s ease;
}
.fitcore-scan-core .fitcore-stat-icon { color: var(--fitcore-accent); }
.fitcore-checkin-tap:active .fitcore-scan-core { transform: scale(.92); }
.fitcore-scan-ring {
	position: absolute; inset: 0; border-radius: 50%; border: 2px solid var(--fitcore-ink); opacity: 0;
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-scan-ring { animation: fitcore-scan-pulse 2.4s ease-out infinite; }
	.fitcore-scan-ring--2 { animation-delay: .8s; }
	.fitcore-scan-ring--3 { animation-delay: 1.6s; }
}
@keyframes fitcore-scan-pulse {
	0% { transform: scale(1); opacity: .5; }
	100% { transform: scale(1.9); opacity: 0; }
}
.fitcore-scan-label { display: flex; flex-direction: column; gap: .1rem; }
.fitcore-scan-label strong { font-size: 1.0625rem; font-weight: 700; }
.fitcore-scan-label span { font-size: .8125rem; color: var(--fitcore-ink); opacity: .65; font-weight: 600; }

/* Quip + week dots merged into one compact strip instead of two separately
   margined blocks — reads as a single "your week" unit under the CTA. */
.fitcore-checkin-strip { margin-top: .65rem; }
.fitcore-checkin-quip { margin: 0 0 .5rem; font-weight: 600; color: var(--fitcore-ink); opacity: .75; font-size: .8125rem; }
.fitcore-checkin-strip .fitcore-week-dots { margin-top: 0; }

/* Streak-at-risk: no alarm palette any more. The card keeps its normal look; only the wording changes. */

/* Weekly streak dots — a punch-card of the current Sun–Sat week, the same
   "make the pattern visible" trick that makes streak apps sticky. */
.fitcore-week-dots { display: flex; gap: .4rem; margin-top: .85rem; }
.fitcore-week-dot {
	flex: 1 1 0; aspect-ratio: 1; border-radius: 50%; display: flex; align-items: center; justify-content: center;
	font-size: .75rem; font-weight: 700; background: rgba(6, 20, 20, .08); color: var(--fitcore-ink);
}
.fitcore-week-dot-icon { width: 55%; height: 55%; }
.fitcore-week-dot--filled { background: var(--fitcore-ink); color: var(--fitcore-accent); }
.fitcore-week-dot--today { background: #fff; color: var(--fitcore-ink); box-shadow: 0 0 0 2px var(--fitcore-ink); }
.fitcore-week-dot--future { opacity: .45; }
.fitcore-week-dot--missed { opacity: .35; text-decoration: line-through; }
/* On phone-width cards flex:1 1 0 fills the row exactly (the intended
   look). Past phone width that same rule blows each dot up into a huge
   circle — a punch-card should stay punch-card-sized regardless of how
   wide the card around it is, so cap the dot and center the row instead
   of letting it keep stretching. */
@media (min-width: 480px) {
	.fitcore-week-dots { max-width: 22rem; margin-left: auto; margin-right: auto; }
	.fitcore-week-dot { flex: 0 0 2.75rem; }
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-week-dot--today { animation: fitcore-icon-glow 2.6s ease-in-out infinite; }
}
/* On the bright accent CTA card the default translucent-ink dots read too
   close to the background — go the other way: solid ink circles instead. */
.fitcore-cta-card .fitcore-week-dot { background: rgba(6, 20, 20, .2); color: var(--fitcore-ink); }
.fitcore-cta-card .fitcore-week-dot--filled { background: var(--fitcore-ink); color: var(--fitcore-accent); }
.fitcore-cta-card .fitcore-week-dot--today { background: #fff; color: var(--fitcore-ink); box-shadow: 0 0 0 2px var(--fitcore-ink); }
.fitcore-cta-card .fitcore-week-dot--future, .fitcore-cta-card .fitcore-week-dot--missed { opacity: .6; }

/* "Checked in" state: same dark hero treatment as the membership card
   (consistency) with a green check badge instead of a CTA button. */
.fitcore-checkin-done .fitcore-checkin-row { align-items: flex-start; }
.fitcore-checkin-check {
	flex-shrink: 0; width: 42px; height: 42px; border-radius: 50%; background: var(--fitcore-accent);
	display: flex; align-items: center; justify-content: center;
}
.fitcore-checkin-check-icon { width: 20px; height: 20px; color: var(--fitcore-ink); }
.fitcore-checkin-done .fitcore-week-dot { background: rgba(255, 255, 255, .12); color: #fff; }
.fitcore-checkin-done .fitcore-week-dot--filled { background: var(--fitcore-accent); color: var(--fitcore-ink); }
.fitcore-checkin-done .fitcore-week-dot--today { background: transparent; box-shadow: 0 0 0 2px rgba(255, 255, 255, .6); }

/* Mystery box: a wiggling gift-box button that shakes on tap (fitcore-checkin.js
   swaps it for the reveal after the shake beat), landing on a rarity-stamped
   card. Tier gradients reuse the leaderboard rank-card's gold/purple language
   so a freeze-token "jackpot" reads exactly like landing S-rank there. */
.fitcore-mystery { margin-top: .9rem; }
.fitcore-mystery-chest {
	display: inline-flex; align-items: center; gap: .5rem; cursor: pointer;
	background: rgba(255, 255, 255, .1); color: #fff; font-weight: 700; font-size: .8125rem;
	padding: .55rem 1rem; border-radius: 999px; border: 1.5px dashed rgba(255, 255, 255, .35);
	transition: background .15s ease;
}
.fitcore-mystery-chest:hover { background: rgba(255, 255, 255, .18); }
.fitcore-mystery-chest-icon { display: inline-block; font-size: 1.1rem; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-mystery-chest-icon { animation: fitcore-chest-wiggle 1.8s ease-in-out infinite; }
	.fitcore-mystery-chest.is-shaking { animation: fitcore-chest-shake .38s ease; }
	.fitcore-mystery-reveal { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both; }
	.fitcore-mystery-reveal--s { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both, fitcore-rank-shimmer 2.4s linear .4s infinite; }
}

/* Locked state: box is visibly there but dimmed and solid-bordered (not
   "tap me" dashed) — a slow breathing glow instead of the eager wiggle
   says "waiting on you", not "open me". Tapping jumps straight to the log
   form, the fastest path from curiosity to actually filling it in. */
.fitcore-mystery-locked { text-decoration: none; display: block; margin-top: .9rem; }
.fitcore-mystery-chest--locked {
	opacity: .6; border-style: solid; border-color: rgba(255, 255, 255, .2);
}
.fitcore-mystery-chest--locked:hover { opacity: .85; }
.fitcore-mystery-chest--locked .fitcore-mystery-chest-icon { animation: none; filter: grayscale(.6); }
.fitcore-mystery-lock { display: inline-block; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-mystery-chest--locked { animation: fitcore-mystery-breathe 2.6s ease-in-out infinite; }
}
@keyframes fitcore-mystery-breathe {
	0%, 100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); }
	50% { box-shadow: 0 0 0 5px rgba(255, 255, 255, .05); }
}
@keyframes fitcore-chest-wiggle {
	0%, 100% { transform: rotate(0deg); }
	10% { transform: rotate(-8deg); }
	20% { transform: rotate(8deg); }
	30% { transform: rotate(-6deg); }
	40% { transform: rotate(0deg); }
}
@keyframes fitcore-chest-shake {
	0%, 100% { transform: scale(1) rotate(0deg); }
	25% { transform: scale(1.06) rotate(-8deg); }
	50% { transform: scale(1.12) rotate(8deg); }
	75% { transform: scale(1.06) rotate(-4deg); }
}

.fitcore-mystery-reveal {
	position: relative; margin-top: .1rem; padding: .9rem 1.1rem; border-radius: 1rem;
	background: rgba(255, 255, 255, .08); border: 1.5px solid rgba(255, 255, 255, .15);
}
.fitcore-mystery-stamp {
	display: inline-block; font-family: var(--fitcore-font-display); font-weight: 800;
	font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; transform: rotate(-3deg);
	padding: .2rem .6rem; border-radius: 999px; background: rgba(255, 255, 255, .15); color: #fff;
}
.fitcore-mystery-message { margin: .5rem 0 0; font-weight: 700; color: #fff; }
/* Common pull ('c' tier) still nods at the same rank-c green as the
   leaderboard, just as a quiet left accent rather than a full gradient —
   it's the everyday outcome, not the one worth shouting about. */
.fitcore-mystery-reveal--c { border-left: 3px solid #6ee7a0; }
.fitcore-mystery-reveal--a .fitcore-mystery-stamp { background: linear-gradient(135deg, #d9a8ff, #7e22ce); color: #fbf5ff; }
.fitcore-mystery-reveal--s {
	background: linear-gradient(115deg, #fff3b0, #f59e0b 45%, #ef4444 75%, #fff3b0);
	background-size: 250% 100%; border-color: transparent;
}
.fitcore-mystery-reveal--s .fitcore-mystery-stamp { background: rgba(0, 0, 0, .25); color: #fff8e1; }
.fitcore-mystery-reveal--s .fitcore-mystery-message { color: #4a0a02; }

.fitcore-badge {
	display: inline-block; padding: .15rem .6rem; border-radius: 999px;
	font-size: .75rem; font-weight: 600; text-transform: uppercase; letter-spacing: .03em;
}
.fitcore-badge--active { background: #d9f2e5; color: #14603f; }
/* Streak badge as a slapped-on sticker, not a flat status tag — tilted,
   hard ink outline instead of a soft shadow, and it pops in like it just
   landed (reuses fitcore-pop) and wiggles on hover (reuses fitcore-icon-wiggle),
   the same "collected reward" language as the class-ticket check badge. */
.fitcore-badge--streak {
	background: linear-gradient(135deg, #ffe4cc, var(--fitcore-accent-warm));
	color: #7a2a0a; text-transform: none; letter-spacing: 0; font-weight: 800;
	border: 1.5px solid var(--fitcore-ink); box-shadow: 2px 2px 0 var(--fitcore-ink);
	transform: rotate(-4deg); display: inline-block;
}
.fitcore-badge--streak:hover { transform: rotate(-4deg) scale(1.08); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-badge--streak { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both; }
	.fitcore-badge--streak:hover { animation: fitcore-icon-wiggle .5s ease; }
}

/* Quest-chain rank ribbon: a diagonal corner stamp instead of a pill —
   the "wax seal on a document" shape, and a rank letter (S/A/B/C) reads as
   a verdict the way a number never does. Pinned to the quest card's own
   corner (card needs position + overflow to clip it cleanly), it stamps
   down on load instead of fading in — a rank should land with a thud. */
.fitcore-quest { position: relative; overflow: hidden; }
.fitcore-rank-ribbon {
	position: absolute; top: 13px; right: -34px; width: 130px; z-index: 1;
	display: flex; flex-direction: column; align-items: center; line-height: 1.15;
	padding: .3rem 0; transform: rotate(45deg);
	border-top: 1px dashed rgba(255, 255, 255, .45); border-bottom: 1px dashed rgba(255, 255, 255, .45);
	box-shadow: 0 2px 4px rgba(0, 0, 0, .25);
}
.fitcore-rank-letter { font-family: var(--fitcore-font-display); font-size: 1.0625rem; font-weight: 800; }
.fitcore-rank-weeks { font-size: .5625rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; opacity: .85; }
.fitcore-rank--c { background: linear-gradient(135deg, #6ee7a0, #16a34a); color: #052e12; }
.fitcore-rank--b { background: linear-gradient(135deg, #7dc4ff, #2563eb); color: #eef6ff; }
.fitcore-rank--a { background: linear-gradient(135deg, #d9a8ff, #7e22ce); color: #fbf5ff; }
.fitcore-rank--s {
	background: linear-gradient(115deg, #fff3b0, #f59e0b 45%, #ef4444 75%, #fff3b0);
	background-size: 250% 100%; color: #4a0a02;
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-rank-ribbon { animation: fitcore-rank-stamp .35s cubic-bezier(.34, 1.56, .64, 1) both; }
	.fitcore-rank--s { animation: fitcore-rank-stamp .35s cubic-bezier(.34, 1.56, .64, 1) both, fitcore-rank-shimmer 2.8s linear .4s infinite; }
}
@keyframes fitcore-rank-stamp {
	0% { transform: rotate(45deg) scale(0); opacity: 0; }
	65% { transform: rotate(45deg) scale(1.2); }
	100% { transform: rotate(45deg) scale(1); opacity: 1; }
}
@keyframes fitcore-rank-shimmer {
	0% { background-position: 0% 50%; }
	100% { background-position: 250% 50%; }
}

/* Membership status as a live-status pulse instead of a flat pastel tag —
   a translucent pill on the dark hero card with a colored, gently pinging
   dot (the same "something here is alive" language as a service-status
   page), not a static uppercase label. */
.fitcore-status-pulse {
	display: inline-flex; align-items: center; gap: .45rem;
	background: rgba(255, 255, 255, .1); color: #fff;
	font-size: .75rem; font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
	padding: .3rem .7rem .3rem .6rem; border-radius: 999px; vertical-align: middle;
}
.fitcore-status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--fitcore-accent); flex-shrink: 0; }
.fitcore-status-pulse--expiring .fitcore-status-dot { background: #fbbf24; }
.fitcore-status-pulse--expired .fitcore-status-dot,
.fitcore-status-pulse--cancelled .fitcore-status-dot { background: #f87171; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-status-pulse--active .fitcore-status-dot { animation: fitcore-status-ping 1.8s ease-in-out infinite; }
}
@keyframes fitcore-status-ping {
	0%, 100% { box-shadow: 0 0 0 0 rgba(255, 226, 76, .55); }
	50% { box-shadow: 0 0 0 5px rgba(255, 226, 76, 0); }
}

/* Membership footer: tap-to-expand pill chips instead of a static muted
   line — same disclosure language as .fitcore-plan, restyled for the dark
   hero card. */
.fitcore-membership-details { margin-top: .75rem; padding-top: .6rem; border-top: 1px solid rgba(255, 255, 255, .15); }
.fitcore-membership-details summary {
	cursor: pointer; list-style: none; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem;
	padding: .25rem; margin: -.25rem; border-radius: .8rem; transition: background .15s ease;
}
.fitcore-membership-details summary::-webkit-details-marker { display: none; }
.fitcore-membership-details summary:hover { background: rgba(255, 255, 255, .06); }
.fitcore-membership-details .fitcore-plan-chevron { color: rgba(255, 255, 255, .6); margin-left: auto; }

/* Collapsible card sections (e.g. Classes) — summary styled like the usual
   .fitcore-card h2 so collapsing it changes nothing visually by default. */
.fitcore-section-details summary {
	cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between;
	font-size: 1.375rem; font-weight: 700; line-height: 1.3; margin: 0 0 .5rem;
}
.fitcore-section-details summary::-webkit-details-marker { display: none; }
.fitcore-section-details .fitcore-section-chevron { width: 18px; height: 18px; flex-shrink: 0; color: var(--fitcore-muted, #6b7280); transition: transform .2s ease; }
.fitcore-section-details[open] .fitcore-section-chevron { transform: rotate(180deg); }
.fitcore-membership-details[open] .fitcore-plan-chevron { transform: rotate(180deg); }

.fitcore-chip-pill {
	display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .7rem; border-radius: 999px;
	font-size: .8125rem; font-weight: 700; background: rgba(255, 255, 255, .1); color: #fff;
}
.fitcore-chip-pill-icon { width: 13px; height: 13px; }
.fitcore-chip-pill--ok { background: rgba(255, 226, 76, .18); color: var(--fitcore-accent); }
.fitcore-chip-pill--soon { background: rgba(254, 243, 199, .22); color: #fde68a; }
.fitcore-chip-pill--over { background: rgba(253, 232, 232, .2); color: #fca5a5; }
/* Light-card variant — same pill shape, dark-on-tint instead of white-on-dark. */
.fitcore-chip-pill--muted { background: var(--fitcore-tint); color: var(--fitcore-ink); }

.fitcore-membership-body {
	display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: .5rem .75rem; margin-top: .75rem;
	animation: fitcore-fade-in .25s ease both;
}
.fitcore-membership-row { display: flex; align-items: center; gap: .4rem; font-size: .8125rem; }
.fitcore-membership-row-icon { width: 15px; height: 15px; flex-shrink: 0; color: rgba(255, 255, 255, .5); }
.fitcore-membership-row strong { color: #fff; }

.fitcore-stat-icon-wrap {
	width: 42px; height: 42px; border-radius: 50%; background: rgba(255, 226, 76, .16);
	display: flex; align-items: center; justify-content: center; margin-bottom: .1rem;
}
.fitcore-stat-icon { width: 20px; height: 20px; color: var(--fitcore-accent); }
.fitcore-stat-value {
	display: block; width: 100%; font-size: clamp(1.1rem, 5vw, 1.75rem); font-weight: 700;
	line-height: 1.25; color: var(--fitcore-ink); word-break: break-word; overflow-wrap: anywhere;
}
.fitcore-stat-label {
	display: block; width: 100%; color: var(--fitcore-muted, #6b7280);
	font-size: .8125rem; font-weight: 600; line-height: 1.3;
}

@media (prefers-reduced-motion: no-preference) {
	.fitcore-stat-icon-wrap { animation: fitcore-icon-glow 2.6s ease-in-out infinite; }
	.fitcore-stat-tile--mood:hover .fitcore-stat-tile-mood { animation: fitcore-icon-wiggle .5s ease; }
}
@keyframes fitcore-icon-glow {
	0%, 100% { box-shadow: 0 0 0 0 rgba(255, 226, 76, .35); }
	50% { box-shadow: 0 0 0 7px rgba(255, 226, 76, 0); }
}
@keyframes fitcore-icon-wiggle {
	0%, 100% { transform: rotate(0deg) scale(1); }
	25% { transform: rotate(-10deg) scale(1.12); }
	75% { transform: rotate(10deg) scale(1.12); }
}

/* minmax(0, ...) not a bare 1fr/3fr/2fr — grid tracks otherwise refuse to
   shrink below their widest item's min-content width, which was pushing
   .fitcore-main/.fitcore-side (and everything in them) past the viewport
   on mobile instead of letting their own content wrap or scroll. */
.fitcore-columns { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; align-items: start; }
@media (min-width: 900px) { .fitcore-columns { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); } }

.fitcore-enrolled-icon { width: 11px; height: 11px; stroke-width: 3; }
@keyframes fitcore-pop {
	from { transform: scale(.6); opacity: 0; }
	to { transform: scale(1); opacity: 1; }
}
.fitcore-instructor-bubble {
	display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px;
	border-radius: 50%; background: var(--fitcore-tint); color: var(--fitcore-ink); font-size: .625rem;
	font-weight: 800; vertical-align: -3px; margin-right: .1rem;
}

/* Activity as a 14-day spark-bar strip — a completely different shape
   from the ticket row above it, and a fixed height regardless of account
   age: history beyond 14 days lives in the Progress tab instead of
   growing this card. Bars use flex: 1 1 0 so the strip always fills the
   card's full width, no fixed cell size and no horizontal scroll. */
.fitcore-heat-hero {
	display: flex; align-items: baseline; gap: .5rem; flex-wrap: wrap; margin-bottom: .8rem;
}
.fitcore-heat-hero-value { font-size: 1.375rem; font-weight: 800; line-height: 1; letter-spacing: -.02em; }
.fitcore-heat-hero-value small { margin-left: .3rem; font-size: .75rem; font-weight: 700; color: var(--fitcore-muted, #6b7280); }
.fitcore-heat-quip { font-size: .875rem; font-weight: 600; color: var(--fitcore-muted, #6b7280); }
.fitcore-heatbar-row {
	display: flex; align-items: flex-end; gap: 4px; height: 56px; padding: 0 .1rem;
}
.fitcore-heat-bar {
	position: relative; flex: 1 1 0; min-width: 0; border-radius: 3px 3px 1px 1px; border: 0; padding: 0; cursor: default;
	background: var(--fitcore-border); height: 12%;
}
button.fitcore-heat-bar { cursor: pointer; transition: transform .1s ease; }
button.fitcore-heat-bar:hover { transform: scaleX(1.2); z-index: 1; }
button.fitcore-heat-bar:active { transform: scaleX(1.05); }
.fitcore-heat-bar--0 { background: var(--fitcore-border); height: 12%; }
.fitcore-heat-bar--1 { background: rgba(255, 226, 76, .35); height: 45%; }
.fitcore-heat-bar--2 { background: rgba(255, 226, 76, .65); height: 70%; }
.fitcore-heat-bar--3 { background: var(--fitcore-accent); height: 100%; }
.fitcore-heat-bar--today { box-shadow: 0 0 0 2px var(--fitcore-ink); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-heat-bar--3 { animation: fitcore-icon-glow 3s ease-in-out infinite; }
}

/* Best day: a real personal record (most workouts logged in one day, and
   only awarded once that's actually 2+) gets a tiny crown instead of
   blending into the strip like every other lit bar. */
.fitcore-heat-bar--best { overflow: visible; }
.fitcore-heat-crown {
	position: absolute; top: -9px; left: 50%; transform: translateX(-50%) rotate(0deg);
	font-size: .8125rem; line-height: 1; pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-heat-crown { animation: fitcore-crown-bob 2.4s ease-in-out infinite; }
}
@keyframes fitcore-crown-bob {
	0%, 100% { transform: translateX(-50%) translateY(0) rotate(-8deg); }
	50% { transform: translateX(-50%) translateY(-2px) rotate(8deg); }
}
.fitcore-heat-more-link {
	display: inline-block; margin-top: .6rem; font-size: .8125rem; font-weight: 700; color: var(--fitcore-ink);
}
.fitcore-heat-entry { padding: .8rem 0; border-top: 1px solid rgba(255, 255, 255, .1); }
.fitcore-heat-entry:first-child { border-top: 0; padding-top: 0; }
.fitcore-heat-entry p { margin: .35rem 0 0; color: rgba(255, 255, 255, .85); }
.fitcore-feed-note { font-style: italic; color: rgba(255, 255, 255, .7); }

/* Announcements as a story row: one short line of tappable bubbles above
   the two-column layout, instead of a strip of 200px+ cards — far less
   scroll either way (page height, and fewer/narrower items to swipe past)
   while staying impossible to miss. Each bubble pops its full text open
   in a native <dialog> (fitcore-story-dialog below). */
.fitcore-stories-heading {
	display: flex; align-items: center; gap: .6rem; font-size: 1.0625rem; font-weight: 700;
	line-height: 1.3; margin: 0 0 .6rem; font-family: var(--fitcore-font-display); letter-spacing: -.01em;
}

/* Notification bell: rings (a damped periodic shake, not a constant jitter)
   whenever there's an unopened announcement or class, with a bouncing
   count badge on its corner — the same "something's waiting" trigger a
   phone's notification bell uses, not just a quiet number. Read state is
   the same localStorage "seen" list the story bubbles already use. */
.fitcore-notify-bell { position: relative; display: inline-flex; }
/* Everything seen: the rail folds to one quiet line instead of taking space. */
.fitcore-whatsnew-toggle { display: none; align-items: center; gap: .4rem; background: none; border: 0; padding: .2rem 0 .6rem; font: inherit; font-size: .8125rem; font-weight: 600; color: var(--fitcore-muted, #6b7280); cursor: pointer; }
.fitcore-whatsnew-toggle .fitcore-plan-icon { width: 14px; height: 14px; }
.fitcore-whatsnew.is-collapsed .fitcore-whatsnew-rail { display: none; }
.fitcore-whatsnew.is-collapsed .fitcore-whatsnew-toggle { display: inline-flex; }
/* Header bell: same unread count, visible from the very top of the page. */
.fitcore-header-bell { position: relative; display: inline-flex; margin-left: auto; margin-right: .5rem; padding: .4rem; color: var(--fitcore-accent, #ffd84a); }
.fitcore-header-bell .fitcore-plan-icon { width: 22px; height: 22px; }
.fitcore-header-bell .fitcore-notify-badge { top: 0; right: 0; box-shadow: 0 0 0 2px #0d1f1f; }
.fitcore-header-bell.is-ringing .fitcore-plan-icon { animation: fitcore-bell-ring 2.4s ease-in-out infinite; }
.fitcore-notify-badge {
	position: absolute; top: -4px; right: -6px; min-width: 17px; height: 17px; padding: 0 4px;
	border-radius: 999px; background: var(--fitcore-accent-warm); color: #fff;
	font-size: .625rem; font-weight: 800; line-height: 17px; text-align: center;
	box-shadow: 0 0 0 2px #fff;
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-notify-badge:not([hidden]) { animation: fitcore-pop .35s cubic-bezier(.34, 1.56, .64, 1) both; }
	.fitcore-notify-bell.is-ringing .fitcore-plan-icon { animation: fitcore-bell-ring 2.4s ease-in-out infinite; }
}
@keyframes fitcore-bell-ring {
	0%, 92%, 100% { transform: rotate(0deg); }
	93% { transform: rotate(-12deg); }
	94.5% { transform: rotate(10deg); }
	96% { transform: rotate(-8deg); }
	97.5% { transform: rotate(6deg); }
	99% { transform: rotate(0deg); }
}
.fitcore-stories {
	display: flex; gap: 1rem; overflow-x: auto; padding: .2rem .2rem .5rem;
	margin-bottom: 1rem; -webkit-overflow-scrolling: touch;
}
.fitcore-story {
	flex: 0 0 auto; width: 68px; display: flex; flex-direction: column; align-items: center; gap: .35rem;
	background: none; border: 0; cursor: pointer; font: inherit; padding: 0;
}
.fitcore-story-ring {
	position: relative; width: 56px; height: 56px; border-radius: 50%; padding: 2.5px;
	background: linear-gradient(135deg, var(--fitcore-accent), var(--fitcore-accent-warm));
	display: flex; align-items: center; justify-content: center; transition: transform .15s ease;
}
.fitcore-story:active .fitcore-story-ring { transform: scale(.92); }
.fitcore-story-initial {
	width: 100%; height: 100%; border-radius: 50%; background: var(--fitcore-ink); color: var(--fitcore-accent);
	display: flex; align-items: center; justify-content: center;
	font-family: var(--fitcore-font-display); font-size: 1.25rem; font-weight: 800;
}
.fitcore-story-label {
	font-size: .6875rem; font-weight: 600; color: var(--fitcore-ink); text-align: center;
	line-height: 1.2; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* Unseen (default until theme.js checks localStorage): "NEW" dot + a
   colored halo pulse, the same visual grammar as story apps everyone
   already reads as "tap this" at a glance. */
.fitcore-story-dot {
	position: absolute; top: -1px; right: -1px; width: 13px; height: 13px; border-radius: 50%;
	background: var(--fitcore-accent-warm); border: 2px solid var(--fitcore-tint);
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-story:not(.is-seen) .fitcore-story-ring { animation: fitcore-story-pulse 1.8s ease-in-out infinite; }
}

/* Quest nudge: same story-bubble shape, but a solid warm ring instead of
   the accent gradient — a different kind of "new thing" than a real
   announcement, so it shouldn't look identical to one. */
.fitcore-story--nudge .fitcore-story-ring { background: var(--fitcore-accent-warm); }

/* Seen: ring goes flat and quiet, dot disappears — the "you're caught up"
   state, and the contrast is what makes the unseen ones actually pop. */
.fitcore-story.is-seen .fitcore-story-ring { background: var(--fitcore-border); }
.fitcore-story.is-seen .fitcore-story-initial { background: var(--fitcore-tint); color: var(--fitcore-muted, #6b7280); }
.fitcore-story.is-seen .fitcore-story-dot { display: none; }
@keyframes fitcore-story-pulse {
	0%, 100% { box-shadow: 0 0 0 0 rgba(255, 107, 74, .5); transform: scale(1); }
	50% { box-shadow: 0 0 0 7px rgba(255, 107, 74, 0); transform: scale(1.06); }
}

/* The dialog itself: browser handles backdrop/focus-trap/Esc for free —
   just style it to match the app's dark card language. */
.fitcore-story-dialog {
	width: min(420px, calc(100vw - 2.5rem)); border: 0; border-radius: 1.25rem; padding: 1.5rem;
	background: var(--fitcore-ink); color: #fff; font-family: var(--fitcore-font);
}
.fitcore-story-dialog::backdrop { background: rgba(6, 20, 20, .7); backdrop-filter: blur(2px); }
.fitcore-story-dialog h3 { margin: .6rem 0 .2rem; }
.fitcore-story-dialog .fitcore-muted { color: rgba(255, 255, 255, .55); }
/* .fitcore-form sets its own dark-ink text color globally (for the
   light-card forms it's normally used in) — a directly-matched rule beats
   inherited color regardless of specificity, so the enroll/leave form
   dropped back to dark-on-dark here. Override it back to white. */
.fitcore-story-dialog .fitcore-form { color: #fff; }
.fitcore-story-body { margin-top: .9rem; }
.fitcore-story-body p { margin: 0 0 .7rem; color: rgba(255, 255, 255, .85); }
.fitcore-story-body p:last-child { margin-bottom: 0; }
.fitcore-story-body a { color: var(--fitcore-accent); text-decoration-color: rgba(255, 226, 76, .5); }

/* Structured plan checklist inside the story dialog — dark palette to
   match .fitcore-story-body's existing white-on-dark treatment. */
.fitcore-plan-day { margin-bottom: 1.1rem; }
.fitcore-plan-day:last-child { margin-bottom: 0; }
.fitcore-plan-day > strong { display: block; color: var(--fitcore-accent); font-size: .875rem; margin-bottom: .5rem; }
.fitcore-plan-day ul { list-style: none; margin: 0; padding: 0; }
.fitcore-plan-exercise { padding: .1rem 0; }
.fitcore-plan-exercise label {
	display: flex; align-items: center; gap: .6rem; cursor: pointer;
	color: rgba(255, 255, 255, .85); font-size: .9375rem; padding: .4rem 0;
}
.fitcore-plan-exercise input[type="checkbox"] {
	width: 20px; height: 20px; flex-shrink: 0; accent-color: var(--fitcore-accent); cursor: pointer;
}
.fitcore-plan-exercise.is-checked label { color: rgba(255, 255, 255, .45); text-decoration: line-through; }
.fitcore-story-close {
	position: absolute; top: .9rem; right: .9rem; width: 28px; height: 28px; border-radius: 50%;
	background: rgba(255, 255, 255, .1); border: 0; color: #fff; cursor: pointer;
	display: flex; align-items: center; justify-content: center;
}
.fitcore-story-close-icon { width: 14px; height: 14px; }
.fitcore-announce-badge {
	display: inline-flex; align-items: center; gap: .35rem; width: fit-content;
	background: rgba(255, 226, 76, .16); color: var(--fitcore-accent); font-size: .6875rem; font-weight: 700;
	text-transform: uppercase; letter-spacing: .04em; padding: .3rem .65rem; border-radius: 999px; margin-bottom: .15rem;
}
.fitcore-announce-icon { width: 12px; height: 12px; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-story-dialog[open] { animation: fitcore-pop .25s cubic-bezier(.34, 1.56, .64, 1) both; }
}

/* Pending approvals as "recruit" cards — an avatar + a badge instead of a
   plain text row, so the front desk gets a little dopamine hit per new
   sign-up rather than working down a bureaucratic list. */
.fitcore-recruits { display: flex; flex-direction: column; gap: .6rem; }
.fitcore-recruit-card {
	display: flex; align-items: center; gap: .9rem; padding: .85rem 1rem;
	background: var(--fitcore-tint); border-radius: 1rem; flex-wrap: wrap;
	transition: transform .15s ease, box-shadow .15s ease;
}
.fitcore-recruit-card:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0, 0, 0, .06); }
.fitcore-recruit-body { display: flex; flex-direction: column; gap: .25rem; min-width: 0; flex: 1 1 200px; }
.fitcore-recruit-body strong { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.fitcore-recruit-card form { flex-shrink: 0; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-recruit-card { animation: fitcore-pop .3s cubic-bezier(.34, 1.56, .64, 1) both; }
}

.fitcore-inline-icon {
	width: 14px; height: 14px; vertical-align: -2px; margin-right: .3rem;
	color: var(--fitcore-muted, #6b7280); flex-shrink: 0;
}

.fitcore-form label { display: block; font-weight: 600; font-size: .9375rem; margin-bottom: .3rem; }
.fitcore-form input:not([type=checkbox]):not([type=submit]),
.fitcore-form textarea,
.fitcore-form select {
	width: 100%; padding: .5rem .6rem; border: 1px solid var(--fitcore-border);
	border-radius: .375rem; font: inherit; box-sizing: border-box; background: #fff;
	transition: border-color .15s ease, box-shadow .15s ease;
}
.fitcore-form input:not([type=checkbox]):not([type=submit]):focus,
.fitcore-form textarea:focus,
.fitcore-form select:focus {
	outline: none; border-color: var(--fitcore-ink);
	box-shadow: 0 0 0 3px rgba(6, 20, 20, .08);
}
.fitcore-form p { margin: 0 0 .75rem; }

/* Quick-pick chips: tap to fill the field above instead of typing —
   the fast path for the values people actually log most often. */
.fitcore-quickpicks { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .4rem; }
.fitcore-quickpick {
	background: var(--fitcore-tint); border: 1px solid transparent; color: var(--fitcore-ink);
	font: inherit; font-size: .8125rem; font-weight: 600; padding: .3rem .7rem;
	border-radius: 999px; cursor: pointer; transition: background .15s ease, border-color .15s ease;
}
.fitcore-quickpick:hover { background: #f0e8b8; }
.fitcore-quickpick.is-active { background: var(--fitcore-accent); border-color: var(--fitcore-ink); }
.fitcore-quickpick:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(6, 20, 20, .18); }

/* Log Activity's "what'd you crush today" tiles: big tap targets with a
   line-icon instead of a text input + tiny chips — picking one feels like
   choosing a card, not filling a field. */
.fitcore-log-prompt { font-family: var(--fitcore-font-display); font-size: 1.0625rem; font-weight: 700; margin: 0 0 .7rem; letter-spacing: -.01em; }
.fitcore-quickpicks.fitcore-type-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: .5rem; margin-top: 0; margin-bottom: 1.1rem; }
.fitcore-type-tile {
	display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .4rem;
	padding: .8rem .3rem; border-radius: 1rem; border: 2px solid transparent !important;
	font-size: .75rem !important; text-align: center; line-height: 1.15;
}
.fitcore-type-icon {
	width: 22px; height: 22px; color: var(--fitcore-ink); flex-shrink: 0;
}
.fitcore-type-tile.is-active { border-color: var(--fitcore-ink) !important; }
.fitcore-type-tile:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(6, 20, 20, .18); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-type-tile:active { transform: scale(.93); }
	.fitcore-type-tile.is-active .fitcore-type-icon { animation: fitcore-pop .3s cubic-bezier(.34, 1.56, .64, 1); }
}

/* The optional "add more" details — closed by default so the fun part
   (tiles + duration + submit) is the whole story unless you want more. */
.fitcore-log-more { margin-top: -.2rem; }
.fitcore-log-more summary {
	cursor: pointer; list-style: none; display: flex; align-items: center; gap: .4rem;
	/* --fitcore-muted (#96998c) is ~2.9:1 on white, below the 4.5:1 body-text
	   floor — this form's own long-standing var(...,#6b7280) fallback passes
	   AA (4.8:1), so use that value directly rather than the token here. */
	font-size: .8125rem; font-weight: 700; color: #6b7280; padding: .3rem 0;
}
.fitcore-log-more summary::-webkit-details-marker { display: none; }
.fitcore-log-more[open] .fitcore-plan-chevron { transform: rotate(180deg); }
.fitcore-log-more .fitcore-field { margin-top: 1.1rem !important; }

/* Weight stepper as the hero of the Measurement tab instead of a plain
   labeled input — same tactile stepper, just bigger and centered. */
.fitcore-stepper--weight { max-width: 220px; margin: 0 auto; }
.fitcore-stepper--weight .fitcore-stepper-value input { font-size: 2rem; }

/* Confetti burst on a successful log — the payoff moment. Fixed-position
   particles that animate out and remove themselves; nothing persists. */
.fitcore-confetti {
	position: fixed; z-index: 400; pointer-events: none; font-size: 1.2rem;
	animation: fitcore-confetti-burst .7s ease-out forwards;
}
@keyframes fitcore-confetti-burst {
	0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
	100% { transform: translate(var(--fitcore-confetti-x), -70px) rotate(var(--fitcore-confetti-rot)); opacity: 0; }
}

/* Log Activity redesign: icon-led pill inputs, a tactile stepper for
   duration, soft-tint "notes card" textareas, and a bold full-width submit
   — its own visual language, scoped so the plainer forms elsewhere
   (login/registration) are untouched. */
.fitcore-log-form { display: flex; flex-direction: column; gap: 1.1rem; }
.fitcore-log-form .fitcore-field { margin: 0; }
.fitcore-log-form label {
	font-size: .8125rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
	color: #6b7280; margin-bottom: .45rem;
}
.fitcore-field-top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .45rem; }
.fitcore-field-top label { margin-bottom: 0; }
.fitcore-field-top .fitcore-quickpicks { margin-top: 0; }

/* Progress-photo file picker: dashed drop-zone look instead of a bare
   native file input, which reads as broken/unstyled next to everything
   else in this form. */
.fitcore-photo-picker {
	position: relative; display: flex; align-items: center; justify-content: center;
	padding: 1rem; border: 2px dashed var(--fitcore-border); border-radius: 10px;
	cursor: pointer; text-align: center; transition: border-color .15s ease, background .15s ease;
}
.fitcore-photo-picker:hover { border-color: var(--fitcore-accent); background: var(--fitcore-tint); }
.fitcore-photo-picker span {
	font-size: .8125rem; font-weight: 600; text-transform: none; letter-spacing: normal;
	color: var(--fitcore-muted); word-break: break-all;
}
.fitcore-photo-picker input[type="file"] { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }

/* Progress-photo strip: horizontal scroll-snap, each thumbnail a real
   before/after data point next to the weight chart above it. */
.fitcore-progress-photos {
	display: flex; gap: .75rem; overflow-x: auto; padding-bottom: .25rem;
	scroll-snap-type: x proximity;
}
.fitcore-progress-photo {
	flex: 0 0 auto; width: 96px; scroll-snap-align: start; text-decoration: none;
	display: flex; flex-direction: column; gap: .3rem;
}
.fitcore-progress-photo img {
	width: 96px; height: 96px; object-fit: cover; border-radius: 10px;
	background: var(--fitcore-tint);
}
.fitcore-progress-photo span { font-size: .6875rem; font-weight: 700; color: var(--fitcore-muted); text-align: center; }

.fitcore-input-icon { position: relative; }
.fitcore-input-icon-svg {
	position: absolute; left: 1rem; top: 50%; transform: translateY(-50%);
	width: 18px; height: 18px; color: var(--fitcore-muted, #6b7280); pointer-events: none;
}
.fitcore-log-form .fitcore-input-icon input {
	padding: .8rem 1rem .8rem 2.7rem !important; border: 2px solid transparent !important; background: var(--fitcore-tint) !important;
	border-radius: .9rem !important; font-size: .9375rem;
}
.fitcore-log-form .fitcore-input-icon input:focus {
	background: #fff !important; border-color: var(--fitcore-accent-ink) !important; box-shadow: 0 0 0 4px rgba(255, 226, 76, .18) !important;
}

.fitcore-soft-textarea {
	background: var(--fitcore-tint) !important; border: 2px solid transparent !important;
	border-radius: 1rem !important; padding: .8rem 1rem !important;
}
.fitcore-soft-textarea:focus {
	background: #fff !important; border-color: var(--fitcore-accent-ink) !important;
	box-shadow: 0 0 0 4px rgba(255, 226, 76, .18) !important;
}

/* Duration stepper: tap +/- to nudge by 5, type directly, or use a chip
   below for the common presets — three ways to set one value. */
.fitcore-stepper {
	display: flex; align-items: stretch; background: var(--fitcore-tint); border-radius: .9rem; overflow: hidden;
}
/* The number input inside sits flush (no border/background of its own —
   see .fitcore-stepper-value input below), so its own :focus has nothing
   to draw against; ring the whole pill instead when it holds focus,
   reusing the same amber ring the other log-form fields focus to. */
.fitcore-stepper:focus-within { box-shadow: 0 0 0 4px rgba(255, 226, 76, .18); }
/* Same reasoning for the required-but-empty weight field's invalid state —
   ring the pill, not the borderless input, once the form's own was-validated
   class (theme.js, added on first failed submit) is present. */
.fitcore-form.was-validated .fitcore-stepper:has(input:invalid) { box-shadow: 0 0 0 3px rgba(192, 57, 43, .25); }
.fitcore-stepper-btn {
	background: none; border: 0; width: 3rem; flex-shrink: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; color: var(--fitcore-ink);
	transition: background .15s ease;
}
.fitcore-stepper-btn:hover { background: #f0e8b8; }
.fitcore-stepper-btn:active { background: var(--fitcore-accent); }
.fitcore-stepper-icon { width: 16px; height: 16px; }
.fitcore-stepper-value {
	flex: 1 1 auto; display: flex; align-items: baseline; justify-content: center; gap: .3rem;
	padding: .6rem 0;
}
.fitcore-stepper-value input {
	width: 3.5rem !important; border: 0 !important; background: none !important; text-align: right; padding: 0 !important;
	font-family: var(--fitcore-font-display); font-size: 1.5rem; font-weight: 800; color: var(--fitcore-ink);
}
.fitcore-stepper-value input:focus { outline: none; box-shadow: none !important; }
.fitcore-stepper-value small { color: #6b7280; font-weight: 600; }

.fitcore-button--block {
	width: 100%; display: flex; align-items: center; justify-content: center; gap: .5rem;
	font-size: 1rem; padding: .85rem 1.3rem;
}
.fitcore-button--block .fitcore-stat-icon { width: 18px; height: 18px; color: var(--fitcore-ink); }

.fitcore-form.was-validated input:invalid,
.fitcore-form.was-validated textarea:invalid,
.fitcore-form.was-validated select:invalid {
	border-color: #c0392b;
	box-shadow: 0 0 0 3px rgba(192, 57, 43, .1);
}

/* Bootstrap input-group pattern: field grows, button hugs its content, both on one row. */
.fitcore-inline { display: flex; gap: .5rem; align-items: stretch; }
/* min-width:0 lets a long option (e.g. a plan name) shrink instead of pushing the button out. */
.fitcore-inline input, .fitcore-inline select { flex: 1 1 auto; width: auto; min-width: 0; }
.fitcore-inline .fitcore-button { flex: 0 0 auto; }

.fitcore-button, .fitcore-form input[type=submit] {
	display: inline-block; background: var(--fitcore-accent); color: var(--fitcore-ink); border: 0;
	padding: .6rem 1.3rem; border-radius: .7rem; font-family: inherit; font-size: .9375rem; font-weight: 700; cursor: pointer;
	text-decoration: none; box-shadow: 0 2px 5px rgba(0, 0, 0, .08);
	transition: filter .15s ease, transform .1s ease, box-shadow .15s ease;
}
.fitcore-button:hover, .fitcore-form input[type=submit]:hover {
	filter: brightness(.95);
	box-shadow: 0 4px 9px rgba(0, 0, 0, .14);
	transform: translateY(-1px);
}
.fitcore-button:active, .fitcore-form input[type=submit]:active { transform: scale(.97); box-shadow: 0 1px 3px rgba(0, 0, 0, .1); }
.fitcore-button--success { background: var(--fitcore-ink); color: #fff; }

/* Show/hide password toggle — was an unstyled checkbox sitting flush
   against the field above it; this gives it its own row and rhythm. */
.fitcore-show-pass {
	display: flex; align-items: center; gap: .4rem;
	margin: .5rem 0 0; font-weight: 500; font-size: .875rem;
	color: var(--fitcore-muted); cursor: pointer; user-select: none;
}
.fitcore-show-pass input[type=checkbox] {
	width: 16px; height: 16px; margin: 0; accent-color: var(--fitcore-ink); cursor: pointer;
}

/* Registration: a little personality on an otherwise long, plain form —
   fields stagger in on load, and the submit button nudges forward on
   hover instead of just sitting there. */
.fitcore-register p {
	opacity: 0; transform: translateY(8px);
	animation: fitcore-field-in .4s ease forwards;
}
.fitcore-register p:nth-child(2) { animation-delay: .03s; }
.fitcore-register p:nth-child(3) { animation-delay: .07s; }
.fitcore-register p:nth-child(4) { animation-delay: .11s; }
.fitcore-register p:nth-child(5) { animation-delay: .15s; }
.fitcore-register p:nth-child(6) { animation-delay: .19s; }
.fitcore-register p:nth-child(7) { animation-delay: .23s; }
.fitcore-register p:nth-child(8) { animation-delay: .27s; }
.fitcore-register p:nth-child(9) { animation-delay: .31s; }
@keyframes fitcore-field-in {
	to { opacity: 1; transform: translateY(0); }
}
.fitcore-register .fitcore-button::after {
	content: "→"; display: inline-block; margin-left: .4rem;
	transition: transform .2s ease;
}
.fitcore-register .fitcore-button:hover::after { transform: translateX(4px); }
@media (prefers-reduced-motion: reduce) {
	.fitcore-register p { animation: none; opacity: 1; transform: none; }
	.fitcore-register .fitcore-button::after { transition: none; }
}

.fitcore-plan-icon {
	flex-shrink: 0; width: 36px; height: 36px; border-radius: 50%; background: rgba(255, 226, 76, .16);
	display: flex; align-items: center; justify-content: center;
}
.fitcore-plan-icon .fitcore-stat-icon { width: 17px; height: 17px; color: var(--fitcore-ink); }
.fitcore-plan-chevron { width: 18px; height: 18px; flex-shrink: 0; color: var(--fitcore-muted, #6b7280); transition: transform .2s ease; }

/* Workout plans as "quest" cards — a real progress bar (this week's actual
   logged workouts vs. the trainer-set weekly target) instead of a plain
   accordion. A visibly filling bar is the single most addictive UI shape
   there is; this one just happens to be true. */
.fitcore-quests { display: flex; flex-direction: column; gap: .6rem; }
.fitcore-quest {
	display: flex; align-items: center; gap: .8rem; width: 100%; text-align: left;
	background: var(--fitcore-tint); border: 0; border-radius: 1rem; padding: .8rem 1rem;
	cursor: pointer; font: inherit; transition: transform .1s ease, background .15s ease;
}
.fitcore-quest:hover { background: #f0e8b8; }
.fitcore-quest:active { transform: scale(.98); }
.fitcore-quest-icon {
	flex-shrink: 0; width: 38px; height: 38px; border-radius: 50%; background: var(--fitcore-ink);
	display: flex; align-items: center; justify-content: center;
}
.fitcore-quest-icon .fitcore-stat-icon { width: 17px; height: 17px; color: var(--fitcore-accent); }
.fitcore-quest-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: .35rem; }
.fitcore-quest-body strong { font-size: .9375rem; }
.fitcore-quest-progress { height: 7px; border-radius: 999px; background: rgba(6, 20, 20, .12); overflow: hidden; }
/* transform: scaleX() instead of animating width — same visual fill,
   composited on the GPU instead of forcing a layout recalc every frame.
   Fixed at width:100% and scaled from the left edge; the PHP side now
   hands this a 0-1 fraction via --fitcore-pct rather than a percentage. */
.fitcore-quest-progress-fill {
	height: 100%; width: 100%; border-radius: 999px; background: var(--fitcore-ink);
	transform: scaleX(var(--fitcore-pct, 0)); transform-origin: left;
	transition: transform .5s cubic-bezier(.16, 1, .3, 1);
}
.fitcore-quest-progress-fill--done { background: var(--fitcore-accent); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-quest-progress-fill--done { animation: fitcore-icon-glow 2.6s ease-in-out infinite; }
}
.fitcore-quest-meta { font-size: .75rem; font-weight: 600; color: var(--fitcore-muted, #6b7280); }
.fitcore-quest-arrow { width: 18px; height: 18px; flex-shrink: 0; color: var(--fitcore-muted, #6b7280); transform: rotate(-90deg); }

/* Weekly leaderboard as a podium instead of a list — three steps of
   different heights read as "1st/2nd/3rd" on their own, so the only text
   needed per spot is a name and a number. Compact (one podium-height row)
   instead of a scrolling stack of everyone. Steps reveal 3rd→2nd→1st, the
   same building-suspense order a real awards ceremony uses. */
.fitcore-podium { display: flex; align-items: flex-end; justify-content: center; gap: .9rem; padding-top: .4rem; }
.fitcore-podium-spot { display: flex; flex-direction: column; align-items: center; gap: .3rem; }
.fitcore-podium-crown { font-size: 1.125rem; line-height: 1; margin-bottom: -.15rem; }
.fitcore-podium-avatar {
	width: 42px; height: 42px; border-radius: 50%; flex-shrink: 0;
	background: linear-gradient(135deg, var(--fitcore-accent), #e6c943); color: var(--fitcore-ink);
	display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 1rem;
}
.fitcore-podium-spot--1 .fitcore-podium-avatar {
	width: 52px; height: 52px; font-size: 1.1875rem;
	box-shadow: 0 0 0 3px #fff, 0 0 0 5px var(--fitcore-accent);
}
.fitcore-podium-spot--2 .fitcore-podium-avatar, .fitcore-podium-spot--3 .fitcore-podium-avatar, .fitcore-podium-spot--4 .fitcore-podium-avatar { filter: grayscale(.2); }
.fitcore-podium-name {
	font-size: .75rem; font-weight: 700; max-width: 68px;
	overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fitcore-podium-spot--me .fitcore-podium-name { color: var(--fitcore-accent-warm); }
/* Tie flag: two adjacent spots sharing a count would otherwise look like a
   normal, decisive ranking — this is the only signal that it isn't. */
.fitcore-podium-tied {
	font-size: .5625rem; font-weight: 800; text-transform: uppercase; letter-spacing: .05em;
	color: var(--fitcore-muted, #6b7280); background: var(--fitcore-tint);
	border-radius: .3rem; padding: .05rem .35rem; margin-top: -.15rem;
}
.fitcore-podium-step {
	width: 68px; border-radius: .6rem .6rem .2rem .2rem; display: flex;
	align-items: flex-start; justify-content: center; padding-top: .25rem;
	font-family: var(--fitcore-font-display); font-weight: 800; font-size: 1.0625rem;
}
.fitcore-podium-spot--1 .fitcore-podium-step { height: 58px; background: linear-gradient(180deg, #ffe58a, #f5b300); color: #4a3300; }
.fitcore-podium-spot--2 .fitcore-podium-step { height: 42px; background: linear-gradient(180deg, #e9ecf1, #b9c1cc); color: #33383f; }
.fitcore-podium-spot--3 .fitcore-podium-step { height: 30px; background: linear-gradient(180deg, #ecc59d, #c8895a); color: #3d2210; }
.fitcore-podium-spot--4 .fitcore-podium-step { height: 20px; background: var(--fitcore-tint); color: var(--fitcore-muted, #6b7280); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-podium-spot { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both; }
	.fitcore-podium-spot--3, .fitcore-podium-spot--4 { animation-delay: 0s; }
	.fitcore-podium-spot--2 { animation-delay: .12s; }
	.fitcore-podium-spot--1 { animation-delay: .28s; }
}
/* Rival line: the near-miss hook — defend the lead or chase whoever's
   just ahead, always framed as a gap of exactly one thing to do about it. */
.fitcore-podium-rival {
	margin: .7rem 0 0; text-align: center; font-weight: 700; font-size: .875rem;
	background: var(--fitcore-tint); border-radius: .7rem; padding: .55rem .8rem;
}
.fitcore-form p:last-child { margin-top: 1rem; margin-bottom: 0; }

.fitcore-login-links {
	display: flex; justify-content: space-between; align-items: center;
	flex-wrap: wrap; gap: .5rem; margin-top: 1rem;
}

.fitcore-checkin-row { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; }

.fitcore-hp { position: absolute; left: -9999px; }

.fitcore-button--ghost { background: transparent; color: inherit; box-shadow: none; border: 1px solid var(--fitcore-border); }
.fitcore-button--ghost:hover { box-shadow: none; filter: none; background: rgba(0, 0, 0, .04); }

.fitcore-qr-modal {
	position: fixed; inset: 0; z-index: 100; background: rgba(0, 0, 0, .85);
	display: flex; align-items: center; justify-content: center; padding: 1rem;
}
.fitcore-qr-modal[hidden] { display: none; }
.fitcore-qr-modal-inner { max-width: 420px; width: 100%; text-align: center; color: #fff; }
.fitcore-qr-modal video { width: 100%; border-radius: .5rem; background: #000; }
.fitcore-qr-modal p { color: #fff; margin: 1rem 0; }
.fitcore-qr-modal .fitcore-button--ghost { border-color: rgba(255, 255, 255, .35); }
.fitcore-qr-modal .fitcore-button--ghost:hover { background: rgba(255, 255, 255, .1); }

.fitcore-push-banner { display: flex; flex-wrap: wrap; gap: .75rem; align-items: center; background: var(--fitcore-tint); }
.fitcore-push-banner .fitcore-plan-icon { font-size: 1.1rem; }
.fitcore-push-banner-copy { display: flex; flex-direction: column; gap: .1rem; flex: 1 1 200px; }
.fitcore-push-banner-copy span { font-size: .875rem; color: var(--fitcore-muted); }
.fitcore-push-banner .fitcore-button { margin-left: auto; }

.fitcore-notice, .fitcore-error {
	position: fixed; top: 1rem; right: 1rem; z-index: 200;
	max-width: min(360px, calc(100vw - 2rem));
	background: #d9f2e5; color: #14603f; border-radius: 8px;
	padding: .7rem 1rem; margin-bottom: .5rem; font-weight: 600;
	box-shadow: 0 4px 16px rgba(0, 0, 0, .15);
}
.fitcore-error { background: #fde8e8; color: #9b1c1c; }

.fitcore-notice--error { background: #fde8e8; color: #9b1c1c; }
.fitcore-notice--freeze { background: linear-gradient(135deg, #cfeaff, #7dc4ff); color: #08324f; }
.fitcore-notice--pr { background: linear-gradient(135deg, #ffe4cc, var(--fitcore-accent-warm)); color: #7a2a0a; }

.fitcore-referral-row { display: flex; gap: .5rem; margin-top: .75rem; }
.fitcore-referral-link {
	flex: 1 1 auto; min-width: 0; padding: .6rem .75rem; border-radius: 8px;
	border: 1px solid var(--fitcore-border); background: var(--fitcore-tint);
	color: var(--fitcore-muted); font-size: .8125rem;
}
.fitcore-referral-copy { flex-shrink: 0; }

/* Trophy case: a scrollable strip of the 6 most recent achievements inline,
   the same badge tile reused inside the "View all" dialog's full list. */
.fitcore-trophy-strip {
	display: flex; gap: .6rem; overflow-x: auto; padding-bottom: .25rem; margin-top: .75rem;
	scroll-snap-type: x proximity;
}
.fitcore-trophy-strip .fitcore-trophy { flex: 0 0 auto; width: 84px; scroll-snap-align: start; }
.fitcore-trophy {
	display: flex; flex-direction: column; align-items: center; gap: .2rem;
	text-align: center; padding: .75rem .5rem; border-radius: 10px; background: var(--fitcore-tint);
}
.fitcore-trophy-icon { font-size: 1.5rem; line-height: 1; }
.fitcore-trophy-label { font-size: .6875rem; font-weight: 700; line-height: 1.2; }
.fitcore-trophy-date { font-size: .625rem; color: var(--fitcore-muted); }

.fitcore-trophy-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: .6rem; margin-top: .9rem; }
.fitcore-trophy-list .fitcore-trophy { background: rgba(255, 255, 255, .08); }
.fitcore-trophy-list .fitcore-trophy-label { color: #fff; }
.fitcore-trophy-list .fitcore-trophy-date { color: rgba(255, 255, 255, .55); }
.fitcore-notice--warning { background: #fef3c7; color: #92400e; }

.fitcore-pagination { text-align: center; font-weight: 600; }
.fitcore-pagination a { margin: 0 .25rem; }

.fitcore-chart { width: 100%; height: auto; display: block; }

/* Progress chart — same dark ink/lime language as the activity rings:
   big current value + trend badge up top, gradient-filled smooth line
   below, drawn in on load. Now scrubbable — see .fitcore-progress-scrub
   and the #fitcore-scrub-* elements it drives, wired up in theme.js. */
.fitcore-progress-card { background: var(--fitcore-ink); border: 0; color: #fff; }
.fitcore-progress-card .fitcore-muted { color: rgba(255, 255, 255, .6); }
.fitcore-progress-head {
	display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between;
	gap: .75rem; margin-bottom: .75rem;
}
.fitcore-progress-value { font-size: 2rem; font-weight: 800; line-height: 1; display: block; }
.fitcore-progress-value small { font-size: 1rem; font-weight: 600; color: rgba(255, 255, 255, .6); margin-left: .2rem; }
.fitcore-progress-trend {
	font-size: .8125rem; font-weight: 700; background: rgba(255, 226, 76, .16); color: var(--fitcore-accent);
	padding: .3rem .6rem; border-radius: 999px; white-space: nowrap; min-height: 1.5em;
}
.fitcore-progress-svg { overflow: visible; }
.fitcore-progress-area { opacity: 0; }
.fitcore-scrub-guide { stroke: rgba(255, 255, 255, .25); stroke-width: 1; stroke-dasharray: 3 3; }
.fitcore-scrub-dot { fill: var(--fitcore-accent); stroke: var(--fitcore-ink); stroke-width: 2; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-progress-area { animation: fitcore-fade-in .8s ease .3s forwards; }
	.fitcore-progress-line { stroke-dasharray: 1000; animation: fitcore-chart-draw 1.1s cubic-bezier(.16, 1, .3, 1) both; }
	.fitcore-scrub-dot { animation: fitcore-icon-glow 2s ease-in-out infinite; }
}
@media (prefers-reduced-motion: reduce) {
	.fitcore-progress-area { opacity: 1; }
}
@keyframes fitcore-fade-in { to { opacity: 1; } }
@keyframes fitcore-chart-draw {
	from { stroke-dashoffset: 1000; }
	to { stroke-dashoffset: 0; }
}

/* The scrubber itself: a native <input type="range">, restyled to a slim
   lime track with a chunky thumb — same tactile-toy feel as the stepper,
   full-width right under the chart it's driving. */
.fitcore-progress-scrub {
	-webkit-appearance: none; appearance: none; width: 100%; margin-top: .5rem;
	background: transparent; cursor: pointer;
}
.fitcore-progress-scrub::-webkit-slider-runnable-track {
	height: 6px; border-radius: 999px; background: rgba(255, 255, 255, .15);
}
.fitcore-progress-scrub::-moz-range-track {
	height: 6px; border-radius: 999px; background: rgba(255, 255, 255, .15);
}
.fitcore-progress-scrub::-webkit-slider-thumb {
	-webkit-appearance: none; margin-top: -7px; width: 20px; height: 20px; border-radius: 50%;
	background: var(--fitcore-accent); border: 3px solid var(--fitcore-ink);
	box-shadow: 0 1px 4px rgba(0, 0, 0, .4); transition: transform .1s ease;
}
.fitcore-progress-scrub::-moz-range-thumb {
	width: 20px; height: 20px; border-radius: 50%; background: var(--fitcore-accent);
	border: 3px solid var(--fitcore-ink); box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
}
.fitcore-progress-scrub:active::-webkit-slider-thumb { transform: scale(1.15); }

/* Wide tables scroll inside their own container instead of overflowing the
   page or squeezing every column unreadably thin on mobile. */
.fitcore-table-wrap { overflow-x: auto; margin-bottom: 1rem; -webkit-overflow-scrolling: touch; }
.fitcore-table-wrap .fitcore-table { margin-bottom: 0; }
.fitcore-table { width: 100%; min-width: 480px; border-collapse: collapse; }
/* Two narrow columns of short values (month/count, date/count) never need
   the horizontal-scroll safety net the wider member tables do. */
.fitcore-table--narrow { min-width: 0; margin-bottom: 1rem; }
#fitcore-top, #fitcore-progress, #fitcore-log, #fitcore-feed, #fitcore-checkin { scroll-margin-top: 4.5rem; }

.fitcore-table th, .fitcore-table td { text-align: left; padding: .4rem .3rem; border-bottom: 1px solid var(--fitcore-border); white-space: nowrap; }
.fitcore-table td:first-child { white-space: normal; }

.fitcore-table form { display: inline-flex; align-items: center; gap: .4rem; }

/* Progress ledger: each row carries its own magnitude bar (relative to the
   shown range, same visual grammar as the quest progress bars) and a
   colored delta chip vs. the entry before it — the list tells the trend
   story on its own instead of just lining numbers up in a grid. */
.fitcore-ledger { display: flex; flex-direction: column; }
.fitcore-ledger-row {
	/* First column must grow past 4.5rem on the "latest" row, which also
	   stuffs a "Latest" pill into the date cell — a hard 4.5rem clipped
	   nothing and just let that pill overlap the bar next to it. */
	display: grid; grid-template-columns: minmax(4.5rem, max-content) 1fr auto; align-items: center; gap: .8rem;
	padding: .55rem 0; border-bottom: 1px solid var(--fitcore-border);
}
.fitcore-ledger-row:last-child { border-bottom: 0; }
.fitcore-ledger-row--latest { font-weight: 700; }
.fitcore-ledger-date { font-size: .8125rem; color: var(--fitcore-muted, #6b7280); white-space: nowrap; }
.fitcore-ledger-row--latest .fitcore-ledger-date { color: var(--fitcore-ink); }
.fitcore-ledger-row--latest .fitcore-chip-pill { padding: .1rem .5rem; font-size: .6875rem; margin-left: .3rem; }
.fitcore-ledger-track { height: 8px; border-radius: 999px; background: var(--fitcore-tint); overflow: hidden; }
/* Same transform: scaleX() swap as .fitcore-quest-progress-fill above —
   avoids animating width (layout thrash) in favor of a composited transform. */
.fitcore-ledger-bar {
	height: 100%; width: 100%; border-radius: 999px; background: var(--fitcore-accent-warm);
	transform: scaleX(var(--fitcore-pct, 0)); transform-origin: left;
	transition: transform .4s cubic-bezier(.16, 1, .3, 1);
}
.fitcore-ledger-row--latest .fitcore-ledger-bar { background: var(--fitcore-ink); }
.fitcore-ledger-value { display: flex; align-items: baseline; gap: .4rem; font-size: .9375rem; white-space: nowrap; }
.fitcore-ledger-value small { color: var(--fitcore-muted, #6b7280); font-weight: 600; }
.fitcore-ledger-delta { font-size: .75rem; font-weight: 700; }
.fitcore-ledger-delta--up { color: var(--fitcore-accent-warm); }
.fitcore-ledger-delta--down { color: #16a34a; }

/* Staff dashboard: "Members Going Quiet" — name + days-since on the left,
   a one-tap Call action on the right. */
.fitcore-atrisk-list { display: flex; flex-direction: column; }
.fitcore-atrisk-row {
	display: flex; align-items: center; justify-content: space-between; gap: 1rem;
	padding: .7rem 0; border-bottom: 1px solid var(--fitcore-tint);
}
.fitcore-atrisk-row:last-child { border-bottom: 0; }
.fitcore-atrisk-row > div:first-child { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
.fitcore-atrisk-row strong { font-size: .9375rem; }
.fitcore-atrisk-row .fitcore-muted { font-size: .8125rem; }
.fitcore-atrisk-row .fitcore-button { flex-shrink: 0; }

/* Staff dashboard: "Today's Attendance" — today's names as chips, the rest
   of the week folded away. */
.fitcore-pulse-sub { margin: .8rem 0 .4rem; font-size: .9375rem; }
.fitcore-pulse-chips { display: flex; flex-wrap: wrap; gap: .35rem; }
.fitcore-pulse-chip { background: var(--fitcore-tint); border-radius: 999px; padding: .25rem .65rem; font-size: .875rem; }
.fitcore-pulse-chip--in { background: var(--fitcore-accent); color: var(--fitcore-ink); font-weight: 600; }
.fitcore-pulse-chip small { color: var(--fitcore-muted, #6b7280); margin-left: .15rem; }
.fitcore-pulse-more { margin-top: .8rem; }
.fitcore-pulse-more summary { cursor: pointer; font-size: .8125rem; font-weight: 600; color: var(--fitcore-muted, #6b7280); }

/* ---------------------------------------------------------------------
   App shell: the stats hub, segmented control, bottom tab bar. The
   signature element is the 2x2 stat-tile grid — everything else here is
   quiet scaffolding around it (native-feeling nav, tactile controls).
   --------------------------------------------------------------------- */

/* Stats hub: workouts this week/month, last workout, and current weight
   as one fixed 4-up row — all four stats readable at a glance, no swipe
   required. Columns share the card's width evenly instead of scrolling
   off it. */
.fitcore-stats-hub { position: relative; background: var(--fitcore-ink); border: 0; padding: 0; overflow: hidden; }
.fitcore-stats-strip { display: grid; grid-template-columns: repeat(4, 1fr); }
/* Share button floats over the stats hub's own corner rather than adding a
   header row — the hub stays exactly the "four tiles" shape it already is. */
.fitcore-share-btn {
	position: absolute; top: .6rem; right: .6rem; z-index: 2;
	width: 34px; height: 34px; border-radius: 50%; border: 0; padding: 0; cursor: pointer;
	background: rgba(255, 255, 255, .12); display: flex; align-items: center; justify-content: center;
	transition: background .15s ease, transform .1s ease;
}
.fitcore-share-btn:hover { background: rgba(255, 255, 255, .22); }
.fitcore-share-btn:active { transform: scale(.9); }
.fitcore-share-icon { width: 16px; height: 16px; color: var(--fitcore-accent); }
.fitcore-share-btn--pr { background: rgba(255, 210, 63, .25); }
.fitcore-share-btn--pr .fitcore-share-icon { color: #ffd23f; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-share-btn--pr { animation: fitcore-status-ping 1.8s ease-in-out infinite; }
}
/* Freeze badge as a second sticker tilted the opposite way from the streak
   badge — reads as two stickers slapped on together, not a status pill.
   Icy blue reuses the leaderboard's B-rank gradient (the app's one existing
   "cool" color) instead of introducing a new, unrelated blue. */
.fitcore-badge--freeze {
	background: linear-gradient(135deg, #cfeaff, #7dc4ff);
	color: #08324f; text-transform: none; letter-spacing: 0; font-weight: 800;
	border: 1.5px solid var(--fitcore-ink); box-shadow: 2px 2px 0 var(--fitcore-ink);
	transform: rotate(4deg); display: inline-block;
}
.fitcore-badge--freeze:hover { transform: rotate(4deg) scale(1.08); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-badge--freeze { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) .12s both; }
	.fitcore-badge--freeze:hover { animation: fitcore-icon-wiggle .5s ease; }
}
.fitcore-stat-tile {
	position: relative; display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-end;
	min-width: 0; overflow: hidden;
	gap: .15rem; padding: .8rem .6rem; color: #fff; text-decoration: none;
	border-right: 1px solid rgba(255, 255, 255, .1);
	transition: background .15s ease, transform .1s ease;
}
/* Long values (e.g. "Yesterday") must truncate inside their own tile
   instead of visually bleeding into the next column. */
.fitcore-stat-tile-value, .fitcore-stat-tile-top {
	max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* Last tile sits directly under the floating share button (top-right of
   the whole hub) — give it clearance so the button doesn't sit on top of
   its value/delta. */
.fitcore-stat-tile--weight { padding-top: 2.3rem; }
@media (max-width: 420px) {
	.fitcore-stat-tile { padding: .6rem .4rem; }
	.fitcore-stat-tile-value { font-size: 1.125rem; }
	.fitcore-stat-tile-mood { font-size: 1.25rem; }
}
.fitcore-stat-tile:last-child { border-right: 0; }
.fitcore-stat-tile:hover { background: rgba(255, 255, 255, .05); color: #fff; }
.fitcore-stat-tile-value { font-size: 1.375rem; font-weight: 800; line-height: 1; letter-spacing: -.02em; }
.fitcore-stat-tile-value small { font-size: .75rem; font-weight: 700; color: rgba(255, 255, 255, .55); }
.fitcore-stat-tile-label {
	display: block; width: 100%;
	font-size: .625rem; font-weight: 700; color: rgba(255, 255, 255, .6);
	text-transform: uppercase; letter-spacing: .04em; white-space: nowrap;
	overflow: hidden; text-overflow: ellipsis;
}

/* Week tile: mini ring behind the number instead of beside it, so all
   four tiles keep the same compact "value + label" footprint. */
.fitcore-stat-tile--ring { flex-direction: column; align-items: center; text-align: center; }
.fitcore-tile-ring { position: absolute; top: .6rem; width: 44px; height: 44px; transform: rotate(-90deg); opacity: .9; }
.fitcore-stat-tile--ring .fitcore-stat-tile-value { margin-top: 2.6rem; }
.fitcore-tile-trophy {
	position: absolute; top: .3rem; right: .5rem; font-size: 1rem;
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-stat-tile--hit .fitcore-tile-trophy { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both; }
}

/* "Last workout" mood tile: an oversized emoji stands in for an icon and
   doubles as a quick emotional read of how overdue a session is. */
.fitcore-stat-tile-mood { font-size: 1.5rem; line-height: 1; margin-bottom: .1rem; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-stat-tile--mood:hover .fitcore-stat-tile-mood { animation: fitcore-icon-wiggle .5s ease; }
}

/* "Current weight" tile: trend sparkline instead of a lone frozen number. */
.fitcore-stat-tile--weight { align-items: stretch; }
.fitcore-stat-tile-top { display: flex; align-items: baseline; gap: .3rem; flex-wrap: wrap; }
.fitcore-stat-tile-delta { font-size: .6875rem; font-weight: 700; white-space: nowrap; }
.fitcore-stat-tile-delta--up { color: var(--fitcore-accent-warm); }
.fitcore-stat-tile-delta--down { color: var(--fitcore-accent); }
.fitcore-spark { width: 100%; height: 22px; margin-bottom: .3rem; overflow: visible; }
.fitcore-spark-line { fill: none; stroke: var(--fitcore-accent-warm); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.fitcore-spark-dot { fill: var(--fitcore-accent-warm); }

.fitcore-ring-track { fill: none; stroke: rgba(255, 255, 255, .15); stroke-width: 8; }
.fitcore-ring { fill: none; stroke-width: 8; stroke-linecap: round; stroke-dashoffset: var(--ring-offset); }
.fitcore-ring-outer { stroke: var(--fitcore-accent); }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-ring-outer { animation: fitcore-ring-fill 1.1s cubic-bezier(.16, 1, .3, 1) both; }
}
@keyframes fitcore-ring-fill {
	from { stroke-dashoffset: var(--ring-c); }
	to { stroke-dashoffset: var(--ring-offset); }
}

/* Segmented control replacing the old <details> disclosure — a sliding
   pill indicator instead of an accordion; both panels stay in the DOM so
   there's no layout jump when switching. */
.fitcore-segmented {
	position: relative; display: grid; grid-template-columns: 1fr 1fr;
	background: var(--fitcore-tint); border-radius: .75rem; padding: .25rem;
	margin-bottom: 1rem; gap: .25rem;
}
.fitcore-segment {
	position: relative; z-index: 1; background: none; border: 0; cursor: pointer;
	padding: .5rem .75rem; border-radius: .55rem; font: inherit; font-weight: 600;
	font-size: .875rem; color: #6b7280; transition: color .2s ease;
}
.fitcore-segment.is-active { color: var(--fitcore-ink); }
.fitcore-segment:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(6, 20, 20, .18); }
.fitcore-segment-thumb {
	position: absolute; top: .25rem; left: .25rem; width: calc(50% - .375rem); height: calc(100% - .5rem);
	background: #fff; border-radius: .55rem; box-shadow: 0 1px 3px rgba(0, 0, 0, .15);
	transition: transform .25s cubic-bezier(.16, 1, .3, 1);
}
.fitcore-segment[data-fitcore-segment="metrics"].is-active ~ .fitcore-segment-thumb { transform: translateX(100%); }

/* Bottom app-nav (mobile only — the top nav already covers ≥900px). */
.fitcore-tabbar { display: none; }
@media (max-width: 899px) {
	.fitcore-tabbar {
		display: grid; grid-template-columns: repeat(var(--fitcore-tabs, 5), 1fr);
		position: fixed; left: 0; right: 0; bottom: 0; z-index: 150;
		background: rgba(6, 20, 20, .92); backdrop-filter: blur(12px);
		-webkit-backdrop-filter: blur(12px);
		padding: .4rem .5rem calc(.4rem + env(safe-area-inset-bottom));
		box-shadow: 0 -1px 0 rgba(255, 255, 255, .06);
	}
	.fitcore-tabbar a {
		position: relative; display: flex; flex-direction: column; align-items: center; gap: .2rem;
		color: rgba(255, 255, 255, .55); text-decoration: none; font-size: .625rem;
		font-weight: 600; padding: .35rem 0; border-radius: .5rem; transition: color .15s ease;
	}
	.fitcore-notify-badge--tab { top: -2px; right: calc(50% - 20px); box-shadow: 0 0 0 2px #0d1f1f; }
	.fitcore-tabbar a.is-active { color: var(--fitcore-accent); }
	.fitcore-tabbar a:hover { color: rgba(255, 255, 255, .55); }
	.fitcore-tabbar a.is-active:hover { color: var(--fitcore-accent); }
	.fitcore-tab-icon { width: 20px; height: 20px; }
	.fitcore-tab-fab {
		position: relative; margin-top: -1.35rem;
	}
	.fitcore-tab-fab-icon {
		box-sizing: content-box; width: 26px; height: 26px; color: var(--fitcore-ink);
		background: var(--fitcore-accent); border-radius: 50%; padding: 11px;
		box-shadow: 0 4px 14px rgba(255, 226, 76, .45), 0 0 0 4px var(--fitcore-tint);
	}
	.fitcore-tab-fab span { color: rgba(255, 255, 255, .55); }
	/* Room for the fixed tab bar so the last card is never hidden behind it. */
	.fitcore-app { padding-bottom: 4.5rem; }
}

/* Bottom sheet instead of a centered dialog for the QR scanner — slides up
   from the tab bar's edge, which is where a mobile user's thumb already is.
   z-index sits above the tab bar (150) so the sheet fully covers it while open. */
.fitcore-qr-modal { align-items: flex-end; padding: 0; z-index: 250; }
.fitcore-qr-modal-inner {
	background: var(--fitcore-ink); border-radius: 1.5rem 1.5rem 0 0;
	padding: 1.5rem 1.5rem calc(1.5rem + env(safe-area-inset-bottom));
	max-width: 480px; width: 100%;
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-qr-modal-inner { animation: fitcore-sheet-up .3s cubic-bezier(.16, 1, .3, 1); }
}
@keyframes fitcore-sheet-up {
	from { transform: translateY(100%); }
	to { transform: translateY(0); }
}

/* Entrance stagger for the dashboard's top cards — one orchestrated moment
   on load rather than scattered per-element effects. */
@media (prefers-reduced-motion: no-preference) {
	.fitcore-app > .fitcore-card,
	.fitcore-app > .fitcore-stories {
		animation: fitcore-rise .5s cubic-bezier(.16, 1, .3, 1) both;
	}
	.fitcore-app > *:nth-child(1) { animation-delay: 0s; }
	.fitcore-app > *:nth-child(2) { animation-delay: .04s; }
	.fitcore-app > *:nth-child(3) { animation-delay: .08s; }
	.fitcore-app > *:nth-child(4) { animation-delay: .12s; }
	.fitcore-app > *:nth-child(5) { animation-delay: .16s; }
	.fitcore-app > *:nth-child(6) { animation-delay: .2s; }
}
@keyframes fitcore-rise {
	from { opacity: 0; transform: translateY(10px); }
	to { opacity: 1; transform: translateY(0); }
}

/* Milestone celebration: the 7/30/100-day streak moment gets a real event
   (full-screen, confetti, tap-to-dismiss) instead of blending into the
   daily streak-chip number ticking up like any other check-in. */
.fitcore-milestone {
	position: fixed; inset: 0; z-index: 300;
	background: rgba(6, 20, 20, .85);
	display: flex; align-items: center; justify-content: center;
	padding: 1rem; overflow: hidden;
}
.fitcore-milestone-card {
	position: relative; z-index: 1; text-align: center;
	background: var(--fitcore-ink); color: #fff;
	border-radius: 20px; padding: 2.5rem 2rem; max-width: 340px;
	box-shadow: 0 20px 60px rgba(0, 0, 0, .4);
}
.fitcore-milestone-number {
	display: block; font-size: 4rem; font-weight: 800; line-height: 1;
	color: var(--fitcore-accent);
}
.fitcore-milestone-card strong { display: block; font-size: 1.0625rem; margin: .35rem 0 1rem; text-transform: uppercase; letter-spacing: .04em; }
.fitcore-milestone-card p { color: rgba(255, 255, 255, .75); margin: 0 0 1.5rem; }
/* Two stacked actions: Share (solid, primary — .fitcore-button's own
   default accent fill already fits) then Maybe later (ghost, needs its
   own border/hover since the base ghost style assumes a light background). */
.fitcore-milestone-card .fitcore-button + .fitcore-button { margin-top: .6rem; }
.fitcore-milestone-card .fitcore-button--ghost { border-color: rgba(255, 255, 255, .3); color: #fff; }
.fitcore-milestone-card .fitcore-button--ghost:hover { background: rgba(255, 255, 255, .1); }

.fitcore-confetti { position: absolute; inset: 0; pointer-events: none; }
.fitcore-confetti-piece {
	position: absolute; top: -5%; left: calc(var(--i) * 6.4%);
	width: 8px; height: 14px;
	background: hsl(calc(var(--i) * 23), 85%, 60%);
}
@media (prefers-reduced-motion: no-preference) {
	.fitcore-milestone-card { animation: fitcore-pop .4s cubic-bezier(.34, 1.56, .64, 1) both; }
	.fitcore-confetti-piece {
		animation: fitcore-confetti-fall 2.4s ease-in both;
		animation-delay: calc(var(--i) * .07s);
	}
}
@keyframes fitcore-confetti-fall {
	0% { transform: translateY(0) rotate(0deg); opacity: 1; }
	100% { transform: translateY(110vh) rotate(540deg); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
	.fitcore-confetti { display: none; }
}

/* "Continue with Google" — kept neutral/white per Google's own button
   guidelines rather than the site's gold accent, so it stays recognizable. */
.fitcore-google-btn {
	display: flex; align-items: center; justify-content: center; gap: .6rem;
	width: 100%; box-sizing: border-box; background: #fff; color: var(--fitcore-ink);
	border: 1px solid var(--fitcore-border); border-radius: .7rem; padding: .6rem 1rem;
	font-family: inherit; font-weight: 600; font-size: .9375rem; text-decoration: none;
	transition: background .15s ease, box-shadow .15s ease;
}
.fitcore-google-btn:hover { background: var(--fitcore-tint); }
.fitcore-divider {
	display: flex; align-items: center; gap: .75rem; margin: 1rem 0;
	color: var(--fitcore-muted); font-size: .8125rem;
}
.fitcore-divider::before, .fitcore-divider::after {
	content: ""; flex: 1 1 auto; height: 1px; background: var(--fitcore-border);
}

/* First-time dashboard walkthrough: a spotlight ring (giant box-shadow
   "cutout" technique — no SVG mask needed) plus a floating bubble, both
   position:fixed so viewport-relative getBoundingClientRect() coordinates
   apply directly with no scroll-offset math. */
.fitcore-tour-highlight {
	position: fixed; z-index: 100000; border-radius: 1rem; pointer-events: none;
	box-shadow: 0 0 0 9999px rgba(6, 20, 14, .6);
	transition: top .25s ease, left .25s ease, width .25s ease, height .25s ease;
}
.fitcore-tour-bubble {
	position: fixed; z-index: 100001; width: 280px; max-width: calc(100vw - 24px);
	background: var(--fitcore-ink); color: #fff; border-radius: 1rem; padding: 1rem 1.1rem;
	box-shadow: 0 10px 30px rgba(0, 0, 0, .35);
	transition: top .25s ease, left .25s ease;
}
.fitcore-tour-step {
	font-size: .75rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
	color: var(--fitcore-accent);
}
.fitcore-tour-bubble h3 { margin: .35rem 0 .3rem; font-size: 1.0625rem; }
.fitcore-tour-bubble .fitcore-muted { color: rgba(255, 255, 255, .7); font-size: .875rem; }
.fitcore-tour-actions { display: flex; justify-content: flex-end; gap: .5rem; margin-top: .85rem; }
.fitcore-tour-bubble .fitcore-button--ghost { border-color: rgba(255, 255, 255, .3); color: #fff; }
.fitcore-tour-bubble .fitcore-button--ghost:hover { background: rgba(255, 255, 255, .1); }
@media (prefers-reduced-motion: reduce) {
	.fitcore-tour-highlight, .fitcore-tour-bubble { transition: none; }
}

/* Members list. The search row wraps instead of squashing the input and
   pushing Apply off-screen; on phones and tablets each member becomes a card (labels come
   from each cell's data-label) so nothing needs a sideways scroll. */
.fitcore-members-controls { flex-wrap: wrap; }
.fitcore-members-controls input[type=search] { flex: 1 1 14rem; min-width: 0; }
.fitcore-members-controls select { flex: 1 1 8rem; min-width: 0; }
/* The directory table must fit its card on laptops too, or Suspend scrolls
   out of reach: cells wrap by default, short values (dates, phone) stay on one line. */
.fitcore-table--cards td { white-space: normal; }
.fitcore-table--cards td[data-label="Email"] { overflow-wrap: anywhere; }
.fitcore-table--cards td[data-label="Plan"], .fitcore-table--cards td[data-label="Status"], .fitcore-table--cards td[data-label="Joined"],
.fitcore-table--cards td[data-label="Renews"], .fitcore-table--cards td[data-label="Phone"] { white-space: nowrap; }
.fitcore-table--cards td.fitcore-access form { flex-wrap: wrap; }
.fitcore-table--cards td.fitcore-access select { max-width: 9rem; }
@media (max-width: 900px) {
	.fitcore-table--cards { min-width: 0; }
	.fitcore-table--cards thead { display: none; }
	.fitcore-table--cards, .fitcore-table--cards tbody, .fitcore-table--cards tr, .fitcore-table--cards td { display: block; }
	.fitcore-table--cards tr {
		margin-bottom: .75rem; padding: .75rem .9rem;
		border: 1px solid var(--fitcore-border); border-radius: 1rem; background: #fff;
	}
	.fitcore-table--cards td {
		display: flex; justify-content: space-between; gap: 1rem; align-items: baseline;
		padding: .2rem 0; border: 0; white-space: normal; text-align: right; overflow-wrap: anywhere;
	}
	.fitcore-table--cards td::before { content: attr(data-label); flex-shrink: 0; text-align: left; font-weight: 600; color: var(--fitcore-muted); }
	.fitcore-table--cards td:first-child { display: block; padding-bottom: .4rem; margin-bottom: .3rem; border-bottom: 1px solid var(--fitcore-tint); text-align: left; font-weight: 700; font-size: 1.0625rem; }
	.fitcore-table--cards td:first-child::before { content: none; }
	.fitcore-table--cards td[data-label="Email"] { display: block; text-align: left; }
	.fitcore-table--cards td[data-label="Email"]::before { display: block; margin-bottom: .1rem; }
	.fitcore-table--cards td.fitcore-access { display: block; padding-top: .6rem; text-align: left; }
	.fitcore-table--cards td.fitcore-access::before { content: none; }
	.fitcore-table--cards td.fitcore-access form { display: flex; flex-wrap: wrap; gap: .4rem; }
	.fitcore-table--cards td.fitcore-access .fitcore-muted { display: block; margin-top: .35rem; }
}

/* Champion of the Day: dark card, gold spotlight behind the leader, a crown
   that bobs, a chase bar that fills, and a record to beat. Motion is
   decoration only — everything reads fine static (reduced-motion users). */

/* Gym-iversary: a party card (warm gradient, confetti, wiggling cake, a
   rubber-stamp milestone) so a member's 1-month / 1-year moment feels like
   one. Motion is decoration only. */

/* Progress: workout history built for daily logging — stats line, 12-week
   calendar grid, one-line session rows. */
.fitcore-hist-stats { display: flex; flex-wrap: wrap; gap: .25rem 1rem; margin: 0 0 .6rem; font-size: .8125rem; color: var(--fitcore-muted, #6b7280); }
.fitcore-hist-stats b { color: var(--fitcore-ink); font-size: 1rem; font-variant-numeric: tabular-nums; }
.fitcore-histcal { transition: opacity .15s ease; }
.fitcore-histcal.is-loading { opacity: .5; pointer-events: none; }
.fitcore-histcal-head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .5rem; }
.fitcore-histcal-title { display: flex; flex-direction: column; align-items: center; line-height: 1.25; text-align: center; }
.fitcore-histcal-title .fitcore-muted { font-size: .75rem; }
.fitcore-histcal-arrow { width: 36px; height: 36px; border-radius: 50%; border: 0; background: var(--fitcore-tint); font-size: 1.25rem; line-height: 1; cursor: pointer; color: var(--fitcore-ink); }
.fitcore-histcal-arrow:disabled { opacity: .3; cursor: default; }
.fitcore-histcal-dow, .fitcore-histcal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.fitcore-histcal-dow { margin-bottom: 3px; text-align: center; font-size: .6875rem; font-weight: 700; color: var(--fitcore-muted, #6b7280); }
.fitcore-hc { height: 30px; border-radius: .45rem; border: 0; padding: 0; font: inherit; font-size: .75rem; display: flex; align-items: center; justify-content: center; background: var(--fitcore-tint); color: var(--fitcore-muted, #6b7280); }
.fitcore-hc.is-blank, .fitcore-hc.is-future { background: none; }
.fitcore-hc.is-future { opacity: .35; }
button.fitcore-hc { cursor: pointer; font-weight: 700; color: var(--fitcore-ink); }
.fitcore-hc--1 { background: #f2dc6b; }
.fitcore-hc--2 { background: #e6c943; }
.fitcore-hc--3 { background: var(--fitcore-ink); color: #fff; }
button.fitcore-hc--3 { color: #fff; }
.fitcore-hc.is-today { box-shadow: inset 0 0 0 1.5px var(--fitcore-ink); }
.fitcore-hc.is-selected { outline: 2px solid var(--fitcore-ink); outline-offset: 1px; }
.fitcore-histcal-day { margin-top: .7rem; padding: .6rem .75rem; border-radius: .8rem; background: var(--fitcore-tint); }
.fitcore-histcal-day .fitcore-hist-label { margin: 0 0 .3rem; }
.fitcore-hist-entry + .fitcore-hist-entry { margin-top: .5rem; padding-top: .5rem; border-top: 1px solid rgba(0, 0, 0, .08); }
.fitcore-hist-entry p { margin: .2rem 0 0; font-size: .8125rem; }
.fitcore-hist-line { display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; font-size: .9375rem; }
.fitcore-hist-line strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fitcore-histcal-hint { margin: .5rem 0 0; font-size: .75rem; }

/* One Progress card: dark weight graph on top, workout history below. */
.fitcore-card--combined .fitcore-progress-card { box-shadow: none; margin: .5rem 0 1.25rem; }
.fitcore-card--combined .fitcore-card:not(.fitcore-progress-card) { box-shadow: none; padding: 0; background: none; margin: 0; }
.fitcore-hist-title { display: flex; align-items: center; gap: .5rem; margin: 0 0 .5rem; font-size: 1.0625rem; }
.fitcore-hist-weights { margin-top: 1rem; border-top: 1px solid var(--fitcore-tint); padding-top: .8rem; }
.fitcore-hist-weights summary { cursor: pointer; font-size: .8125rem; font-weight: 600; color: var(--fitcore-muted, #6b7280); }
.fitcore-hist-weights .fitcore-ledger { margin-top: .6rem; }
.fitcore-hist-label { margin: 0 0 .4rem; font-size: .75rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fitcore-muted, #6b7280); }

/* Workout mix donut (history card): ring + one tidy legend column, per displayed month. */
.fitcore-mix { display: flex; align-items: center; gap: 1rem; margin: .2rem 0 .9rem; padding: .8rem 1rem; border-radius: .9rem; background: var(--fitcore-tint); }
.fitcore-mix-ring { position: relative; flex: 0 0 96px; width: 96px; height: 96px; color: var(--fitcore-ink); }
.fitcore-mix-ring svg { display: block; width: 100%; height: 100%; transform: rotate(-90deg); transform-origin: 50% 50%; }
.fitcore-mix-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1.05; }
.fitcore-mix-center b { font-size: 1.625rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.fitcore-mix-center small { font-size: .5rem; text-transform: uppercase; letter-spacing: .02em; color: var(--fitcore-muted, #6b7280); }
.fitcore-mix-legend { list-style: none; margin: 0; padding: 0; flex: 1; min-width: 0; max-width: 11rem; display: flex; flex-direction: column; gap: .45rem; font-size: .8125rem; line-height: 1.2; }
.fitcore-mix-legend li { display: flex; align-items: center; gap: .5rem; min-width: 0; }
.fitcore-mix-legend i { flex: 0 0 .6rem; width: .6rem; height: .6rem; border-radius: 50%; }
.fitcore-mix-legend b { margin-left: auto; min-width: 1.4rem; text-align: right; font-weight: 800; font-variant-numeric: tabular-nums; }

/* Staff dashboard: summary strip, slim "all clear" card, member search results. */
.fitcore-sum { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: .5rem; margin-bottom: 1rem; }
.fitcore-sum-tile { display: flex; flex-direction: column; align-items: center; gap: .1rem; padding: .7rem .3rem; border-radius: 1rem; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, .08); color: var(--fitcore-ink); text-decoration: none; }
.fitcore-sum-tile b { font-size: 1.4rem; line-height: 1.1; font-variant-numeric: tabular-nums; }
.fitcore-sum-tile span { font-size: .625rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--fitcore-muted, #6b7280); text-align: center; }
.fitcore-sum-tile.is-alert { background: var(--fitcore-accent); }
.fitcore-sum-tile.is-alert span { color: var(--fitcore-ink); }
.fitcore-card--slim { padding-top: .75rem; padding-bottom: .75rem; }
.fitcore-allclear { margin: 0; font-size: .9375rem; font-weight: 600; }
.fitcore-find-list { margin-top: .5rem; }
.fitcore-find-row { display: grid; grid-template-columns: 1fr auto; gap: .5rem .75rem; align-items: center; padding: .75rem 0; border-bottom: 1px solid var(--fitcore-tint); }
.fitcore-find-row:last-child { border-bottom: 0; }
.fitcore-find-main { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
.fitcore-find-main .fitcore-muted { font-size: .8125rem; overflow: hidden; text-overflow: ellipsis; }
.fitcore-find-more { grid-column: 1 / -1; }
.fitcore-find-more summary { cursor: pointer; font-size: .8125rem; font-weight: 600; color: var(--fitcore-muted, #6b7280); list-style: none; }
.fitcore-find-more summary::-webkit-details-marker { display: none; }
.fitcore-find-more form, .fitcore-find-status { margin-top: .6rem; }

/* Room for the staff tab bar so the last card is never hidden behind it. */
@media (max-width: 899px) { .fitcore-dashboard--staff { padding-bottom: 4.5rem; } }

/* Tappable member names and the profile sheet (staff dashboard). */
.fitcore-name-link { background: none; border: 0; padding: 0; font: inherit; font-weight: 700; color: inherit; text-align: left; cursor: pointer; text-decoration: underline dotted rgba(0, 0, 0, .35); text-underline-offset: 3px; }
button.fitcore-pulse-chip { border: 0; font: inherit; font-size: .875rem; color: inherit; cursor: pointer; }
button.fitcore-pulse-chip--in { font-weight: 600; }
.fitcore-profile-dialog { max-width: min(26rem, calc(100vw - 1.5rem)); width: 100%; }
.fitcore-profile-head { display: flex; align-items: center; gap: .8rem; margin: .2rem 2rem .9rem 0; }
.fitcore-profile-head h3 { margin: 0 0 .15rem; font-size: 1.25rem; line-height: 1.2; }
.fitcore-profile-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: .5rem; margin-bottom: .9rem; }
.fitcore-profile-stats div { display: flex; flex-direction: column; align-items: center; padding: .6rem .3rem; border-radius: .8rem; background: var(--fitcore-tint); }
.fitcore-profile-stats b { font-size: 1.3rem; line-height: 1.1; font-variant-numeric: tabular-nums; }
.fitcore-profile-stats span { font-size: .625rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--fitcore-muted, #6b7280); text-align: center; }
.fitcore-profile-info { display: flex; flex-direction: column; margin-bottom: .8rem; }
.fitcore-profile-info > div { display: flex; justify-content: space-between; gap: 1rem; padding: .45rem 0; border-bottom: 1px solid var(--fitcore-tint); font-size: .9rem; }
.fitcore-profile-info > div:last-child { border-bottom: 0; }
.fitcore-profile-info span { color: var(--fitcore-muted, #6b7280); }
.fitcore-profile-info b { font-weight: 600; text-align: right; min-width: 0; overflow-wrap: anywhere; }
.fitcore-profile-info small { color: var(--fitcore-muted, #6b7280); font-weight: 400; }
.fitcore-profile-note { font-size: .8125rem; margin: 0 0 .8rem; }
.fitcore-profile-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-top: .9rem; }
.fitcore-profile-actions .fitcore-form { margin: 0; }
.fitcore-profile-dialog .fitcore-find-more { margin-top: .8rem; }

/* The profile sheet is a light card (the story dialog it borrows from is dark). */
.fitcore-profile-dialog { background: #fff; color: var(--fitcore-ink); }
.fitcore-profile-dialog .fitcore-muted { color: var(--fitcore-muted, #6b7280); }
.fitcore-profile-dialog .fitcore-form { color: inherit; }
.fitcore-profile-dialog .fitcore-story-close { background: var(--fitcore-tint); color: var(--fitcore-ink); }
.fitcore-profile-dialog a:not(.fitcore-button) { color: inherit; }
.fitcore-profile-dialog .fitcore-pulse-chip { background: var(--fitcore-tint); color: var(--fitcore-ink); }
.fitcore-profile-dialog .fitcore-chip-pill--ok { background: #e3f4ea; color: #1c6b3a; }

/* The fixed tab bar covers the bottom of the page — give the site footer ("© year name") room to clear it. */
@media (max-width: 899px) { body:has(.fitcore-tabbar) .site-footer { padding-bottom: calc(2rem + 4.5rem); } }

/* Profile sheet: access history list. */
.fitcore-profile-history { list-style: none; margin: 0 0 .8rem; padding: 0; }
.fitcore-profile-history li { display: flex; flex-direction: column; padding: .4rem 0; border-bottom: 1px solid var(--fitcore-tint); font-size: .875rem; }
.fitcore-profile-history li:last-child { border-bottom: 0; }
.fitcore-profile-history span { font-size: .75rem; color: var(--fitcore-muted, #6b7280); }

/* Workout-history day panel is a light card — notes there need dark text (the base note style is white for dark dialogs). */
.fitcore-histcal-day .fitcore-feed-note { color: #4b5a56; }

/* Staff dashboard: renewals due. */
.fitcore-renew-list { display: flex; flex-direction: column; margin-top: .3rem; }
.fitcore-renew-row { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: .5rem .75rem; padding: .65rem 0; border-bottom: 1px solid var(--fitcore-tint); }
.fitcore-renew-row:last-child { border-bottom: 0; }
.fitcore-renew-main { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
.fitcore-renew-main .fitcore-muted { font-size: .8125rem; }
.fitcore-renew-row.is-over .fitcore-renew-main .fitcore-muted { color: #b3402a; font-weight: 600; }
.fitcore-renew-row .fitcore-button { flex-shrink: 0; }
.fitcore-renew-act { display: flex; gap: .4rem; flex-shrink: 0; }
.fitcore-renew-form { display: none; grid-column: 1 / -1; flex-wrap: wrap; gap: .5rem; padding: .6rem; border-radius: .8rem; background: var(--fitcore-tint); }
.fitcore-renew-row.is-renewing .fitcore-renew-form { display: flex; }
.fitcore-renew-form select { flex: 1 1 auto; width: auto; min-width: 0; }
.fitcore-renew-form input[type=number] { flex: 1 1 8rem; width: auto; min-width: 0; }
.fitcore-renew-form .fitcore-button { flex: 1 1 100%; }
.fitcore-find-hint { margin: .3rem 0 0; font-size: .75rem; }
/* Masked emails have long unbroken names — wrap them rather than clipping the domain. */
.fitcore-find-main .fitcore-muted, .fitcore-recruit-body .fitcore-muted { overflow-wrap: anywhere; }

/* Golden Hour: a one-line strip under the check-in card; brightens while the hour is live. */
.fitcore-golden { margin: .6rem 0; padding: .55rem .8rem; border-radius: .8rem; font-size: .8125rem; font-weight: 600; background: var(--fitcore-tint); color: var(--fitcore-ink); }
.fitcore-golden--soon { background: #fbf3c4; color: #5a4a00; }
.fitcore-golden--live, .fitcore-golden--caught { background: linear-gradient(90deg, #ffe58a, #f5b300); color: #4a3300; }
.fitcore-golden--past { color: var(--fitcore-muted, #6b7280); font-weight: 500; }

/* Ring hub: first-screen layout behind the dashboard launch switch (Fitcore_Dashboard::ring_hub_on). */
.fitcore-rh { background: var(--fitcore-ink); color: #fff; border-radius: 1.6rem; padding: .85rem .85rem 1rem; margin-bottom: .7rem; }
.fitcore-rh-top { display: flex; align-items: flex-start; gap: .45rem; }
.fitcore-rh-top > div:first-child { flex: 1; min-width: 0; }
.fitcore-rh-top h2 { margin: 0; font-size: 1.0625rem; line-height: 1.2; color: #fff; font-family: var(--fitcore-font-display); }
.fitcore-rh-top p { margin: .15rem 0 0; font-size: .75rem; color: rgba(255, 255, 255, .65); }
.fitcore-rh .fitcore-share-btn { position: static; flex-shrink: 0; }
.fitcore-rh-out { width: 34px; height: 34px; border-radius: 50%; background: rgba(255, 255, 255, .12); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.fitcore-rh-out-icon { width: 16px; height: 16px; color: rgba(255, 255, 255, .8); }
.fitcore-rh-stage { position: relative; height: 16.25rem; }
.fitcore-rh-badge {
	position: absolute; display: inline-flex; align-items: center; gap: .3rem; padding: .28rem .6rem; border-radius: 99px;
	font-size: .75rem; font-weight: 700; line-height: 1.1; background: rgba(255, 255, 255, .13); color: #fff; text-decoration: none;
	box-shadow: 0 0 0 2px var(--fitcore-ink); white-space: nowrap;
}
.fitcore-rh-badge-icon { width: 12px; height: 12px; }
.fitcore-rh-badge--top { top: .15rem; left: 50%; transform: translateX(-50%); background: rgba(255, 226, 76, .2); color: var(--fitcore-accent); }
.fitcore-rh-badge--presence { right: 0; top: 2.1rem; background: #fff; color: var(--fitcore-ink); }
.fitcore-rh-badge--streak { left: 0; bottom: 18%; background: var(--fitcore-accent); color: var(--fitcore-ink); }
.fitcore-rh-badge--rank { right: 0; bottom: 14%; }
.fitcore-rh-ring {
	--rh-pct: 0; position: absolute; left: 50%; top: 57%; transform: translate(-50%, -50%);
	width: 9.5rem; height: 9.5rem; border-radius: 50%; padding: 7px; box-sizing: border-box;
	background: conic-gradient(var(--fitcore-accent) calc(var(--rh-pct) * 1%), rgba(255, 255, 255, .14) 0);
}
.fitcore-rh-ring--done { background: conic-gradient(var(--fitcore-accent) calc(var(--rh-pct) * 1%), rgba(255, 255, 255, .14) 0); box-shadow: 0 0 22px rgba(255, 226, 76, .25); }
.fitcore-rh-core {
	appearance: none; border: 0; width: 100%; height: 100%; border-radius: 50%; margin: 0; padding: .4rem;
	background: #16231f; color: #fff; font: inherit; text-decoration: none; cursor: pointer;
	display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: .1rem;
}
.fitcore-rh-core b { font-size: 1.0625rem; font-weight: 800; line-height: 1.15; }
.fitcore-rh-core span { font-size: .75rem; color: rgba(255, 255, 255, .6); line-height: 1.2; }
.fitcore-rh-core-icon { width: 2.3rem; height: 2.3rem; color: var(--fitcore-accent); }
button.fitcore-rh-core:active, a.fitcore-rh-core:active { transform: scale(.97); }
.fitcore-rh-core--done { cursor: pointer; }
.fitcore-rh .fitcore-week-dots { justify-content: center; margin-top: .2rem; }
.fitcore-rh .fitcore-week-dot { background: rgba(255, 255, 255, .1); color: rgba(255, 255, 255, .7); }
.fitcore-rh .fitcore-week-dot--filled { background: var(--fitcore-accent); color: var(--fitcore-ink); }
.fitcore-rh .fitcore-week-dot--today { background: transparent; color: #fff; box-shadow: 0 0 0 2px #fff; }
.fitcore-rh-win { margin: .7rem 0 0; font-size: .8125rem; color: var(--fitcore-accent); text-align: center; display: flex; align-items: center; justify-content: center; gap: .35rem; }
.fitcore-rh-win-icon { width: 14px; height: 14px; flex-shrink: 0; }
.fitcore-rh .fitcore-mystery { margin-top: .7rem; }
.fitcore-rh-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; margin-bottom: .7rem; }
.fitcore-rh-tile { background: #fff; border-radius: 1.1rem; padding: .6rem .8rem; text-decoration: none; color: var(--fitcore-ink); display: flex; flex-direction: column; min-width: 0; }
.fitcore-rh-tile small { font-size: .75rem; color: #5d6b66; line-height: 1.25; }
.fitcore-rh-tile b { font-size: 1.1875rem; font-weight: 800; line-height: 1.15; overflow-wrap: anywhere; }
.fitcore-rh-tile b small { font-size: .75rem; font-weight: 600; }
.fitcore-rh-delta { font-size: .75rem; font-weight: 700; }
.fitcore-rh-delta--down { color: #1a7f37; }
.fitcore-rh-delta--up { color: #b3402a; }
.fitcore-rh-tiles.fitcore-stats-hub { background: none; box-shadow: none; padding: 0; border-radius: 0; }

/* Ring hub: quick-log bottom sheet. Above the tab bar (z-index 150) so it covers it while open. */
.fitcore-sheet[hidden] { display: none; }
.fitcore-sheet { position: fixed; inset: 0; z-index: 400; display: flex; align-items: flex-end; justify-content: center; background: rgba(6, 20, 20, 0); transition: background .2s ease; }
.fitcore-sheet.is-open { background: rgba(6, 20, 20, .55); }
.fitcore-sheet-backdrop { position: absolute; inset: 0; }
.fitcore-sheet-panel {
	position: relative; width: 100%; max-width: 30rem; max-height: 90vh; overflow: auto; box-sizing: border-box;
	background: #f4f4ef; color: var(--fitcore-ink); border-radius: 1.5rem 1.5rem 0 0;
	padding: .5rem 1rem calc(1rem + env(safe-area-inset-bottom)); transform: translateY(100%); transition: transform .22s ease;
}
.fitcore-sheet.is-open .fitcore-sheet-panel { transform: none; }
.fitcore-sheet-grab { width: 2.4rem; height: 4px; border-radius: 2px; background: #c9c9c0; margin: 0 auto .6rem; }
.fitcore-sheet-panel h3 { margin: 0 0 .5rem; font-size: 1.125rem; }
.fitcore-sheet-panel h4 { margin: .9rem 0 .4rem; font-size: .875rem; }
.fitcore-sheet-panel h4 small { font-weight: 500; color: #5d6b66; }
.fitcore-sheet-row { display: flex; flex-wrap: wrap; gap: .4rem; }
.fitcore-sheet-chip, .fitcore-sheet-face {
	appearance: none; border: 1px solid #cfcfc6; background: #fff; color: var(--fitcore-ink); font: inherit; font-weight: 700; font-size: .875rem;
	border-radius: 99px; padding: .5rem .85rem; cursor: pointer; line-height: 1.1;
}
.fitcore-sheet-face { font-size: 1.4rem; padding: .35rem .6rem; }
.fitcore-sheet-chip.is-on, .fitcore-sheet-face.is-on { background: var(--fitcore-ink); border-color: var(--fitcore-ink); color: var(--fitcore-accent); }
.fitcore-sheet-actions { display: flex; flex-direction: column; gap: .5rem; margin-top: 1.1rem; }
.fitcore-sheet-again { appearance: none; border: 1px dashed #b9b9ae; background: transparent; color: var(--fitcore-ink); font: inherit; font-weight: 700; font-size: .875rem; border-radius: 99px; padding: .6rem 1rem; cursor: pointer; }
.fitcore-sheet-actions .fitcore-button { width: 100%; justify-content: center; }
.fitcore-sheet-more { margin: .7rem 0 0; text-align: center; font-size: .8125rem; }
@media (prefers-reduced-motion: reduce) { .fitcore-sheet, .fitcore-sheet-panel { transition: none; } }

/* Ring hub: check-in moment (idle breath, tap, ring fill + light sweep + ripple + drawn check). All off under prefers-reduced-motion. */
@property --rh-pct { syntax: '<number>'; inherits: true; initial-value: 0; }
.fitcore-rh-ring.rh-fill { transition: --rh-pct 1.3s cubic-bezier(.22, 1, .36, 1); }
.fitcore-rh-glint, .fitcore-rh-ping, .fitcore-rh-tick { position: absolute; border-radius: 50%; pointer-events: none; }
.fitcore-rh-glint {
	inset: 0; z-index: 2; opacity: 0;
	background: conic-gradient(from 0deg, transparent 0 62%, rgba(255, 255, 255, .95) 80%, transparent 96%);
	-webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 7px), #000 calc(100% - 6px)); mask: radial-gradient(farthest-side, transparent calc(100% - 7px), #000 calc(100% - 6px));
	animation: fitcore-rh-sweep 1.4s cubic-bezier(.45, 0, .2, 1) forwards;
}
.fitcore-rh-ping { inset: 0; border: 2px solid var(--fitcore-accent); animation: fitcore-rh-ping 1.2s ease-out forwards; }
.fitcore-rh-tick { inset: 7px; z-index: 3; background: #16231f; display: flex; align-items: center; justify-content: center; animation: fitcore-rh-tick-fade 1.7s ease forwards; }
.fitcore-rh-tick svg { width: 4.2rem; height: 4.2rem; fill: none; stroke: var(--fitcore-accent); stroke-width: 3.2; stroke-linecap: round; stroke-linejoin: round; }
.fitcore-rh-tick path { stroke-dasharray: 44; stroke-dashoffset: 44; animation: fitcore-rh-draw .6s .15s cubic-bezier(.65, 0, .35, 1) forwards; }
.fitcore-rh-cheer { position: absolute; left: 0; right: 0; bottom: .15rem; text-align: center; color: #fff; font-weight: 700; font-size: .9375rem; letter-spacing: .02em; z-index: 4; pointer-events: none; animation: fitcore-rh-cheer-in .6s .5s cubic-bezier(.22, 1, .36, 1) both; }
.fitcore-rh-cheer::after { content: ''; display: block; width: 1.6rem; height: 2px; margin: .35rem auto 0; border-radius: 2px; background: var(--fitcore-accent); }
.fitcore-rh-cheer.is-out { opacity: 0; transition: opacity .6s ease; }
button.fitcore-rh-core.rh-tap { animation: fitcore-rh-tap .3s ease; }
@keyframes fitcore-rh-sweep { 0% { transform: rotate(0deg); opacity: 0; } 12% { opacity: 1; } 80% { opacity: .9; } 100% { transform: rotate(360deg); opacity: 0; } }
@keyframes fitcore-rh-ping { from { transform: scale(1); opacity: .55; } to { transform: scale(1.42); opacity: 0; } }
@keyframes fitcore-rh-tick-fade { 0%, 62% { opacity: 1; } 100% { opacity: 0; } }
@keyframes fitcore-rh-draw { to { stroke-dashoffset: 0; } }
@keyframes fitcore-rh-cheer-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes fitcore-rh-tap { 0% { transform: scale(1); } 45% { transform: scale(.95); } 100% { transform: scale(1); } }
@keyframes fitcore-rh-breathe { 0% { box-shadow: 0 0 0 0 rgba(255, 226, 76, .28); } 70% { box-shadow: 0 0 0 14px rgba(255, 226, 76, 0); } 100% { box-shadow: 0 0 0 0 rgba(255, 226, 76, 0); } }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-rh-ring:not(.fitcore-rh-ring--done) { animation: fitcore-rh-breathe 3s ease-out infinite; }
}
@media (prefers-reduced-motion: reduce) {
	.fitcore-rh-glint, .fitcore-rh-ping, .fitcore-rh-tick, .fitcore-rh-cheer, button.fitcore-rh-core.rh-tap { animation: none; }
	.fitcore-rh-ring.rh-fill { transition: none; }
}

/* Calm motion layer. Later keyframes with the same name win, so this quietens every existing use in one place:
   no overshoot or bounce, no wiggle, no endless looping shine, and the emoji/rainbow confetti becomes soft gold motes. */
@keyframes fitcore-pop { from { opacity: 0; transform: translateY(6px) scale(.985); } to { opacity: 1; transform: none; } }
@keyframes fitcore-rank-stamp { from { transform: rotate(45deg) scale(.92); opacity: 0; } to { transform: rotate(45deg) scale(1); opacity: 1; } }
@keyframes fitcore-rank-shimmer { from, to { background-position: 0% 50%; } }
@keyframes fitcore-flame-flicker { 0%, 100% { transform: none; opacity: 1; } 50% { transform: none; opacity: .88; } }
@keyframes fitcore-chest-wiggle { from, to { transform: none; } }
@keyframes fitcore-chest-shake { 0%, 100% { transform: none; } 50% { transform: translateY(-2px); } }
@keyframes fitcore-icon-wiggle { from, to { transform: none; } }
@keyframes fitcore-icon-glow { 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 226, 76, .14); } 50% { box-shadow: 0 0 0 5px rgba(255, 226, 76, 0); } }
@keyframes fitcore-crown-bob { from, to { transform: translateX(-50%) rotate(0deg); } }
@keyframes fitcore-story-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 107, 74, .28); transform: none; } 50% { box-shadow: 0 0 0 5px rgba(255, 107, 74, 0); transform: none; } }
@keyframes fitcore-bell-ring { 0%, 94%, 100% { transform: none; } 96.5% { transform: rotate(-6deg); } 98.5% { transform: rotate(5deg); } }
/* Emoji confetti (log saved, mystery box opened) becomes a few soft gold motes drifting up. */
.fitcore-confetti { font-size: 0; width: .45rem; height: .45rem; border-radius: 50%; background: var(--fitcore-accent); box-shadow: 0 0 10px rgba(255, 226, 76, .5); animation: fitcore-sparkle .95s cubic-bezier(.22, 1, .36, 1) forwards; }
@keyframes fitcore-sparkle { 0% { transform: translate(0, 0) scale(.6); opacity: 0; } 20% { opacity: .9; } 100% { transform: translate(calc(var(--fitcore-confetti-x) * .5), -46px) scale(1); opacity: 0; } }
/* Full-screen streak confetti becomes a slow drift of tiny gold motes (half as many). */
.fitcore-confetti-piece { width: 4px; height: 4px; border-radius: 50%; background: rgba(255, 226, 76, .8); }
.fitcore-confetti-piece:nth-child(even) { display: none; }
@media (prefers-reduced-motion: no-preference) {
	.fitcore-confetti-piece { animation-duration: 4.5s; animation-timing-function: ease-out; }
}
@keyframes fitcore-confetti-fall { 0% { transform: translateY(0); opacity: 0; } 15% { opacity: .8; } 100% { transform: translateY(70vh); opacity: 0; } }

/* Calm cards: quieter mystery-box tiers, icons instead of emoji on the Champion and Gym-iversary cards. */
.fitcore-mystery-stamp { transform: none; }
svg.fitcore-mystery-chest-icon { width: 1.1rem; height: 1.1rem; color: var(--fitcore-accent); flex-shrink: 0; }
.fitcore-mystery-reveal--a .fitcore-mystery-stamp { background: rgba(255, 226, 76, .18); color: var(--fitcore-accent); }
.fitcore-mystery-reveal--s { background: rgba(255, 226, 76, .1); border: 1.5px solid rgba(255, 226, 76, .45); }
.fitcore-mystery-reveal--s .fitcore-mystery-stamp { background: rgba(255, 226, 76, .2); color: var(--fitcore-accent); }
.fitcore-mystery-reveal--s .fitcore-mystery-message { color: #fff; }

.fitcore-milestone-number svg { width: 3.2rem; height: 3.2rem; color: var(--fitcore-accent); }

/* Champion of the day: one quiet row in the same language as the ring hub tiles. */
.fitcore-champ2 { padding: .8rem .9rem; }
.fitcore-champ2-row { display: flex; align-items: center; gap: .7rem; }
.fitcore-champ2-av { flex: 0 0 2.5rem; height: 2.5rem; border-radius: 50%; background: var(--fitcore-ink); color: var(--fitcore-accent); display: flex; align-items: center; justify-content: center; font-weight: 800; font-family: var(--fitcore-font-display); }
.fitcore-champ2--empty .fitcore-champ2-av { background: var(--fitcore-tint); color: #5d6b66; }
.fitcore-champ2-main { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.fitcore-champ2-main small, .fitcore-champ2-main span { font-size: .8125rem; color: #5d6b66; }
.fitcore-champ2-main small { font-size: .75rem; }
.fitcore-champ2-main b { font-size: 1.0625rem; font-weight: 800; }
.fitcore-champ2-act { flex-shrink: 0; font-size: .8125rem; font-weight: 700; color: var(--fitcore-ink); text-decoration: none; padding: .4rem .75rem; border-radius: 99px; background: var(--fitcore-tint); }
.fitcore-champ2-bar { height: 4px; border-radius: 99px; background: var(--fitcore-tint); margin: .65rem 0 .4rem; overflow: hidden; }
.fitcore-champ2-bar i { display: block; height: 100%; width: calc(var(--p) * 100%); background: var(--fitcore-ink); border-radius: 99px; }
.fitcore-champ2-msg { margin: .55rem 0 0; font-size: .8125rem; }
.fitcore-champ2-bar + .fitcore-champ2-msg { margin-top: 0; }
.fitcore-champ2-extra { margin: .35rem 0 0; font-size: .75rem; color: #5d6b66; }

/* This week: classes as quiet rows (day and date, title with time and trainer, joined state). */
.fitcore-crows { display: flex; flex-direction: column; margin-top: .3rem; }
.fitcore-crow { appearance: none; border: 0; border-top: 1px solid var(--fitcore-tint); background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; width: 100%; display: flex; align-items: center; gap: .75rem; padding: .6rem 0; }
.fitcore-crow:first-child { border-top: 0; }
.fitcore-crow-when { flex: 0 0 3.1rem; display: flex; flex-direction: column; align-items: center; line-height: 1.1; padding: .3rem 0; border-radius: .75rem; }
.fitcore-crow-when small { font-size: .6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; color: #5d6b66; }
.fitcore-crow-when b { font-size: 1.125rem; font-weight: 800; }
.fitcore-crow--today .fitcore-crow-when { background: var(--fitcore-ink); color: var(--fitcore-accent); }
.fitcore-crow--today .fitcore-crow-when small { color: var(--fitcore-accent); }
.fitcore-crow-main { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.fitcore-crow-main b { font-size: .9375rem; }
.fitcore-crow-main small { font-size: .8125rem; color: #5d6b66; }
.fitcore-crow-state { flex-shrink: 0; font-size: .75rem; font-weight: 700; color: #1a7f37; display: inline-flex; align-items: center; gap: .25rem; }
.fitcore-crow-more summary { cursor: pointer; list-style: none; padding: .65rem 0 .1rem; border-top: 1px solid var(--fitcore-tint); font-size: .8125rem; font-weight: 700; }
.fitcore-crow-more summary::-webkit-details-marker { display: none; }

/* Card title icons: one consistent ratio. A 28px tinted badge holding a 16px glyph beside a 17px title (about 1.6x the
   text, so it supports the title instead of competing with it), vertically centred and the same on every card. */
.fitcore-plan-icon { width: 1.75rem; height: 1.75rem; }
.fitcore-plan-icon .fitcore-stat-icon { width: 16px; height: 16px; }
.fitcore-card h3 > svg.fitcore-plan-icon, .fitcore-hist-title > svg.fitcore-plan-icon {
	box-sizing: border-box; flex-shrink: 0; width: 1.75rem; height: 1.75rem; padding: .375rem;
	border-radius: 50%; background: rgba(255, 226, 76, .2); color: var(--fitcore-ink); stroke-width: 2;
}
.fitcore-card h3 { gap: .55rem; }

/* Combined Activity card (ring hub only) */
.fitcore-act-top { display: flex; align-items: flex-end; justify-content: space-between; gap: .75rem; }
.fitcore-act-n { font-size: 1.9rem; font-weight: 600; line-height: 1; color: var(--fitcore-ink); }
.fitcore-act-n small { font-size: .8rem; font-weight: 400; color: #6b7473; margin-left: .25rem; }
.fitcore-act-sub { font-size: .8rem; color: #6b7473; margin-top: .3rem; max-width: 8.5rem; line-height: 1.35; }
.fitcore-act-strip { display: flex; align-items: flex-end; gap: 4px; height: 50px; }
.fitcore-act-bar { display: block; width: 9px; padding: 0; border: 0; border-radius: 4px; background: #dfe2dd; flex: none; }
.fitcore-act-bar.is-on { background: #ffe24c; cursor: pointer; }
.fitcore-act-bar.is-today { background: #fff; box-shadow: inset 0 0 0 2px var(--fitcore-ink); }
.fitcore-act-bar.is-on.is-today { background: #ffe24c; }
.fitcore-act-days { display: flex; gap: 4px; margin-top: 4px; font-size: 10px; color: #9aa19f; }
.fitcore-act-days span { width: 9px; text-align: center; }
.fitcore-act-chip { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-top: .85rem; background: #f4f5f1; border-radius: 14px; padding: .45rem .45rem .45rem .8rem; font-size: .82rem; }
.fitcore-act-chip button { background: var(--fitcore-ink); color: #ffe24c; border: 0; border-radius: 999px; padding: .4rem .9rem; font-size: .82rem; font-weight: 500; cursor: pointer; }
.fitcore-act-seg { display: flex; background: #f4f5f1; border-radius: 999px; padding: 3px; margin-top: .85rem; }
.fitcore-act-seg button { flex: 1; border: 0; background: transparent; border-radius: 999px; padding: .45rem 0; font-size: .82rem; color: #6b7473; cursor: pointer; }
.fitcore-act-seg button.is-on { background: #fff; color: var(--fitcore-ink); font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, .08); }
.fitcore-act-pane { margin-top: .75rem; }
.fitcore-act-pane[hidden] { display: none; }
.fitcore-act-row { display: flex; align-items: center; gap: .65rem; padding: .55rem 0; border-top: 1px solid #eef0ec; font-size: .9rem; }
.fitcore-act-row:first-child { border-top: 0; }
.fitcore-act-row b { font-weight: 500; }
.fitcore-act-row > span:last-child { margin-left: auto; color: #6b7473; font-size: .8rem; }
.fitcore-act-d { width: 2.3rem; font-size: .68rem; color: #6b7473; line-height: 1.2; }
.fitcore-act-ghost { display: inline-block; margin-top: .6rem; border: 1px solid #d3d7d1; border-radius: 999px; padding: .4rem .9rem; font-size: .82rem; color: var(--fitcore-ink); text-decoration: none; }
.fitcore-act-full { margin-bottom: 1rem; }
.fitcore-act-full > summary { cursor: pointer; font-size: .85rem; color: #6b7473; padding: .3rem .25rem; text-decoration: underline; list-style: none; }
.fitcore-act-full > summary::-webkit-details-marker { display: none; }

/* Tabbed combo cards (Plan, Gym): flatten the inner cards so each pane reads as part of one card */
.fitcore-combo .fitcore-card { background: none; box-shadow: none; border-radius: 0; padding: 0; margin: 0; border: 0; }
.fitcore-combo .fitcore-card > h3:first-child, .fitcore-combo .fitcore-card > .fitcore-card-head { display: none; }
.fitcore-combo > .fitcore-champ2, .fitcore-combo > .fitcore-gymi2 { margin-bottom: .6rem; }
.fitcore-combo .fitcore-act-pane { margin-top: .6rem; }

/* What's New as a one-line ticker (ring hub only) */
.fitcore-tk-bar { display: flex; align-items: center; background: #fff; border-radius: 16px; margin: 0 0 1rem; }
.fitcore-tk-main { flex: 1; min-width: 0; display: flex; align-items: center; gap: .65rem; background: none; border: 0; padding: .6rem 0 .6rem .75rem; text-align: left; color: var(--fitcore-ink); font: inherit; cursor: pointer; }
.fitcore-tk-ic { position: relative; width: 28px; height: 28px; border-radius: 50%; background: rgba(255, 226, 76, .2); display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-tk-bell { width: 16px; height: 16px; }
.fitcore-tk-ic u { position: absolute; top: -2px; right: -2px; width: 9px; height: 9px; border-radius: 50%; background: #ffe24c; box-shadow: 0 0 0 2px #fff; }
.fitcore-tk-ic u[hidden] { display: none; }
.fitcore-tk-tx { min-width: 0; display: flex; flex-direction: column; }
.fitcore-tk-tx b { font-weight: 500; font-size: .92rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-tk-tx small { font-size: .7rem; color: #6b7473; }
.fitcore-tk-next { display: flex; align-items: center; gap: .15rem; background: none; border: 0; padding: .6rem .75rem; color: #6b7473; font: inherit; font-size: .75rem; cursor: pointer; flex: none; }
.fitcore-tk-next[hidden] { display: none; }

/* Calm white popup for announcements and day details (ring hub only) */
.fitcore-story-dialog--soft { background: #fff; color: var(--fitcore-ink); box-shadow: 0 8px 24px rgba(0, 0, 0, .12); }
.fitcore-story-dialog--soft::backdrop { background: rgba(6, 20, 20, .45); backdrop-filter: none; }
.fitcore-story-dialog--soft .fitcore-muted { color: #6b7473; }
.fitcore-story-dialog--soft .fitcore-story-body p { color: var(--fitcore-ink); }
.fitcore-story-dialog--soft .fitcore-story-body a { color: var(--fitcore-ink); text-decoration-color: rgba(6, 20, 20, .35); }
.fitcore-story-dialog--soft .fitcore-story-close { background: #f4f5f1; color: var(--fitcore-ink); }
.fitcore-story-dialog--soft .fitcore-announce-badge { background: #fff6c9; color: #6b5600; }
.fitcore-story-dialog--soft[open] { animation: none; }
.fitcore-tk-popnext { display: block; margin: 1rem 0 0 auto; background: none; border: 1px solid #d3d7d1; border-radius: 999px; padding: .4rem 1rem; font: inherit; font-size: .8rem; color: var(--fitcore-ink); cursor: pointer; }

/* Board tab in the ring hub: flat, calm podium (scoped, so the old layout keeps its look) */
.fitcore-combo .fitcore-podium-avatar { background: #f4f5f1; color: var(--fitcore-ink); }
.fitcore-combo .fitcore-podium-spot--1 .fitcore-podium-avatar { background: #ffe24c; box-shadow: 0 0 0 3px #fff, 0 0 0 4.5px var(--fitcore-ink); }
.fitcore-combo .fitcore-podium-spot--me .fitcore-podium-avatar { box-shadow: 0 0 0 3px #fff, 0 0 0 4.5px #ffe24c; }
.fitcore-combo .fitcore-podium-spot--me.fitcore-podium-spot--1 .fitcore-podium-avatar { box-shadow: 0 0 0 3px #fff, 0 0 0 4.5px var(--fitcore-ink); }
.fitcore-combo .fitcore-podium-spot--2 .fitcore-podium-avatar, .fitcore-combo .fitcore-podium-spot--3 .fitcore-podium-avatar, .fitcore-combo .fitcore-podium-spot--4 .fitcore-podium-avatar { filter: none; }
.fitcore-combo .fitcore-podium-name { font-weight: 500; }
.fitcore-combo .fitcore-podium-spot--me .fitcore-podium-name { color: var(--fitcore-ink); font-weight: 600; }
.fitcore-combo .fitcore-podium-tied { background: none; padding: 0; font-size: .625rem; font-weight: 400; text-transform: none; letter-spacing: 0; margin-top: -.2rem; }
.fitcore-combo .fitcore-podium-step { font-family: inherit; font-weight: 500; border-radius: .7rem .7rem 0 0; }
.fitcore-combo .fitcore-podium-spot--1 .fitcore-podium-step { background: #ffe24c; color: var(--fitcore-ink); }
.fitcore-combo .fitcore-podium-spot--2 .fitcore-podium-step, .fitcore-combo .fitcore-podium-spot--3 .fitcore-podium-step { background: #eceee9; color: var(--fitcore-ink); }
.fitcore-combo .fitcore-podium-rival { background: none; font-weight: 400; font-size: .8rem; color: #6b7473; padding: 0; margin-top: .6rem; }
@media (prefers-reduced-motion: no-preference) { .fitcore-combo .fitcore-podium-spot { animation: none; } }

/* Champion / Gym-iversary banner inside the Gym card: compact, keeps the full acknowledgement (ring hub only) */
.fitcore-combo > .fitcore-champ2 { padding: .6rem .7rem; background: #f4f5f1; border-radius: 14px; box-shadow: none; }
.fitcore-combo .fitcore-champ2-av { flex: 0 0 2rem; height: 2rem; font-size: .85rem; }
.fitcore-combo .fitcore-champ2-main { min-width: 0; }
.fitcore-combo .fitcore-champ2-main small { font-size: .7rem; }
.fitcore-combo .fitcore-champ2-main b { font-size: .95rem; font-weight: 600; }
.fitcore-combo .fitcore-champ2-main span { font-size: .75rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-combo .fitcore-champ2-long { display: inline; }
.fitcore-combo .fitcore-champ2-act { padding: .3rem .7rem; background: #fff; font-weight: 500; }
.fitcore-combo .fitcore-champ2-bar { background: #e3e6e0; margin: .5rem 0 .3rem; }
.fitcore-combo .fitcore-champ2-msg { margin: .3rem 0 0; font-size: .75rem; color: #4d5a56; }
.fitcore-combo .fitcore-champ2-extra { margin: .25rem 0 0; font-size: .72rem; color: #6b7473; }

/* Refined champion banner: recognition chips, nudge beside progress, quiet record caption */
.fitcore-combo .fitcore-champ2-who { margin: 0; display: flex; align-items: baseline; gap: .4rem; min-width: 0; }
.fitcore-combo .fitcore-champ2-who span { font-size: .75rem; color: #6b7473; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-combo .fitcore-champ2-chips { display: flex; gap: .4rem; margin-top: .55rem; overflow-x: auto; scrollbar-width: none; }
.fitcore-combo .fitcore-champ2-chip { flex: none; background: #fff; border-radius: 99px; padding: .22rem .65rem; font-size: .72rem; color: #4d5a56; display: inline-flex; gap: .3rem; align-items: baseline; }
.fitcore-combo .fitcore-champ2-chip i { font-style: normal; color: #6b7473; }
.fitcore-combo .fitcore-champ2-chip b { font-weight: 500; color: var(--fitcore-ink); }
.fitcore-combo .fitcore-champ2-nudge { display: flex; align-items: center; gap: .65rem; margin-top: .55rem; }
.fitcore-combo .fitcore-champ2-nudge > span { flex: none; font-size: .75rem; color: #4d5a56; max-width: 70%; }
.fitcore-combo .fitcore-champ2-nudge .fitcore-champ2-bar { display: block; flex: 1; margin: 0; }
.fitcore-combo .fitcore-champ2-rec { margin: .45rem 0 0; font-size: .7rem; color: #6b7473; }
.fitcore-combo .fitcore-champ2--empty .fitcore-champ2-main > span { white-space: normal; }
.fitcore-combo .fitcore-champ2-who { flex-wrap: wrap; column-gap: .45rem; }
.fitcore-combo .fitcore-champ2-who b { white-space: nowrap; }
.fitcore-combo .fitcore-champ2-chips { flex-wrap: wrap; overflow: visible; }

/* Programs tab (ring hub): ring, up next, week pills; white plan sheet with day chips */
.fitcore-prs { display: flex; flex-direction: column; gap: .6rem; }
.fitcore-pr { border: 1px solid #eef0ec; border-radius: 16px; padding: .75rem; }
.fitcore-pr-top { display: flex; align-items: center; gap: .75rem; width: 100%; background: none; border: 0; padding: 0; font: inherit; color: var(--fitcore-ink); text-align: left; cursor: pointer; }
.fitcore-pr-ring { position: relative; width: 46px; height: 46px; flex: none; display: flex; align-items: center; justify-content: center; }
.fitcore-pr-ring svg { position: absolute; inset: 0; width: 46px; height: 46px; transform: rotate(-90deg); }
.fitcore-pr-ring b { position: relative; font-size: .8rem; font-weight: 500; }
.fitcore-pr-ring--none { border-radius: 50%; background: #f4f5f1; }
.fitcore-pr-ring--none svg { position: static; width: 20px; height: 20px; transform: none; }
.fitcore-pr-tt { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fitcore-pr-tt b { font-size: .95rem; font-weight: 500; }
.fitcore-pr-tt small { font-size: .75rem; color: #6b7473; }
.fitcore-pr-arrow { width: 16px; height: 16px; color: #6b7473; transform: rotate(-90deg); flex: none; }
.fitcore-pr-up { margin-top: .6rem; background: #f4f5f1; border-radius: 12px; padding: .5rem .65rem; display: flex; align-items: center; gap: .6rem; font-size: .8rem; }
.fitcore-pr-up > span { min-width: 0; display: flex; flex-direction: column; }
.fitcore-pr-up small { font-size: .68rem; color: #6b7473; }
.fitcore-pr-up b { font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-pr-up button { margin-left: auto; flex: none; background: var(--fitcore-ink); color: #ffe24c; border: 0; border-radius: 99px; padding: .3rem .8rem; font: inherit; font-size: .78rem; cursor: pointer; }
.fitcore-pr-pills { display: flex; align-items: center; gap: .3rem; margin-top: .55rem; font-size: .7rem; color: #6b7473; }
.fitcore-pr-pills i { width: 18px; height: 6px; border-radius: 3px; background: #e3e6e0; display: block; }
.fitcore-pr-pills i.on { background: #ffe24c; }
.fitcore-pr-pills span { margin-left: .25rem; }
.fitcore-pd .fitcore-pd-sub { font-size: .75rem; color: #6b7473; margin-top: .1rem; }
.fitcore-pd-days { display: flex; gap: .4rem; margin: .8rem 0 .3rem; }
.fitcore-pd-days button { flex: 1; border: 0; border-radius: 99px; padding: .4rem 0; background: #f4f5f1; color: #6b7473; font: inherit; font-size: .78rem; cursor: pointer; }
.fitcore-pd-days button.is-on { background: var(--fitcore-ink); color: #ffe24c; }
.fitcore-pd .fitcore-plan-day { margin: 0; }
.fitcore-pd .fitcore-plan-day[hidden] { display: none; }
.fitcore-pd .fitcore-plan-exercise label { color: var(--fitcore-ink); padding: .6rem 0; border-top: 1px solid #eef0ec; font-size: .9rem; gap: .65rem; }
.fitcore-pd .fitcore-plan-exercise:first-child label { border-top: 0; }
.fitcore-pd .fitcore-plan-exercise input[type="checkbox"] { appearance: none; -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid #c8ccc5; background: #fff; margin: 0; display: grid; place-content: center; }
.fitcore-pd .fitcore-plan-exercise input[type="checkbox"]:checked { background: #ffe24c; border-color: #ffe24c; }
.fitcore-pd .fitcore-plan-exercise input[type="checkbox"]:checked::after { content: ""; width: 5px; height: 9px; border: solid var(--fitcore-ink); border-width: 0 2px 2px 0; transform: rotate(45deg) translate(-1px, -1px); }
.fitcore-pd .fitcore-plan-exercise em { margin-left: auto; font-style: normal; font-size: .75rem; color: #6b7473; }
.fitcore-pd .fitcore-plan-exercise.is-checked label { color: #9aa19f; text-decoration: none; }
.fitcore-pd .fitcore-plan-exercise.is-checked .fitcore-pd-name { text-decoration: line-through; }
.fitcore-pd-prog { display: flex; align-items: center; gap: .6rem; margin-top: .5rem; font-size: .75rem; color: #6b7473; }
.fitcore-pd-prog > div { flex: 1; height: 4px; background: #e3e6e0; border-radius: 2px; }
.fitcore-pd-prog i { display: block; height: 4px; background: var(--fitcore-ink); border-radius: 2px; }

/* "Add details" sheet and the Activity nudge buttons (ring hub only) */
.fitcore-act-chip-btns { display: flex; gap: .4rem; flex: none; }
.fitcore-act-chip button.fitcore-act-chip-alt { background: #fff; color: var(--fitcore-ink); }
.fitcore-sheet-link { background: none; border: 0; padding: 0; font: inherit; color: inherit; text-decoration: underline; cursor: pointer; }
.fitcore-dt .fitcore-field { margin-top: .8rem; }
.fitcore-dt .fitcore-field > label { display: block; font-size: .75rem; color: #6b7473; margin-bottom: .25rem; }
.fitcore-dt .fitcore-field small { font-weight: 400; }
.fitcore-dt input[type="text"], .fitcore-dt input[type="number"], .fitcore-dt input[type="date"], .fitcore-dt textarea {
	width: 100%; box-sizing: border-box; background: #f4f5f1; border: 0; border-radius: 12px; padding: .6rem .75rem; font: inherit; font-size: .9rem; color: var(--fitcore-ink);
}
.fitcore-dt .fitcore-dt-dates { display: flex; gap: .4rem; align-items: center; flex-wrap: wrap; }
.fitcore-dt .fitcore-dt-dates input[type="date"] { width: auto; flex: 1; min-width: 8rem; }
.fitcore-dt .fitcore-quickpick { border: 0; border-radius: 99px; padding: .45rem .9rem; background: #f4f5f1; color: #6b7473; font: inherit; font-size: .8rem; cursor: pointer; }
.fitcore-dt .fitcore-quickpick.is-active { background: var(--fitcore-ink); color: #ffe24c; }
.fitcore-dt-actions { display: flex; gap: .5rem; margin-top: 1.1rem; }
.fitcore-dt-actions .fitcore-button { flex: 1; border-radius: 99px; background: #ffe24c; color: var(--fitcore-ink); font-weight: 500; }
.fitcore-dt-actions .fitcore-dt-cancel { background: none; border: 1px solid #d3d7d1; border-radius: 99px; padding: .6rem 1rem; font: inherit; color: var(--fitcore-ink); cursor: pointer; }
.fitcore-dt .fitcore-pd-sub { font-size: .75rem; color: #6b7473; margin-top: .1rem; }
.fitcore-story-dialog.fitcore-dt .fitcore-field input[type="text"], .fitcore-story-dialog.fitcore-dt .fitcore-field input[type="number"], .fitcore-story-dialog.fitcore-dt .fitcore-field input[type="date"], .fitcore-story-dialog.fitcore-dt .fitcore-field textarea {
	background: #f4f5f1; border: 0; box-shadow: none; border-radius: 12px; color: var(--fitcore-ink);
}
.fitcore-story-dialog.fitcore-dt .fitcore-field textarea { resize: none; }
.fitcore-act-chip > span:first-child { min-width: 0; }
.fitcore-story-dialog.fitcore-dt textarea.fitcore-soft-textarea { background: #f4f5f1; border: 0; }

/* Wins list and calm Invite (ring hub, Gym card) */
.fitcore-wins { display: flex; flex-direction: column; }
.fitcore-win { display: flex; align-items: center; gap: .65rem; padding: .55rem 0; border-top: 1px solid #eef0ec; font-size: .9rem; }
.fitcore-win:first-child { border-top: 0; }
.fitcore-win b { font-weight: 500; min-width: 0; }
.fitcore-win-ic { width: 30px; height: 30px; border-radius: 50%; background: rgba(255, 226, 76, .25); display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-win-svg { width: 16px; height: 16px; color: var(--fitcore-ink); }
.fitcore-win-dt { margin-left: auto; font-size: .75rem; color: #6b7473; flex: none; }
.fitcore-wins-more { background: none; border: 0; padding: .4rem 0 0; font: inherit; font-size: .8rem; color: var(--fitcore-ink); text-decoration: underline; cursor: pointer; }
.fitcore-wins--all { margin-top: .6rem; max-height: 60vh; overflow-y: auto; }
.fitcore-referral--calm p { font-size: .8rem; color: #6b7473; margin: 0 0 .65rem; line-height: 1.4; }
.fitcore-referral--calm .fitcore-referral-row { display: flex; gap: .5rem; align-items: center; }
.fitcore-referral--calm .fitcore-referral-link { flex: 1; min-width: 0; background: #f4f5f1; border: 0; box-shadow: none; border-radius: 12px; padding: .6rem .75rem; font: inherit; font-size: .8rem; color: #4d5a56; }
.fitcore-referral--calm .fitcore-referral-copy { flex: none; min-width: 76px; background: var(--fitcore-ink); color: #ffe24c; border: 0; border-radius: 99px; padding: .5rem 1rem; font: inherit; font-size: .8rem; font-weight: 500; cursor: pointer; }
.fitcore-referral--calm small { display: block; margin-top: .5rem; font-size: .7rem; color: #6b7473; }

/* Hero refinements (ring hub): no page title, tighter stage, status inside the ring, calm week dots */
article:has(.fitcore-rh) > .fitcore-page-title { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.fitcore-rh-stage { height: 12rem; }
.fitcore-rh-ring { top: 50%; }
.fitcore-rh-core-icon { width: 2rem; height: 2rem; }
.fitcore-rh-core em { font-style: normal; font-size: .7rem; color: var(--fitcore-accent); line-height: 1.2; margin-top: .15rem; }
.fitcore-rh-badge--presence { top: .1rem; }
.fitcore-rh .fitcore-week-dot--missed { opacity: 1; text-decoration: none; background: rgba(255, 255, 255, .06); color: rgba(255, 255, 255, .4); }

/* Ring hub: acknowledgement after a logged workout (replaces the surprise box) */
.fitcore-rh-ack { margin-top: .7rem; background: rgba(255, 255, 255, .07); border-radius: 14px; padding: .6rem .85rem; display: flex; flex-direction: column; gap: .1rem; }
.fitcore-rh-ack b { font-size: .9rem; font-weight: 500; color: #fff; }
.fitcore-rh-ack span { font-size: .8rem; color: rgba(255, 255, 255, .7); line-height: 1.35; }

/* Ring hub top bar: avatar button and floating menu panel */
body:has(#fitcore-menu) .navbar-toggler, body:has(#fitcore-menu) .navbar-collapse { display: none !important; }
.fitcore-avatar { width: 32px; height: 32px; border-radius: 50%; border: 0; background: #ffe24c; color: #061414; font: inherit; font-size: .85rem; font-weight: 600; cursor: pointer; flex: none; margin-left: .25rem; }
.fitcore-menu[hidden] { display: none; }
/* "You" sheet (ring hub) */
.fitcore-menu-backdrop { position: fixed; inset: 0; z-index: 405; background: rgba(6, 20, 20, 0); transition: background .2s ease; }
.fitcore-menu.is-open .fitcore-menu-backdrop { background: rgba(6, 20, 20, .5); }
.fitcore-menu-panel {
	position: fixed; z-index: 410; left: 50%; bottom: 0; width: min(30rem, 100vw); box-sizing: border-box; max-height: 92vh; overflow-y: auto;
	background: #f7f8f4; color: var(--fitcore-ink); border-radius: 24px 24px 0 0; padding: .5rem 1rem calc(1rem + env(safe-area-inset-bottom));
	transform: translate(-50%, 100%); transition: transform .22s ease; font-family: var(--fitcore-font);
}
.fitcore-menu.is-open .fitcore-menu-panel { transform: translate(-50%, 0); }
.fitcore-you-grab { width: 36px; height: 4px; border-radius: 2px; background: #d3d7d1; margin: 0 auto .8rem; }
.fitcore-you-id { display: flex; align-items: center; gap: .75rem; }
.fitcore-you-ring { position: relative; width: 56px; height: 56px; flex: none; }
.fitcore-you-ring svg { width: 56px; height: 56px; transform: rotate(-90deg); }
.fitcore-you-ring > span { position: absolute; inset: 7px; border-radius: 50%; background: #ffe24c; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 1.1rem; }
.fitcore-you-name b { display: block; font-size: 1.05rem; font-weight: 500; }
.fitcore-you-name small, .fitcore-you-q small, .fitcore-you-win small { display: block; font-size: .72rem; font-weight: 400; color: #6b7473; }
.fitcore-you-x { margin-left: auto; width: 32px; height: 32px; border-radius: 50%; border: 0; background: #e9ebe6; display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--fitcore-ink); flex: none; }
.fitcore-you-qsvg { width: 16px; height: 16px; }
.fitcore-you-stats { display: flex; gap: .5rem; margin-top: .9rem; }
.fitcore-you-st { flex: 1; background: #fff; border-radius: 14px; padding: .55rem .5rem; text-align: center; }
.fitcore-you-st b { display: block; font-size: 1.1rem; font-weight: 500; }
.fitcore-you-st small { font-size: .7rem; color: #6b7473; }
.fitcore-you-mem { margin-top: .65rem; background: #061414; color: #fff; border-radius: 18px; padding: .75rem .9rem; }
.fitcore-you-memt { display: flex; justify-content: space-between; align-items: baseline; gap: .5rem; }
.fitcore-you-memt b { font-weight: 500; font-size: .95rem; }
.fitcore-you-memt span { font-size: .75rem; color: #9fb0ad; }
.fitcore-you-bar { height: 5px; border-radius: 3px; background: #243433; margin: .65rem 0 .5rem; }
.fitcore-you-bar i { display: block; height: 100%; border-radius: 3px; background: #ffe24c; }
.fitcore-you-mem small { display: block; font-size: .75rem; color: #9fb0ad; margin-top: .4rem; }
.fitcore-you-mem.is-soon small, .fitcore-you-mem.is-soon .fitcore-you-memt span { color: #ffe24c; }
.fitcore-you-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; margin-top: .65rem; }
.fitcore-you-q { display: flex; flex-direction: column; align-items: flex-start; gap: .4rem; background: #fff; border: 0; border-radius: 16px; padding: .7rem; font: inherit; font-size: .85rem; color: inherit; text-align: left; cursor: pointer; }
.fitcore-you-qic { width: 32px; height: 32px; border-radius: 50%; background: rgba(255, 226, 76, .25); display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-you-win { display: flex; align-items: center; gap: .65rem; margin-top: .65rem; background: #fff; border-radius: 16px; padding: .6rem .75rem; font-size: .85rem; }
.fitcore-you-win em { margin-left: auto; font-style: normal; font-size: .75rem; color: #6b7473; }
.fitcore-you-links { display: flex; flex-direction: column; margin-top: .6rem; }
.fitcore-you-link { display: flex; align-items: center; justify-content: center; gap: .5rem; padding: .65rem; font-size: .85rem; color: #4d5a56; text-decoration: none; }
.fitcore-you-out { color: #6b7473; }

/* Ring hub top bar: light, scrolls with the page; gym mark, streak chip, soft bell, avatar with week ring */
body:has(#fitcore-menu) .navbar { background: transparent; position: static; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none; border: 0; padding-top: .7rem; padding-bottom: .2rem; }
body:has(#fitcore-menu) .navbar .container { flex-wrap: nowrap; gap: .5rem; }
body:has(#fitcore-menu) .navbar-brand { display: flex; align-items: center; gap: .6rem; margin: 0; padding: 0; flex: 1; min-width: 0; color: #061414; font-size: 1rem; }
.fitcore-hb-mark { width: 34px; height: 34px; border-radius: 50%; background: #061414; color: #ffe24c; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: .95rem; flex: none; }
.fitcore-hb-name { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.fitcore-hb-name b { font-size: .95rem; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-hb-name small { font-size: .7rem; font-weight: 400; color: #6b7473; display: flex; align-items: center; gap: .3rem; font-family: var(--fitcore-font, inherit); }
.fitcore-hb-name small u { width: 6px; height: 6px; border-radius: 50%; background: #2f9e5b; display: block; }
.fitcore-hb-chip { display: inline-flex; align-items: center; gap: .25rem; background: #fff; color: #061414; border-radius: 99px; padding: .3rem .65rem; font-size: .75rem; font-weight: 500; flex: none; }
body:has(#fitcore-menu) .fitcore-header-bell { margin: 0; padding: 0; width: 36px; height: 36px; border-radius: 50%; background: #fff; color: #061414; display: inline-flex; align-items: center; justify-content: center; flex: none; }
body:has(#fitcore-menu) .fitcore-header-bell .fitcore-plan-icon { width: 18px; height: 18px; background: none; padding: 0; color: #061414; }
body:has(#fitcore-menu) .fitcore-header-bell.is-ringing .fitcore-plan-icon { animation: none; }
body:has(#fitcore-menu) .fitcore-header-bell .fitcore-notify-badge { font-size: 0; min-width: 0; width: 9px; height: 9px; padding: 0; top: 7px; right: 8px; background: #ffe24c; box-shadow: 0 0 0 2px #fff; border-radius: 50%; }
.fitcore-avatar { position: relative; width: 36px; height: 36px; padding: 0; margin: 0; border-radius: 50%; border: 0; background: none; color: #061414; cursor: pointer; flex: none; }
.fitcore-avatar svg { position: absolute; inset: 0; width: 36px; height: 36px; transform: rotate(-90deg); }
.fitcore-avatar span { position: absolute; inset: 4px; border-radius: 50%; background: #ffe24c; display: flex; align-items: center; justify-content: center; font: inherit; font-size: .8rem; font-weight: 600; }

/* Inbox */
.fitcore-ib-group { margin-top: .8rem; }
.fitcore-ib-group > p { margin: 0 0 .35rem .15rem; font-size: .72rem; color: #6b7473; }
.fitcore-ib-it { display: flex; align-items: center; gap: .65rem; width: 100%; box-sizing: border-box; background: #f4f5f1; border: 0; border-radius: 14px; padding: .6rem .7rem; margin-bottom: .4rem; font: inherit; text-align: left; color: var(--fitcore-ink); cursor: pointer; }
.fitcore-ib-it--win { cursor: default; }
.fitcore-ib-it b { display: block; font-weight: 500; font-size: .9rem; }
.fitcore-ib-it small { display: block; font-size: .75rem; color: #6b7473; }
.fitcore-ib-ic { width: 32px; height: 32px; border-radius: 50%; background: rgba(255, 226, 76, .3); display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-ib-svg { width: 16px; height: 16px; }
.fitcore-ib-dot { margin-left: auto; width: 8px; height: 8px; border-radius: 50%; background: #ffe24c; box-shadow: inset 0 0 0 1px #d9bd1f; flex: none; }
.fitcore-ib-it.is-read { opacity: .72; }
.fitcore-ib-it.is-read .fitcore-ib-dot, .fitcore-ib-it--win .fitcore-ib-dot { display: none; }
.fitcore-ib-group[hidden], .fitcore-ib-empty[hidden] { display: none; }
.fitcore-ib-empty { text-align: center; color: #6b7473; font-size: .85rem; margin: 1rem 0 .3rem; }

/* Your rhythm */
.fitcore-rhy-h { margin: 1rem 0 .4rem; font-size: .75rem; color: #6b7473; }
.fitcore-rhy-times, .fitcore-rhy-days { display: flex; gap: .4rem; }
.fitcore-rhy button[data-r-time], .fitcore-rhy button[data-r-day] { flex: 1; border: 0; background: #f4f5f1; color: #6b7473; font: inherit; font-size: .85rem; cursor: pointer; padding: .5rem 0; border-radius: 99px; }
.fitcore-rhy button[data-r-day] { height: 36px; padding: 0; border-radius: 50%; font-size: .78rem; }
.fitcore-rhy button.is-on[data-r-time] { background: #061414; color: #ffe24c; }
.fitcore-rhy button.is-on[data-r-day] { background: #ffe24c; color: #061414; font-weight: 500; }
.fitcore-rhy-prev { display: flex; gap: .65rem; align-items: center; background: #f4f5f1; border-radius: 14px; padding: .6rem .75rem; font-size: .85rem; }
.fitcore-rhy-prev small { display: block; font-size: .75rem; color: #6b7473; }
.fitcore-rhy-ic { width: 18px; height: 18px; flex: none; }
.fitcore-rhy-rest { display: flex; align-items: center; justify-content: space-between; gap: .75rem; width: 100%; box-sizing: border-box; margin-top: .8rem; background: #f4f5f1; border: 0; border-radius: 14px; padding: .7rem .75rem; font: inherit; font-size: .9rem; color: var(--fitcore-ink); text-align: left; cursor: pointer; }
.fitcore-rhy-rest small { display: block; font-size: .72rem; color: #6b7473; }
.fitcore-rhy-sw { position: relative; width: 42px; height: 24px; border-radius: 12px; background: #d3d7d1; flex: none; transition: background .15s ease; }
.fitcore-rhy-sw::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; transition: transform .15s ease; }
.fitcore-rhy-rest.is-on .fitcore-rhy-sw { background: #061414; }
.fitcore-rhy-rest.is-on .fitcore-rhy-sw::after { transform: translateX(18px); background: #ffe24c; }
.fitcore-rhy-status { display: flex; align-items: center; gap: .4rem; margin: .8rem 0 0; font-size: .75rem; color: #6b7473; }
.fitcore-rhy-status u { width: 7px; height: 7px; border-radius: 50%; background: #c8ccc5; display: block; }
.fitcore-rhy-status.is-ok { color: #2f7a3d; }
.fitcore-rhy-status.is-ok u { background: #2f9e5b; }
.fitcore-rhy-status button { margin-left: auto; border: 1px solid #d3d7d1; background: none; border-radius: 99px; padding: .2rem .7rem; font: inherit; font-size: .75rem; color: var(--fitcore-ink); cursor: pointer; }
.fitcore-rhy-status button[hidden] { display: none; }
.fitcore-rhy-saved { min-height: 1em; margin: .3rem 0 0; font-size: .72rem; color: #6b7473; text-align: right; }
body:has(#fitcore-menu) .navbar-brand .fitcore-hb-name b { color: #061414; }
body:has(#fitcore-menu) .navbar-brand .fitcore-hb-name small { color: #6b7473; }
.fitcore-rhy .fitcore-pd-sub { font-size: .75rem; color: #6b7473; margin-top: .1rem; }
.fitcore-ib h3, .fitcore-rhy h3 { margin-bottom: 0; }
.fitcore-you-grid > .fitcore-you-q:last-child:nth-child(odd) { grid-column: 1 / -1; flex-direction: row; align-items: center; gap: .65rem; }

/* Ring hub: floating dock instead of the full-width tab strip */
@media (max-width: 899px) {
	.fitcore-tabbar.fitcore-dock {
		display: flex; align-items: center; justify-content: space-between; grid-template-columns: none;
		left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom)); padding: 7px; border-radius: 30px;
		background: #061414; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: 0 10px 24px rgba(6, 20, 20, .28);
		transition: transform .28s ease;
	}
	.fitcore-tabbar.fitcore-dock.is-hidden { transform: translateY(calc(100% + 28px)); }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk {
		position: relative; flex-direction: row; justify-content: center; align-items: center; gap: 6px; height: 44px; min-width: 44px; padding: 0 12px;
		border-radius: 22px; color: #9fb0ad; font-size: .8rem; font-weight: 500; transition: background .25s ease, color .25s ease;
	}
	.fitcore-dk-l { max-width: 0; overflow: hidden; white-space: nowrap; transition: max-width .25s ease; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk.is-active { background: #ffe24c; color: #061414; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk.is-active .fitcore-dk-l { max-width: 72px; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk:hover { color: #9fb0ad; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk.is-active:hover { color: #061414; }
	.fitcore-dk-dot { position: absolute; top: 8px; right: 9px; width: 7px; height: 7px; border-radius: 50%; background: #ffe24c; box-shadow: 0 0 0 2px #061414; }
	.fitcore-dk-dot[hidden] { display: none; }
	.fitcore-dk.is-active .fitcore-dk-dot { display: none; }
	.fitcore-dock #fitcore-notify-badge-tab { display: none !important; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk-centre { position: relative; width: 52px; height: 52px; flex: none; padding: 0; margin: 0; border-radius: 50%; background: none; color: #061414; }
	.fitcore-dk-centre svg:not(.fitcore-dk-icon) { position: absolute; inset: 0; width: 52px; height: 52px; transform: rotate(-90deg); }
	.fitcore-dk-centre > span { position: absolute; inset: 5px; border-radius: 50%; background: #ffe24c; display: flex; align-items: center; justify-content: center; }
	.fitcore-dk-icon { width: 22px; height: 22px; color: #061414; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk-centre:active { transform: scale(.95); }
	body:has(.fitcore-dock) .fitcore-app { padding-bottom: 6.5rem; }
}
@media (prefers-reduced-motion: reduce) {
	.fitcore-tabbar.fitcore-dock, .fitcore-tabbar.fitcore-dock a.fitcore-dk, .fitcore-dk-l { transition: none; }
}

/* Dock round 2: gliding pill, labelled centre button, floating main action, long-press menu, done note */
@media (max-width: 899px) {
	.fitcore-tabbar.fitcore-dock { position: fixed; }
	.fitcore-dk-pill { position: absolute; top: 7px; height: 44px; left: 0; width: 44px; border-radius: 22px; background: #ffe24c; opacity: 0; z-index: 0; transition: left .32s cubic-bezier(.3, 1.25, .5, 1), width .32s ease, opacity .2s ease; pointer-events: none; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk { z-index: 1; background: none !important; transition: color .2s ease; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk.is-active { color: #061414; background: none !important; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk .fitcore-dk-l { transition: none; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk-centre { position: relative; z-index: 1; width: 60px; height: 44px; flex: none; padding: 0; margin: 0; border-radius: 0; background: none; color: #061414; display: block; -webkit-touch-callout: none; user-select: none; -webkit-user-select: none; touch-action: manipulation; }
	.fitcore-dk-ring { position: absolute; left: 4px; top: -26px; width: 52px; height: 52px; display: block; }
	.fitcore-dk-ring > svg { position: absolute; inset: 0; width: 52px; height: 52px; transform: rotate(-90deg); }
	.fitcore-dk-ring > span { position: absolute; inset: 5px; border-radius: 50%; background: #ffe24c; display: flex; align-items: center; justify-content: center; }
	.fitcore-dk-centre.is-done .fitcore-dk-ring > span { background: #2a3a30; }
	.fitcore-dk-centre.is-done .fitcore-dk-icon { color: #ffe24c; }
	.fitcore-dk-cap { position: absolute; left: -6px; right: -6px; bottom: -1px; text-align: center; font-size: .62rem; font-weight: 500; color: #ffe24c; line-height: 1; white-space: nowrap; }
	.fitcore-dk-float { position: fixed; z-index: 149; right: 16px; bottom: calc(16px + env(safe-area-inset-bottom)); width: 52px; height: 52px; border-radius: 50%; background: #ffe24c; display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 18px rgba(6, 20, 20, .3); opacity: 0; transform: translateY(14px) scale(.9); pointer-events: none; transition: opacity .25s ease, transform .25s ease; -webkit-touch-callout: none; user-select: none; -webkit-user-select: none; }
	.fitcore-dk-float.is-done { background: #2a3a30; }
	.fitcore-dk-float.is-done .fitcore-dk-icon { color: #ffe24c; }
	.fitcore-dock.is-hidden ~ .fitcore-dk-float { opacity: 1; transform: none; pointer-events: auto; }
	.fitcore-dk-menu { position: fixed; z-index: 160; width: 200px; background: #fff; border-radius: 18px; padding: 5px; box-shadow: 0 8px 24px rgba(0, 0, 0, .18); }
	.fitcore-dk-menu[hidden], .fitcore-dk-toast[hidden] { display: none; }
	.fitcore-dk-mi { display: flex; align-items: center; gap: .65rem; width: 100%; box-sizing: border-box; padding: .65rem; border: 0; background: none; font: inherit; font-size: .88rem; color: #061414; text-align: left; border-radius: 12px; cursor: pointer; }
	.fitcore-dk-mi + .fitcore-dk-mi { border-top: 1px solid #f0f2ee; border-radius: 0 0 12px 12px; }
	.fitcore-dk-mi.is-off { color: #6b7473; cursor: default; }
	.fitcore-dk-mic { width: 18px; height: 18px; color: #4d5a56; flex: none; }
	.fitcore-dk-toast { position: fixed; z-index: 160; left: 50%; transform: translateX(-50%); bottom: calc(96px + env(safe-area-inset-bottom)); background: #061414; color: #fff; font-size: .8rem; padding: .55rem .9rem; border-radius: 99px; white-space: nowrap; box-shadow: 0 6px 16px rgba(6, 20, 20, .25); }
}
@media (prefers-reduced-motion: reduce) { .fitcore-dk-pill, .fitcore-dk-float { transition: none; } }
@media (max-width: 899px) {
	.fitcore-tabbar.fitcore-dock a.fitcore-dk-centre > .fitcore-dk-ring { position: absolute; inset: auto; left: 4px; top: -26px; width: 52px; height: 52px; border-radius: 0; background: none; display: block; }
}
@media (max-width: 899px) {
	.fitcore-dk-menu p { margin: .35rem .65rem .25rem; font-size: .78rem; color: #6b7473; }
	.fitcore-dk-menu { width: 220px; }
}

/* The floating action and the done card belong to the phone dock only */
.fitcore-dk-float, .fitcore-dk-menu, .fitcore-dk-toast { display: none; }
@media (max-width: 899px) {
	.fitcore-dk-float { display: flex; }
	.fitcore-dk-menu { display: block; }
}

/* Simplified chrome: plain avatar, one bottom-sheet style for every soft dialog */
.fitcore-avatar { background: #ffe24c; color: #061414; font: inherit; font-size: .8rem; font-weight: 600; }
dialog.fitcore-story-dialog--soft[open] {
	position: fixed; inset: auto 0 0 0; margin: 0 auto; width: min(30rem, 100vw); max-width: 100vw; max-height: 92vh; overflow-y: auto; box-sizing: border-box;
	border-radius: 24px 24px 0 0; padding: .6rem 1rem calc(1rem + env(safe-area-inset-bottom)); animation: fitcore-sheet-up .22s ease both;
}
.fitcore-story-dialog--soft::before { content: ""; display: block; width: 36px; height: 4px; border-radius: 2px; background: #d3d7d1; margin: 0 auto .7rem; }
@keyframes fitcore-sheet-up { from { transform: translateY(36px); opacity: .6; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { dialog.fitcore-story-dialog--soft[open] { animation: none; } }
.fitcore-ib-rem { margin-top: .6rem; }

/* The weight chart keeps its own dark card inside the Train card */
.fitcore-combo .fitcore-card.fitcore-progress-card { background: var(--fitcore-ink); color: #fff; border-radius: 1.25rem; padding: 1rem 1.1rem; margin: .5rem 0 .9rem; box-shadow: none; }

/* Balanced icon-only dock: five equal slots (Home, Train, centre action, Gym, You) */
.fitcore-avatar { display: none; }
@media (max-width: 899px) {
	.fitcore-tabbar.fitcore-dock { display: grid; grid-template-columns: 1fr 1fr 1.3fr 1fr 1fr; align-items: center; justify-items: center; padding: 7px 10px; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk { width: 44px; height: 44px; min-width: 0; padding: 0; border-radius: 50%; gap: 0; justify-content: center; }
	.fitcore-dk-pill { border-radius: 50%; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk-centre { width: 60px; height: 44px; }
	.fitcore-dk-ring { top: -22px; }
	.fitcore-tabbar.fitcore-dock a.fitcore-dk-centre > .fitcore-dk-ring { top: -22px; }
	.fitcore-dk-cap { display: none; }
	.fitcore-dk-you { position: relative; z-index: 1; width: 44px; height: 44px; padding: 0; border: 0; border-radius: 50%; background: none; display: flex; align-items: center; justify-content: center; cursor: pointer; }
	.fitcore-dk-you span { width: 30px; height: 30px; border-radius: 50%; background: #ffe24c; color: #061414; font-weight: 600; font-size: .8rem; display: flex; align-items: center; justify-content: center; }
}
@media (min-width: 900px) { .fitcore-dk-you { display: none; } }

/* Avatar stays in the top bar; the bell moves into the dock (Updates) */
.fitcore-avatar { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; padding: 0; border: 0; border-radius: 50%; flex: none; cursor: pointer; }
body:has(#fitcore-menu) .fitcore-header-bell { display: none; }
@media (max-width: 899px) {
	.fitcore-dk-bell { color: #9fb0ad; }
	.fitcore-dk-bell .fitcore-tab-icon { width: 20px; height: 20px; }
	.fitcore-dock .fitcore-dk-bell #fitcore-notify-badge-tab { display: none !important; }
	.fitcore-dock .fitcore-dk-bell #fitcore-notify-badge-tab:not([hidden]) { display: block !important; position: absolute; top: 9px; right: 10px; width: 9px; height: 9px; min-width: 0; padding: 0; font-size: 0; border-radius: 50%; background: #ffe24c; box-shadow: 0 0 0 2px #061414; }
}

/* Bell and initial both live in the top bar; the dock is three slots (Train, centre action, Gym) */
body:has(#fitcore-menu) .fitcore-header-bell { display: inline-flex; }
@media (max-width: 899px) {
	.fitcore-tabbar.fitcore-dock.fitcore-dock--3 { grid-template-columns: 1fr 1.3fr 1fr; left: 50%; right: auto; width: min(270px, calc(100vw - 24px)); transform: translateX(-50%); }
}
.fitcore-sheet-usual { margin: -.2rem 0 .6rem; font-size: .78rem; color: #6b7473; }

/* Workout history (ring hub): month hero, dot calendar, muscle bar, day sheet */
.fitcore-hh-hero { display: flex; justify-content: space-between; align-items: flex-end; gap: .5rem; }
.fitcore-hh-big { font-size: 2.1rem; font-weight: 500; line-height: 1; }
.fitcore-hh-big small { font-size: .85rem; font-weight: 400; color: #6b7473; margin-left: .3rem; }
.fitcore-hh-sub { font-size: .78rem; color: #6b7473; margin-top: .35rem; }
.fitcore-hh-pager { display: flex; gap: .4rem; align-items: center; font-size: .82rem; font-weight: 500; }
.fitcore-hh-pg { width: 28px; height: 28px; border-radius: 50%; border: 0; background: #f4f5f1; color: #4d5a56; font-size: .95rem; cursor: pointer; padding: 0; line-height: 1; }
.fitcore-hh-pg:disabled { opacity: .35; cursor: default; }
.fitcore-hh-bar { height: 6px; border-radius: 3px; background: #eceee9; margin: .8rem 0 .6rem; overflow: hidden; }
.fitcore-hh-bar i { display: block; height: 100%; background: #ffe24c; border-radius: 3px; }
.fitcore-hh-chips { display: flex; gap: .4rem; flex-wrap: wrap; }
.fitcore-hh-chips span { background: #f4f5f1; border-radius: 99px; padding: .3rem .65rem; font-size: .75rem; color: #4d5a56; }
.fitcore-hh-chips b { font-weight: 500; color: #061414; }
.fitcore-hh-cal { margin-top: .9rem; }
.fitcore-hh-dow, .fitcore-hh-wk { display: grid; grid-template-columns: 1fr 64px; align-items: center; gap: 3px; }
.fitcore-hh-dow { font-size: .62rem; color: #9aa19f; margin-bottom: .25rem; }
.fitcore-hh-dow { grid-template-columns: repeat(7, 1fr) 64px; text-align: center; }
.fitcore-hh-wk { margin-bottom: 3px; }
.fitcore-hh-days { position: relative; display: grid; grid-template-columns: repeat(7, 1fr); }
.fitcore-hh-run { position: absolute; top: 3px; height: 28px; border-radius: 14px; background: #fff0a8; z-index: 0; }
.fitcore-hh-d { position: relative; z-index: 1; height: 34px; display: flex; align-items: center; justify-content: center; font-size: .75rem; color: #6b7473; background: none; border: 0; padding: 0; font-family: inherit; }
.fitcore-hh-d > span { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.fitcore-hh-d.is-future { color: #c3c8c1; }
.fitcore-hh-d.is-today > span { box-shadow: 0 0 0 2px #061414; }
.fitcore-hh-d--hit { cursor: pointer; color: #061414; font-weight: 500; }
.fitcore-hh-d.l1 > span { background: #fff0a8; }
.fitcore-hh-d.l2 > span { background: #ffe24c; }
.fitcore-hh-d.l3 > span { background: #e8c800; }
.fitcore-hh-tot { font-size: .62rem; color: #6b7473; text-align: right; padding-right: .25rem; white-space: nowrap; }
.fitcore-hh-bal { margin-top: .9rem; }
.fitcore-hh-balbar { display: flex; gap: 2px; height: 10px; border-radius: 5px; overflow: hidden; }
.fitcore-hh-balbar i { display: block; height: 10px; }
.fitcore-hh-leg { display: flex; flex-wrap: wrap; gap: .25rem .75rem; margin-top: .5rem; font-size: .72rem; color: #6b7473; }
.fitcore-hh-leg span::before { content: ""; display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: .3rem; background: var(--c); }
.fitcore-hh-ins { margin-top: .6rem; background: #f4f5f1; border-radius: 14px; padding: .55rem .75rem; font-size: .78rem; color: #4d5a56; }
.fitcore-hhs h3 { margin: 0 0 .5rem; font-weight: 500; }
.fitcore-hhs-s { background: #fff; border-radius: 16px; padding: .65rem .8rem; margin-bottom: .4rem; }
.fitcore-hhs-s b { font-weight: 500; font-size: .92rem; display: flex; align-items: center; }
.fitcore-hhs-s b i { width: 8px; height: 8px; border-radius: 50%; margin-right: .5rem; flex: none; }
.fitcore-hhs-s small { display: block; font-size: .75rem; color: #6b7473; margin-top: .15rem; }
.fitcore-hhs-again { display: block; width: 100%; margin-top: .6rem; background: #061414; color: #ffe24c; border: 0; border-radius: 99px; padding: .7rem 0; font: inherit; font-size: .9rem; font-weight: 500; cursor: pointer; }
.fitcore-hhs-s { background: #f4f5f1; }
.fitcore-hh-tot { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.2; }
.fitcore-hh-tot b { font-weight: 500; color: #4d5a56; }
.fitcore-hh-tot i { font-style: normal; color: #9aa19f; }
.fitcore-hh-dow { grid-template-columns: repeat(7, 1fr); }
.fitcore-hh-wk { grid-template-columns: 1fr; }

/* History month ring */
.fitcore-hh-top { display: flex; align-items: center; gap: .9rem; }
.fitcore-hh-ringw { position: relative; width: 118px; height: 118px; flex: none; }
.fitcore-hh-ringw svg { width: 118px; height: 118px; transform: rotate(-90deg); }
.fitcore-hh-ringw circle { fill: none; stroke-width: 13; transition: opacity .25s ease, stroke-width .25s ease; }
.fitcore-hh-arc { cursor: pointer; }
.fitcore-hh-mid { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; pointer-events: none; }
.fitcore-hh-mid b { font-size: 1.9rem; font-weight: 500; line-height: 1; }
.fitcore-hh-mid small { font-size: .7rem; color: #6b7473; margin-top: .15rem; }
.fitcore-hh-side { flex: 1; min-width: 0; }
.fitcore-hh-pager { display: flex; align-items: center; justify-content: space-between; font-size: .95rem; font-weight: 500; }
.fitcore-hh-pager > span:last-child { display: inline-flex; gap: .25rem; }
.fitcore-hh-st { display: flex; flex-direction: column; gap: .1rem; margin-top: .55rem; font-size: .82rem; color: #4d5a56; }
.fitcore-hh-st b { font-weight: 500; color: #061414; }
.fitcore-hh-leg { display: flex; flex-wrap: wrap; gap: .3rem .5rem; margin-top: .8rem; }
.fitcore-hh-leg button { border: 0; background: none; padding: .2rem .55rem .2rem .3rem; font: inherit; font-size: .75rem; color: #6b7473; display: inline-flex; align-items: center; gap: .35rem; border-radius: 99px; cursor: pointer; }
.fitcore-hh-leg button i { width: 9px; height: 9px; border-radius: 50%; display: block; }
.fitcore-hh-leg button.on { background: #f4f5f1; color: #061414; }
.fitcore-hh-d > span { transition: box-shadow .25s ease, opacity .25s ease, transform .25s ease; }
.fitcore-hh-d--hit.dim > span { opacity: .3; }
.fitcore-hh-d--hit.glow > span { box-shadow: 0 0 0 2px var(--c, #061414); transform: scale(1.08); }
.fitcore-hh-cal { margin-top: .6rem; }

/* Install card (ring hub) and its steps sheet */
.fitcore-hi { display: flex; align-items: center; gap: .7rem; background: #fff; border-radius: 18px; padding: .6rem .6rem .6rem .7rem; margin-bottom: 1rem; }
.fitcore-hi[hidden] { display: none; }
.fitcore-hi-ic { width: 44px; height: 44px; border-radius: 12px; flex: none; }
.fitcore-hi-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.fitcore-hi-tx b { font-size: .9rem; font-weight: 500; }
.fitcore-hi-tx small { font-size: .75rem; color: #6b7473; }
.fitcore-hi-go { flex: none; background: #061414; color: #ffe24c; border: 0; border-radius: 99px; padding: .45rem 1rem; font: inherit; font-size: .82rem; font-weight: 500; cursor: pointer; }
.fitcore-hi-x { flex: none; width: 30px; height: 30px; border-radius: 50%; border: 0; background: #f4f5f1; color: #4d5a56; display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.fitcore-his-steps { margin: .9rem 0 .2rem; padding-left: 1.2rem; font-size: .9rem; line-height: 1.5; color: #061414; }
.fitcore-his-steps li { margin-bottom: .45rem; }
.fitcore-his-steps a { color: #061414; font-weight: 500; }
.fitcore-his .fitcore-pd-sub { font-size: .75rem; color: #6b7473; margin-top: .1rem; }
.fitcore-his h3 { margin-bottom: 0; }

/* Weekly recap (ring hub): Home card and the dark story */
.fitcore-rc-card { display: flex; align-items: center; gap: .75rem; width: 100%; box-sizing: border-box; background: #fff; border: 0; border-radius: 18px; padding: .65rem .7rem; margin-bottom: 1rem; font: inherit; text-align: left; color: var(--fitcore-ink); cursor: pointer; }
.fitcore-rc-card[hidden] { display: none; }
.fitcore-rc-ic { width: 44px; height: 44px; border-radius: 12px; background: #000; display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-rc-svg { width: 22px; height: 22px; color: #ffe24c; }
.fitcore-rc-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.fitcore-rc-tx b { font-size: .92rem; font-weight: 500; }
.fitcore-rc-tx small { font-size: .75rem; color: #6b7473; }
.fitcore-rc-go { flex: none; background: #061414; color: #ffe24c; border-radius: 99px; padding: .4rem .9rem; font-size: .82rem; font-weight: 500; }
dialog.fitcore-rc { position: fixed; inset: 0; margin: 0; width: 100%; max-width: none; height: 100%; max-height: none; border: 0; padding: 0; background: #061414; color: #fff; overflow: hidden; border-radius: 0; }
dialog.fitcore-rc::backdrop { background: #061414; }
.fitcore-rc-in { position: relative; width: min(30rem, 100%); height: 100%; margin: 0 auto; }
.fitcore-rc-bars { position: absolute; top: calc(12px + env(safe-area-inset-top)); left: 16px; right: 16px; display: flex; gap: 4px; z-index: 3; }
.fitcore-rc-bars i { flex: 1; height: 3px; border-radius: 2px; background: #243433; overflow: hidden; display: block; }
.fitcore-rc-bars i b { display: block; height: 3px; width: 0; background: #ffe24c; }
.fitcore-rc-bars i.d b { width: 100%; }
.fitcore-rc-bars i.a b { animation: fitcore-rc-fill 5.2s linear forwards; }
@keyframes fitcore-rc-fill { to { width: 100%; } }
.fitcore-rc-x { position: absolute; top: calc(24px + env(safe-area-inset-top)); right: 14px; z-index: 4; width: 32px; height: 32px; border-radius: 50%; border: 0; background: #17292a; color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.fitcore-rc-tap { position: absolute; top: 70px; bottom: 0; z-index: 2; cursor: pointer; }
.fitcore-rc-tap--l { left: 0; width: 40%; }
.fitcore-rc-tap--r { right: 0; width: 60%; }
.fitcore-rc-sl { position: absolute; inset: 0; padding: calc(70px + env(safe-area-inset-top)) 24px calc(28px + env(safe-area-inset-bottom)); display: none; flex-direction: column; }
.fitcore-rc-sl.on { display: flex; animation: fitcore-rc-in .35s ease; }
@keyframes fitcore-rc-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.fitcore-rc-k { font-size: .78rem; color: #9fb0ad; }
.fitcore-rc-huge { font-size: 4.8rem; font-weight: 500; line-height: 1; margin: .5rem 0 .15rem; }
.fitcore-rc-cap { font-size: 1rem; color: #cfd8d6; }
.fitcore-rc-cmp { align-self: flex-start; margin-top: .8rem; background: #17292a; border-radius: 99px; padding: .4rem .8rem; font-size: .78rem; color: #ffe24c; }
.fitcore-rc-wd { display: flex; gap: .4rem; margin-top: auto; }
.fitcore-rc-wd span { flex: 1; text-align: center; }
.fitcore-rc-wd i { display: flex; width: 100%; aspect-ratio: 1; border-radius: 50%; background: #17292a; align-items: center; justify-content: center; font-style: normal; font-size: .82rem; color: #7d908d; }
.fitcore-rc-wd span.on i { background: #ffe24c; color: #061414; }
.fitcore-rc-ln { display: flex; flex-direction: column; gap: .9rem; margin-top: 1.3rem; }
.fitcore-rc-ln div { display: flex; justify-content: space-between; align-items: baseline; border-bottom: 1px solid #17292a; padding-bottom: .65rem; }
.fitcore-rc-ln b { font-size: 1.75rem; font-weight: 500; }
.fitcore-rc-ln span { font-size: .82rem; color: #9fb0ad; }
.fitcore-rc-mb { display: flex; height: 14px; border-radius: 7px; overflow: hidden; gap: 2px; margin-top: 1.4rem; }
.fitcore-rc-mb i { display: block; height: 14px; }
.fitcore-rc-lg { display: flex; flex-wrap: wrap; gap: .35rem .8rem; margin-top: .65rem; font-size: .75rem; color: #9fb0ad; }
.fitcore-rc-lg span::before { content: ""; display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: .35rem; background: var(--c); }
.fitcore-rc-hl { margin-top: 1.5rem; background: #17292a; border-radius: 20px; padding: 1.1rem; }
.fitcore-rc-ti { width: 40px; height: 40px; border-radius: 50%; background: rgba(255, 226, 76, .2); display: flex; align-items: center; justify-content: center; margin-bottom: .8rem; }
.fitcore-rc-hl b { font-size: 1.4rem; font-weight: 500; display: block; line-height: 1.25; }
.fitcore-rc-hl small { font-size: .82rem; color: #9fb0ad; display: block; margin-top: .4rem; }
.fitcore-rc-note { font-size: 1.5rem; font-weight: 500; line-height: 1.3; margin-top: 1.4rem; }
.fitcore-rc-end { margin-top: auto; display: flex; flex-direction: column; gap: .6rem; position: relative; z-index: 3; }
.fitcore-rc-btn { border: 0; border-radius: 99px; padding: .85rem 0; font: inherit; font-size: .95rem; font-weight: 500; background: #17292a; color: #fff; cursor: pointer; }
.fitcore-rc-btn--p { background: #ffe24c; color: #061414; }
.fitcore-hh-recap { display: block; margin: .8rem 0 0; background: none; border: 0; padding: 0; font: inherit; font-size: .82rem; color: #061414; text-decoration: underline; cursor: pointer; }
@media (prefers-reduced-motion: reduce) { .fitcore-rc-sl.on { animation: none; } }

/* Daily share: camera with the stats panel over the picture */
dialog.fitcore-cam { position: fixed; inset: 0; margin: 0; width: 100%; max-width: none; height: 100%; max-height: none; border: 0; padding: 0; background: #000; overflow: hidden; border-radius: 0; color: #fff; }
dialog.fitcore-cam::backdrop { background: #000; }
.fitcore-cam-st { position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: min(100%, calc((100vh - 120px) * .5625)); width: min(100%, calc((100dvh - 120px) * .5625)); aspect-ratio: 9 / 16; background: #061414; overflow: hidden; }
.fitcore-cam-st video, .fitcore-cam-st img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.fitcore-cam-st [hidden] { display: none; }
/* focus ring on the close button looked like a stray circle */
.fitcore-cam-x:focus { outline: none; }
.fitcore-cam-x { position: absolute; top: calc(16px + env(safe-area-inset-top)); right: 16px; z-index: 3; width: 36px; height: 36px; border-radius: 50%; border: 0; background: rgba(6, 20, 20, .6); color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.fitcore-cam-bar { position: absolute; left: 0; right: 0; bottom: calc(24px + env(safe-area-inset-bottom)); z-index: 3; display: flex; align-items: center; justify-content: center; gap: 1.4rem; }
.fitcore-cam-bar[hidden] { display: none; }
.fitcore-cam-bar button { border: 0; background: rgba(6, 20, 20, .6); color: #fff; font: inherit; font-size: .85rem; border-radius: 99px; padding: .6rem 1rem; cursor: pointer; }
.fitcore-cam-bar .fitcore-cam-sh { width: 68px; height: 68px; padding: 0; background: #ffe24c; border: 4px solid #061414; box-shadow: 0 0 0 3px #ffe24c; }
.fitcore-cam-bar .fitcore-cam-pri { background: #ffe24c; color: #061414; font-weight: 500; padding: .7rem 2rem; }

/* check-in cheer replaces the "next small win" line for a moment, so nothing overlaps the ring */
.fitcore-rh-win.is-cheer { color: #fff; font-weight: 700; animation: fitcore-rh-cheer-in .5s .5s cubic-bezier(.22, 1, .36, 1) both; }

/* Top bar when the site has a horizontal logo (light artwork): it sits in an ink pill so it reads on the light page */
body:has(#fitcore-menu) .navbar-brand:has(img) { flex: 0 0 auto; margin-right: auto; background: #061414; border-radius: 99px; padding: .5rem 1rem; }
body:has(#fitcore-menu) .navbar-brand:has(img) .custom-logo { max-height: 26px; max-width: 150px; width: auto; height: auto; display: block; }
.fitcore-cam-note { position: absolute; left: 16px; right: 16px; bottom: calc(80px + env(safe-area-inset-bottom)); z-index: 3; margin: 0; text-align: center; font-size: .75rem; color: #cfd8d6; background: rgba(6, 20, 20, .75); border-radius: 12px; padding: .5rem .75rem; }
.fitcore-cam-note[hidden] { display: none; }

/* Staff hub (same launch switch as the member ring hub): light top bar, search first, one queue, three-slot dock */
body:has(.fitcore-sh) .navbar { background: transparent; position: static; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none; border: 0; padding-top: .7rem; padding-bottom: .2rem; }
body:has(.fitcore-sh) .navbar-brand { margin: 0; padding: .45rem 1rem; background: #061414; border-radius: 99px; display: inline-flex; color: #ffe24c !important; font-size: .9rem; }
body:has(.fitcore-sh) .navbar-brand .custom-logo { max-height: 26px; max-width: 150px; width: auto; height: auto; display: block; }
body:has(.fitcore-sh) .navbar-toggler { border-color: rgba(6, 20, 20, .25); background: #fff; border-radius: 99px; }
body:has(.fitcore-sh) .navbar-toggler-icon { filter: invert(1); }
body:has(.fitcore-sh) h1.fitcore-page-title, body:has(.fitcore-sh) .entry-title { display: none; }
.fitcore-sh { padding-bottom: 6rem; }
.fitcore-sh-find > .fitcore-card { background: transparent; box-shadow: none; padding: 0; margin-bottom: .6rem; }
.fitcore-sh-find h2 { display: none; }
.fitcore-sh-find .fitcore-inline { display: flex; gap: .4rem; margin: 0; }
.fitcore-sh-find input[type=search] { flex: 1; min-width: 0; border: 0; border-radius: 99px; background: #fff; padding: .8rem 1.1rem; font: inherit; font-size: .95rem; box-shadow: none; }
.fitcore-sh-find .fitcore-button { border-radius: 99px; background: #061414; color: #ffe24c; border: 0; padding: .7rem 1.1rem; }
.fitcore-sh-find .fitcore-find-list { background: #fff; border-radius: 22px; padding: .5rem 1rem; margin-top: .6rem; }
.fitcore-sh-hero { background: #061414; color: #fff; border-radius: 22px; padding: 1rem; margin-bottom: .7rem; }
.fitcore-sh-hero-top { display: flex; justify-content: space-between; align-items: center; }
.fitcore-sh-hero small { color: #9fb0ad; font-size: .78rem; }
.fitcore-sh-link { background: none; border: 0; color: #ffe24c; font: inherit; font-size: .8rem; padding: 0; cursor: pointer; }
.fitcore-sh-big { display: flex; align-items: baseline; gap: .5rem; margin-top: .35rem; }
.fitcore-sh-big b { font-size: 2.8rem; font-weight: 500; line-height: 1; }
.fitcore-sh-big span { color: #cfd8d6; }
.fitcore-sh-chips { display: flex; gap: .45rem; margin-top: .9rem; }
.fitcore-sh-chip { flex: 1; background: #17292a; border: 0; border-radius: 14px; padding: .55rem .2rem; color: #fff; font: inherit; text-align: center; cursor: pointer; }
.fitcore-sh-chip b { display: block; font-size: 1.1rem; font-weight: 500; }
.fitcore-sh-chip span { font-size: .7rem; color: #9fb0ad; }
.fitcore-sh-chip.is-on { background: #ffe24c; color: #061414; }
.fitcore-sh-chip.is-on span { color: #061414; }
.fitcore-sh-seg { display: flex; background: #f1f1ed; border-radius: 99px; padding: 4px; margin: .2rem 0 .8rem; }
.fitcore-sh-seg button { flex: 1; border: 0; background: none; border-radius: 99px; padding: .45rem 0; font: inherit; font-size: .82rem; color: #6b7473; cursor: pointer; }
.fitcore-sh-seg button.is-on { background: #fff; color: #061414; font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, .06); }
.fitcore-sh-pane[hidden], .fitcore-sh-mpane[hidden] { display: none; }
.fitcore-sh-att .fitcore-recruit-card, .fitcore-sh-att .fitcore-renew-row, .fitcore-sh-att .fitcore-atrisk-row { background: none; box-shadow: none; border-radius: 0; border-top: 1px solid #f0f0ec; padding-left: 0; padding-right: 0; }
.fitcore-sh-att .fitcore-recruits > :first-child, .fitcore-sh-att .fitcore-renew-list > :first-child, .fitcore-sh-att .fitcore-atrisk-list > :first-child { border-top: 0; }
.fitcore-sh-row { display: flex; align-items: center; gap: .7rem; width: 100%; background: none; border: 0; border-top: 1px solid #f0f0ec; padding: .65rem 0; font: inherit; color: inherit; text-align: left; cursor: pointer; }
.fitcore-sh-row:first-of-type { border-top: 0; }
.fitcore-sh-av { width: 36px; height: 36px; border-radius: 50%; background: #f3f1e4; display: flex; align-items: center; justify-content: center; font-weight: 500; font-size: .8rem; flex: none; }
.fitcore-sh-t { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fitcore-sh-t b { font-weight: 500; font-size: .9rem; }
.fitcore-sh-t small { color: #6b7473; font-size: .78rem; }
.fitcore-sh-btn { background: #f1f1ed; color: #061414; border-radius: 99px; padding: .4rem .9rem; font-size: .8rem; font-weight: 500; flex: none; }
.fitcore-sh-kpi { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; margin: .6rem 0 1rem; }
.fitcore-sh-kpi div { background: #f6f6f2; border-radius: 14px; padding: .7rem .8rem; }
.fitcore-sh-kpi b { display: block; font-size: 1.4rem; font-weight: 500; }
.fitcore-sh-kpi span { font-size: .75rem; color: #6b7473; }
.fitcore-sh-bars { display: flex; gap: 4px; align-items: flex-end; height: 70px; }
.fitcore-sh-bars i { flex: 1; background: #d9d9d2; border-radius: 3px; display: block; }
.fitcore-sh-bars i.is-last { background: #ffe24c; }
.fitcore-sh-cap { font-size: .78rem; color: #6b7473; text-align: center; margin: .4rem 0 1rem; }
.fitcore-sh-line { display: flex; justify-content: space-between; padding: .55rem 0; border-top: 1px solid #f0f0ec; font-size: .9rem; }
.fitcore-sh-line span { color: #6b7473; }
.fitcore-shs .fitcore-story-body h3 { margin-top: 0; }
.fitcore-shs .fitcore-story-body h4 { font-size: .9rem; font-weight: 500; margin: 1rem 0 .3rem; }
.fitcore-shs .fitcore-card { box-shadow: none; padding: 0; background: none; }
.fitcore-shs .fitcore-section-details > summary { display: none; }
.fitcore-sh-dock { position: fixed; left: 50%; bottom: calc(14px + env(safe-area-inset-bottom)); transform: translateX(-50%); z-index: 150; display: flex; align-items: center; gap: 2.2rem; background: #061414; border-radius: 99px; padding: .55rem 1.5rem; }
.fitcore-sh-dock a, .fitcore-sh-dock button { background: none; border: 0; padding: 0; color: #9fb0ad; display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; cursor: pointer; text-decoration: none; }
.fitcore-sh-dock .is-on { color: #ffe24c; }
.fitcore-sh-dock .fitcore-sh-dk { width: 22px; height: 22px; }
.fitcore-sh-dock .fitcore-sh-centre { width: 52px; height: 52px; margin-top: -26px; border-radius: 50%; background: #061414; padding: 5px; }
.fitcore-sh-dock .fitcore-sh-centre > span { width: 100%; height: 100%; border-radius: 50%; background: #ffe24c; color: #061414; display: flex; align-items: center; justify-content: center; }
@media (min-width: 900px) { .fitcore-sh { max-width: 640px; margin-left: auto; margin-right: auto; } }
.fitcore-sh-find > .fitcore-card { border: 0; }
.fitcore-sh-att .fitcore-button--ghost { background: #061414; color: #ffe24c; border: 0; border-radius: 99px; padding: .4rem .95rem; font-size: .8rem; }
.fitcore-sh-att .fitcore-button { border-radius: 99px; }
.fitcore-shs .fitcore-sh-mpane h3 { margin: 1rem 0 .4rem; font-size: 1rem; }
.fitcore-sh-all { display: block; margin: .5rem auto 0; background: none; border: 0; font: inherit; font-size: .82rem; color: #061414; text-decoration: underline; cursor: pointer; }
.fitcore-sh-filter { width: 100%; border: 0; border-radius: 99px; background: #f1f1ed; padding: .65rem 1rem; font: inherit; font-size: .9rem; margin: .4rem 0 .6rem; box-shadow: none; }
.fitcore-sh-row[hidden] { display: none; }

/* Who is in: live arrival strip + a grid of everyone, newest first */
.fitcore-sh-in h2 { display: flex; align-items: center; gap: .5rem; }
.fitcore-sh-live { display: inline-flex; align-items: center; gap: .3rem; font-size: .7rem; font-weight: 500; color: #2f7d4f; margin-left: auto; }
.fitcore-sh-live::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #2f9e5b; animation: fitcore-sh-pulse 2s ease-in-out infinite; }
.fitcore-sh-in h2 .fitcore-chip-pill { order: 3; }
@keyframes fitcore-sh-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.fitcore-sh-flow { margin: .2rem 0 .9rem; }
.fitcore-sh-bars2 { display: flex; gap: 3px; align-items: flex-end; height: 44px; }
.fitcore-sh-bars2 i { flex: 1; display: block; background: #e3e4dc; border-radius: 3px; min-width: 3px; }
.fitcore-sh-bars2 i.is-now { background: #ffe24c; }
.fitcore-sh-axis { display: flex; justify-content: space-between; font-size: .7rem; color: #6b7473; margin-top: .25rem; }
.fitcore-sh-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.fitcore-sh-pp { width: 40px; height: 40px; border-radius: 50%; border: 0; background: #f3f1e4; color: #061414; font: inherit; font-size: .78rem; font-weight: 500; display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; animation: fitcore-sh-pop .35s ease both; animation-delay: calc(var(--i, 0) * 25ms); }
.fitcore-sh-pp.is-new { background: #ffe24c; }
.fitcore-sh-pp--more { background: #061414; color: #ffe24c; }
@keyframes fitcore-sh-pop { from { opacity: 0; transform: scale(.8); } to { opacity: 1; transform: none; } }
.fitcore-sh-latest { margin: .8rem 0 0; font-size: .82rem; color: #6b7473; text-align: center; }
.fitcore-sh-latest b { color: #061414; font-weight: 500; }
@media (prefers-reduced-motion: reduce) { .fitcore-sh-pp, .fitcore-sh-live::before { animation: none; } }

/* Who is in v2: full names as pills, grouped by arrival hour */
.fitcore-sh-hours { display: flex; flex-direction: column; gap: .55rem; }
.fitcore-sh-hours[hidden] { display: none; }
.fitcore-sh-hours + .fitcore-sh-hours { margin-top: .55rem; }
.fitcore-sh-hr { display: flex; gap: .6rem; align-items: flex-start; }
.fitcore-sh-hr > span { flex: none; width: 3rem; padding-top: .35rem; font-size: .72rem; color: #6b7473; font-variant-numeric: tabular-nums; }
.fitcore-sh-hr > div { display: flex; flex-wrap: wrap; gap: 6px; min-width: 0; }
.fitcore-sh-nm { border: 0; background: #f3f1e4; color: #061414; border-radius: 99px; padding: .32rem .75rem; font: inherit; font-size: .82rem; cursor: pointer; line-height: 1.25; }
.fitcore-sh-nm.is-new { background: #ffe24c; font-weight: 500; }

/* Who is in v3: dense text flow, hour label with its count */
.fitcore-sh-hours { gap: .35rem; }
.fitcore-sh-hr > span { display: flex; flex-direction: column; width: 3rem; padding-top: .05rem; color: #061414; font-weight: 500; line-height: 1.2; }
.fitcore-sh-hr > span small { font-size: .68rem; font-weight: 400; color: #6b7473; }
.fitcore-sh-hr > div { display: block; line-height: 1.7; }
.fitcore-sh-nm { display: inline; background: none; border-radius: 6px; padding: .05rem .3rem; font-size: .84rem; }
.fitcore-sh-nm + .fitcore-sh-nm::before { content: "\00b7"; margin-right: .5rem; margin-left: -.1rem; color: #b9beb6; }
.fitcore-sh-nm.is-new { background: #ffe24c; font-weight: 500; }
.fitcore-sh-nm.is-new::before { display: none; }
/* v3b: compact pills instead of dot separators (no dot at the start of a wrapped line) */
.fitcore-sh-hr > div { display: flex; flex-wrap: wrap; gap: 4px; line-height: 1.2; }
.fitcore-sh-nm { display: inline-block; background: #f3f1e4; border-radius: 99px; padding: .22rem .6rem; font-size: .8rem; }
.fitcore-sh-nm + .fitcore-sh-nm::before { content: none; }
.fitcore-sh-nm.is-new { background: #ffe24c; }
.fitcore-sh-hr > span { padding-top: .2rem; }
.fitcore-sh-hours { gap: .45rem; }
.fitcore-sh-nm small { font-size: .68rem; color: #6b7473; margin-left: .2rem; font-variant-numeric: tabular-nums; }
.fitcore-sh-nm.is-new small { color: #5b4d00; }

/* Staff hub round 2: hero context, compact approve row, calmer zero states, compact search rows, two columns on wide screens */
.fitcore-sh-hh { display: flex; justify-content: space-between; align-items: flex-end; gap: .8rem; margin-top: .35rem; }
.fitcore-sh-hh .fitcore-sh-big { margin-top: 0; }
.fitcore-sh-vs { margin: .35rem 0 0; font-size: .78rem; color: #ffe24c; }
.fitcore-sh-vs:empty { display: none; }
.fitcore-sh-spark { flex: none; width: 112px; }
.fitcore-sh-spark > div { display: flex; gap: 4px; align-items: flex-end; height: 42px; }
.fitcore-sh-spark i { flex: 1; display: block; background: #2b4143; border-radius: 3px; }
.fitcore-sh-spark i.is-today { background: #ffe24c; }
.fitcore-sh-spark small { display: block; text-align: right; font-size: .68rem; color: #9fb0ad; margin-top: .25rem; }
.fitcore-sh-chip.is-zero, .fitcore-sh-seg button.is-zero { opacity: .45; }
.fitcore-sh-ap { display: flex; flex-wrap: wrap; align-items: center; gap: .55rem .7rem; padding: .3rem 0; }
.fitcore-sh-ap + .fitcore-sh-ap { border-top: 1px solid #f0f0ec; margin-top: .3rem; padding-top: .7rem; }
.fitcore-sh-ap .fitcore-sh-t { flex: 1; min-width: 0; }
.fitcore-sh-ap .fitcore-sh-t b a, .fitcore-sh-ap .fitcore-sh-t b button { font-weight: 500; }
.fitcore-sh-warn { color: #a32d2d !important; }
.fitcore-sh-apf { flex: 1 1 100%; display: flex; justify-content: flex-end; align-items: center; gap: .5rem; margin: 0; }
.fitcore-sh-apf select { border: 0; background: #f1f1ed; border-radius: 99px; padding: .45rem .9rem; font: inherit; font-size: .8rem; height: auto; width: auto; max-width: 9rem; }
.fitcore-sh-btn--ink { background: #061414; color: #ffe24c; border: 0; cursor: pointer; font: inherit; font-size: .8rem; font-weight: 500; }
.fitcore-sh-find .fitcore-find-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .1rem .6rem; padding: .65rem 0; border-top: 1px solid #f0f0ec; background: none; box-shadow: none; }
.fitcore-sh-find .fitcore-find-row:first-child { border-top: 0; }
.fitcore-sh-find .fitcore-find-main > span:nth-of-type(2) { display: none; }
.fitcore-sh-find .fitcore-find-act form { margin: 0; }
.fitcore-sh-find .fitcore-find-act .fitcore-button { border-radius: 99px; background: #061414; color: #ffe24c; border: 0; padding: .4rem .95rem; font-size: .8rem; }
.fitcore-sh-find .fitcore-find-act .fitcore-badge { background: #e4f3e8; color: #1d6b3a; border-radius: 99px; padding: .35rem .8rem; font-size: .78rem; font-weight: 500; text-transform: none; }
.fitcore-sh-find .fitcore-find-more { grid-column: 1 / -1; margin-top: .1rem; }
.fitcore-sh-find .fitcore-find-more > summary { font-size: .78rem; color: #6b7473; }
.fitcore-sh-cols { display: block; }
@media (min-width: 900px) {
	.fitcore-sh { max-width: 1040px; }
	.fitcore-sh-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1rem; align-items: start; }
}
.fitcore-sh-find .fitcore-find-main > strong { display: inline; font-size: .92rem; }
.fitcore-sh-find .fitcore-find-main > span:first-of-type { display: inline; margin-left: .4rem; font-size: .78rem; }
.fitcore-sh-find .fitcore-find-more > summary .fitcore-muted { display: none; }
.fitcore-sh-find .fitcore-find-row { row-gap: 0; padding: .55rem 0; }
.fitcore-sh-find .fitcore-find-more > summary { padding: .1rem 0; }
.fitcore-sh-find .fitcore-find-main { display: block; }
.fitcore-sh-find .fitcore-find-main > span:first-of-type { margin-left: .5rem; }
.fitcore-sh-live::before { animation: none; background: #b9beb6; }
.fitcore-sh-live { color: #6b7473; }

/* Staff top bar, kept in step with the member top bar: brand (logo pill or mark and name), soft bell, yellow initial */
body:has(.fitcore-sh) .navbar .container { flex-wrap: nowrap; gap: .5rem; }
body:has(.fitcore-sh) .navbar-toggler, body:has(.fitcore-sh) .navbar-collapse { display: none !important; }
body:has(.fitcore-sh) .navbar-brand { display: flex; align-items: center; gap: .6rem; margin: 0; padding: 0; flex: 1; min-width: 0; background: none; border-radius: 0; color: #061414 !important; font-size: 1rem; }
body:has(.fitcore-sh) .navbar-brand:has(img) { flex: 0 0 auto; margin-right: auto; background: #061414; border-radius: 99px; padding: .5rem 1rem; }
body:has(.fitcore-sh) .navbar-brand .fitcore-hb-name b { color: #061414; }
.fitcore-sh-bell { position: relative; width: 36px; height: 36px; border-radius: 50%; border: 0; background: #fff; color: #061414; display: inline-flex; align-items: center; justify-content: center; flex: none; padding: 0; cursor: pointer; }
.fitcore-sh-bell i { position: absolute; top: 7px; right: 8px; width: 9px; height: 9px; border-radius: 50%; background: #ffe24c; box-shadow: 0 0 0 2px #fff; }
.fitcore-sh-avatar { width: 36px; height: 36px; border-radius: 50%; border: 0; background: #ffe24c; color: #061414; font: inherit; font-size: .85rem; font-weight: 600; display: inline-flex; align-items: center; justify-content: center; flex: none; padding: 0; cursor: pointer; }
.fitcore-sh-me { display: flex; align-items: center; gap: .7rem; margin-bottom: .8rem; }
.fitcore-sh-me .fitcore-sh-av { width: 48px; height: 48px; background: #ffe24c; font-size: 1rem; }

/* Members list in the staff shell */
.fitcore-sh-mhead { display: flex; align-items: baseline; justify-content: space-between; margin: .3rem .2rem .6rem; }
.fitcore-sh-mhead h2 { margin: 0; font-size: 1.25rem; font-weight: 500; }
.fitcore-sh-link--dark { color: #061414; text-decoration: underline; }
.fitcore-sh-members .fitcore-members-controls { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0 0 .7rem; }
.fitcore-sh-members .fitcore-members-controls input[type=search] { flex: 1 1 100%; border: 0; border-radius: 99px; background: #fff; padding: .8rem 1.1rem; font: inherit; font-size: .95rem; box-shadow: none; }
.fitcore-sh-members .fitcore-members-controls select { border: 0; background: #fff; border-radius: 99px; padding: .5rem .9rem; font: inherit; font-size: .82rem; width: auto; height: auto; flex: 1; min-width: 0; }
.fitcore-sh-members .fitcore-members-controls .fitcore-button { border-radius: 99px; background: #061414; color: #ffe24c; border: 0; padding: .5rem 1.1rem; }
.fitcore-sh-mlist { padding: .3rem 1rem; }
.fitcore-sh-mrow { display: flex; align-items: center; gap: .7rem; width: 100%; background: none; border: 0; border-top: 1px solid #f0f0ec; padding: .65rem 0; font: inherit; color: inherit; text-align: left; cursor: pointer; }
.fitcore-sh-mrow:first-child { border-top: 0; }
.fitcore-sh-ms { display: flex; flex-direction: column; align-items: flex-end; gap: .15rem; flex: none; }
.fitcore-sh-ms i { font-style: normal; font-size: .72rem; font-weight: 500; border-radius: 99px; padding: .15rem .6rem; background: #e4f3e8; color: #1d6b3a; }
.fitcore-sh-ms i.is-expired, .fitcore-sh-ms i.is-suspended { background: #fbe9e7; color: #a32d2d; }
.fitcore-sh-ms i.is-pending { background: #fff6c9; color: #6b5600; }
.fitcore-sh-ms small { font-size: .72rem; color: #6b7473; }
body:has(.fitcore-sh-members) h1.entry-title, body:has(.fitcore-sh-members) .fitcore-page-title { display: none; }
a.fitcore-sh-chip { text-decoration: none; display: block; }

/* Logged-out pages in the app shell (ring hub): same light top bar, calm card, pill fields */
body:has(.fitcore-sh-auth) .navbar { background: transparent; position: static; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none; border: 0; padding-top: .7rem; padding-bottom: .2rem; }
body:has(.fitcore-sh-auth) .navbar .container { flex-wrap: nowrap; gap: .5rem; }
body:has(.fitcore-sh-auth) .navbar-toggler, body:has(.fitcore-sh-auth) .navbar-collapse { display: none !important; }
body:has(.fitcore-sh-auth) .navbar-brand { display: flex; align-items: center; gap: .6rem; margin: 0; padding: 0; flex: 1; min-width: 0; background: none; color: #061414 !important; font-size: 1rem; }
body:has(.fitcore-sh-auth) .navbar-brand:has(img) { flex: 0 0 auto; margin-right: auto; background: #061414; border-radius: 99px; padding: .5rem 1rem; }
body:has(.fitcore-sh-auth) .navbar-brand .fitcore-hb-name b { color: #061414; }
body:has(.fitcore-sh-auth):not(:has(.fitcore-sh-auth--titled)) h1.fitcore-page-title, body:has(.fitcore-sh-auth):not(:has(.fitcore-sh-auth--titled)) .entry-title { display: none; }
.fitcore-sh-cta { background: #061414; color: #ffe24c; border-radius: 99px; padding: .45rem 1rem; font-size: .85rem; font-weight: 500; text-decoration: none; flex: none; }
.fitcore-sh-auth .fitcore-card { border-radius: 22px; box-shadow: none; }
.fitcore-sh-auth .fitcore-card h2 { font-weight: 500; font-size: 1.3rem; }
.fitcore-sh-auth input[type=text], .fitcore-sh-auth input[type=email], .fitcore-sh-auth input[type=password], .fitcore-sh-auth input[type=tel], .fitcore-sh-auth select { border: 0; background: #f1f1ed; border-radius: 99px; padding: .8rem 1.1rem; font: inherit; box-shadow: none; }
.fitcore-sh-auth .fitcore-button, .fitcore-sh-auth button[type=submit] { border-radius: 99px; background: #061414; color: #ffe24c; border: 0; padding: .7rem 1.4rem; font-weight: 500; }
.fitcore-sh-auth .fitcore-form input[type=text], .fitcore-sh-auth .fitcore-form input[type=email], .fitcore-sh-auth .fitcore-form input[type=password], .fitcore-sh-auth .fitcore-form input[type=tel], .fitcore-sh-auth .fitcore-form input[type=number], .fitcore-sh-auth .fitcore-form select { border: 0; background: #f1f1ed; border-radius: 99px; padding: .8rem 1.1rem; box-shadow: none; }
.fitcore-sh-auth .fitcore-google-btn { border-radius: 99px; padding-top: .7rem; padding-bottom: .7rem; }

/* Front door and join (ring hub): one card, calm fields, steps on the waiting screen */
.fitcore-door .fitcore-card h2, .fitcore-join + * { margin-top: 0; }
.fitcore-door-email p, .fitcore-door-pw p, .fitcore-join p { margin: 0 0 .7rem; }
.fitcore-door input[type=email], .fitcore-door input[type=password], .fitcore-door input[type=text], .fitcore-join input[type=text], .fitcore-join input[type=tel], .fitcore-join input[type=email] { width: 100%; border: 0; background: #f1f1ed; border-radius: 99px; padding: .85rem 1.1rem; font: inherit; box-shadow: none; }
.fitcore-door .fitcore-button, .fitcore-join .fitcore-button { width: 100%; border-radius: 99px; background: #061414; color: #ffe24c; border: 0; padding: .8rem 1rem; font-weight: 500; }
.fitcore-door-who { display: flex; justify-content: space-between; align-items: center; gap: .6rem; font-size: .85rem; color: #6b7473; }
.fitcore-door-who a { color: #061414; text-decoration: underline; flex: none; }
.fitcore-door-field { position: relative; }
.fitcore-door-field input { padding-right: 3rem !important; }
.fitcore-door-eye { position: absolute; right: .35rem; top: 50%; transform: translateY(-50%); width: 36px; height: 36px; border: 0; background: none; color: #6b7473; display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.fitcore-door-eye-icon { width: 18px; height: 18px; }
.fitcore-door-link { margin: .2rem 0 0; }
.fitcore-door-alt { width: 100%; border: 1px solid #dcdcd6; background: none; border-radius: 99px; padding: .75rem 1rem; font: inherit; font-weight: 500; color: #061414; cursor: pointer; }
.fitcore-door-small { font-size: .78rem; color: #6b7473; text-align: center; margin: .8rem 0 0; }
.fitcore-door-small a { color: #6b7473; text-decoration: underline; }
.fitcore-door [hidden] { display: none; }
.fitcore-wait-steps { list-style: none; margin: 1rem 0; padding: 0; }
.fitcore-wait-steps li { display: flex; gap: .8rem; align-items: flex-start; position: relative; padding-bottom: 1rem; }
.fitcore-wait-steps li:not(:last-child)::before { content: ""; position: absolute; left: 12px; top: 26px; bottom: 0; width: 2px; background: #e6e6e0; }
.fitcore-wait-steps i { width: 26px; height: 26px; border-radius: 50%; background: #e6e6e0; color: #6b7473; display: flex; align-items: center; justify-content: center; font-style: normal; font-size: .75rem; flex: none; }
.fitcore-wait-steps .is-done i { background: #061414; color: #ffe24c; }
.fitcore-wait-steps .is-now i { background: #ffe24c; color: #061414; font-weight: 500; }
.fitcore-wait-tick { width: 14px; height: 14px; }
.fitcore-wait-steps b { display: block; font-weight: 500; font-size: .9rem; }
.fitcore-wait-steps span { font-size: .8rem; color: #6b7473; }
.fitcore-wait-tip { background: #f6f6f2; border-radius: 14px; padding: .7rem .9rem; font-size: .82rem; color: #4d5a56; margin: 0; }
.fitcore-sh-auth .fitcore-door .fitcore-door-alt { background: none; color: #061414; border: 1px solid #dcdcd6; font-weight: 500; }
.fitcore-sh-auth .fitcore-door .fitcore-door-link { margin: .2rem 0 0; }
.fitcore-door .fitcore-error, .fitcore-door .fitcore-notice { position: static; transform: none; margin: 0 0 .8rem; }
.fitcore-join { background: none; box-shadow: none; padding: 0; border-radius: 0; border: 0; margin: 0; }
/* the theme already wraps these pages in a card: keep one card, not a card inside a card */
.fitcore-card > .fitcore-sh-auth .fitcore-card { background: none; box-shadow: none; padding: 0; border-radius: 0; border: 0; margin: 0; }

/* Front door follows how this person usually signs in */
.fitcore-door[data-m="google"]:not([data-showpw]) .fitcore-door-pwform,
.fitcore-door[data-m="link"]:not([data-showpw]) .fitcore-door-pwform { display: none; }
.fitcore-door[data-m="google"]:not([data-showpw]) .fitcore-divider { display: none; }
.fitcore-door[data-m="link"]:not([data-showpw]) .fitcore-door-alt { background: #061414; color: #ffe24c; border-color: #061414; }
.fitcore-sh-auth .fitcore-door[data-m="link"]:not([data-showpw]) .fitcore-door-alt { background: #061414; color: #ffe24c; border-color: #061414; }
.fitcore-door .fitcore-door-usepw { display: none; background: none; border: 0; color: #6b7473; text-decoration: underline; font: inherit; font-size: .82rem; cursor: pointer; padding: 0; }
.fitcore-door[data-pw="1"]:not([data-m="password"]):not([data-showpw]) .fitcore-door-usepw { display: inline; }
.fitcore-sh-auth .fitcore-door .fitcore-door-usepw { background: none; color: #6b7473; padding: 0; border: 0; }
.fitcore-door[data-showpw] .fitcore-door-small:has([data-door-usepw]) { display: none; }

/* Hero status line: a line icon in our yellow instead of an emoji */
.fitcore-rh-id { display: flex; align-items: center; gap: .35rem; }
.fitcore-rh-id-icon { width: 14px; height: 14px; color: var(--fitcore-accent, #ffe24c); flex: none; }

/* Line-icon replacements for emoji */
.fitcore-sheet-face svg { display: block; }
.fitcore-sheet-face { display: inline-flex; align-items: center; justify-content: center; padding: .55rem .75rem; line-height: 0; }
.fitcore-push-logo { width: 40px; height: 40px; border-radius: 10px; flex: none; display: block; }
.fitcore-badge-svg { width: 13px; height: 13px; vertical-align: -2px; }
.fitcore-delta-ic { width: 10px; height: 10px; vertical-align: -1px; margin-right: 1px; stroke-width: 3; }

/* Phone: the floating dock's clearance lives under the footer, so there is no empty band between the last card and the copyright line */
@media (max-width: 899px) {
	body:has(.fitcore-dock) .fitcore-dashboard, body:has(.fitcore-sh-dock) .fitcore-dashboard, body:has(.fitcore-sh-dock) .fitcore-sh { padding-bottom: 0; }
	body:has(.fitcore-dock) footer, body:has(.fitcore-sh-dock) footer { padding-bottom: calc(5.5rem + env(safe-area-inset-bottom)); }
}

/* Tiles under the ring: icon badge, label, value, note on a calmer rhythm */
.fitcore-rh-tile { flex-direction: row; align-items: center; gap: .7rem; padding: .8rem .9rem; border-radius: 20px; }
.fitcore-rh-tic { width: 34px; height: 34px; border-radius: 50%; background: #f3f1e4; display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-rh-tic-svg { width: 17px; height: 17px; color: var(--fitcore-ink); }
.fitcore-rh-tx { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.fitcore-rh-tile .fitcore-rh-tx > small { font-size: .72rem; line-height: 1.2; color: #6b7473; letter-spacing: .01em; }
.fitcore-rh-tile .fitcore-rh-tx > small:first-child { text-transform: none; }
.fitcore-rh-tile b { font-size: 1.0625rem; font-weight: 500; line-height: 1.15; letter-spacing: -.005em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fitcore-rh-tile b small { font-size: .78rem; font-weight: 400; color: #6b7473; }
.fitcore-rh-tile:active { transform: scale(.985); }

/* Board: name, where they stand, and a quiet step; no points on the podium */
.fitcore-combo .fitcore-podium { gap: .6rem; padding-top: .6rem; align-items: flex-end; }
.fitcore-combo .fitcore-podium-spot { gap: 0; width: 5.2rem; }
.fitcore-combo .fitcore-podium-avatar { margin-bottom: .55rem; }
.fitcore-combo .fitcore-podium-name { font-size: .84rem; font-weight: 500; line-height: 1.2; color: var(--fitcore-ink); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fitcore-combo .fitcore-podium-place { font-size: .72rem; line-height: 1.2; color: #6b7473; margin-top: .15rem; margin-bottom: .6rem; }
.fitcore-combo .fitcore-podium-spot--1 .fitcore-podium-place { color: var(--fitcore-ink); }
.fitcore-combo .fitcore-podium-spot .fitcore-podium-step:empty { width: 100%; min-width: 0; border-radius: 12px 12px 0 0; }
.fitcore-combo .fitcore-podium-spot--1 .fitcore-podium-step:empty { height: 38px; }
.fitcore-combo .fitcore-podium-spot--2 .fitcore-podium-step:empty { height: 26px; }
.fitcore-combo .fitcore-podium-spot--3 .fitcore-podium-step:empty, .fitcore-combo .fitcore-podium-spot--4 .fitcore-podium-step:empty { height: 18px; }

/* Members list: sticky group headings, "Show more", A–Z rail, back to top. */
.fitcore-sh-mlist { position: relative; }
.fitcore-sh-grp { position: sticky; top: 0; z-index: 2; background: #f1efe6; margin: .5rem -1rem 0; padding: .4rem 1rem; font-size: .75rem; font-weight: 700; color: #5d6b66; scroll-margin-top: 4rem; }
.fitcore-sh-grp:first-child { margin-top: 0; border-radius: 12px 12px 0 0; }
.fitcore-sh-grp + .fitcore-sh-mrow { border-top: 0; }
.fitcore-sh-foot { text-align: center; margin: .9rem 0 1.1rem; }
.fitcore-sh-foot p { margin: 0 0 .6rem; }
.fitcore-sh-more .fitcore-button { min-width: 10rem; }
.fitcore-sh-rail { position: fixed; right: .1rem; top: 50%; transform: translateY(-50%); z-index: 90; display: flex; flex-direction: column; align-items: center; touch-action: none; }
.fitcore-sh-rail button { background: none; border: 0; padding: .08rem .35rem; font: inherit; font-size: .68rem; font-weight: 700; line-height: 1.15; color: #5d6b66; cursor: pointer; border-radius: 99px; min-height: 0; }
.fitcore-sh-rail button.is-on { background: var(--fitcore-accent); color: var(--fitcore-ink); }
.fitcore-sh-bub { position: fixed; right: 2.6rem; top: 50%; transform: translateY(-50%) scale(.8); width: 3.6rem; height: 3.6rem; border-radius: 50%; background: var(--fitcore-ink); color: var(--fitcore-accent); font-size: 1.7rem; font-weight: 800; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity .15s, transform .15s; z-index: 91; }
.fitcore-sh-bub.is-on { opacity: 1; transform: translateY(-50%) scale(1); }
.fitcore-sh-top { position: fixed; right: 1rem; bottom: 6.4rem; width: 2.8rem; height: 2.8rem; border-radius: 50%; background: #fff; border: 1px solid #e3e1d5; box-shadow: 0 2px 8px rgba(6, 20, 20, .18); display: flex; align-items: center; justify-content: center; color: var(--fitcore-ink); z-index: 90; padding: 0; cursor: pointer; }
.fitcore-sh-top[hidden] { display: none; }
.fitcore-sh-top svg { width: 1.1rem; height: 1.1rem; }
@media (prefers-reduced-motion: reduce) { .fitcore-sh-bub { transition: none; } }

/* Approve cards: waiting tag, menu, quick links; the not-joining sheet and its toast. */
.fitcore-sh-age { font-size: .7rem; font-weight: 600; border-radius: 99px; padding: .15rem .6rem; background: #f1efe6; color: #5d6b66; white-space: nowrap; flex: none; }
.fitcore-sh-age.is-old { background: #fff1b8; color: #8a6d00; }
.fitcore-sh-dots { display: inline-flex; align-items: center; justify-content: center; gap: 3px; width: 2rem; height: 2rem; border: 0; border-radius: 50%; background: #f1efe6; padding: 0; cursor: pointer; flex: none; min-height: 0; }
.fitcore-sh-dots i { width: 3.5px; height: 3.5px; border-radius: 50%; background: var(--fitcore-ink); }
.fitcore-sh-aq { flex: 1 1 100%; display: flex; justify-content: flex-end; gap: 1.1rem; font-size: .8rem; color: #5d6b66; }
.fitcore-sh-aq a, .fitcore-sh-aq button { color: inherit; text-decoration: underline; text-underline-offset: 3px; background: none; border: 0; padding: 0; font: inherit; cursor: pointer; min-height: 0; }
.fitcore-sh-nj .fitcore-story-body h3 { margin-top: 0; }
.fitcore-sh-nj-opt { display: flex; justify-content: space-between; align-items: center; width: 100%; background: #fff; border: 0; border-radius: 16px; padding: .85rem 1rem; margin: 0 0 .5rem; font: inherit; font-weight: 600; color: var(--fitcore-ink); text-decoration: none; text-align: left; cursor: pointer; }
.fitcore-sh-nj-opt small { font-weight: 400; color: #6b7473; font-size: .75rem; }
.fitcore-sh-nj-opt[hidden] { display: none; }
.fitcore-sh-nj-chips { display: flex; flex-wrap: wrap; gap: .5rem; margin: .8rem 0 1rem; }
.fitcore-sh-nj-chip { background: #fff; border: 1px solid #d9d7cb; border-radius: 99px; padding: .45rem .9rem; font: inherit; font-size: .8rem; font-weight: 600; cursor: pointer; min-height: 0; }
.fitcore-sh-nj-chip.is-on { border: 2px solid var(--fitcore-ink); padding: calc(.45rem - 1px) calc(.9rem - 1px); }
.fitcore-sh-nj-go { display: flex; gap: .6rem; }
.fitcore-sh-nj-go .fitcore-sh-btn { flex: 1; padding: .8rem 1rem; }
.fitcore-sh-toast { position: fixed; left: 1rem; right: 1rem; bottom: 6.2rem; z-index: 160; background: #fff; border: 1px solid #e3e1d5; box-shadow: 0 4px 14px rgba(6, 20, 20, .16); border-radius: 99px; padding: .7rem 1.1rem; display: flex; justify-content: space-between; align-items: center; font-weight: 600; font-size: .9rem; }
.fitcore-sh-toast[hidden] { display: none; }
.fitcore-sh-toast button { background: none; border: 0; font: inherit; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; padding: 0; min-height: 0; }
.fitcore-sh-ms i.is-not_joining { background: #e9e8e0; color: #5d6b66; }

/* Body-part plans: plan cards, the builder (staff), weekly / today view (member), log-sheet marks. */
.fitcore-pl { display: flex; align-items: center; gap: .8rem; background: #f1efe6; border-radius: 18px; padding: .8rem 1rem; margin: 0 0 .55rem; text-decoration: none; color: var(--fitcore-ink); }
.fitcore-pl span { flex: 1; min-width: 0; }
.fitcore-pl b { display: block; font-weight: 600; }
.fitcore-pl small { color: #5d6b66; font-size: .8rem; }
.fitcore-pl i { font-style: normal; font-size: .72rem; font-weight: 600; background: #fff; color: #5d6b66; border-radius: 99px; padding: .2rem .65rem; white-space: nowrap; }
.fitcore-pl-new { display: block; text-align: center; text-decoration: none; padding: .8rem 1rem; }
.fitcore-sh-btn--accent { background: var(--fitcore-accent); color: var(--fitcore-ink); }
.fitcore-pb h3 { margin: .2rem 0 .3rem; font-size: 1.2rem; } .fitcore-pb h3 small { font-weight: 400; color: #6b7473; font-size: .75rem; }
.fitcore-pb-bar { display: flex; gap: .35rem; margin: 0 0 .9rem; }
.fitcore-pb-bar i { flex: 1; height: 4px; border-radius: 9px; background: #e3e1d5; }
.fitcore-pb-bar i.on { background: var(--fitcore-ink); }
.fitcore-pb-l { margin: .9rem 0 .4rem; font-size: .8rem; font-weight: 700; } .fitcore-pb-l small { font-weight: 400; color: #6b7473; }
.fitcore-pb-in { width: 100%; background: #f1efe6; border: 0; border-radius: 14px; padding: .75rem .9rem; font: inherit; font-weight: 600; }
.fitcore-pb-row { display: flex; flex-wrap: wrap; gap: .45rem; }
.fitcore-pb-chip { background: #fff; border: 1px solid #d9d7cb; border-radius: 99px; padding: .45rem .85rem; font: inherit; font-size: .8rem; font-weight: 600; cursor: pointer; min-height: 0; display: inline-flex; align-items: center; gap: .3rem; color: var(--fitcore-ink); }
.fitcore-pb-chip--quiet { background: #f1efe6; border-color: #f1efe6; }
.fitcore-pb-chip.is-on { background: var(--fitcore-accent); border: 2px solid var(--fitcore-ink); padding: calc(.45rem - 1px) calc(.85rem - 1px); }
.fitcore-pb-chip em { font-style: normal; font-weight: 800; font-size: .72rem; }
.fitcore-pb-note { background: #f1efe6; border-radius: 12px; padding: .65rem .8rem; font-size: .8rem; color: #3c4a46; margin: .8rem 0 0; }
.fitcore-pb-err { color: #a32d2d; font-size: .8rem; margin: .6rem 0 0; }
.fitcore-pb-nav { display: flex; gap: .6rem; margin-top: 1rem; } .fitcore-pb-nav .fitcore-sh-btn { flex: 1; padding: .8rem 1rem; }
.fitcore-pb-gr { background: #f1efe6; border-radius: 16px; padding: .7rem .9rem; margin: 0 0 .5rem; }
.fitcore-pb-gr summary { font-weight: 700; cursor: pointer; display: flex; justify-content: space-between; list-style: none; }
.fitcore-pb-gr summary small { font-weight: 500; color: #5d6b66; font-size: .75rem; }
.fitcore-pb-exr { display: flex; gap: .4rem; margin-top: .45rem; }
.fitcore-pb-exr input { flex: 1; min-width: 0; background: #fff; border: 0; border-radius: 12px; padding: .5rem .7rem; font: inherit; font-size: .85rem; }
.fitcore-pb-exr button { border: 0; background: none; font-size: 1.1rem; cursor: pointer; color: #6b7473; min-height: 0; }
.fitcore-pb-sug { margin-top: .6rem; }
.fitcore-pb-mems { max-height: 15rem; overflow: auto; margin-top: .6rem; }
.fitcore-pb-mem { display: flex; align-items: center; gap: .7rem; padding: .55rem 0; border-top: 1px solid #ecebe3; cursor: pointer; }
.fitcore-pb-mem b { font-weight: 600; flex: 1; }
.fitcore-pb-mem input { position: absolute; opacity: 0; }
.fitcore-pb-mem i { width: 1.4rem; height: 1.4rem; border-radius: 50%; border: 1.5px solid #cfcdc2; display: inline-block; }
.fitcore-pb-mem input:checked + i { background: var(--fitcore-ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffe24c' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5 9-10'/%3E%3C/svg%3E") center / 70% no-repeat; border-color: var(--fitcore-ink); }
.fitcore-pb-mem[hidden] { display: none; }

.fitcore-sheet-chip.has-plan::before { content: ""; display: inline-block; width: .5rem; height: .5rem; border-radius: 50%; background: var(--fitcore-accent); border: 1px solid var(--fitcore-ink); margin-right: .4rem; vertical-align: .05rem; }
.fitcore-sheet-chip.is-done::after { content: " \2713"; font-weight: 700; }
.fitcore-sheet-plan { margin: .7rem 0 0; font-size: .75rem; color: #5d6b66; }
.fitcore-sheet-dot { display: inline-block; width: .5rem; height: .5rem; border-radius: 50%; background: var(--fitcore-accent); border: 1px solid var(--fitcore-ink); }
a.fitcore-pl-new, a.fitcore-pl-new:visited { color: var(--fitcore-accent); font-weight: 700; font-size: .95rem; border-radius: 16px; }

/* Plan strip (top of Train), plan line (home hero), plan sheet with fill pills, staff chip. */
.fitcore-ps { display: flex; align-items: center; gap: .7rem; width: 100%; background: #f1efe6; border: 0; border-radius: 18px; padding: .75rem .9rem; margin: 0 0 .9rem; font: inherit; color: var(--fitcore-ink); text-align: left; cursor: pointer; min-height: 0; }
.fitcore-ps--soft { cursor: default; }
.fitcore-ps-n { font-size: 1rem; font-weight: 800; flex: none; }
.fitcore-ps-segs { display: flex; gap: 3px; width: 4.6rem; flex: none; }
.fitcore-ps-segs i { flex: 1; height: 7px; border-radius: 9px; background: #d9d7cb; display: block; }
.fitcore-ps-segs i.f { background: var(--fitcore-ink); }
.fitcore-ps-tx { flex: 1; min-width: 0; font-size: .85rem; font-weight: 600; line-height: 1.35; }
.fitcore-ps-tx small { display: block; font-weight: 400; color: #5d6b66; font-size: .75rem; margin-top: 2px; }
.fitcore-ps-ar { color: #5d6b66; font-size: 1.2rem; flex: none; }
.fitcore-ps-go { background: var(--fitcore-ink); color: var(--fitcore-accent); border: 0; border-radius: 99px; padding: .4rem .9rem; font: inherit; font-size: .8rem; font-weight: 700; cursor: pointer; flex: none; min-height: 0; }
.fitcore-ps-tag { display: inline-block; background: var(--fitcore-accent); color: var(--fitcore-ink); font-size: .68rem; font-weight: 700; border-radius: 99px; padding: .12rem .6rem; margin: 0 0 .35rem; }
.fitcore-rh-plan { display: flex; align-items: center; justify-content: center; gap: .6rem; width: 100%; background: none; border: 0; border-top: 1px solid #22302c; margin: .7rem 0 0; padding: .65rem 0 0; font: inherit; color: var(--fitcore-accent); font-size: .8rem; font-weight: 600; cursor: pointer; min-height: 0; }
.fitcore-rh-plan .fitcore-ps-segs { width: 5.5rem; }
.fitcore-rh-plan .fitcore-ps-segs i { height: 5px; background: #2c3a36; }
.fitcore-rh-plan .fitcore-ps-segs i.f { background: var(--fitcore-accent); }
.fitcore-ps-dlg h3 { margin: 0 0 .15rem; }
.fitcore-ps-pills { display: flex; flex-wrap: wrap; gap: .45rem; margin: .9rem 0 .5rem; }
.fitcore-ps-pill { background: linear-gradient(90deg, var(--fitcore-accent) var(--p, 0%), #fff var(--p, 0%)); border: 1px solid #d9d7cb; border-radius: 99px; padding: .5rem .9rem; font: inherit; font-size: .9rem; font-weight: 700; color: var(--fitcore-ink); cursor: pointer; display: inline-flex; align-items: center; gap: .35rem; min-height: 0; }
.fitcore-ps-pill small { font-size: .7rem; font-weight: 600; color: #5d6b66; }
.fitcore-ps-pill.is-done { border-color: var(--fitcore-ink); }
.fitcore-ps-pill.is-next { border: 2px solid var(--fitcore-ink); padding: calc(.5rem - 1px) calc(.9rem - 1px); }
.fitcore-ps-key { font-size: .75rem; color: #5d6b66; margin: .3rem 0 .8rem; }
.fitcore-ps-g { background: #f1efe6; border-radius: 16px; padding: .7rem .9rem; margin: 0 0 .8rem; }
.fitcore-ps-g b { font-size: .85rem; } .fitcore-ps-g ul { margin: .4rem 0 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: .4rem; }
.fitcore-ps-g li { background: #fff; border-radius: 99px; padding: .3rem .75rem; font-size: .8rem; }
.fitcore-ps-g[hidden] { display: none; }
.fitcore-ps-log { width: 100%; }
.fitcore-ps-done { text-align: center; color: #5d6b66; margin: .5rem 0 0; }
.fitcore-sh-rdy { font-style: normal; background: var(--fitcore-accent); color: var(--fitcore-ink); font-size: .68rem; font-weight: 700; border-radius: 99px; padding: .1rem .55rem; }
.fitcore-profile-plan { display: flex; gap: .5rem; margin-top: .5rem; flex-basis: 100%; }
.fitcore-profile-plan select { flex: 1; min-width: 0; }
.fitcore-recruit-card .fitcore-inline { flex-wrap: wrap; }
.fitcore-pb-tools { margin-top: .6rem; align-items: center; }
.fitcore-pb-picked { margin-left: auto; font-size: .75rem; color: #5d6b66; }

/* Champion card (ring hub): header line, big name with bold figures, recognition as label-above cells. */
.fitcore-combo .fitcore-champ2--b { padding: .8rem .95rem; }
.fitcore-champ2-hd { display: flex; justify-content: space-between; align-items: baseline; font-size: .78rem; font-weight: 600; color: #5d6b66; margin: 0 0 .6rem; }
.fitcore-champ2-hd small { font-weight: 500; font-size: .75rem; }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-row { padding-bottom: .75rem; border-bottom: 1px solid #e3e1d5; gap: .8rem; }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-av { flex: 0 0 2.7rem; height: 2.7rem; font-size: 1rem; }
.fitcore-champ2-nm { margin: 0; font-size: 1.45rem; font-weight: 800; line-height: 1.05; letter-spacing: -.01em; color: var(--fitcore-ink); }
.fitcore-champ2-st { margin: .2rem 0 0; font-size: .85rem; color: #5d6b66; font-variant-numeric: tabular-nums; }
.fitcore-champ2-st b { font-weight: 800; color: var(--fitcore-ink); }
.fitcore-champ2-cells { display: grid; grid-template-columns: 1fr 1fr; gap: .7rem 1rem; padding: .75rem 0; border-bottom: 1px solid #e3e1d5; }
.fitcore-champ2-cells small { display: block; font-size: .72rem; font-weight: 500; color: #6b7473; }
.fitcore-champ2-cells b { font-size: 1rem; font-weight: 700; color: var(--fitcore-ink); }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-msg { margin: .75rem 0 0; font-size: .9rem; color: #3c4a46; line-height: 1.4; }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-msg b, .fitcore-combo .fitcore-champ2--b .fitcore-champ2-nudge b { font-weight: 800; color: var(--fitcore-ink); }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-nudge { margin-top: .75rem; }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-nudge > span { font-size: .9rem; max-width: 62%; line-height: 1.35; }
.fitcore-combo .fitcore-champ2--b .fitcore-champ2-rec { margin: .4rem 0 0; font-size: .75rem; }

/* Community: our own filled icons, the mood faces, Moments rows with the small combined pill, settings. */
.fitcore-gl { width: 1em; height: 1em; display: inline-block; vertical-align: -.18em; fill: none; stroke: #061414; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; --y: #ffe24c; --c: #ff6b4a; --m: #061414; --ch: rgba(255, 107, 74, .4); }
.fitcore-gl--line { --y: none; --c: none; }
.fitcore-gl--ack { width: 1.15rem; height: 1.15rem; vertical-align: -.25em; }
.fitcore-sheet-face .fitcore-gl { width: 1.7rem; height: 1.7rem; vertical-align: top; }
.fitcore-sheet-face.is-on { background: #fff; border: 2px solid var(--fitcore-ink); color: var(--fitcore-ink); }
.fitcore-moments { display: block; }
.fitcore-mo { background: #f1efe6; border-radius: 16px; padding: .65rem .8rem; margin: 0 0 .5rem; }
.fitcore-mo-h { display: flex; align-items: center; gap: .7rem; cursor: pointer; }
.fitcore-mo.is-own .fitcore-mo-h { cursor: default; }
.fitcore-mo-av { width: 2.2rem; height: 2.2rem; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: .85rem; flex: none; }
.fitcore-mo.is-own .fitcore-mo-av { background: var(--fitcore-accent); }
.fitcore-mo-t { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fitcore-mo-t b { font-size: .95rem; font-weight: 700; }
.fitcore-mo-t small { font-size: .72rem; color: #5d6b66; }
.fitcore-mo-pill { position: relative; margin-left: auto; flex: none; display: inline-flex; align-items: center; gap: .3rem; background: #fff; border: 1px solid #e3e1d5; border-radius: 99px; padding: .2rem .55rem; font: inherit; font-size: 1.05rem; line-height: 1; color: var(--fitcore-ink); box-shadow: 0 1px 2px rgba(6, 20, 20, .1); cursor: pointer; min-height: 0; }
.fitcore-mo-pill::before { content: ""; position: absolute; inset: -8px -4px; } /* keeps the tap area at finger size */
.fitcore-mo-pill em { font-style: normal; font-size: .72rem; font-weight: 700; color: #3c4a46; }
.fitcore-mo-pill--wide { margin: .55rem 0 0 auto; display: flex; width: fit-content; gap: .8rem; cursor: default; }
.fitcore-mo-pill--wide span { display: inline-flex; align-items: center; gap: .3rem; }
.fitcore-mo-pill--wide b { font-size: .72rem; font-weight: 600; color: #5d6b66; }
.fitcore-mo-brk { display: flex; justify-content: flex-end; }
.fitcore-mo-brk[hidden], .fitcore-mo-pick[hidden] { display: none; }
.fitcore-mo-thank { border: 0; background: var(--fitcore-accent); width: 1.9rem; height: 1.9rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; padding: 0; cursor: pointer; min-height: 0; font-size: 1rem; }
.fitcore-mo-thank .fitcore-gl { --c: none; }
.fitcore-mo-bd { position: absolute; top: -.45rem; right: -.35rem; width: 1.1rem; height: 1.1rem; border-radius: 50%; background: var(--fitcore-accent); border: 2px solid #fff; display: flex; align-items: center; justify-content: center; font-size: .7rem; }
.fitcore-mo-bd .fitcore-gl { width: .7rem; height: .7rem; stroke-width: 2; }
.fitcore-mo-pick { display: flex; justify-content: flex-end; gap: .25rem; margin-top: .55rem; }
.fitcore-mo-pick button { background: #fff; border: 1px solid transparent; border-radius: 99px; padding: .35rem .5rem; font-size: 1.4rem; line-height: 1; cursor: pointer; min-height: 0; }
.fitcore-mo-pick button.is-on { border-color: var(--fitcore-ink); }
.fitcore-mo-hint, .fitcore-mo-foot { font-size: .72rem; color: #6b7473; text-align: center; margin: .5rem 0 0; }
.fitcore-cs h3 { margin-top: 0; }
.fitcore-cs-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; width: 100%; background: none; border: 0; border-top: 1px solid #ecebe3; padding: .85rem 0; font: inherit; font-weight: 600; text-align: left; cursor: pointer; color: var(--fitcore-ink); }
.fitcore-cs-row small { display: block; font-weight: 400; font-size: .75rem; color: #6b7473; margin-top: .15rem; }
.fitcore-cs-row.is-on .fitcore-rhy-sw { background: #061414; }
.fitcore-cs-row.is-on .fitcore-rhy-sw::after { transform: translateX(18px); background: #ffe24c; }
.fitcore-cs-go { display: flex; gap: .6rem; margin-top: 1rem; } .fitcore-cs-go .fitcore-button { flex: 1; }

.fitcore-mo-pill--wide { font-size: 1.05rem; }
.fitcore-mo-sum { font-size: .75rem; font-weight: 600; color: #3c4a46; }

/* Moments tab, hairline timeline: your moment as one summary strip, others as plain rows with a "+" to cheer. */
.fitcore-mo { background: none; border-radius: 0; padding: 0; margin: 0; border-top: 1px solid #ecebe3; }
.fitcore-mo.is-own { background: #f1efe6; border: 0; border-radius: 18px; padding: .75rem .9rem; margin: 0 0 .9rem; }
.fitcore-mo-lb { display: flex; justify-content: space-between; font-size: .78rem; font-weight: 600; color: #5d6b66; margin: .1rem 0; }
.fitcore-mo-lb small { font-weight: 500; font-size: .75rem; }
.fitcore-mo-lb + .fitcore-mo { border-top: 0; }
.fitcore-mo:not(.is-own) .fitcore-mo-h { padding: .8rem 0; }
.fitcore-mo:not(.is-own) .fitcore-mo-av { background: #f1efe6; width: 2.4rem; height: 2.4rem; }
.fitcore-mo.is-own .fitcore-mo-t b { font-size: 1.05rem; font-weight: 800; }
.fitcore-mo:not(.is-own) .fitcore-mo-t b { font-size: 1rem; }
.fitcore-mo-t small { font-size: .78rem; }
.fitcore-mo-add { margin-left: auto; flex: none; width: 2.1rem; height: 2.1rem; border-radius: 50%; border: 1.5px dashed #bdbbaf; background: none; color: #6b7473; font: inherit; font-size: 1.1rem; font-weight: 600; line-height: 1; display: inline-flex; align-items: center; justify-content: center; padding: 0; cursor: pointer; position: relative; min-height: 0; }
.fitcore-mo-add::before { content: ""; position: absolute; inset: -6px; }
.fitcore-mo-pick { justify-content: flex-end; margin: 0 0 .7rem; }
.fitcore-mo-pick button { background: #f1efe6; }
.fitcore-mo-pick button.is-on { background: #fff; border-color: var(--fitcore-ink); }
.fitcore-mo-empty { text-align: center; padding: 1rem .4rem .4rem; }
.fitcore-mo-empty b { display: block; font-size: 1.05rem; font-weight: 700; margin-bottom: .3rem; }
.fitcore-mo-empty p { margin: 0; color: #5d6b66; font-size: .9rem; line-height: 1.5; }
.fitcore-mo-share { background: #f1efe6; border: 0; border-radius: 18px; padding: .8rem .95rem; margin-top: .8rem; }
.fitcore-mo.is-own .fitcore-mo-t b { font-size: .95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-mo.is-own .fitcore-mo-t { min-width: 0; }

/* Moments: one-tap cheers, subtle motion inside the row (no extra height) */
.fitcore-mo-one .fitcore-gl { opacity: .5; width: 1.15rem; height: 1.15rem; transition: opacity .15s; }
.fitcore-mo-one:active { transform: scale(.88); }
.fitcore-mo-pill.is-new { animation: fcMoPop .5s cubic-bezier(.34, 1.56, .64, 1); }
.fitcore-mo-pill.is-new::after { content: ""; position: absolute; inset: -2px; border-radius: 99px; border: 2px solid var(--fitcore-accent); animation: fcMoPing .7s ease-out forwards; pointer-events: none; }
.fitcore-mo-pill.is-new .fitcore-gl { transform-origin: 50% 80%; animation: fcMoNod .6s ease-out; }
.fitcore-mo-pick button { animation: fcMoIn .28s cubic-bezier(.34, 1.56, .64, 1) backwards; }
.fitcore-mo-pick button:nth-child(2) { animation-delay: 30ms; }
.fitcore-mo-pick button:nth-child(3) { animation-delay: 60ms; }
@keyframes fcMoPop { 0% { transform: scale(.4); opacity: 0; } 60% { transform: scale(1.18); opacity: 1; } 100% { transform: scale(1); } }
@keyframes fcMoPing { 0% { opacity: .9; transform: scale(1); } 100% { opacity: 0; transform: scale(1.5); } }
@keyframes fcMoNod { 35% { transform: rotate(-16deg) scale(1.2); } 100% { transform: none; } }
@keyframes fcMoIn { from { opacity: 0; transform: translateX(10px) scale(.6); } }
@media (prefers-reduced-motion: reduce) { .fitcore-mo-pill.is-new, .fitcore-mo-pill.is-new::after, .fitcore-mo-pill.is-new .fitcore-gl, .fitcore-mo-pick button { animation: none; } }

/* Names in the champion card and Moments follow the ring-hub weights (500, as on the Board and the tiles) */
.fitcore-champ2-nm { font-size: 1.0625rem; font-weight: 500; letter-spacing: 0; line-height: 1.2; }
.fitcore-champ2-av { font-weight: 600; }
.fitcore-champ2-st b { font-weight: 600; }
.fitcore-champ2-cells b { font-size: .9rem; font-weight: 500; }
.fitcore-mo:not(.is-own) .fitcore-mo-t b, .fitcore-mo.is-own .fitcore-mo-t b { font-size: .9rem; font-weight: 500; }
.fitcore-mo-t small { font-size: .75rem; }
.fitcore-mo-av { font-weight: 600; }

/* Unread notice bar: white with a breathing yellow outline glow, bell gives one small shake, soft "New" pill. Read = today's white bar. */
.fitcore-tk-new { display: none; flex: none; margin: 0 .2rem 0 auto; font-size: .62rem; font-weight: 600; background: rgba(255, 226, 76, .55); color: var(--fitcore-ink); border-radius: 99px; padding: .12rem .5rem; }
.fitcore-tk.is-unread .fitcore-tk-new { display: inline-block; }
.fitcore-tk.is-unread .fitcore-tk-bar { box-shadow: 0 0 0 1.5px rgba(255, 226, 76, .95), 0 3px 12px rgba(255, 226, 76, .3); animation: fcTkGlow 3.4s ease-in-out infinite; }
.fitcore-tk.is-unread .fitcore-tk-ic { background: rgba(255, 226, 76, .35); }
@keyframes fcTkGlow { 0%, 100% { box-shadow: 0 0 0 1.5px rgba(255, 226, 76, .95), 0 3px 12px rgba(255, 226, 76, .3); } 50% { box-shadow: 0 0 0 1.5px rgba(255, 226, 76, .95), 0 5px 22px rgba(255, 226, 76, .6); } }
.fitcore-tk.is-unread .fitcore-tk-bell { transform-origin: 50% 12%; animation: fcTkWig 5s ease-in-out infinite; }
@keyframes fcTkWig { 0%, 78%, 100% { transform: none; } 82% { transform: rotate(-16deg); } 86% { transform: rotate(12deg); } 90% { transform: rotate(-8deg); } 94% { transform: rotate(4deg); } }
/* Dock bell, unread: brighter bell, one small shake, soft glow on the dot */
@media (max-width: 899px) {
	.fitcore-dk-bell:has(#fitcore-notify-badge-tab:not([hidden])) { color: #fff; }
	.fitcore-dk-bell:has(#fitcore-notify-badge-tab:not([hidden])) .fitcore-tab-icon { transform-origin: 50% 12%; animation: fcTkWig 5s ease-in-out infinite; }
	.fitcore-dock .fitcore-dk-bell #fitcore-notify-badge-tab:not([hidden]) { animation: fcDkGlow 2.6s ease-in-out infinite; }
}
@keyframes fcDkGlow { 0%, 100% { box-shadow: 0 0 0 2px #061414, 0 0 0 4px rgba(255, 226, 76, .5); } 50% { box-shadow: 0 0 0 2px #061414, 0 0 0 7px rgba(255, 226, 76, 0); } }
@media (prefers-reduced-motion: reduce) { .fitcore-tk.is-unread .fitcore-tk-bar, .fitcore-tk.is-unread .fitcore-tk-bell, .fitcore-dk-bell .fitcore-tab-icon, .fitcore-dock .fitcore-dk-bell #fitcore-notify-badge-tab { animation: none !important; } }

/* My goals sheet (module, off by default) */
.fitcore-gs h3 { margin: .2rem 0 .25rem; font-size: 1.1rem; font-weight: 600; }
.fitcore-gs-hd { display: flex; align-items: center; justify-content: space-between; min-height: 1.6rem; padding-right: 2rem; }
.fitcore-gs-hd small { font-size: .72rem; color: #6b7473; }
.fitcore-gs-skip { background: none; border: 0; font: inherit; font-size: .78rem; color: #6b7473; cursor: pointer; padding: .2rem 0; min-height: 0; }
.fitcore-gs-ch { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .9rem; }
.fitcore-gs-chip { display: flex; align-items: center; gap: .5rem; flex: 1 1 44%; background: #f1efe6; border: 1.5px solid transparent; border-radius: 16px; padding: .7rem .8rem; font: inherit; font-size: .85rem; font-weight: 500; color: var(--fitcore-ink); text-align: left; cursor: pointer; min-height: 0; transition: transform .15s; }
.fitcore-gs-chip:active { transform: scale(.97); }
.fitcore-gs-chip--wide { flex: 1 1 100%; }
.fitcore-gs-chip small { display: block; font-weight: 400; font-size: .72rem; color: #6b7473; }
.fitcore-gs-chip.is-on { background: #fff; border-color: var(--fitcore-ink); animation: fcGsPop .3s cubic-bezier(.34, 1.56, .64, 1); }
.fitcore-gs-ic { width: 1.1rem; height: 1.1rem; flex: none; }
.fitcore-gs-dy { display: flex; gap: .4rem; justify-content: space-between; margin-top: 1rem; }
.fitcore-gs-dy button { flex: 1; aspect-ratio: 1; border-radius: 50%; border: 0; background: #f1efe6; font: inherit; font-size: .78rem; font-weight: 600; color: var(--fitcore-ink); cursor: pointer; min-height: 0; padding: 0; }
.fitcore-gs-dy button.is-on { background: var(--fitcore-accent); }
.fitcore-gs-ft { display: flex; align-items: center; gap: .8rem; margin-top: 1.2rem; }
.fitcore-gs-ft .fitcore-button { margin-left: auto; }
.fitcore-gs-dots { display: flex; gap: 5px; } .fitcore-gs-dots[hidden] { display: none; }
.fitcore-gs-dots i { width: 6px; height: 6px; border-radius: 50%; background: #d9d7cb; transition: width .2s; }
.fitcore-gs-dots i.is-on { background: var(--fitcore-ink); width: 16px; border-radius: 9px; }
.fitcore-gs-done { text-align: center; padding: .6rem 0; }
.fitcore-gs-ck { width: 3.2rem; height: 3.2rem; border-radius: 50%; background: var(--fitcore-accent); display: flex; align-items: center; justify-content: center; margin: 0 auto .8rem; animation: fcGsPop .5s cubic-bezier(.34, 1.56, .64, 1); }
.fitcore-gs-ck .fitcore-gs-ic { width: 1.5rem; height: 1.5rem; }
.fitcore-gs [hidden] { display: none; }
@keyframes fcGsPop { 50% { transform: scale(1.05); } }
@media (prefers-reduced-motion: reduce) { .fitcore-gs-chip.is-on, .fitcore-gs-ck { animation: none; } }

/* Staff "Who is in": a slim floor summary on top, and a small body-part tag after the time on each name */
.fitcore-sh-floor { display: flex; gap: 6px; overflow-x: auto; padding: 0 0 .5rem; margin: .1rem 0 .3rem; scrollbar-width: none; }
.fitcore-sh-floor::-webkit-scrollbar { display: none; }
.fitcore-sh-floor button { flex: none; display: flex; align-items: center; gap: 5px; border: 0; background: #f1efe6; color: var(--fitcore-ink); border-radius: 99px; padding: .22rem .65rem; font: inherit; font-size: .72rem; cursor: pointer; min-height: 0; }
.fitcore-sh-floor b { font-weight: 700; }
.fitcore-sh-floor button.is-on { background: var(--fitcore-ink); color: var(--fitcore-accent); }
.fitcore-sh-nm .fitcore-sh-pt { display: inline-block; font-size: .6rem; font-weight: 600; background: #fff; color: var(--fitcore-ink); border-radius: 99px; padding: .04rem .4rem; margin-left: .3rem; vertical-align: .05em; }
.fitcore-sh-nm .fitcore-sh-pt.is-fresh { background: rgba(255, 226, 76, .7); }
.fitcore-sh-nm.is-new .fitcore-sh-pt.is-fresh { background: #fff; }
.fitcore-sh-nm { transition: opacity .2s; }
.fitcore-sh-nm.is-dim { opacity: .25; }

/* Health module (off by default): member sheet, caution line, staff card, Limits marker */
.fitcore-hl .fitcore-gs-ch { gap: .4rem; }
.fitcore-hl-chip { flex: 0 0 auto !important; border-radius: 99px !important; padding: .5rem .8rem !important; }
.fitcore-hl-none { background: #fff !important; border: 1.5px dashed #bdbbaf !important; }
.fitcore-hl-none.is-on, .fitcore-hl-chip.is-on { background: #fff !important; border: 1.5px solid var(--fitcore-ink) !important; }
.fitcore-hl-in { width: 100%; background: #f1efe6; border: 0; border-radius: 14px; padding: .75rem .9rem; font: inherit; font-size: .9rem; margin: 0 0 .5rem; color: var(--fitcore-ink); }
.fitcore-hl-heavy { background: #fff6c9; border-radius: 12px; padding: .55rem .75rem; font-size: .78rem; line-height: 1.4; margin: .7rem 0 0; }
.fitcore-hl-heavy[hidden] { display: none; }
.fitcore-hl-ic { width: .8rem; height: .8rem; flex: none; }
.fitcore-hl-lock, .fitcore-hl-warn { display: flex; gap: .4rem; align-items: flex-start; margin: .7rem 0 0; font-size: .68rem; line-height: 1.45; color: #6b7473; }
.fitcore-hl-lock { align-items: center; }
.fitcore-hl-warn .fitcore-hl-ic { margin-top: .12rem; opacity: .8; }
.fitcore-hl-lock + .fitcore-hl-warn { margin-top: .3rem; }
.fitcore-hl-del { display: block; margin: .8rem 0 0; background: none; border: 0; padding: 0; font: inherit; font-size: .72rem; color: #b42318; cursor: pointer; text-decoration: underline; min-height: 0; }
.fitcore-hl-card { margin-top: 1rem; padding-top: .9rem; border-top: 1px solid #ecebe3; }
.fitcore-hl-card h3 { font-size: .95rem; font-weight: 600; margin: 0 0 .5rem; display: flex; align-items: center; gap: .5rem; }
.fitcore-hl-card h3 span { margin-left: auto; font-size: .66rem; font-weight: 500; color: #6b7473; }
.fitcore-hl-tag { display: inline-block; background: #f1efe6; border-radius: 99px; padding: .1rem .55rem; font-size: .72rem; font-weight: 600; margin: 0 0 .2rem .25rem; }
.fitcore-hl-nd { margin-top: .6rem; font-size: .8rem; }
.fitcore-hl-nd summary { cursor: pointer; color: #5d6b66; }
.fitcore-hl-nd textarea { width: 100%; background: #f1efe6; border: 0; border-radius: 12px; padding: .6rem .75rem; font: inherit; font-size: .82rem; margin: .5rem 0; resize: none; }
.fitcore-hl-mk { font-style: normal; font-size: .62rem; font-weight: 600; background: #fff6c9; color: #8a6d00; border-radius: 99px; padding: .08rem .5rem; margin-left: .35rem; flex: none; }
.fitcore-hl-ban { background: #fff6c9; border-radius: 12px; padding: .5rem .75rem; font-size: .78rem; line-height: 1.4; margin: .6rem 0 0; }
.fitcore-hl-ban[hidden] { display: none; }

/* Privacy sheet: one place for every module's controls */
.fitcore-pv h3 { margin: .1rem 0 .6rem; font-size: 1.1rem; font-weight: 600; }
.fitcore-pv-g { margin: .9rem 0 .1rem; font-size: .66rem; font-weight: 600; letter-spacing: .03em; text-transform: uppercase; color: #6b7473; }
.fitcore-pv-row { display: flex; align-items: center; gap: .7rem; width: 100%; padding: .75rem 0; border: 0; border-bottom: 1px solid #ecebe3; background: none; font: inherit; color: var(--fitcore-ink); text-align: left; }
button.fitcore-pv-row { cursor: pointer; min-height: 0; }
.fitcore-pv-ic { width: 2rem; height: 2rem; border-radius: 50%; background: #f1efe6; display: flex; align-items: center; justify-content: center; flex: none; }
.fitcore-pv-svg { width: 1rem; height: 1rem; }
.fitcore-pv-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fitcore-pv-tx b { font-size: .9rem; font-weight: 500; }
.fitcore-pv-tx small { font-size: .72rem; color: #6b7473; margin-top: .1rem; }
.fitcore-pv-go { width: 1rem; height: 1rem; color: #6b7473; flex: none; }
.fitcore-pv-sw { width: 38px; height: 22px; border-radius: 99px; background: #d9d7cb; position: relative; border: 0; cursor: pointer; flex: none; padding: 0; min-height: 0; transition: background .2s; }
.fitcore-pv-sw::after { content: ""; position: absolute; left: 3px; top: 3px; width: 16px; height: 16px; border-radius: 50%; background: #fff; transition: transform .2s, background .2s; }
.fitcore-pv-sw.is-on { background: var(--fitcore-ink); }
.fitcore-pv-sw.is-on::after { transform: translateX(16px); background: var(--fitcore-accent); }
.fitcore-pv-ft { margin-top: 1.1rem; text-align: center; }
.fitcore-pv-del { background: none; border: 0; padding: 0; font: inherit; font-size: .75rem; color: #6b7473; text-decoration: underline; cursor: pointer; min-height: 0; }
.fitcore-pv-cf { background: #fdf1ef; border-radius: 14px; padding: .7rem .85rem; font-size: .78rem; line-height: 1.45; text-align: left; }
.fitcore-pv-cf[hidden] { display: none; }
.fitcore-pv-cf div { display: flex; gap: .5rem; margin-top: .6rem; } .fitcore-pv-cf .fitcore-button { flex: 1; }
.fitcore-pv-yes { background: #b42318 !important; color: #fff !important; }
.fitcore-pv-note { margin: .6rem 0 0; font-size: .7rem; color: #6b7473; text-align: center; min-height: 1em; }
.fitcore-pv-lines { margin-top: .3rem; }
.fitcore-pv-line { display: flex; align-items: center; gap: .6rem; width: 100%; padding: .7rem 0; border: 0; border-bottom: 1px solid #ecebe3; background: none; font: inherit; font-size: .85rem; text-align: left; color: var(--fitcore-ink); cursor: pointer; min-height: 0; }
.fitcore-pv-line span { color: #6b7473; flex: none; width: 5.2rem; }
.fitcore-pv-line b { flex: 1; font-weight: 500; min-width: 0; }
@media (prefers-reduced-motion: reduce) { .fitcore-pv-sw, .fitcore-pv-sw::after { transition: none; } }

/* Plan drafts (module, off by default): Ready for a plan card and the draft box */
.fitcore-dr-card h2 { margin-bottom: .4rem; }
.fitcore-dr-row { padding: .8rem 0; border-top: 1px solid #ecebe3; }
.fitcore-dr-row:first-of-type { border-top: 0; }
.fitcore-dr-h { display: flex; align-items: center; gap: .6rem; }
.fitcore-dr-nm { background: none; border: 0; padding: 0; font: inherit; text-align: left; cursor: pointer; min-height: 0; color: var(--fitcore-ink); }
.fitcore-dr-nm b { display: block; font-size: .88rem; font-weight: 500; }
.fitcore-dr-nm small { font-size: .68rem; color: #6b7473; }
.fitcore-dr-tags { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; margin: .45rem 0 0 2.4rem; }
.fitcore-dr-t { font-size: .64rem; font-weight: 500; background: #f1efe6; border-radius: 99px; padding: .15rem .55rem; color: #3c4a46; }
.fitcore-dr-t--mute { color: #8a948f; }
.fitcore-dr-dy { display: inline-flex; gap: 2px; }
.fitcore-dr-dy i { width: 13px; height: 13px; border-radius: 50%; background: #ecebe3; font-style: normal; font-size: .45rem; display: flex; align-items: center; justify-content: center; color: #6b7473; }
.fitcore-dr-dy i.on { background: var(--fitcore-accent); color: var(--fitcore-ink); font-weight: 700; }
.fitcore-dr { margin: .55rem 0 0 2.4rem; background: #fffbe3; border: 1px solid rgba(255, 226, 76, .9); border-radius: 14px; padding: .6rem .75rem; }
.fitcore-dr-wrap .fitcore-dr { margin-left: 0; }
.fitcore-dr--warn { background: #fff6c9; border-color: transparent; }
.fitcore-dr--none { background: #f1efe6; border-color: transparent; }
.fitcore-dr b { display: block; font-size: .78rem; font-weight: 600; }
.fitcore-dr small { display: block; font-size: .68rem; color: #5d6b66; line-height: 1.4; margin-top: .1rem; }
.fitcore-dr-pv { margin-top: .4rem; font-size: .7rem; }
.fitcore-dr-pv summary { cursor: pointer; color: #5d6b66; }
.fitcore-dr-split div { display: flex; justify-content: space-between; gap: .6rem; padding: .2rem 0; font-size: .7rem; } .fitcore-dr-split div span:last-child { font-weight: 600; text-align: right; }
.fitcore-dr-acts { display: flex; gap: .4rem; margin-top: .5rem; flex-wrap: wrap; }
.fitcore-dr-b { font: inherit; font-size: .68rem; font-weight: 700; border-radius: 99px; padding: .35rem .8rem; cursor: pointer; border: 1px solid #d9d7cb; background: #fff; color: var(--fitcore-ink); text-decoration: none; min-height: 0; }
.fitcore-dr-b--ink { background: var(--fitcore-ink); color: var(--fitcore-accent); border-color: var(--fitcore-ink); }

/* Ready for a plan, round 2: compact rows, tabs by state, draft opens in a sheet */
.fitcore-dr-seg { display: flex; background: #f1efe6; border-radius: 99px; padding: 3px; margin: .1rem 0 .5rem; }
.fitcore-dr-seg button { flex: 1; border: 0; background: none; font: inherit; font-size: .7rem; padding: .35rem 0; border-radius: 99px; cursor: pointer; color: #6b7473; min-height: 0; }
.fitcore-dr-seg button.is-on { background: #fff; color: var(--fitcore-ink); font-weight: 600; box-shadow: 0 1px 3px rgba(0, 0, 0, .1); }
.fitcore-dr-card [data-dr-pane][hidden] { display: none; }
.fitcore-dr-row { display: flex; align-items: center; gap: .6rem; padding: .6rem 0; border-top: 1px solid #ecebe3; }
.fitcore-dr-row:first-child { border-top: 0; }
.fitcore-dr-row .fitcore-dr-nm { flex: 1; min-width: 0; }
.fitcore-dr-nm small { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitcore-dr-ch { flex: none; font-size: .62rem; font-weight: 600; border-radius: 99px; padding: .15rem .55rem; background: #f1efe6; color: #6b7473; }
.fitcore-dr-ch.is-draft { background: rgba(255, 226, 76, .6); color: var(--fitcore-ink); }
.fitcore-dr-ch.is-warn { background: #fff6c9; color: #8a6d00; }
.fitcore-dr-go { flex: none; font: inherit; font-size: .68rem; font-weight: 700; border: 0; border-radius: 99px; padding: .38rem .8rem; background: var(--fitcore-ink); color: var(--fitcore-accent); cursor: pointer; text-decoration: none; min-height: 0; }
.fitcore-dr-go--ghost { background: #fff; color: var(--fitcore-ink); border: 1px solid #d9d7cb; }
.fitcore-dr-why { margin: -.2rem 0 .4rem 2.4rem; font-size: .68rem; color: #8a6d00; line-height: 1.4; }
.fitcore-dr-dlg h3 { margin: .1rem 0 .2rem; font-size: 1.05rem; font-weight: 600; }
.fitcore-dr-dlg .fitcore-dr-tags { margin: .5rem 0 .6rem; }
.fitcore-dr-dlg .fitcore-dr-split div { border-top: 1px solid #ecebe3; padding: .45rem 0; font-size: .78rem; }
.fitcore-dr-dlg .fitcore-dr-acts { margin-top: .9rem; } .fitcore-dr-dlg .fitcore-dr-b { flex: 1; text-align: center; padding: .6rem; font-size: .78rem; }

/* Starter plans (module, off by default): the switch and "Best for" chips in the plan editor, small notes on the card */
.fitcore-st-sw { display: inline-flex; align-items: center; gap: .6rem; cursor: pointer; font-size: .85rem; }
.fitcore-st-sw input { position: absolute; opacity: 0; pointer-events: none; }
.fitcore-st-sw i { width: 36px; height: 21px; border-radius: 99px; background: #d9d7cb; position: relative; flex: none; transition: background .2s; }
.fitcore-st-sw i::after { content: ""; position: absolute; left: 3px; top: 3px; width: 15px; height: 15px; border-radius: 50%; background: #fff; transition: transform .2s, background .2s; }
.fitcore-st-sw input:checked + i { background: var(--fitcore-ink); }
.fitcore-st-sw input:checked + i::after { transform: translateX(15px); background: var(--fitcore-accent); }
.fitcore-st-sw input:focus-visible + i { outline: 2px solid var(--fitcore-ink); outline-offset: 2px; }
.fitcore-st-bf { display: none; margin-top: .6rem; padding: .6rem .75rem; background: #f6f4ec; border-radius: 12px; }
.fitcore-st:has(input[name="starter"]:checked) .fitcore-st-bf { display: block; }
.fitcore-st-bf small { display: block; font-size: .66rem; font-weight: 600; color: #6b7473; margin-bottom: .35rem; letter-spacing: .03em; text-transform: uppercase; }
.fitcore-st-bf div { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: .4rem; }
.fitcore-st-ck input { position: absolute; opacity: 0; pointer-events: none; }
.fitcore-st-ck span { display: inline-block; font-size: .72rem; padding: .25rem .65rem; border-radius: 99px; background: #fff; border: 1px solid #e3e1d5; cursor: pointer; }
.fitcore-st-ck input:checked + span { background: var(--fitcore-ink); color: var(--fitcore-accent); border-color: var(--fitcore-ink); }
.fitcore-st-ck input:focus-visible + span { outline: 2px solid var(--fitcore-ink); outline-offset: 2px; }
.fitcore-dr-why--plan { color: var(--fitcore-ink); font-weight: 500; }
.fitcore-dr-why--mute { color: #6b7473; }
.fitcore-dr-hint { margin: .1rem 0 .5rem; font-size: .72rem; color: #6b7473; line-height: 1.45; background: #f1efe6; border-radius: 12px; padding: .5rem .7rem; }
@media (prefers-reduced-motion: reduce) { .fitcore-st-sw i, .fitcore-st-sw i::after { transition: none; } }

/* Generated limit sentence (staff only): one quiet yellow line, never a pop-up */
.fitcore-hl-sent { display: flex; gap: .4rem; align-items: flex-start; margin: .6rem 0 0; font-size: .74rem; line-height: 1.45; color: #8a6d00; }
.fitcore-hl-sent .fitcore-hl-ic { margin-top: .15rem; }

/* Greetings (module, off by default): one plain line under the hero */
.fitcore-gr-line { display: flex; gap: .45rem; align-items: flex-start; margin: -.35rem .3rem .8rem; font-size: .8rem; line-height: 1.45; color: #6b5200; }
.fitcore-gr-ic { width: .8rem; height: .8rem; flex: none; margin-top: .2rem; color: #c9a400; }

/* While a module sheet is queued for this visit, the install and push cards wait (one thing at a time) */
.fitcore-q #fitcore-push-banner, .fitcore-q #fitcore-install-banner { display: none !important; }

/* Plan builder, Assign step: keep each hidden tick box inside its own row. Without a positioned row the boxes of members far down the list
   stretched the whole sheet to twice its height, and ticking one scrolled the sheet to a blank white area. */
.fitcore-pb-mems { position: relative; }
.fitcore-pb-mem { position: relative; }
.fitcore-pb-mem input { left: 0; top: 0; width: 1px; height: 1px; pointer-events: none; }
.fitcore-pb-mem .fitcore-hl-mk { margin: 0 .7rem 0 .4rem; white-space: nowrap; }

/* Check-in review (module, off by default): a quiet chip on Who is in, and a list sheet */
.fitcore-cr-chip { display: inline-flex; align-items: center; gap: .35rem; background: #fff6c9; color: #6b5200; border: 0; border-radius: 99px; padding: .25rem .7rem; font: inherit; font-size: .72rem; font-weight: 600; cursor: pointer; margin: 0 0 .6rem; min-height: 0; }
.fitcore-cr-ic { width: .8rem; height: .8rem; }
.fitcore-cr h3 { margin: .1rem 0 .2rem; font-size: 1.1rem; font-weight: 600; }
.fitcore-cr-it { padding: .75rem 0; border-top: 1px solid #ecebe3; }
.fitcore-cr-it:first-of-type { border-top: 0; }
.fitcore-cr-t { display: flex; align-items: flex-start; gap: .6rem; }
.fitcore-cr-t b { display: block; font-size: .88rem; font-weight: 500; }
.fitcore-cr-t small { display: block; margin-top: .15rem; font-size: .74rem; line-height: 1.45; color: #8a6d00; }
.fitcore-cr-acts { display: flex; gap: .4rem; margin: .5rem 0 0 2.4rem; }
.fitcore-cr-f { margin: 0; }
.fitcore-cr-b { font: inherit; font-size: .72rem; font-weight: 700; border-radius: 99px; padding: .35rem .85rem; cursor: pointer; min-height: 0; background: #fff; border: 1px solid #d9d7cb; }
.fitcore-cr-b--ink { background: var(--fitcore-ink); color: var(--fitcore-accent); border-color: var(--fitcore-ink); }
.fitcore-cr-b--rm { color: #b42318; border-color: #e9c4bf; }
.fitcore-cr-seg { display: flex; background: #f1efe6; border-radius: 99px; padding: 3px; margin: .6rem 0 .3rem; }
.fitcore-cr-seg button { flex: 1; border: 0; background: none; font: inherit; font-size: .75rem; padding: .35rem 0; border-radius: 99px; cursor: pointer; color: #6b7473; min-height: 0; }
.fitcore-cr-seg button.is-on { background: #fff; color: var(--fitcore-ink); font-weight: 600; box-shadow: 0 1px 3px rgba(0, 0, 0, .1); }
.fitcore-cr [data-cr-pane][hidden] { display: none; }

.fitcore-cr-h { display: flex; justify-content: space-between; align-items: center; gap: .6rem; margin: .5rem 0 .2rem; }
.fitcore-cr-h small { font-size: .74rem; color: #6b7473; }
.fitcore-cr-d summary { cursor: pointer; font-size: .74rem; font-weight: 600; color: #6b7473; margin: .4rem 0 0 2.4rem; list-style: none; }
.fitcore-cr-d summary::-webkit-details-marker { display: none; }
.fitcore-cr-ln { display: flex; justify-content: space-between; align-items: center; gap: .5rem; margin: .4rem 0 0 2.4rem; font-size: .74rem; line-height: 1.45; color: #6b7473; }
.fitcore-cr-tag { margin-left: auto; align-self: flex-start; font-size: .68rem; font-weight: 700; padding: .15rem .55rem; border-radius: 99px; background: #e8f3ec; color: #1a7f37; }
.fitcore-cr-seg { overflow-x: auto; }
.fitcore-cr-seg button { flex: 1 0 auto; padding: .35rem .7rem; white-space: nowrap; }


.fitcore-ua { position: fixed; left: 12px; right: 12px; bottom: calc(88px + env(safe-area-inset-bottom)); z-index: 40; display: flex; align-items: center; justify-content: space-between; gap: .6rem; background: #fff; border: 1px solid #ecebe3; border-radius: 14px; padding: .5rem .7rem; font-size: .78rem; color: #4a5654; box-shadow: 0 4px 14px rgba(6, 20, 20, .08); }
.fitcore-ua-b { display: flex; gap: .35rem; flex: none; }
.fitcore-ua-b button { font: inherit; font-size: .74rem; font-weight: 600; border-radius: 99px; padding: .3rem .8rem; min-height: 0; background: #fff; border: 1px solid #d9d7cb; color: var(--fitcore-ink); cursor: pointer; }
.fitcore-ua-b .fitcore-ua-yes { background: var(--fitcore-ink); color: var(--fitcore-accent); border-color: var(--fitcore-ink); }
.fitcore-q .fitcore-ua, html.fitcore-intro .fitcore-ua { display: none; }
@media (min-width: 900px) { .fitcore-ua { left: auto; right: 16px; bottom: 16px; max-width: 26rem; } }
