@import url("/assets/gym_pos/fonts/website-fonts.css");

/*
 * Design direction: a warm, editorial boutique studio - not a dark "gym-bro"
 * poster. Cream/paper background, near-black ink text, one red accent used
 * sparingly. Headlines in a thin editorial serif (Fraunces); body copy and
 * data (prices, stats, live counts) in a utilitarian grotesk (Archivo /
 * Archivo Narrow), evoking a printed studio program rather than a screen.
 */
:root {
	--gym-bg: #fff8f1;
	--gym-bg-alt: #f1ebe5;
	--gym-ink: #1a1714;
	--gym-accent: #d12c21;
	--gym-accent-dark: #a32219;
	--gym-text: #1a1714;
	--gym-text-muted: #6a635a; /* darkened from #766e64: that failed AA (4.24:1) on --gym-bg-alt; this clears 5:1 on both backgrounds */
	--gym-card: #fffdfa;
	--gym-border: #e4dcd1;
	--gym-good: #3f7d4a;
	--gym-warn: #a9791a;
	--gym-bad: #a83232;

	--font-display: "Fraunces", serif;
	--font-body: "Archivo", -apple-system, BlinkMacSystemFont, sans-serif;
	--font-data: "Archivo Narrow", "Archivo", sans-serif;
}

.gym-full-bleed,
.gym-full-bleed * {
	font-family: var(--font-body);
}
.gym-full-bleed h1,
.gym-full-bleed h2,
.gym-full-bleed h3 {
	font-family: var(--font-display);
	font-weight: 500;
	font-optical-sizing: auto;
}
.gym-price-amount,
.gym-membership-stat-number,
.gym-class-time,
.kiosk-stat-number,
.gym-scoreboard-number {
	font-family: var(--font-data);
	font-variant-numeric: tabular-nums;
}

.gym-full-bleed {
	width: 100%;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	background: var(--gym-bg);
}

/* Hero */
.gym-hero {
	background: var(--gym-bg);
	color: var(--gym-text);
	padding: 90px 24px 100px;
	text-align: center;
}
.gym-hero .gym-eyebrow {
	color: var(--gym-accent);
	text-transform: uppercase;
	letter-spacing: 0.14em;
	font-weight: 700;
	font-size: 0.8rem;
	margin-bottom: 16px;
}
.gym-hero h1 {
	font-size: clamp(2.4rem, 5.5vw, 4.25rem);
	font-weight: 300;
	line-height: 1.06;
	margin-bottom: 22px;
	text-wrap: balance;
}
.gym-hero p.gym-sub {
	font-size: 1.15rem;
	color: var(--gym-text-muted);
	max-width: 620px;
	margin: 0 auto 34px;
}
.gym-hero-ctas {
	display: flex;
	gap: 14px;
	justify-content: center;
	flex-wrap: wrap;
}
/* Site navigation - the persistent way to move between pages. Sticky, plain,
   one primary action (Join Now); everything else is quiet text. */
.gym-nav {
	background: var(--gym-bg);
	border-bottom: 1px solid var(--gym-border);
	position: sticky;
	top: 0;
	z-index: 500;
}
.gym-nav-inner {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 24px;
	height: 64px;
	display: flex;
	align-items: center;
	gap: 32px;
}
.gym-nav-brand {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font-family: var(--font-display);
	font-size: 1.1rem;
	font-weight: 500;
	color: var(--gym-text);
	text-decoration: none;
	white-space: nowrap;
}
.gym-nav-brand:hover {
	text-decoration: none;
}
.gym-nav-links {
	display: flex;
	gap: 26px;
	flex: 1;
}
.gym-nav-links a {
	color: var(--gym-text-muted);
	text-decoration: none;
	font-size: 0.88rem;
	font-weight: 600;
	white-space: nowrap;
}
.gym-nav-links a:hover {
	color: var(--gym-text);
	text-decoration: none;
}
.gym-nav-actions {
	display: flex;
	align-items: center;
	gap: 18px;
	flex-wrap: wrap;
	justify-content: flex-end;
}

.gym-nav-links a.gym-nav-current {
	color: var(--gym-text);
	text-decoration: underline;
	text-decoration-color: var(--gym-accent);
	text-decoration-thickness: 2px;
	text-underline-offset: 7px;
}

.gym-nav-account {
	color: var(--gym-text);
	text-decoration: none;
	font-size: 0.86rem;
	font-weight: 600;
	white-space: nowrap;
}
.gym-nav-account:hover {
	text-decoration: none;
}
.gym-btn-sm {
	padding: 9px 18px;
	font-size: 0.86rem;
}

/* Language switcher, integrated into the nav (not a separate floating
   element - that used to collide with this same top-right corner). */
.gym-nav-lang {
	display: flex;
	gap: 2px;
	background: var(--gym-bg-alt);
	border: 1px solid var(--gym-border);
	border-radius: 20px;
	padding: 3px;
}
.gym-nav-lang a {
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.02em;
	color: var(--gym-text-muted);
	text-decoration: none;
	padding: 4px 9px;
	border-radius: 16px;
	white-space: nowrap;
}
.gym-nav-lang a:hover {
	color: var(--gym-text);
	text-decoration: none;
}
.gym-nav-lang a.gym-nav-lang-active {
	background: var(--gym-ink);
	color: var(--gym-bg);
}

@media (max-width: 720px) {
	.gym-nav-inner {
		flex-wrap: wrap;
		height: auto;
		padding: 10px 16px;
		gap: 8px 16px;
	}
	.gym-nav-links {
		order: 3;
		width: 100%;
		overflow-x: auto;
		gap: 20px;
		padding-bottom: 2px;
	}
	.gym-nav-actions {
		margin-left: auto;
	}
}

/* Split hero: copy left, live scoreboard right. The scoreboard is the one
   dark, high-contrast element on an otherwise warm/light page - the
   signature moment, not decoration for its own sake. */
.gym-hero-split {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 64px;
	text-align: left;
	flex-wrap: wrap;
	max-width: 1200px;
	margin: 0 auto;
}
.gym-hero-copy {
	flex: 1 1 460px;
	max-width: 560px;
}
.gym-hero-split .gym-hero-ctas {
	justify-content: flex-start;
}
.gym-scoreboard {
	flex: 0 1 300px;
	background: var(--gym-ink);
	border-radius: 4px;
	padding: 26px 28px;
	box-shadow: 0 24px 50px rgba(26, 23, 20, 0.18);
}
.gym-scoreboard-label {
	font-family: var(--font-display);
	font-weight: 500;
	color: var(--gym-accent);
	font-size: 1rem;
	margin-bottom: 18px;
	border-bottom: 1px solid rgba(255, 248, 241, 0.15);
	padding-bottom: 12px;
}
.gym-scoreboard-row {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	padding: 8px 0;
}
.gym-scoreboard-row + .gym-scoreboard-row {
	border-top: 1px solid rgba(255, 248, 241, 0.08);
}
.gym-scoreboard-number {
	font-size: 2rem;
	font-weight: 700;
	color: var(--gym-bg);
}
.gym-scoreboard-caption {
	color: rgba(255, 248, 241, 0.55);
	font-size: 0.8rem;
	text-align: right;
}

@media (max-width: 900px) {
	.gym-hero-split {
		flex-direction: column;
		text-align: center;
	}
	.gym-hero-copy {
		text-align: center;
	}
	.gym-hero-split .gym-hero-ctas {
		justify-content: center;
	}
	.gym-scoreboard {
		width: 100%;
		max-width: 380px;
	}
}

/* Buttons */
.gym-btn {
	display: inline-block;
	padding: 13px 30px;
	border-radius: 4px;
	font-weight: 600;
	text-decoration: none;
	transition: transform 0.15s ease, background 0.15s ease, color 0.15s ease;
	border: 1.5px solid transparent;
	cursor: pointer;
	font-size: 0.98rem;
	font-family: inherit;
	touch-action: manipulation;
}
.gym-btn:hover {
	transform: translateY(-1px);
	text-decoration: none;
}
.gym-btn:focus-visible {
	outline: 2px solid var(--gym-ink);
	outline-offset: 2px;
}
.gym-btn:disabled {
	opacity: 0.6;
	cursor: not-allowed;
	transform: none;
}
.gym-btn-primary {
	background: var(--gym-accent);
	color: #fff8f1;
}
.gym-btn-primary:hover {
	background: var(--gym-accent-dark);
	color: #fff8f1;
}
.gym-btn-outline {
	background: transparent;
	border-color: var(--gym-ink);
	color: var(--gym-ink);
}
.gym-btn-outline:hover {
	background: var(--gym-ink);
	color: var(--gym-bg);
}

/* Sections */
.gym-section {
	padding: 76px 24px;
}
.gym-section-dark {
	background: var(--gym-bg);
	color: var(--gym-text);
}
.gym-section-alt {
	background: var(--gym-bg-alt);
	color: var(--gym-text);
}
.gym-section-inner {
	max-width: 1100px;
	margin: 0 auto;
}
.gym-section-head {
	text-align: center;
	max-width: 640px;
	margin: 0 auto 44px;
}
.gym-section-head .gym-eyebrow {
	color: var(--gym-accent);
	text-transform: uppercase;
	letter-spacing: 0.14em;
	font-weight: 700;
	font-size: 0.78rem;
	margin-bottom: 10px;
}
.gym-section-head h2 {
	font-size: clamp(1.7rem, 3vw, 2.5rem);
	font-weight: 400;
	margin-bottom: 12px;
	text-wrap: balance;
}
.gym-section-head p {
	color: var(--gym-text-muted);
}
.gym-section-head-left {
	text-align: left;
	max-width: none;
	margin: 0 0 40px;
}
.gym-section-head-left p {
	max-width: 46ch;
}

/* Grids */
.gym-grid {
	display: grid;
	gap: 24px;
	grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
}
.gym-grid-3 {
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}

/* Program / feature cards */
.gym-card {
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 8px;
	padding: 28px 24px;
}
.gym-card h3 {
	font-size: 1.2rem;
	font-weight: 500;
	margin-bottom: 10px;
	color: var(--gym-text);
}
.gym-card p {
	color: var(--gym-text-muted);
	font-size: 0.95rem;
	margin-bottom: 0;
}

/* Programs: a plain divided list, not another row of bordered cards - the
   heading and copy carry it, no icon needed. */
.gym-feature-list {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 36px 48px;
}
.gym-feature {
	padding-top: 22px;
	border-top: 1px solid var(--gym-border);
}
.gym-feature h3 {
	font-size: 1.15rem;
	font-weight: 500;
	margin-bottom: 8px;
	color: var(--gym-text);
}
.gym-feature p {
	color: var(--gym-text-muted);
	font-size: 0.95rem;
	margin: 0;
	max-width: 42ch;
}
@media (max-width: 640px) {
	.gym-feature-list {
		grid-template-columns: 1fr;
	}
}

/* Pricing cards */
.gym-price-card {
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 10px;
	padding: 32px 26px;
	text-align: center;
	display: flex;
	flex-direction: column;
	position: relative;
}
.gym-price-card.gym-price-popular {
	border-color: var(--gym-accent);
	box-shadow: 0 14px 34px rgba(209, 44, 33, 0.12);
}
.gym-price-badge {
	position: absolute;
	top: -13px;
	left: 50%;
	transform: translateX(-50%);
	background: var(--gym-accent);
	color: #fff8f1;
	font-size: 0.7rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	padding: 5px 14px;
	border-radius: 20px;
}
.gym-price-card h3 {
	font-size: 1.15rem;
	font-weight: 500;
	color: var(--gym-text);
	margin-bottom: 6px;
}
.gym-price-amount {
	font-size: 2.4rem;
	font-weight: 700;
	color: var(--gym-text);
	margin: 10px 0 2px;
}
.gym-price-amount span {
	font-size: 0.95rem;
	font-weight: 500;
	color: var(--gym-text-muted);
}
.gym-price-meta {
	color: var(--gym-text-muted);
	font-size: 0.88rem;
	margin-bottom: 22px;
}
.gym-price-card .gym-btn {
	margin-top: auto;
}

/* Trainers */
.gym-trainer-card {
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 8px;
	overflow: hidden;
	text-align: center;
}
.gym-trainer-photo {
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	background: var(--gym-bg-alt);
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 2.4rem;
	color: var(--gym-text-muted);
}
.gym-trainer-card .gym-trainer-body {
	padding: 20px 16px 24px;
}
.gym-trainer-card h3 {
	font-size: 1.1rem;
	font-weight: 500;
	color: var(--gym-text);
	margin-bottom: 2px;
}
.gym-trainer-role {
	color: var(--gym-accent);
	font-size: 0.85rem;
	font-weight: 600;
	margin-bottom: 10px;
}
.gym-trainer-card p.gym-specialties {
	color: var(--gym-text-muted);
	font-size: 0.88rem;
}
.gym-trainer-photo-fallback {
	width: 100%;
	aspect-ratio: 1 / 1;
	background: var(--gym-bg-alt);
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-display);
	font-size: 2rem;
	font-weight: 500;
	color: var(--gym-text-muted);
}

/* Testimonials: a plain divided list (no boxes) - the display serif quote and
   a hairline rule do the separating, not another bordered card. */
.gym-testimonial-list {
	max-width: 700px;
	margin: 0 auto;
}
.gym-testimonial-plain {
	padding: 30px 0;
	border-top: 1px solid var(--gym-border);
}
.gym-testimonial-plain:last-child {
	border-bottom: 1px solid var(--gym-border);
}
.gym-testimonial-plain .gym-quote {
	color: var(--gym-text);
	font-size: 1.25rem;
	font-family: var(--font-display);
	font-weight: 400;
	line-height: 1.45;
	margin-bottom: 14px;
	text-wrap: balance;
}
.gym-testimonial-plain .gym-author {
	color: var(--gym-text-muted);
	font-size: 0.8rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

/* Empty state */
.gym-empty-state {
	text-align: center;
	color: var(--gym-text-muted);
	padding: 30px;
	border: 1px dashed var(--gym-border);
	border-radius: 8px;
}

/* Final CTA banner */
.gym-cta-banner {
	background: var(--gym-ink);
	color: var(--gym-bg);
	text-align: center;
	padding: 64px 24px;
}
.gym-cta-banner h2 {
	font-size: clamp(1.6rem, 3vw, 2.2rem);
	font-weight: 400;
	margin-bottom: 20px;
}
.gym-cta-banner .gym-btn-primary {
	background: var(--gym-accent);
	color: #fff8f1;
}
.gym-cta-banner .gym-btn-outline {
	border-color: rgba(255, 248, 241, 0.5);
	color: var(--gym-bg);
}
.gym-cta-banner .gym-btn-outline:hover {
	background: var(--gym-bg);
	color: var(--gym-ink);
}

/* Classes / schedule page */
.gym-day-group {
	margin-bottom: 44px;
}
.gym-day-group:last-child {
	margin-bottom: 0;
}
.gym-day-heading {
	font-size: 1.1rem;
	font-family: var(--font-display);
	font-weight: 500;
	color: var(--gym-text);
	margin-bottom: 18px;
	padding-bottom: 10px;
	border-bottom: 1px solid var(--gym-border);
}
.gym-class-card {
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 10px;
	padding: 24px;
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.gym-class-card h3 {
	color: var(--gym-text);
	font-size: 1.15rem;
	font-weight: 500;
	margin: 0;
}
.gym-class-top {
	display: flex;
	justify-content: space-between;
	align-items: center;
	margin-bottom: 4px;
}
.gym-class-category {
	color: var(--gym-accent);
	font-size: 0.78rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
}
.gym-class-time {
	color: var(--gym-text-muted);
	font-size: 0.9rem;
	font-weight: 600;
}
.gym-class-instructor {
	color: var(--gym-text-muted);
	font-size: 0.88rem;
}
.gym-class-spots {
	color: var(--gym-good);
	font-size: 0.85rem;
	font-weight: 600;
	margin: 6px 0 10px;
}
.gym-class-spots-full {
	color: var(--gym-warn);
}
.gym-class-full {
	opacity: 0.85;
}
.gym-booking-message {
	background: var(--gym-card);
	border: 1px solid var(--gym-good);
	color: var(--gym-text);
	border-radius: 8px;
	padding: 14px 18px;
	margin-bottom: 24px;
	font-size: 0.92rem;
}
.gym-booking-message-error {
	border-color: var(--gym-bad);
}

/* Membership dashboard */
.gym-membership-card {
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 12px;
	padding: 28px 30px;
	margin-bottom: 40px;
}
.gym-membership-card-top {
	display: flex;
	justify-content: space-between;
	align-items: flex-start;
	flex-wrap: wrap;
	gap: 12px;
}
.gym-membership-plan {
	font-size: 1.5rem;
	font-family: var(--font-display);
	font-weight: 500;
	color: var(--gym-text);
}
.gym-membership-dates {
	color: var(--gym-text-muted);
	font-size: 0.9rem;
	margin-top: 4px;
}
.gym-membership-stat {
	margin-top: 22px;
	padding-top: 22px;
	border-top: 1px solid var(--gym-border);
	display: flex;
	align-items: baseline;
	gap: 10px;
}
.gym-membership-stat-number {
	font-size: 2.6rem;
	font-weight: 700;
	color: var(--gym-accent);
	line-height: 1;
}
.gym-membership-stat-label {
	color: var(--gym-text-muted);
	font-size: 0.9rem;
}

.gym-status-badge {
	display: inline-block;
	padding: 5px 14px;
	border-radius: 20px;
	font-size: 0.72rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	background: var(--gym-bg-alt);
	color: var(--gym-text);
}
.gym-status-active, .gym-status-booked, .gym-status-attended {
	background: rgba(63, 125, 74, 0.12);
	color: var(--gym-good);
}
.gym-status-waitlisted, .gym-status-frozen {
	background: rgba(169, 121, 26, 0.14);
	color: var(--gym-warn);
}
.gym-status-expired, .gym-status-cancelled, .gym-status-no-show {
	background: rgba(168, 50, 50, 0.12);
	color: var(--gym-bad);
}

.gym-dashboard-grid {
	display: grid;
	gap: 40px;
	grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

.gym-booking-list, .gym-checkin-list {
	display: flex;
	flex-direction: column;
	border-top: 1px solid var(--gym-border);
}
.gym-booking-row, .gym-checkin-row {
	border-bottom: 1px solid var(--gym-border);
	padding: 16px 2px;
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
}
.gym-booking-class {
	color: var(--gym-text);
	font-weight: 600;
	font-size: 0.95rem;
}
.gym-booking-when, .gym-checkin-duration {
	color: var(--gym-text-muted);
	font-size: 0.85rem;
}
.gym-booking-right {
	display: flex;
	align-items: center;
	gap: 12px;
}
.gym-cancel-btn {
	background: transparent;
	border: 1px solid var(--gym-border);
	color: var(--gym-text-muted);
	border-radius: 6px;
	padding: 6px 12px;
	font-size: 0.8rem;
	font-weight: 600;
	cursor: pointer;
	font-family: inherit;
	touch-action: manipulation;
}
.gym-cancel-btn:hover {
	border-color: var(--gym-bad);
	color: var(--gym-bad);
}
.gym-cancel-btn:disabled {
	opacity: 0.5;
	cursor: not-allowed;
}
.gym-checkin-row {
	color: var(--gym-text);
	font-size: 0.9rem;
}

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

@media (max-width: 576px) {
	.gym-hero {
		padding: 60px 18px 70px;
	}
	.gym-section {
		padding: 50px 18px;
	}
	.gym-membership-card-top {
		flex-direction: column;
	}
}

/* Join Now web form (Gym Signup) - reskin the stock Frappe web form to match
   the site's brand instead of leaving it in default Bootstrap styling. */

/* The Gym Signup is a stock Frappe Web Form, so target its route and bring
   the surrounding website chrome into the same visual system. */
body[data-path^="join-now"] {
	background: var(--gym-bg-alt);
	color: var(--gym-text);
	font-family: var(--font-body);
}
body[data-path^="join-now"] > .navbar {
	position: sticky;
	top: 0;
	z-index: 500;
	min-height: 64px;
	background: var(--gym-bg) !important;
	border-bottom: 1px solid var(--gym-border);
	box-shadow: none;
}
body[data-path^="join-now"] > .navbar .container {
	max-width: 1200px;
	min-height: 64px;
}
body[data-path^="join-now"] > .navbar .navbar-brand {
	font-family: var(--font-display);
	font-weight: 500;
	color: var(--gym-text);
}
body[data-path^="join-now"] > .navbar .nav-link {
	color: var(--gym-text-muted);
	font-weight: 600;
}
body[data-path^="join-now"] .page-content-wrapper {
	background: var(--gym-bg-alt);
}
body[data-path^="join-now"] main.container {
	max-width: none;
	margin: 0 !important;
	padding: 0 24px;
}
body[data-path^="join-now"] .page-breadcrumbs,
body[data-path^="join-now"] .page-header-wrapper {
	display: none;
}
body[data-path^="join-now"] .web-form-container {
	margin-top: 64px;
}
body[data-path^="join-now"] .web-form-container > div[style*="height: 3rem"] {
	display: none;
}
body[data-path^="join-now"] .web-form-title h1 {
	font-size: clamp(2rem, 4vw, 3rem);
	line-height: 1.1;
}
body[data-path^="join-now"] > footer {
	background: var(--gym-bg-alt);
	border-top: 1px solid var(--gym-border);
	color: var(--gym-text-muted);
	font-family: var(--font-body);
}

.web-form-container {
	max-width: 640px;
	margin: 40px auto 80px;
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 12px;
	padding: 40px;
	color: var(--gym-text);
}
.web-form-container .web-form-title h1 {
	color: var(--gym-text);
	font-family: var(--font-display);
	font-weight: 500;
}
.web-form-container .web-form-title p {
	color: var(--gym-text-muted);
}
.web-form-container .web-form-introduction {
	color: var(--gym-text-muted);
	margin-top: 10px;
}
.web-form-container label {
	color: var(--gym-text-muted);
	font-weight: 600;
	font-size: 0.85rem;
}
.web-form-container .form-control,
.web-form-container select,
.web-form-container textarea {
	background: var(--gym-bg);
	border: 1px solid var(--gym-border);
	color: var(--gym-text);
	border-radius: 6px;
}
.web-form-container .form-control:focus,
.web-form-container select:focus,
.web-form-container textarea:focus {
	border-color: var(--gym-accent);
	box-shadow: 0 0 0 3px rgba(209, 44, 33, 0.15);
	outline: none;
}
.web-form-container .submit-btn {
	background: var(--gym-accent);
	border-color: var(--gym-accent);
	font-weight: 700;
	padding: 10px 26px;
}
.web-form-container .submit-btn:hover {
	background: var(--gym-accent-dark);
	border-color: var(--gym-accent-dark);
}
.web-form-container .discard-btn {
	background: transparent;
	border: 1px solid var(--gym-border);
	color: var(--gym-text-muted);
}
.web-form-container .success-title,
.web-form-container .success-message {
	color: var(--gym-text);
}
.web-form-container .success-icon {
	color: var(--gym-good);
}

@media (max-width: 576px) {
	.web-form-container {
		margin: 0;
		border-radius: 0;
		padding: 28px 20px;
	}
}

/* Language switcher - small, unobtrusive, present on every page */
.gym-lang-switcher {
	position: fixed;
	top: 14px;
	right: 14px;
	z-index: 1000;
	display: flex;
	gap: 2px;
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 20px;
	padding: 4px;
	box-shadow: 0 4px 16px rgba(26, 23, 20, 0.1);
}
.gym-lang-link {
	font-family: var(--font-body);
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.02em;
	color: var(--gym-text-muted);
	text-decoration: none;
	padding: 5px 10px;
	border-radius: 16px;
	touch-action: manipulation;
}
.gym-lang-link:hover {
	color: var(--gym-text);
	text-decoration: none;
}
.gym-lang-link.gym-lang-active {
	background: var(--gym-ink);
	color: var(--gym-bg);
}

@media (max-width: 576px) {
	.gym-lang-switcher {
		top: 8px;
		right: 8px;
	}
}

/* Gym traffic chart - single-series magnitude bars (check-ins per weekday).
   One hue throughout (accent), no legend needed for a single series; only the
   busiest bar carries a direct label, the rest surface their value on
   hover/focus via a lightweight CSS tooltip. */
.gym-traffic-chart {
	display: flex;
	align-items: flex-end;
	justify-content: center;
	gap: clamp(10px, 3vw, 28px);
	max-width: 640px;
	margin: 0 auto;
}
.gym-traffic-col {
	display: flex;
	flex-direction: column;
	align-items: center;
	flex: 1 1 0;
}
.gym-traffic-bar-track {
	position: relative;
	height: 180px;
	width: 100%;
	max-width: 24px;
	display: flex;
	align-items: flex-end;
	justify-content: center;
}
.gym-traffic-bar {
	width: 100%;
	background: var(--gym-accent);
	border-radius: 4px 4px 0 0;
	cursor: default;
	transition: background 0.15s ease;
}
.gym-traffic-bar-peak {
	background: var(--gym-ink);
}
.gym-traffic-bar:hover,
.gym-traffic-bar:focus-visible {
	background: var(--gym-accent-dark);
	outline: none;
}
.gym-traffic-bar-peak:hover,
.gym-traffic-bar-peak:focus-visible {
	background: var(--gym-ink);
	opacity: 0.85;
}
.gym-traffic-value {
	position: absolute;
	top: -26px;
	font-family: var(--font-data);
	font-variant-numeric: tabular-nums;
	font-weight: 700;
	font-size: 0.95rem;
	color: var(--gym-text);
}
.gym-traffic-day {
	margin-top: 10px;
	font-size: 0.78rem;
	font-weight: 600;
	letter-spacing: 0.03em;
	color: var(--gym-text-muted);
	text-transform: uppercase;
}

/* CSS-only tooltip: shown on hover/focus, reachable by keyboard too */
.gym-traffic-bar[data-tooltip]::before {
	content: attr(data-tooltip);
	position: absolute;
	bottom: calc(100% + 10px);
	left: 50%;
	transform: translateX(-50%) translateY(4px);
	background: var(--gym-ink);
	color: var(--gym-bg);
	font-size: 0.78rem;
	font-weight: 600;
	white-space: nowrap;
	padding: 6px 10px;
	border-radius: 6px;
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.12s ease, transform 0.12s ease;
	z-index: 10;
}
.gym-traffic-bar[data-tooltip]:hover::before,
.gym-traffic-bar[data-tooltip]:focus-visible::before {
	opacity: 1;
	transform: translateX(-50%) translateY(0);
}

@media (prefers-reduced-motion: reduce) {
	.gym-traffic-bar,
	.gym-traffic-bar[data-tooltip]::before {
		transition: none;
	}
}

@media (max-width: 480px) {
	.gym-traffic-bar-track {
		height: 130px;
	}
}

/* Footer - the page needs a real end: quick links, hours, contact. Plain
   text columns separated by a hairline, no card. */
.gym-footer {
	background: var(--gym-bg-alt);
	border-top: 1px solid var(--gym-border);
	padding: 56px 24px 28px;
}

/* Icons (Lucide, ISC license, inlined - no build step, no dependency) */
.gym-icon {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
	color: var(--gym-text-muted);
}
.gym-nav-mark {
	width: 18px;
	height: 18px;
	flex-shrink: 0;
	object-fit: contain;
}
.gym-footer-bottom {
	max-width: 1100px;
	margin: 40px auto 0;
	padding-top: 22px;
	border-top: 1px solid var(--gym-border);
	font-size: 0.8rem;
	color: var(--gym-text-muted);
	display: flex;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 10px;
}

@media (max-width: 640px) {
	.gym-footer-inner {
		gap: 32px;
	}
}

/* Cross-document View Transitions - native browser API, zero JS, zero KB.
   Gives a gentle cross-fade between page navigations on supporting browsers;
   browsers without support just ignore this at-rule and navigate normally. */
@view-transition {
	navigation: auto;
}

/* The nav and footer are identical across pages - give them a stable
   transition name so they read as persistent chrome rather than fading
   out/in with the rest of the page. */
.gym-nav {
	view-transition-name: gym-site-nav;
}
.gym-footer {
	view-transition-name: gym-site-footer;
}

@media (prefers-reduced-motion: reduce) {
	@view-transition {
		navigation: none;
	}
}

/* Scroll reveal - applied only to section-head blocks (one per section, not
   every card), so section titles arrive gently as the page scrolls instead
   of the whole page cross-fading in piece by piece. Progressive enhancement:
   content is fully visible by default; JS only introduces the hidden state
   once it has confirmed it can also reveal it again. */
.js-reveal-ready .gym-reveal {
	opacity: 0;
	transform: translateY(14px);
	transition: opacity 0.25s ease, transform 0.25s ease;
}
.js-reveal-ready .gym-reveal.gym-reveal-visible {
	opacity: 1;
	transform: none;
}

@media (prefers-reduced-motion: reduce) {
	.js-reveal-ready .gym-reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* Login page - Frappe's stock /login is shared with desk sign-in across the
   whole bench, so the markup/IDs/JS stay untouched (login.js targets them by
   id/class); this just restyles the existing card to match the rest of the
   site instead of Frappe's default Bootstrap look. */
.gym-login-page .gym-section {
	padding-bottom: 96px;
	display: flex;
	justify-content: center;
}
.gym-login-content {
	width: 100%;
	max-width: 420px;
	margin: 0 auto;
}
.gym-login-content .login-content.page-card {
	background: var(--gym-card);
	border: 1px solid var(--gym-border);
	border-radius: 14px;
	box-shadow: none;
	padding: 40px 36px;
}
.gym-login-content .page-card-head {
	text-align: left;
	margin-bottom: 24px;
}
.gym-login-content .page-card-head .app-logo {
	display: none;
}
.gym-login-content .page-card-head h4 {
	font-family: "Archivo Narrow", "Arial Narrow", sans-serif;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: -0.03em;
	font-size: 26px;
	color: var(--gym-text);
	margin: 0;
}
.gym-login-content .form-control {
	font-family: var(--font-body);
	background: var(--gym-bg);
	border: 1px solid var(--gym-border);
	border-radius: 8px;
	color: var(--gym-text);
	height: 44px;
	padding: 0 14px;
}
.gym-login-content .form-control:focus {
	border-color: var(--gym-accent);
	box-shadow: 0 0 0 3px rgba(209, 44, 33, 0.15);
	outline: none;
}
.gym-login-content .btn-login,
.gym-login-content .btn-forgot,
.gym-login-content .btn-login-with-email-link {
	font-family: var(--font-body);
	font-weight: 600;
	border-radius: 8px;
	height: 44px;
}
.gym-login-content .btn-primary.btn-login,
.gym-login-content .btn-primary.btn-forgot,
.gym-login-content .btn-primary.btn-login-with-email-link {
	background: var(--gym-accent);
	border-color: var(--gym-accent);
}
.gym-login-content .btn-primary.btn-login:hover,
.gym-login-content .btn-primary.btn-forgot:hover,
.gym-login-content .btn-primary.btn-login-with-email-link:hover {
	background: var(--gym-accent-dark);
	border-color: var(--gym-accent-dark);
}
.gym-login-content .forgot-password-message a,
.gym-login-content .sign-up-message a,
.gym-login-content a {
	color: var(--gym-accent);
}
.gym-login-content .text-muted {
	color: var(--gym-text-muted) !important;
}

/* Premium club art direction — homepage and shared dark brand system */
.gym-premium {
	--gym-bg: #0b0b0b;
	--gym-bg-alt: #111;
	--gym-ink: #f3f0e8;
	--gym-accent: #ef3829;
	--gym-accent-dark: #c9271c;
	--gym-text: #f3f0e8;
	--gym-text-muted: #a7a7a7;
	--gym-card: #171717;
	--gym-border: #303030;
	background: #0b0b0b;
	color: var(--gym-text);
	overflow: clip;
}
.gym-premium,
.gym-premium * { box-sizing: border-box; }
.gym-premium h1,.gym-premium h2,.gym-premium h3 {
	font-family: "Archivo Narrow","Arial Narrow",sans-serif;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: -.045em;
}
.gym-premium-nav {
	position: fixed;
	inset: 0 0 auto;
	background: linear-gradient(to bottom,rgba(0,0,0,.82),transparent);
	border: 0;
	color: #f3f0e8;
	transition: background .25s ease,backdrop-filter .25s ease;
}
.gym-premium-nav.gym-nav-scrolled {
	background: rgba(11,11,11,.93);
	backdrop-filter: blur(12px);
	border-bottom: 1px solid rgba(255,255,255,.12);
}
.gym-premium-nav .gym-nav-inner {max-width:none;padding:0 3vw;height:82px}
.gym-premium-nav .gym-nav-brand,.gym-premium-nav .gym-nav-account,.gym-premium-nav .gym-nav-links a {color:#f3f0e8}
.gym-premium-nav .gym-nav-brand {font-family:"Archivo Narrow",sans-serif;text-transform:uppercase;font-weight:700;letter-spacing:-.03em;font-size:1.2rem}
.gym-premium-nav .gym-nav-mark{width:38px;height:38px}
.gym-premium-nav .gym-nav-links{justify-content:center;gap:2.2vw}
.gym-premium-nav .gym-nav-links a{font-size:.74rem;text-transform:uppercase;letter-spacing:.11em;position:relative}
.gym-premium-nav .gym-nav-links a:after{content:"";position:absolute;left:0;right:100%;bottom:-7px;height:1px;background:var(--gym-accent);transition:right .2s}
.gym-premium-nav .gym-nav-links a:hover:after{right:0}
.gym-premium .gym-btn{border-radius:0;text-transform:uppercase;letter-spacing:.08em;font-size:.76rem;padding:15px 22px}
.gym-premium .gym-btn span,.gym-premium .gym-text-link span{display:inline-block;margin-left:18px;transition:transform .2s}
.gym-premium .gym-btn:hover span,.gym-premium .gym-text-link:hover span{transform:translateX(5px)}
.gym-menu-toggle{display:none;width:44px;height:44px;background:transparent;border:0;padding:12px}
.gym-menu-toggle span{display:block;height:1px;background:#f3f0e8;margin:6px 0}
.gym-cinematic-hero{height:100svh;min-height:680px;position:relative;background:#050505;color:#f3f0e8}
.gym-hero-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;animation:gym-hero-settle 1.5s cubic-bezier(.2,.7,.2,1) both}
.gym-hero-shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,.83) 0%,rgba(0,0,0,.42) 48%,rgba(0,0,0,.12) 75%),linear-gradient(0deg,rgba(0,0,0,.75),transparent 45%)}
.gym-hero-editorial{position:absolute;left:5vw;bottom:16vh;z-index:1;max-width:900px}
.gym-kicker,.gym-section-index,.gym-gallery-head>span,.gym-crew-head>span,.gym-schedule-head>span,.gym-wellness-copy>span,.gym-tour>div>span{font-size:.7rem;text-transform:uppercase;letter-spacing:.18em;font-weight:700;color:var(--gym-accent)}
.gym-hero-editorial h1{font-size:clamp(5.2rem,11vw,10.8rem);line-height:.76;margin:18px 0 30px}
.gym-hero-editorial h1 span{display:block;animation:gym-title-in .9s cubic-bezier(.16,1,.3,1) both;clip-path:inset(0)}
.gym-hero-editorial h1 span:nth-child(2){margin-left:8vw;animation-delay:.1s}
.gym-hero-deck{font-size:clamp(1rem,1.4vw,1.3rem);max-width:530px;line-height:1.55;color:#d0cec8}
.gym-hero-actions{display:flex;align-items:center;gap:32px;margin-top:32px}
.gym-text-link{color:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.76rem;font-weight:700;border-bottom:1px solid currentColor;padding-bottom:5px;text-decoration:none}
.gym-text-link:hover{color:var(--gym-accent);text-decoration:none}
.gym-hero-utility{position:absolute;z-index:1;left:5vw;right:5vw;bottom:28px;border-top:1px solid rgba(255,255,255,.28);padding-top:15px;display:grid;grid-template-columns:180px 180px 1fr;gap:25px;align-items:end}
.gym-hero-utility small{display:block;color:#9d9d9d;text-transform:uppercase;letter-spacing:.14em;font-size:.62rem;margin-bottom:4px}
.gym-hero-utility strong{font-size:.79rem;letter-spacing:.04em}
.gym-hero-utility>a{justify-self:end;color:#f3f0e8;text-transform:uppercase;letter-spacing:.14em;font-size:.62rem}
.gym-offer{background:var(--gym-accent);color:#090909;padding:42px 5vw 70px}
.gym-offer-label{border-bottom:1px solid rgba(0,0,0,.3);padding-bottom:18px;text-transform:uppercase;letter-spacing:.16em;font-size:.68rem;font-weight:700}.gym-offer-label span{margin-right:30px}
.gym-offer-grid{display:grid;grid-template-columns:1.4fr .6fr;gap:8vw;align-items:end;padding-top:35px}
.gym-offer-grid>div>p{font-size:.8rem;text-transform:uppercase;letter-spacing:.13em;font-weight:700}
.gym-offer h2{font-size:clamp(5rem,13vw,13rem);line-height:.78;margin:15px 0 0;overflow-wrap:anywhere}
.gym-offer-period{font-family:"Archivo Narrow",sans-serif;font-size:1.5rem;font-weight:700;text-transform:uppercase}
.gym-offer-copy{padding-bottom:10px}.gym-offer-copy h3{font-size:clamp(2rem,4vw,4rem);line-height:.9}.gym-offer-copy p{font-size:1rem!important;text-transform:none!important;letter-spacing:0!important;line-height:1.6;max-width:420px;margin:18px 0 28px}
.gym-btn-light{background:#f3f0e8;color:#0b0b0b}.gym-btn-light:hover{background:#0b0b0b;color:#f3f0e8}
.gym-dark-section{background:#0b0b0b;color:#f3f0e8;padding:120px 5vw}
.gym-section-index{padding-bottom:25px;border-bottom:1px solid #303030}
.gym-intro-grid{display:grid;grid-template-columns:1.45fr .55fr;gap:8vw;padding-top:60px}
.gym-intro-grid h2{font-size:clamp(4rem,8vw,8.5rem);line-height:.84;margin:0}.gym-intro-grid h2 em{font-style:normal;color:var(--gym-accent)}
.gym-intro-copy{align-self:end}.gym-intro-copy>p{font-size:1.1rem;line-height:1.7;color:#b6b4ae;max-width:42ch}
.gym-intro-copy dl{margin:45px 0 0}.gym-intro-copy dl div{display:flex;align-items:baseline;gap:15px;border-top:1px solid #333;padding:14px 0}.gym-intro-copy dt{font:700 2rem "Archivo Narrow"}.gym-intro-copy dd{margin:0;color:#999;font-size:.78rem;text-transform:uppercase;letter-spacing:.1em}
.gym-marquee{overflow:hidden;background:#f3f0e8;color:#0b0b0b;padding:19px 0;white-space:nowrap}.gym-marquee div{font:700 2.2rem "Archivo Narrow";letter-spacing:-.03em;animation:gym-marquee 24s linear infinite;width:max-content}
.gym-gallery{padding-top:140px}.gym-gallery-head{display:grid;grid-template-columns:1fr 2fr;align-items:end;margin-bottom:60px}.gym-gallery-head h2{font-size:clamp(5rem,10vw,10rem);line-height:.78;margin:0}
.gym-gallery figure{margin:0}.gym-gallery img{width:100%;height:100%;object-fit:cover;filter:saturate(.78) contrast(1.05);transition:transform .6s cubic-bezier(.2,.7,.2,1),filter .4s}.gym-gallery figure{overflow:hidden}.gym-gallery figure:hover img{transform:scale(1.025);filter:saturate(1)}
.gym-gallery-main{width:88%;margin-left:auto!important;aspect-ratio:16/8}.gym-gallery figcaption{font-size:.64rem;text-transform:uppercase;letter-spacing:.14em;color:#999;padding-top:10px}
.gym-gallery-split{display:grid;grid-template-columns:.8fr 1.2fr;gap:10vw;margin-top:100px;align-items:end}.gym-gallery-split figure{aspect-ratio:3/4;max-width:500px}.gym-gallery-statement{padding-bottom:8vw}.gym-gallery-statement p{font:700 clamp(3rem,6vw,6.5rem)/.92 "Archivo Narrow";text-transform:uppercase;letter-spacing:-.045em;max-width:11ch}
.gym-feature-panels{display:grid;grid-template-columns:repeat(3,1fr);background:#111;color:#f3f0e8;border-top:1px solid #333;border-bottom:1px solid #333}
.gym-feature-panels article{min-height:620px;padding:45px 3vw;display:flex;flex-direction:column;border-right:1px solid #333;transition:background .3s,color .3s}.gym-feature-panels article:last-child{border:0}.gym-feature-panels article:hover{background:var(--gym-accent);color:#090909}.gym-panel-number{font-size:.7rem;letter-spacing:.15em}.gym-feature-panels h2{font-size:clamp(4rem,7vw,7.5rem);line-height:.8;margin:auto 0 30px;writing-mode:vertical-rl;transform:rotate(180deg)}.gym-feature-panels p{font-size:.78rem;text-transform:uppercase;letter-spacing:.08em;line-height:1.7;max-width:30ch}
.gym-wellness{position:relative;min-height:850px;padding:0}.gym-wellness>img{width:100%;height:850px;object-fit:cover}.gym-wellness:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,.85),rgba(0,0,0,.08))}
.gym-wellness-copy{position:absolute;z-index:1;left:5vw;top:50%;transform:translateY(-50%);max-width:800px}.gym-wellness-copy h2{font-size:clamp(4.5rem,9vw,9rem);line-height:.82;margin:25px 0}.gym-wellness-copy p{color:#d0cec8;max-width:480px;font-size:1.05rem;line-height:1.65}
.gym-schedule-preview{padding-top:140px}.gym-schedule-head{display:grid;grid-template-columns:1fr 2fr auto;align-items:end;margin-bottom:55px}.gym-schedule-head h2{font-size:clamp(5rem,9vw,9rem);line-height:.78;margin:0}.gym-schedule-list{border-top:1px solid #333}.gym-schedule-list>a{display:grid;grid-template-columns:150px 1fr 180px 30px;gap:25px;align-items:center;color:#f3f0e8;border-bottom:1px solid #333;padding:24px 0;text-decoration:none;transition:padding .2s,background .2s}.gym-schedule-list>a:hover{padding-left:18px;background:#141414}.gym-schedule-list time{font-size:.7rem;text-transform:uppercase;color:#999}.gym-schedule-list time strong{display:block;font:700 1.8rem "Archivo Narrow";color:#f3f0e8}.gym-schedule-list h3{font-size:clamp(1.6rem,3vw,3rem);margin:0}.gym-schedule-list>a>span{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:#999}
.gym-crew{border-top:1px solid #262626}.gym-crew-head{display:grid;grid-template-columns:1fr 2fr;margin-bottom:60px}.gym-crew-head h2{font-size:clamp(5rem,9vw,9rem);line-height:.78;margin:0}.gym-crew-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2vw;margin-bottom:40px}.gym-crew-grid article:nth-child(2){margin-top:100px}.gym-crew-grid img,.gym-crew-fallback{width:100%;aspect-ratio:3/4;object-fit:cover;background:#171717;filter:grayscale(.2);transition:transform .5s,filter .4s}.gym-crew-grid article{overflow:hidden}.gym-crew-grid article:hover img{transform:scale(1.025);filter:none}.gym-crew-fallback{display:grid;place-items:center;font:700 6rem "Archivo Narrow";color:#444}.gym-crew-grid h3{font-size:1.8rem;margin:18px 0 4px}.gym-crew-grid p{color:#999;font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}
.gym-tour{min-height:820px;position:relative;color:#f3f0e8}.gym-tour>img{position:absolute;width:100%;height:100%;object-fit:cover;filter:brightness(.43)}.gym-tour>div{position:absolute;left:5vw;top:50%;transform:translateY(-50%);max-width:800px}.gym-tour h2{font-size:clamp(5rem,10vw,10rem);line-height:.78;margin:22px 0}.gym-tour p{max-width:440px;font-size:1rem;color:#d0cec8;margin-bottom:30px}
.gym-quote{text-align:center;min-height:650px;display:flex;flex-direction:column;justify-content:center}.gym-quote blockquote{font:700 clamp(3rem,7vw,7rem)/.95 "Archivo Narrow";text-transform:uppercase;letter-spacing:-.04em;max-width:1050px;margin:0 auto}.gym-quote>div{margin-top:35px}.gym-quote span{color:var(--gym-accent);letter-spacing:.2em}.gym-quote p{color:#999;text-transform:uppercase;letter-spacing:.12em;font-size:.7rem}
.gym-final-cta{background:var(--gym-accent);color:#090909;padding:100px 5vw;position:relative}.gym-final-cta>p{text-transform:uppercase;letter-spacing:.16em;font-size:.7rem;font-weight:700}.gym-final-cta h2{font-size:clamp(5rem,12vw,13rem);line-height:.74;margin:40px 0}.gym-final-cta .gym-btn{position:absolute;right:6vw;bottom:10vw}
.gym-mega-footer{background:#080808;color:#f3f0e8;padding:70px 5vw 25px;position:relative;overflow:hidden}.gym-footer-top{display:flex;justify-content:space-between;border-bottom:1px solid #303030;padding-bottom:35px}.gym-footer-top p{color:#888}.gym-footer-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:40px;padding:55px 0 140px;position:relative;z-index:1}.gym-footer-grid h3{font:700 .68rem "Archivo";letter-spacing:.14em;color:#777;margin-bottom:20px}.gym-footer-grid a,.gym-footer-grid p{display:block;color:#f3f0e8;text-decoration:none;font-size:.82rem;line-height:1.9}.gym-footer-word{position:absolute;left:4vw;bottom:20px;font:700 clamp(7rem,18vw,20rem)/.65 "Archivo Narrow";text-transform:uppercase;letter-spacing:-.07em;color:#121212;white-space:nowrap}.gym-footer-legal{position:relative;z-index:1;border-top:1px solid #282828;padding-top:20px;display:flex;gap:25px;color:#666;font-size:.65rem;text-transform:uppercase;letter-spacing:.1em}.gym-footer-legal a{color:#777}
.gym-footer-nav-brand {
	color: #f3f0e8;
	font-family: "Archivo Narrow", sans-serif;
	text-transform: uppercase;
	font-weight: 700;
	letter-spacing: -0.03em;
	font-size: 1.2rem;
	gap: 14px;
}
.gym-footer-mark {
	width: 56px;
	height: 56px;
}
.gym-sticky-join{position:fixed;right:24px;bottom:24px;z-index:450;background:#f3f0e8;color:#0b0b0b;padding:15px 18px;display:flex;align-items:center;gap:30px;text-decoration:none;box-shadow:0 8px 30px rgba(0,0,0,.35);transform:translateY(150%);transition:transform .3s}.gym-sticky-join.is-visible{transform:none}.gym-sticky-join small{display:block;text-transform:uppercase;font-size:.55rem;letter-spacing:.13em;color:#666}.gym-sticky-join span{font-size:.72rem}.gym-sticky-join b{text-transform:uppercase;font-size:.7rem;letter-spacing:.08em}
@keyframes gym-hero-settle{from{transform:scale(1.06)}to{transform:scale(1)}}@keyframes gym-title-in{from{transform:translateY(80px);opacity:0}to{transform:none;opacity:1}}@keyframes gym-marquee{to{transform:translateX(-50%)}}
@media(max-width:900px){
 .gym-premium-nav .gym-nav-inner{height:68px;padding:0 18px}.gym-premium-nav .gym-nav-links{position:fixed;inset:0;background:#0b0b0b;display:flex;flex-direction:column;justify-content:center;padding:12vw;gap:8px;transform:translateY(-105%);transition:transform .4s cubic-bezier(.16,1,.3,1);z-index:-1}.gym-premium-nav .gym-nav-links.is-open{transform:none}.gym-premium-nav .gym-nav-links a{font:700 clamp(2.6rem,10vw,5rem)/1 "Archivo Narrow";letter-spacing:-.04em}.gym-premium-nav .gym-nav-account{display:none}.gym-menu-toggle{display:block}.gym-cinematic-hero{min-height:720px}.gym-hero-editorial{left:20px;right:20px;bottom:150px}.gym-hero-editorial h1{font-size:clamp(4.4rem,19vw,8rem)}.gym-hero-editorial h1 span:nth-child(2){margin-left:0}.gym-hero-deck{max-width:360px}.gym-hero-utility{left:20px;right:20px;grid-template-columns:1fr 1fr}.gym-hero-utility>a{display:none}.gym-offer-grid,.gym-intro-grid,.gym-gallery-head,.gym-schedule-head,.gym-crew-head{grid-template-columns:1fr}.gym-offer-grid{gap:45px}.gym-offer h2{font-size:clamp(4.5rem,22vw,9rem)}.gym-dark-section{padding:85px 20px}.gym-intro-grid{gap:45px}.gym-gallery-main{width:100%}.gym-gallery-split{grid-template-columns:1fr;gap:60px;margin-top:60px}.gym-gallery-statement{padding:0}.gym-feature-panels article{min-height:480px;padding:35px 20px}.gym-feature-panels h2{font-size:clamp(3rem,10vw,5rem)}.gym-wellness,.gym-wellness>img{min-height:700px;height:700px}.gym-wellness-copy{left:20px;right:20px}.gym-schedule-head{gap:25px}.gym-schedule-head .gym-text-link{justify-self:start}.gym-schedule-list>a{grid-template-columns:95px 1fr 20px}.gym-schedule-list>a>span{display:none}.gym-crew-grid{gap:14px}.gym-crew-grid article:nth-child(2){margin-top:50px}.gym-final-cta .gym-btn{position:static}.gym-footer-grid{grid-template-columns:1fr 1fr;padding-bottom:110px}
}
@media(max-width:600px){
 .gym-premium-nav .gym-nav-brand span{max-width:105px;overflow:hidden;text-overflow:ellipsis}.gym-premium-nav .gym-btn-sm{padding:11px 12px;font-size:.62rem}.gym-premium-nav .gym-nav-actions{gap:4px}.gym-premium-nav .gym-nav-lang{padding:2px;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16)}.gym-premium-nav .gym-nav-lang a{padding:3px 6px;font-size:.62rem;color:#d8d6d1}.gym-premium-nav .gym-nav-lang a.gym-nav-lang-active{background:#f3f0e8;color:#0b0b0b}.gym-cinematic-hero{height:100svh}.gym-hero-shade{background:linear-gradient(0deg,rgba(0,0,0,.9),rgba(0,0,0,.15) 80%)}.gym-hero-image{object-position:64% center}.gym-hero-editorial h1{line-height:.8}.gym-hero-deck{font-size:.9rem}.gym-hero-actions{align-items:flex-start;flex-direction:column;gap:20px}.gym-hero-utility{grid-template-columns:1fr 1fr}.gym-offer{padding:35px 20px 60px}.gym-intro-grid h2,.gym-gallery-head h2,.gym-schedule-head h2,.gym-crew-head h2,.gym-wellness-copy h2,.gym-tour h2{font-size:clamp(3.7rem,18vw,6rem)}.gym-marquee div{font-size:1.6rem}.gym-feature-panels{grid-template-columns:1fr}.gym-feature-panels article{min-height:300px;border-right:0;border-bottom:1px solid #333}.gym-feature-panels h2{writing-mode:initial;transform:none;margin:auto 0 20px}.gym-gallery-split figure{max-width:78%}.gym-wellness>img{object-position:65% center}.gym-crew-grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;margin-right:-20px;padding-right:20px}.gym-crew-grid article{min-width:78vw;scroll-snap-align:start}.gym-crew-grid article:nth-child(2){margin-top:0}.gym-tour{min-height:690px}.gym-quote{min-height:520px}.gym-final-cta{padding:75px 20px}.gym-final-cta h2{font-size:18vw}.gym-footer-top{display:block}.gym-footer-grid{grid-template-columns:1fr 1fr;gap:35px 20px}.gym-sticky-join{left:0;right:0;bottom:0;justify-content:space-between;padding:13px 16px}.gym-footer-legal{padding-bottom:65px;flex-wrap:wrap}
}
@media(prefers-reduced-motion:reduce){.gym-hero-image,.gym-hero-editorial h1 span,.gym-marquee div{animation:none}.gym-premium *{scroll-behavior:auto!important}.gym-gallery img,.gym-sticky-join{transition:none}}

/* Page header - every interior page's opening section: the non-cinematic
   equivalent of the homepage's video hero. Same numbered-index + oversized
   condensed headline language, sized for a single page rather than a
   full-bleed photograph. Generous top padding clears the fixed premium nav,
   which (unlike the plain .gym-nav) floats over the page instead of pushing
   content down. */
.gym-page-header {
	padding: 170px 5vw 90px;
	background: var(--gym-bg);
	color: var(--gym-text);
}
.gym-page-header h1 {
	font-size: clamp(3.4rem, 8vw, 7rem);
	line-height: 0.84;
	margin: 22px 0 0;
	max-width: 18ch;
}
.gym-page-header .gym-page-deck {
	margin: 26px 0 0;
	max-width: 58ch;
	font-size: 1.05rem;
	line-height: 1.65;
	color: var(--gym-text-muted);
	text-transform: none;
	letter-spacing: normal;
}
/* Quieter variant for logged-in account pages (My Membership, My Bookings) -
   these aren't selling anything, so the huge marketing-scale type would be
   the wrong register. Smaller headline, less top/bottom air. */
.gym-page-header-quiet {
	padding: 150px 5vw 50px;
}
.gym-page-header-quiet h1 {
	font-size: clamp(2.4rem, 4.5vw, 3.6rem);
	max-width: none;
}
@media (max-width: 900px) {
	.gym-page-header {
		padding: 130px 20px 60px;
	}
	.gym-page-header h1 {
		font-size: clamp(2.8rem, 12vw, 5rem);
	}
	.gym-page-header-quiet {
		padding: 120px 20px 40px;
	}
	.gym-page-header-quiet h1 {
		font-size: clamp(2.2rem, 9vw, 3rem);
	}
}

/* Shared premium tokens for every Gym-owned page. */
.gym-full-bleed,
body[data-path^="join-now"] {
	--gym-bg: #0b0b0b;
	--gym-bg-alt: #111111;
	--gym-ink: #f3f0e8;
	--gym-accent: #ef3829;
	--gym-accent-dark: #c9271c;
	--gym-text: #f3f0e8;
	--gym-text-muted: #a7a7a7;
	--gym-card: #171717;
	--gym-border: #303030;
	--font-display: "Archivo Narrow", "Arial Narrow", sans-serif;
}
.gym-full-bleed h1,
.gym-full-bleed h2,
.gym-full-bleed h3 {
	text-transform: uppercase;
	letter-spacing: -0.035em;
}
.gym-full-bleed .gym-nav {
	background: var(--gym-bg);
}
.gym-full-bleed .gym-price-card,
.gym-full-bleed .gym-trainer-card,
.gym-full-bleed .gym-class-card,
.gym-full-bleed .gym-membership-card {
	box-shadow: none;
	border-radius: 0;
}
.gym-full-bleed .gym-btn {
	border-radius: 0;
	text-transform: uppercase;
	letter-spacing: .07em;
}
body[data-path^="join-now"] .web-form-container {
	border-radius: 0;
}
body.gym-menu-open,
body.gym-dialog-open { overflow: hidden; }

/* Join Now dialog - a native <dialog>, injected once by gym_website.js and
   shared by every "Join Now" / "Get membership" / "Book a club tour" link
   site-wide, so the signup flow never leaves the page it was opened from. */
.gym-join-dialog {
	width: min(92vw, 460px);
	max-height: min(88vh, 720px);
	margin: auto;
	padding: 0;
	border: none;
	border-radius: 12px;
	background: var(--gym-card);
	color: var(--gym-text);
	font-family: var(--font-body);
	box-shadow: 0 24px 60px rgba(26, 23, 20, 0.28);
}
.gym-join-dialog::backdrop {
	background: rgba(26, 23, 20, 0.55);
}
@starting-style {
	.gym-join-dialog[open] {
		opacity: 0;
		transform: translateY(8px) scale(0.98);
	}
}
.gym-join-dialog[open] {
	opacity: 1;
	transform: none;
	transition: opacity 0.2s ease, transform 0.2s ease, overlay 0.2s allow-discrete, display 0.2s allow-discrete;
}
.gym-join-dialog-inner {
	position: relative;
	padding: 36px 32px 32px;
	overflow-y: auto;
	max-height: inherit;
}
.gym-join-close {
	position: absolute;
	top: 16px;
	right: 16px;
	width: 32px;
	height: 32px;
	display: flex;
	align-items: center;
	justify-content: center;
	border: none;
	background: transparent;
	color: var(--gym-text-muted);
	border-radius: 50%;
	cursor: pointer;
	font-size: 1.1rem;
	line-height: 1;
}
.gym-join-close:hover {
	background: var(--gym-bg-alt);
	color: var(--gym-text);
}
.gym-join-close:focus-visible {
	outline: 2px solid var(--gym-ink);
	outline-offset: 2px;
}
.gym-join-dialog h2 {
	font-family: var(--font-display);
	font-weight: 500;
	font-size: clamp(1.5rem, 4vw, 1.85rem);
	margin: 0 0 6px;
	padding-right: 28px;
}
.gym-join-dialog p.gym-join-intro {
	color: var(--gym-text-muted);
	font-size: 0.92rem;
	line-height: 1.5;
	margin: 0 0 26px;
}
.gym-join-form {
	display: grid;
	gap: 16px;
}
.gym-join-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}
.gym-field label {
	display: block;
	color: var(--gym-text-muted);
	font-weight: 600;
	font-size: 0.78rem;
	letter-spacing: 0.02em;
	margin-bottom: 6px;
}
.gym-field .gym-field-optional {
	font-weight: 400;
	text-transform: none;
	letter-spacing: 0;
}
.gym-field input,
.gym-field select,
.gym-field textarea {
	width: 100%;
	background: var(--gym-bg);
	border: 1px solid var(--gym-border);
	color: var(--gym-text);
	border-radius: 6px;
	padding: 10px 12px;
	font-family: inherit;
	font-size: 0.95rem;
}
.gym-field textarea {
	resize: vertical;
	min-height: 70px;
}
.gym-field input:focus,
.gym-field select:focus,
.gym-field textarea:focus {
	border-color: var(--gym-accent);
	box-shadow: 0 0 0 3px rgba(209, 44, 33, 0.15);
	outline: none;
}
.gym-field input:invalid:not(:placeholder-shown) {
	border-color: var(--gym-bad);
}
.gym-join-error {
	color: var(--gym-bad);
	font-size: 0.85rem;
	margin: -4px 0 0;
}
.gym-join-submit {
	margin-top: 6px;
	width: 100%;
	text-align: center;
}
.gym-join-submit:disabled {
	opacity: 0.65;
	cursor: wait;
}
.gym-join-success {
	text-align: center;
	padding: 12px 0 4px;
}
.gym-join-success-icon {
	width: 48px;
	height: 48px;
	margin: 0 auto 18px;
	border-radius: 50%;
	background: var(--gym-good);
	color: #fff;
	display: flex;
	align-items: center;
	justify-content: center;
}
.gym-join-success h2 {
	padding-right: 0;
}
.gym-join-success p {
	color: var(--gym-text-muted);
	font-size: 0.95rem;
	line-height: 1.6;
	max-width: 34ch;
	margin: 0 auto 26px;
}
@media (max-width: 480px) {
	.gym-join-row {
		grid-template-columns: 1fr;
	}
	.gym-join-dialog {
		width: 100vw;
		max-height: 100vh;
		height: 100%;
		border-radius: 0;
		max-width: none;
	}
	.gym-join-dialog-inner {
		padding: 28px 22px 24px;
	}
}
