/* Layout: the app's own dark palette. Each section pairs a claim with the real screen that proves it (framed phone shots from the marketing kit), plus one live entry log in the hero. */
:root {
  color-scheme: dark;
  --ink: #0b0e14;        /* app dark background */
  --panel: #151a23;      /* app dark surface */
  --panel-2: #10141c;    /* recessed strip */
  --line: #262d3a;       /* app dark border */
  --fg: #e6e9ef;         /* app dark text */
  --muted: #9aa4b2;      /* app dark secondary text */
  --blue: #2563eb;       /* primary button */
  --blue-hi: #3b82f6;    /* primary on dark, hover */
  --sky: #78b2ff;        /* share-card eyebrow blue */
  --ok: #4ade80;         /* access granted */
  --warn: #f2b84b;       /* grace period */
  --deny: #ff6b6b;       /* access refused */
  --display: "Barlow Condensed", "Arial Narrow", "Helvetica Neue", Arial, sans-serif;
  --body: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  --wrap: 1140px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body { background: var(--ink); color: var(--fg); font: 16px/1.6 var(--body); margin: 0; }
img { max-width: 100%; height: auto; display: block; }
a { color: inherit; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, summary:focus-visible { outline: 2px solid var(--blue-hi); outline-offset: 3px; }
.wrap { max-width: var(--wrap); margin-inline: auto; padding-inline: 20px; }
h1, h2, h3 { font-family: var(--display); font-weight: 700; line-height: 1.02; text-wrap: balance; margin: 0; letter-spacing: .005em; }
h1 { font-size: clamp(3rem, 7.5vw, 5.6rem); text-transform: uppercase; font-weight: 800; }
h2 { font-size: clamp(2.2rem, 4.6vw, 3.4rem); text-transform: uppercase; }
h3 { font-size: 1.45rem; }
p { margin: 0; }
.eyebrow { font: 600 .78rem/1 var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--sky); }
.lede { font-size: 1.12rem; color: var(--muted); max-width: 58ch; }
.btn { display: inline-flex; align-items: center; gap: .5em; font: 600 1rem/1 var(--body); padding: .95em 1.4em; border-radius: 8px; text-decoration: none; border: 1px solid transparent; cursor: pointer; }
.btn-primary { background: var(--blue); color: #fff; }
.btn-primary:hover { background: var(--blue-hi); }
.btn-ghost { border-color: var(--line); color: var(--fg); background: transparent; }
.btn-ghost:hover { border-color: var(--muted); }
.preview-note { background: var(--panel); color: var(--muted); font: 400 .8rem/1.4 var(--mono); text-align: center; padding: .55rem 16px; }

/* Nav */
header.nav { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 10; background: rgba(11,14,20,.86); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); }
.nav .wrap { display: flex; align-items: center; gap: 28px; min-height: 64px; }
.logo { display: flex; align-items: center; gap: 10px; font: 700 1.2rem/1 var(--body); letter-spacing: -.01em; text-decoration: none; }
.logo img { width: 32px; height: 32px; }
.nav-links { display: flex; gap: 22px; margin-left: auto; font-size: .95rem; }
.nav-links a { text-decoration: none; color: var(--muted); }
.nav-links a:hover { color: var(--fg); }
.nav-cta { display: flex; gap: 10px; }
.nav-cta .btn { padding: .7em 1.05em; font-size: .92rem; }
@media (max-width: 900px) { .nav-links { display: none; } .nav-cta { margin-left: auto; } }
@media (max-width: 440px) { .nav-cta .btn-ghost { display: none; } }

/* Hero */
.hero { padding-block: 64px 72px; overflow: hidden; }
.hero .wrap { display: grid; grid-template-columns: 1.05fr .95fr; gap: 40px; align-items: center; }
.hero-copy { display: grid; gap: 24px; min-width: 0; }
.hero h1 em { font-style: normal; color: var(--blue-hi); }
.hero-actions { display: flex; flex-wrap: wrap; gap: 12px; }
.hero-fine { font-size: .9rem; color: var(--muted); }
.hero-visual { position: relative; min-width: 0; display: grid; justify-items: end; padding-bottom: 40px; }
.hero-visual .phone { width: min(320px, 78%); filter: drop-shadow(0 40px 60px rgba(0,0,0,.55)); }
.hero-visual .door { position: absolute; left: 0; bottom: 0; width: min(340px, 70%); }
@media (max-width: 940px) {
  .hero .wrap { grid-template-columns: 1fr; }
  .hero-visual { justify-items: center; padding-bottom: 0; gap: 0; }
  .hero-visual .door { position: relative; width: 100%; max-width: 420px; margin-top: -90px; }
}

/* Entry log card */
.door { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; box-shadow: 0 30px 70px -25px rgba(0,0,0,.8); }
.door-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--line); font: 600 .74rem/1.2 var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.live { display: inline-flex; align-items: center; gap: 7px; color: var(--ok); }
.live::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--ok); animation: pulse 2s infinite; }
@keyframes pulse { 50% { opacity: .35; } }
.log { list-style: none; margin: 0; padding: 4px 0; font: 400 .82rem/1.35 var(--mono); }
.log li { display: grid; grid-template-columns: 64px 1fr auto; gap: 10px; padding: 9px 16px; align-items: baseline; border-bottom: 1px dashed rgba(38,45,58,.8); }
.log li:last-child { border-bottom: 0; }
.log li.new { animation: slidein .6s ease-out; }
@keyframes slidein { from { background: rgba(59,130,246,.16); } to { background: transparent; } }
@media (prefers-reduced-motion: reduce) { .live::before, .log li.new { animation: none; } }
.log time { color: var(--muted); font-variant-numeric: tabular-nums; }
.log .who { min-width: 0; }
.log .why { display: block; color: var(--muted); font-size: .74rem; }
.tag { font-weight: 600; font-size: .72rem; letter-spacing: .06em; text-transform: uppercase; }
.tag.ok { color: var(--ok); } .tag.warn { color: var(--warn); } .tag.deny { color: var(--deny); }

/* Facts strip */
.facts { border-block: 1px solid var(--line); background: var(--panel-2); }
.facts .wrap { display: grid; grid-template-columns: 1.2fr 1fr 1fr 1fr; }
.fact { padding: 24px 20px; display: grid; gap: 6px; border-left: 1px solid var(--line); align-content: start; }
.fact:first-child { border-left: 0; }
.fact b { font: 700 clamp(1.2rem, 2.1vw, 1.6rem)/1 var(--display); text-transform: uppercase; letter-spacing: .01em; }
.fact span { color: var(--muted); font-size: .92rem; text-wrap: pretty; }
@media (max-width: 780px) { .facts .wrap { grid-template-columns: 1fr 1fr; } .fact:nth-child(3) { border-left: 0; } .fact:nth-child(n+3) { border-top: 1px solid var(--line); } }

/* Generic section */
section.block { padding-block: 96px; }
.block-head { display: grid; gap: 16px; margin-bottom: 48px; max-width: 760px; }
.media-row { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.media-row > * { min-width: 0; }
@media (max-width: 880px) { .media-row { grid-template-columns: 1fr; gap: 40px; } }

/* Status states */
.states { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
.state { background: var(--ink); padding: 28px; display: grid; gap: 14px; align-content: start; }
.state .tag { font-size: .78rem; }
.state p { color: var(--muted); }
@media (max-width: 820px) { .states { grid-template-columns: 1fr; } }

/* Owners / members */
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.side { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 32px; display: grid; gap: 20px; align-content: start; min-width: 0; }
.side h2 { font-size: clamp(1.9rem, 3.4vw, 2.6rem); }
.ticks { list-style: none; padding: 0; margin: 0; display: grid; gap: 14px; }
.ticks li { display: grid; grid-template-columns: 18px 1fr; gap: 12px; }
.ticks li::before { content: ""; width: 10px; height: 10px; margin-top: 8px; border: 2px solid var(--blue-hi); border-radius: 2px; }
.ticks b { font-weight: 600; }
.ticks span { color: var(--muted); }
@media (max-width: 820px) { .split { grid-template-columns: 1fr; } }

/* Phones */
.phones { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: start; max-width: 520px; justify-self: center; width: 100%; }
.phones img:nth-child(2) { margin-top: 56px; }
.phones img, .solo-phone { filter: drop-shadow(0 30px 50px rgba(0,0,0,.55)); }
.solo-phone { width: min(300px, 80%); justify-self: center; }

/* Door section */
.hw { background: linear-gradient(180deg, var(--ink), var(--panel-2)); border-block: 1px solid var(--line); }
.specs { display: grid; border-top: 1px solid var(--line); margin: 0; }
.spec { display: grid; grid-template-columns: 140px 1fr; gap: 20px; padding: 18px 0; border-bottom: 1px solid var(--line); }
.spec dt { font: 600 .78rem/1.5 var(--mono); text-transform: uppercase; letter-spacing: .08em; color: var(--sky); }
.spec dd { margin: 0; color: var(--muted); }
.spec dd b { color: var(--fg); font-weight: 600; }
@media (max-width: 560px) { .spec { grid-template-columns: 1fr; gap: 4px; } }

/* Laptop shot */
.laptop { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: var(--panel); box-shadow: 0 40px 80px -40px rgba(0,0,0,.9); }
.laptop-bar { display: flex; align-items: center; gap: 7px; padding: 10px 14px; border-bottom: 1px solid var(--line); }
.laptop-bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--line); }
.laptop-bar span { margin-left: 10px; font: 400 .76rem/1 var(--mono); color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Features */
.features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; margin-top: 48px; }
.feature { background: var(--ink); padding: 28px; display: grid; gap: 10px; align-content: start; }
.feature h3 { font-size: 1.35rem; text-transform: uppercase; }
.feature p { color: var(--muted); font-size: .95rem; }
@media (max-width: 900px) { .features { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .features { grid-template-columns: 1fr; } }

/* Switching */
.switch { background: var(--panel-2); border-block: 1px solid var(--line); }
.steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px; counter-reset: s; }
.steps li { display: grid; gap: 10px; align-content: start; counter-increment: s; }
.steps li::before { content: "Step " counter(s); font: 600 .76rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--sky); padding-bottom: 12px; border-bottom: 2px solid var(--blue-hi); }
.steps h3 { font-size: 1.3rem; text-transform: uppercase; }
.steps p { color: var(--muted); font-size: .95rem; }
@media (max-width: 900px) { .steps { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .steps { grid-template-columns: 1fr; } }

/* Owner quotes */
.quotes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.quote { margin: 0; background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 28px; display: grid; gap: 22px; align-content: space-between; min-width: 0; }
.quote blockquote { margin: 0; font-size: 1.05rem; line-height: 1.6; }
.quote figcaption { display: grid; gap: 2px; padding-top: 16px; border-top: 1px solid var(--line); }
.quote figcaption b { font: 700 1.25rem/1.1 var(--display); text-transform: uppercase; letter-spacing: .02em; }
.quote figcaption span { font: 400 .8rem/1.4 var(--mono); color: var(--muted); }
.rating { margin-top: 28px; color: var(--muted); }
.rating b { color: var(--fg); }
@media (max-width: 900px) { .quotes { grid-template-columns: 1fr; } }

/* FAQ */
.faq { display: grid; border-top: 1px solid var(--line); max-width: 860px; }
.faq details { border-bottom: 1px solid var(--line); }
.faq summary { cursor: pointer; list-style: none; padding: 22px 0; font: 600 1.08rem/1.4 var(--body); display: flex; justify-content: space-between; gap: 20px; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; font: 400 1.5rem/1 var(--mono); color: var(--blue-hi); }
.faq details[open] summary::after { content: "−"; }
.faq details p { padding-bottom: 22px; color: var(--muted); max-width: 68ch; }

/* Demo form */
.demo { border-top: 1px solid var(--line); }
.demo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: start; }
form.card { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 28px; display: grid; gap: 16px; }
.field { display: grid; gap: 6px; }
.field label { font-size: .88rem; color: var(--muted); }
.field input, .field select, .field textarea { font: 400 1rem/1.3 var(--body); color: var(--fg); background: var(--ink); border: 1px solid var(--line); border-radius: 8px; padding: .8em .9em; width: 100%; }
.row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.form-msg { font-size: .92rem; }
@media (max-width: 860px) { .demo-grid { grid-template-columns: 1fr; } }
@media (max-width: 480px) { .row2 { grid-template-columns: 1fr; } }

/* Footer */
footer { border-top: 1px solid var(--line); padding-block: 48px; color: var(--muted); font-size: .9rem; }
footer .wrap { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 32px; }
footer h4 { font: 600 .76rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--fg); margin: 0 0 14px; }
footer ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
footer a { text-decoration: none; }
footer a:hover { color: var(--fg); }
.legal { margin-top: 36px; padding-top: 20px; border-top: 1px solid var(--line); grid-column: 1 / -1; font-size: .82rem; }
@media (max-width: 760px) { footer .wrap { grid-template-columns: 1fr 1fr; } }
.nav-links a[aria-current="page"] { color: var(--fg); }
.page-head { padding-block: 72px 40px; }
.page-head .wrap { display: grid; gap: 20px; }
.page-head h1 { font-size: clamp(2.6rem, 6vw, 4.4rem); }
.cta-band { border-top: 1px solid var(--line); background: var(--panel-2); }
.cta-band .wrap { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 24px; padding-block: 56px; }
.contact-lines { display: grid; gap: 10px; color: var(--muted); }
.contact-lines b { color: var(--fg); font-weight: 600; }

/* Your gym in your pocket */
.pocket { background: var(--panel-2); border-block: 1px solid var(--line); }
.pocket-phones { display: grid; grid-template-columns: repeat(3, minmax(200px, 260px)); justify-content: center; gap: 28px; overflow-x: auto; padding: 4px 4px 12px; }
.pocket-phones figure { margin: 0; display: grid; gap: 12px; justify-items: center; }
.pocket-phones img { border: 8px solid #1d2330; border-radius: 34px; box-shadow: 0 30px 50px -25px rgba(0,0,0,.8); }
.pocket-phones figcaption { font: 600 .76rem/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--sky); }
.pocket .features { margin-top: 40px; }

/* Sign-up to door */
.steps.three { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 820px) { .steps.three { grid-template-columns: 1fr; } }
.pull { margin: 48px 0 0; padding-left: 20px; border-left: 3px solid var(--blue-hi); font-size: 1.15rem; line-height: 1.6; max-width: 70ch; }
.pull cite { display: block; margin-top: 10px; font: 400 .8rem/1.4 var(--mono); font-style: normal; color: var(--muted); }

/* Longer hero headline */
.hero h1 { font-size: clamp(2.7rem, 5.6vw, 4.6rem); }
.nowrap { white-space: nowrap; }

/* Sales alert notifications over the Overview phone */
.phone-stage { position: relative; justify-self: center; width: min(300px, 80%); padding-top: 28px; }
.phone-stage > img { width: 100%; filter: drop-shadow(0 30px 50px rgba(0,0,0,.55)); }
.notif-stack { position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: min(360px, calc(100vw - 40px)); height: 120px; z-index: 2; }
.notif { position: absolute; inset: 0 0 auto 0; display: grid; grid-template-columns: 36px 1fr; gap: 12px; align-items: start; padding: 12px 14px; border-radius: 18px; background: rgba(32, 38, 50, .86); -webkit-backdrop-filter: blur(16px) saturate(1.4); backdrop-filter: blur(16px) saturate(1.4); border: 1px solid rgba(255,255,255,.09); box-shadow: 0 18px 40px -12px rgba(0,0,0,.75); transition: transform .55s cubic-bezier(.2,.8,.2,1), opacity .55s ease; transform-origin: 50% 0; }
.notif img { width: 36px; height: 36px; border-radius: 9px; }
.notif-text { min-width: 0; display: grid; gap: 2px; }
.notif-top { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.notif-top b { font-size: .86rem; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.notif-top time { flex: none; font-size: .72rem; color: var(--muted); }
.notif p { font-size: .84rem; line-height: 1.35; color: #c9d1dc; }
.notif[data-pos="0"] { transform: translateY(0) scale(1); opacity: 1; z-index: 3; }
.notif[data-pos="1"] { transform: translateY(12px) scale(.94); opacity: .75; z-index: 2; }
.notif[data-pos="2"] { transform: translateY(24px) scale(.88); opacity: .45; z-index: 1; }
.notif[data-pos="enter"] { transform: translateY(-28px) scale(1); opacity: 0; z-index: 4; }
.notif[data-pos="gone"] { transform: translateY(30px) scale(.84); opacity: 0; z-index: 0; }
@media (prefers-reduced-motion: reduce) { .notif { transition: none; } }
.lede { text-wrap: pretty; }

/* Contact page: one simple message form */
.contact-form, .page-form { max-width: 560px; margin-top: 8px; }
.page-form { max-width: 640px; }
.field textarea { resize: vertical; min-height: 7em; }

/* Opening section of a menu page: its heading is the page's h1 */
section.block.page-top { padding-top: 72px; }
.page-top h1 { font-size: clamp(2.6rem, 6vw, 4.4rem); text-transform: uppercase; font-weight: 700; }







































/* HIW-START */
/* How it works: three steps, each a small built graphic in the app's style, a title and one line */
.hiw-head { display: grid; gap: 14px; max-width: 760px; margin-bottom: 44px; }
.hiw-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 32px; counter-reset: hiw; }
.hiw-step { position: relative; display: grid; gap: 10px; align-content: start; min-width: 0; counter-increment: hiw; }
.hiw-step::before { content: counter(hiw, decimal-leading-zero); position: absolute; top: 14px; left: 16px; z-index: 1; font: 600 .74rem/1 var(--mono); letter-spacing: .12em; color: var(--sky); }
.hiw-step:not(:last-child)::after { content: ""; position: absolute; top: 106px; right: -28px; z-index: 2; width: 24px; height: 24px; border-radius: 50%; border: 1px solid var(--line); background: var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2378b2ff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.5 6l6 6-6 6'/%3E%3C/svg%3E") center / 14px no-repeat; }
.hiw-art { position: relative; height: 236px; display: grid; place-items: center; padding: 34px 20px 18px; margin-bottom: 8px; border: 1px solid var(--line); border-radius: 14px; background: radial-gradient(120% 85% at 50% 0%, rgba(59,130,246,.14), transparent 65%), var(--panel-2); overflow: hidden; }
.hiw-title { font: 700 1.7rem/1.05 var(--display); text-transform: uppercase; letter-spacing: .01em; }
.hiw-line { font-size: 1.02rem; line-height: 1.5; color: var(--muted); text-wrap: pretty; }
.hiw-ui { width: 100%; max-width: 252px; display: grid; gap: 10px; font-size: .9rem; line-height: 1.3; }
.hiw-ui svg { flex: none; }

/* 1: join */
.hiw-plan { display: flex; align-items: center; gap: 9px; padding: 10px 12px; border: 1.5px solid var(--blue-hi); border-radius: 10px; background: rgba(59,130,246,.1); }
.hiw-plan b { flex: 1; min-width: 0; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hiw-radio { flex: none; width: 15px; height: 15px; border-radius: 50%; border: 2px solid var(--blue-hi); background: radial-gradient(circle, var(--blue-hi) 0 3px, transparent 3.5px); }
.hiw-price { font-weight: 700; }
.hiw-sign { display: flex; align-items: center; gap: 10px; height: 46px; padding: 0 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); }
.hiw-ui .hiw-sig { flex: 1; min-width: 0; height: 30px; color: var(--fg); }
.hiw-ok { flex: none; width: 22px; height: 22px; display: grid; place-items: center; border-radius: 50%; background: rgba(74,222,128,.15); color: var(--ok); }
.hiw-ok svg { width: 13px; height: 13px; }
.hiw-btn { display: block; padding: 10px; border-radius: 8px; background: var(--blue); color: #fff; font-weight: 600; font-size: .9rem; text-align: center; }

/* 2: walk in */
.hiw-unlock { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 15px 12px; border-radius: 11px; background: var(--blue-hi); color: #fff; font-size: 1.08rem; font-weight: 600; box-shadow: 0 14px 30px -12px rgba(59,130,246,.75); }
.hiw-unlock svg { width: 20px; height: 20px; }
.hiw-code { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 13px 12px; border: 1px solid var(--line); border-radius: 11px; background: var(--panel); font: 600 1.02rem/1 var(--mono); letter-spacing: .26em; }
.hiw-code svg { width: 18px; height: 18px; color: var(--muted); }

/* 3: the door follows billing, shown as two rows of the entries log */
.hiw-entry { display: flex; align-items: center; gap: 10px; padding: 11px 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); font: 400 .84rem/1.3 var(--mono); min-width: 0; }
.hiw-who { display: grid; gap: 3px; min-width: 0; }
.hiw-who small { font-size: .74rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hiw-pill { margin-left: auto; flex: none; padding: 5px 9px; border-radius: 999px; font-size: .66rem; line-height: 1; }
.hiw-pill.ok { background: rgba(74,222,128,.13); } .hiw-pill.deny { background: rgba(255,107,107,.14); }

@media (max-width: 860px) {
  .hiw-head { margin-bottom: 32px; }
  .hiw-steps { grid-template-columns: 1fr; row-gap: 36px; max-width: 460px; }
  .hiw-step:not(:last-child)::after { display: none; }
  .hiw-art { height: 212px; padding-top: 30px; }
}
/* HIW-END */

/* MNG-START */
/* Manage page: hero beside the phone, five Overview tiles (Summit Fitness demo numbers), six feature tiles. */
.mng-top, .mng-dash, .mng-feats { --mng-s1: #3987e5; --mng-s2: #d95926; --mng-s3: #199e70; --mng-s4: #9085e9; --mng-up: #22c55e; }
.mng-hero { display: grid; gap: 20px; align-content: center; }
.mng-hero h1 { font-size: clamp(3.1rem, 7.6vw, 6.2rem); font-weight: 800; line-height: .95; }
@media (max-width: 880px) { .mng-hero { order: -1; } }

/* Five Overview tiles */
.mng-kicker { margin: 48px 0 16px; color: var(--muted); }
.mng-dash { --mng-surface: var(--panel); display: grid; grid-template-columns: 1fr; gap: 16px; }
@media (min-width: 640px) { .mng-dash { grid-template-columns: 1fr 1fr; } .mng-mixtile { grid-column: 1 / -1; } }
@media (min-width: 1024px) {
  .mng-dash { grid-template-columns: repeat(6, 1fr); }
  .mng-money, .mng-rev, .mng-grow { grid-column: span 2; }
  .mng-alerts, .mng-mixtile { grid-column: span 3; }
}
.mng-tile { min-width: 0; background: var(--panel); border: 1px solid var(--line); border-radius: 14px; padding: 22px 22px 24px; display: grid; grid-template-rows: auto auto 1fr; gap: 6px; }
.mng-label { font: 700 clamp(1.75rem, 1.35rem + 1.1vw, 2.2rem)/1 var(--display); text-transform: uppercase; letter-spacing: .01em; color: var(--fg); margin: 0; }
.mng-line { color: var(--muted); font-size: 1rem; line-height: 1.4; }
.mng-fig { margin-top: 18px; min-width: 0; display: grid; gap: 12px; align-content: start; }

/* Money in: stat tile */
.mng-tools { display: flex; justify-content: space-between; align-items: center; }
.mng-pill { display: inline-flex; align-items: center; font-size: .82rem; color: var(--fg); background: var(--panel-2); border: 1px solid var(--line); border-radius: 999px; padding: 5px 12px; }
.mng-pill .mng-ic { width: 14px; height: 14px; color: var(--muted); }
.mng-print { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 9px; background: var(--panel-2); border: 1px solid var(--line); color: var(--muted); }
.mng-print .mng-ic { width: 17px; height: 17px; }
.mng-big { font: 650 3rem/1 var(--body); letter-spacing: -.025em; color: var(--fg); margin-top: 6px; white-space: nowrap; }
.mng-cap { font-size: .86rem; color: var(--muted); margin-top: -4px; }
.mng-rows { margin: 4px 0 0; display: grid; border-top: 1px solid var(--line); }
.mng-rows div { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--line); }
.mng-rows dt { color: var(--muted); font-size: .9rem; }
.mng-rows dd { margin: 0; color: var(--fg); font-weight: 600; font-variant-numeric: tabular-nums; }

/* Shared chart parts */
.mng-chart { display: block; width: 100%; height: auto; overflow: visible; }
.mng-chart text { font: 400 12px/1 var(--body); fill: var(--muted); font-variant-numeric: tabular-nums; }
.mng-chart .mng-val { fill: var(--fg); font-weight: 600; }
.mng-grid { stroke: var(--line); stroke-width: 1; vector-effect: non-scaling-stroke; shape-rendering: crispEdges; }
.mng-hit { fill: transparent; }
.mng-f1 { fill: var(--mng-s1); } .mng-f2 { fill: var(--mng-s2); } .mng-f3 { fill: var(--mng-s3); }
.mng-seg { transition: filter .15s; }
.mng-seg:hover { filter: brightness(1.25); }
.mng-legend { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: .86rem; color: var(--muted); }
.mng-legend li { display: inline-flex; align-items: center; gap: 7px; }
.mng-legend i { width: 10px; height: 10px; border-radius: 2px; flex: none; }
.mng-b1 { background: var(--mng-s1); } .mng-b2 { background: var(--mng-s2); } .mng-b3 { background: var(--mng-s3); } .mng-b4 { background: var(--mng-s4); }

/* Growth: line + area */
.mng-stat { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.mng-stat b { font: 650 2.6rem/1 var(--body); letter-spacing: -.02em; color: var(--fg); }
.mng-stat > span:not(.mng-up) { color: var(--muted); font-size: .9rem; }
.mng-up { display: inline-flex; align-items: center; gap: 5px; color: var(--mng-up); font-size: .9rem; font-weight: 600; }
.mng-up svg { width: 10px; height: 10px; fill: currentColor; }
.mng-area { fill: url(#mng-area); }
.mng-ln { fill: none; stroke: var(--mng-s1); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.mng-end { fill: var(--mng-s1); stroke: var(--panel); stroke-width: 2; vector-effect: non-scaling-stroke; pointer-events: none; }
.mng-cross { stroke: var(--muted); stroke-width: 1; vector-effect: non-scaling-stroke; opacity: 0; }
.mng-dot { fill: var(--mng-s1); stroke: var(--panel); stroke-width: 2; vector-effect: non-scaling-stroke; opacity: 0; }
.mng-pt:hover .mng-cross { opacity: .5; }
.mng-pt:hover .mng-dot { opacity: 1; }

/* Sales alerts: bell + what triggers one */
.mng-alert-fig { grid-template-columns: auto 1fr; gap: 18px; align-items: center; }
.mng-bell { display: grid; place-items: center; width: 72px; height: 72px; border-radius: 20px; background: var(--blue); color: #fff; box-shadow: 0 0 0 8px rgba(59,130,246,.12), 0 14px 30px -10px rgba(37,99,235,.7); }
.mng-bell .mng-ic { width: 36px; height: 36px; stroke-width: 1.8; transform-origin: 50% 12%; animation: mng-ring 4s ease-in-out infinite; }
@keyframes mng-ring { 0%, 76%, 100% { transform: rotate(0); } 80% { transform: rotate(14deg); } 84% { transform: rotate(-12deg); } 88% { transform: rotate(8deg); } 92% { transform: rotate(-4deg); } }
@media (prefers-reduced-motion: reduce) { .mng-bell .mng-ic { animation: none; } }
.mng-chips { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.mng-chips li { display: flex; align-items: center; gap: 8px; padding: 7px 12px 7px 10px; border-radius: 999px; background: var(--panel-2); border: 1px solid var(--line); font-size: .86rem; color: var(--fg); white-space: nowrap; }
.mng-chips .mng-ic { width: 18px; height: 18px; color: var(--sky); flex: none; }

/* Breakdown: one 100% bar */
.mng-mix { display: grid; gap: 6px; padding-top: 6px; }
.mng-mix-pct, .mng-mix-bar { display: flex; gap: 2px; }
.mng-mix-pct span { font-weight: 600; font-size: .92rem; line-height: 1; color: var(--fg); min-width: 0; white-space: nowrap; }
.mng-mix-bar { height: 24px; }
.mng-mix-bar span { display: block; transition: filter .15s; }
.mng-mix-bar span:last-child { border-radius: 0 4px 4px 0; }
.mng-mix-bar span:hover { filter: brightness(1.25); }
.mng-g46 { flex: 46 1 0; } .mng-g24 { flex: 24 1 0; } .mng-g18 { flex: 18 1 0; } .mng-g12 { flex: 12 1 0; }
.mng-legend-mix { margin-top: 8px; display: grid; grid-template-columns: repeat(2, max-content); gap: 8px 28px; }

/* Line icons */
.mng-ic { fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }

/* Six feature tiles */
.mng-more { display: block; margin: 72px 0 16px; font-size: .78rem; font-weight: 600; text-transform: uppercase; color: var(--sky); }
.mng-feats { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 14px; overflow: hidden; }
@media (min-width: 640px) { .mng-feats { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .mng-feats { grid-template-columns: repeat(3, 1fr); } }
.mng-feat { background: var(--ink); padding: 20px 22px; display: grid; grid-template-columns: 44px 1fr; gap: 16px; align-items: start; }
.mng-feat-ic { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 12px; background: rgba(59,130,246,.12); color: var(--sky); }
.mng-feat-ic .mng-ic { width: 24px; height: 24px; }
.mng-feat h3 { font-size: 1.4rem; text-transform: uppercase; }
.mng-feat p { color: var(--muted); font-size: .95rem; margin-top: 4px; }

/* Visually hidden text for screen readers */
.mng-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

@media (max-width: 1023px) {
  .mng-alerts { position: relative; }
  .mng-alert-fig { grid-template-columns: 1fr; }
  .mng-bell { position: absolute; top: 18px; right: 18px; width: 52px; height: 52px; border-radius: 15px; box-shadow: 0 0 0 6px rgba(59,130,246,.12), 0 10px 24px -10px rgba(37,99,235,.7); }
  .mng-bell .mng-ic { width: 27px; height: 27px; }
  .mng-chips { grid-template-columns: 1fr 1fr; }
  .mng-alerts .mng-label, .mng-alerts .mng-line { padding-right: 64px; }
}
@media (max-width: 420px) {
  .mng-tile { padding: 20px 18px 22px; }
  .mng-chips li { padding: 7px 10px; font-size: .84rem; }
  .mng-chips { gap: 7px; }
  .mng-legend-mix { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 12px; font-size: .84rem; }
  .mng-legend-mix li { align-items: start; line-height: 1.3; }
  .mng-legend-mix i { margin-top: 3px; }
}
@media (max-width: 379px) { .mng-legend-mix { grid-template-columns: 1fr; } }
/* MNG-END */

/* POLISH-START: fixes after splitting the site into one page per menu tab */
.page-top h1 { font-weight: 800; }                         /* match Contact and Book a call */
@media (min-width: 400px) { .hero h1 em { white-space: nowrap; } }   /* keep "You grow your gym." on one line */
.facts + .cta-band { border-top: 0; background: transparent; }       /* no doubled grey slab on the home page */
section.pocket.page-top { background: transparent; border-block: 0; } /* Manage opens like the other pages */
.notif[data-pos="0"] { background: rgba(32, 38, 50, .97); }        /* card behind no longer shows through */
.faq summary { text-wrap: pretty; }
.nav-cta .btn { white-space: nowrap; }
@media (max-width: 560px) { section.block { padding-block: 64px; } section.block.page-top { padding-top: 48px; } }
/* Phones: the menu tabs become a scrolling row under the logo, since each tab is now its own page */
@media (max-width: 900px) {
  header.nav .wrap { flex-wrap: wrap; row-gap: 0; min-height: 0; padding-top: 10px; }
  header.nav .nav-links { display: flex; order: 3; flex: 0 0 100%; margin: 0; gap: 26px; overflow-x: auto; scrollbar-width: none; padding: 8px 0 10px; font-size: .92rem; white-space: nowrap; }
  header.nav .nav-links::-webkit-scrollbar { display: none; }
}
@media (max-width: 480px) {
  header.nav .wrap { column-gap: 12px; }
  header.nav .nav-links { gap: 10px; justify-content: space-between; font-size: .88rem; }
}
@media (max-width: 400px) {
  .logo { font-size: 1.05rem; gap: 8px; }
  .logo img { width: 28px; height: 28px; }
  .nav-cta .btn { padding: .78em 1em; font-size: .95rem; }
}
@media (max-width: 340px) {
  .logo { font-size: .98rem; }
  .nav-cta .btn { padding: .7em .8em; font-size: .9rem; }
  header.nav .nav-links { font-size: .84rem; gap: 8px; }
}
/* POLISH-END */

/* TILES-START */
/* FT-START */
/* Home page: four headline features as a 2 x 2 grid of wide horizontal cards: the built graphic on the left, a big
   label and one line on the right, vertically centred, on a blue-tinted card with a blue edge glow.
   Brayden, 2026-10-20: didn't love the blue band ("try again on that"), and "Your gym, your way" now sits under the hero.
   Graphic internals are unchanged. */
.ft { padding-block: 8px 88px; }
.ft-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
.ft-card { --aw: 276px; position: relative; min-width: 0; display: grid; grid-template-columns: var(--aw) minmax(0, 1fr); border: 1px solid rgba(59,130,246,.34); border-radius: 18px; background: linear-gradient(115deg, rgba(37,99,235,.22), rgba(37,99,235,.07) 55%, rgba(59,130,246,.14)), var(--panel); box-shadow: inset 0 1px 0 rgba(120,178,255,.14), 0 24px 54px -32px rgba(37,99,235,.8); overflow: hidden; }
.ft-card::before { content: ""; position: absolute; z-index: 1; inset: 0 12% auto; height: 1px; background: linear-gradient(90deg, transparent, rgba(120,178,255,.75), transparent); pointer-events: none; }
.ft-art { position: relative; height: 232px; display: grid; place-items: center; padding: 20px 14px; border-right: 1px solid rgba(59,130,246,.24); background: radial-gradient(110% 90% at 50% 0%, rgba(59,130,246,.16), transparent 66%), var(--panel-2); overflow: hidden; }
.ft-text { min-width: 0; display: grid; gap: 10px; align-content: center; padding: 22px 24px 22px 26px; }
.ft .ft-title { font: 700 2.3rem/1 var(--display); text-transform: uppercase; letter-spacing: .01em; color: var(--fg); }
.ft-nw { white-space: nowrap; }
.ft-line { color: var(--muted); font-size: 1rem; line-height: 1.45; text-wrap: pretty; }

/* Shared bits inside the graphics */
.ft-ui { width: 100%; max-width: 250px; font-size: .86rem; line-height: 1.25; }
.ft-ui svg { display: block; flex: none; }
.ft-pill { flex: none; display: inline-block; padding: 5px 8px; border-radius: 999px; font: 600 .68rem/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }
.ft-ok { color: var(--ok); background: rgba(74,222,128,.13); }
.ft-sky { color: var(--sky); background: rgba(120,178,255,.13); }

/* 1: 24/7 sign-ups & access: an open door and a 2 AM join, pay, in */
.ft-access { display: flex; align-items: center; justify-content: center; gap: 12px; }
.ft-door { position: relative; flex: none; width: 86px; padding-top: 22px; }
.ft-door-svg { width: 86px; height: auto; filter: drop-shadow(0 0 18px rgba(59,130,246,.28)); }
.ft-247 { position: absolute; top: 0; left: 62.5%; transform: translateX(-50%); display: inline-flex; align-items: center; gap: 6px; padding: 4px 9px 4px 8px; border-radius: 999px; border: 1px solid var(--line); background: var(--ink); font: 700 1.3rem/1 var(--display); letter-spacing: .02em; color: var(--fg); white-space: nowrap; box-shadow: 0 8px 18px -8px rgba(0,0,0,.8); }
.ft-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); animation: ft-pulse 2s infinite; }
@keyframes ft-pulse { 50% { opacity: .35; } }
.ft-log { flex: none; display: grid; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); }
.ft-log-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 9px; border-bottom: 1px dashed rgba(58,69,88,.7); }
.ft-log-row:last-child { border-bottom: 0; }
.ft-log time { font: 400 .74rem/1 var(--mono); color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }

/* 2: member fitness app: a phone rising from the bottom edge */
.ft-art-phone { place-items: end center; padding: 22px 14px 0; }
.ft-phone { width: 160px; height: 100%; display: grid; gap: 11px; align-content: start; padding: 8px 10px 0; border: 6px solid #1d2330; border-bottom: 0; border-radius: 28px 28px 0 0; background: var(--ink); box-shadow: 0 -6px 40px -14px rgba(59,130,246,.45); }
.ft-notch { justify-self: center; width: 40px; height: 9px; border-radius: 999px; background: #1d2330; }
.ft-goal { display: flex; align-items: center; gap: 9px; }
.ft-ring { width: 50px; height: 50px; }
.ft-ring circle { fill: none; stroke-width: 5; }
.ft-ring-bg { stroke: var(--line); }
.ft-ring-fg { stroke: var(--blue-hi); stroke-linecap: round; }
.ft-ring text { font: 700 13px/1 var(--display); fill: var(--fg); }
.ft-goal-txt { display: grid; gap: 1px; min-width: 0; }
.ft-goal-txt small { font-size: .7rem; color: var(--muted); line-height: 1.2; }
.ft-goal-txt b { font: 700 1.05rem/1.05 var(--display); text-transform: uppercase; letter-spacing: .02em; }
.ft-macro { display: grid; gap: 5px; padding: 8px 9px; border: 1px solid var(--line); border-radius: 9px; background: var(--panel); }
.ft-macro-top { display: flex; justify-content: space-between; gap: 6px; font-size: .7rem; color: var(--muted); line-height: 1; white-space: nowrap; }
.ft-macro-top span:first-child { color: var(--fg); font-weight: 600; }
.ft-bar { display: block; height: 5px; border-radius: 999px; background: var(--line); overflow: hidden; }
.ft-bar-fill { display: block; width: 75%; height: 100%; border-radius: inherit; background: var(--ok); }
.ft-unlock { display: flex; align-items: center; justify-content: center; gap: 7px; padding: 9px 8px; border-radius: 9px; background: var(--blue); color: #fff; font-size: .8rem; font-weight: 600; white-space: nowrap; box-shadow: 0 10px 22px -10px rgba(59,130,246,.8); }
.ft-unlock svg { width: 14px; height: 14px; }

/* 3: classes & PT: a day strip and two schedule rows */
.ft-sched { display: grid; gap: 8px; }
.ft-days { display: flex; justify-content: space-between; gap: 4px; margin-bottom: 2px; }
.ft-days span { flex: 1; min-width: 0; text-align: center; padding: 6px 0; border-radius: 8px; font: 600 .68rem/1 var(--mono); letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.ft-days .ft-on { background: var(--blue); color: #fff; }
.ft-row { display: flex; align-items: center; gap: 9px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); min-width: 0; }
.ft-ic { flex: none; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; background: rgba(59,130,246,.14); color: var(--sky); }
.ft-ic svg { width: 17px; height: 17px; }
.ft-av { flex: none; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: linear-gradient(135deg, #2563eb, #6d4ee0); color: #fff; font: 700 .72rem/1 var(--body); letter-spacing: .02em; }
.ft-what { flex: 1; min-width: 0; display: grid; gap: 3px; }
.ft-what b { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ft-what small { font: 400 .72rem/1 var(--mono); color: var(--muted); }
.ft-book { color: #fff; background: var(--blue); padding-inline: 11px; }

/* 4: gym shop: one product card from the demo gym */
.ft-shop { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); max-width: 236px; }
.ft-prod { display: flex; align-items: center; gap: 12px; }
.ft-tee { flex: none; display: grid; place-items: center; width: 70px; height: 70px; border-radius: 10px; background: radial-gradient(circle at 50% 40%, rgba(120,178,255,.18), transparent 70%), var(--panel-2); border: 1px solid var(--line); }
.ft-tee svg { width: 52px; height: 52px; }
.ft-prod-txt { display: grid; gap: 4px; min-width: 0; }
.ft-prod-txt small { font: 600 .62rem/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--sky); }
.ft-prod-txt b { font-weight: 600; font-size: .95rem; line-height: 1.2; white-space: nowrap; }
.ft-price { font: 700 1.5rem/1 var(--display); letter-spacing: .01em; color: var(--fg); }
.ft-sizes { display: flex; gap: 6px; }
.ft-sizes span { flex: 1; text-align: center; padding: 5px 0; border: 1px solid var(--line); border-radius: 7px; font: 600 .7rem/1 var(--mono); color: var(--muted); }
.ft-sizes .ft-on { border-color: var(--blue-hi); color: var(--fg); background: rgba(59,130,246,.16); }
.ft-buy { display: flex; align-items: center; justify-content: center; gap: 7px; padding: 9px; border-radius: 8px; background: var(--blue); color: #fff; font-size: .86rem; font-weight: 600; }
.ft-buy svg { width: 15px; height: 15px; }

@media (prefers-reduced-motion: reduce) { .ft-dot { animation: none; } }

/* Side by side (two columns): every label is two lines and every line block holds three lines, so the number,
   label and line sit at the same height in both cards of a row */
.ft-br { display: inline; }
.ft .ft-title { min-height: 2em; }
.ft-s { display: block; }   /* one sentence per line */
.ft-line { min-height: 4.35em; }
@media (max-width: 1139px) {
  .ft-card { --aw: 248px; }
  .ft-art { padding-inline: 10px; }
  .ft-text { padding: 20px 18px 20px 20px; }
  .ft .ft-title { font-size: 2rem; }
  .ft-access { gap: 8px; }
  .ft-door, .ft-door-svg { width: 74px; }
}
/* One column of wide cards */
@media (max-width: 999px) {
  .ft-grid { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .ft-card { --aw: 296px; }
  .ft-art { padding-inline: 14px; }
  .ft-text { padding: 22px 28px 22px 30px; }
  .ft .ft-title { font-size: 2.2rem; }
  .ft-line { min-height: 0; }
  .ft-access { gap: 12px; }
  .ft-door, .ft-door-svg { width: 86px; }
}
/* Phones: graphic on top, words under it */
@media (max-width: 599px) {
  .ft { padding-bottom: 64px; }
  .ft-grid { gap: 14px; }
  .ft-card { grid-template-columns: minmax(0, 1fr); border-radius: 16px; }
  .ft-art { height: 186px; padding: 12px; border-right: 0; border-bottom: 1px solid rgba(59,130,246,.24); }
  .ft-art-phone { padding: 8px 14px 0; }
  .ft-phone { gap: 9px; }   /* the whole Unlock Gym button stays inside the shorter graphic */
  .ft-text { gap: 8px; padding: 16px 18px 20px; }
  .ft .ft-title { font-size: 2rem; min-height: 0; }
  .ft-br { display: none; }
  .ft-s { display: inline; }
  .ft-shop { gap: 8px; padding: 10px; }
  .ft-tee { width: 60px; height: 60px; }
  .ft-tee svg { width: 44px; height: 44px; }
  .ft-buy { padding: 8px; }
}
/* FT-END */
/* TILES-END */

/* FAQ-START */
/* FQ-START */
/* FAQ: four answer tiles (small app-style graphics), the switching-over strip, then every question in four groups */
.fq-head { display: grid; gap: 16px; max-width: 760px; margin-bottom: 44px; }
.fq-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.fq-ic { flex: none; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }

/* Four answer tiles */
.fq-tiles { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; }
.fq-tile { min-width: 0; display: grid; gap: 8px; align-content: start; }
.fq-art { position: relative; height: 184px; display: grid; grid-template-columns: minmax(0, 1fr); place-items: center; padding: 18px 12px; margin-bottom: 10px; container-type: inline-size; border: 1px solid var(--line); border-radius: 14px; background: radial-gradient(120% 85% at 50% 0%, rgba(59,130,246,.14), transparent 65%), var(--panel-2); overflow: hidden; }
.fq-label { font: 700 clamp(1.9rem, 1.45rem + 1vw, 2.35rem)/1 var(--display); text-transform: uppercase; letter-spacing: .01em; }
.fq-line { color: var(--muted); font-size: 1rem; line-height: 1.45; text-wrap: pretty; }
.fq-ui { width: 100%; max-width: 244px; display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; font-size: .88rem; line-height: 1.3; }

/* Tile 1: your prices */
.fq-plan { display: flex; align-items: center; gap: 6px; padding: 11px 10px; font-size: .84rem; border: 1.5px solid var(--blue-hi); border-radius: 10px; background: rgba(59,130,246,.1); }
.fq-plan b { flex: 1; min-width: 0; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fq-price { font-weight: 700; }
.fq-plan .fq-ic { width: 16px; height: 16px; color: var(--sky); }
@container (max-width: 227px) { .fq-plan .fq-ic { display: none; } }
.fq-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
.fq-chips span { display: inline-flex; align-items: center; gap: 5px; padding: 5px 10px 5px 8px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel); font-size: .78rem; line-height: 1.2; color: var(--fg); white-space: nowrap; }
.fq-chips .fq-ic { width: 13px; height: 13px; stroke-width: 2.6; color: var(--ok); }

/* Tile 2: your brand, the top of the member app */
.fq-art-phone { place-items: end center; padding-bottom: 0; }
.fq-phone { width: min(212px, 100%); height: 150px; display: grid; align-content: start; gap: 9px; padding: 9px 12px 0; border: 6px solid #1d2330; border-bottom: 0; border-radius: 28px 28px 0 0; background: var(--ink); box-shadow: 0 -12px 40px -20px rgba(59,130,246,.55); }
.fq-phone-top { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; padding: 0 6px; font: 600 .66rem/1 var(--body); color: var(--fg); }
.fq-phone-top i { width: 50px; height: 13px; border-radius: 999px; background: #1d2330; }
.fq-batt { justify-self: end; width: 17px; height: 8px; border: 1.5px solid var(--muted); border-radius: 2.5px; background: linear-gradient(90deg, var(--fg) 0 70%, transparent 70%) content-box; padding: 1px; }
.fq-brand { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 2px; }
.fq-brand b { font-size: .98rem; font-weight: 700; line-height: 1.1; white-space: nowrap; }
.fq-mark { flex: none; width: 28px; height: 28px; display: grid; place-items: center; border-radius: 8px; background: var(--blue); color: #fff; }
.fq-mark svg { width: 19px; height: 19px; }
.fq-powered { margin-top: -5px; text-align: center; font-size: .68rem; line-height: 1.2; color: var(--muted); white-space: nowrap; }
.fq-unlock { display: flex; align-items: center; justify-content: center; gap: 7px; margin-top: 3px; padding: 10px; border-radius: 10px; background: var(--blue); color: #fff; font-size: .86rem; font-weight: 600; line-height: 1; }
.fq-unlock .fq-ic { width: 16px; height: 16px; stroke-width: 2; }

/* Tile 3: we install it */
.fq-door { display: block; width: 100%; max-width: 226px; height: auto; }
.fq-d-floor { fill: none; stroke: var(--line); stroke-width: 2; stroke-linecap: round; }
.fq-d-frame { fill: none; stroke: #3a4456; stroke-width: 2; }
.fq-d-leaf { fill: var(--panel); stroke: #5b6678; stroke-width: 1.5; }
.fq-d-pane { fill: rgba(120,178,255,.07); stroke: #3a4456; stroke-width: 1.5; }
.fq-d-strike { fill: var(--sky); }
.fq-d-handle { fill: none; stroke: var(--fg); stroke-width: 3; stroke-linecap: round; }
.fq-d-knob { fill: var(--fg); }
.fq-d-wire { fill: none; stroke: var(--sky); stroke-width: 1.5; stroke-dasharray: 3 3; stroke-linecap: round; opacity: .8; }
.fq-d-pad { fill: var(--panel); stroke: var(--sky); stroke-width: 1.5; }
.fq-d-led { fill: var(--ok); }
.fq-d-keys circle { fill: var(--muted); }
.fq-d-badge { fill: #12301f; stroke: var(--ok); stroke-width: 1.5; }
.fq-d-check { fill: none; stroke: var(--ok); stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }

/* Tile 4: works offline, two rows of the entries log */
.fq-offline { justify-self: center; display: inline-flex; align-items: center; gap: 7px; padding: 6px 11px; border: 1px solid rgba(242,184,75,.4); border-radius: 999px; background: rgba(242,184,75,.1); color: var(--warn); font: 600 .72rem/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.fq-offline .fq-ic { width: 15px; height: 15px; stroke-width: 2; }
.fq-entry { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel); font: 400 .84rem/1.25 var(--mono); min-width: 0; }
.fq-who { display: grid; gap: 2px; min-width: 0; }
.fq-who small { font-size: .74rem; color: var(--muted); }
.fq-pill { margin-left: auto; flex: none; padding: 5px 10px; border-radius: 999px; background: rgba(74,222,128,.13); color: var(--ok); font: 600 .68rem/1 var(--body); letter-spacing: .06em; text-transform: uppercase; }

/* Switching over: four steps on one track */
.fq-switch { margin-top: 88px; padding: 44px 40px 48px; border: 1px solid var(--line); border-radius: 18px; background: radial-gradient(80% 120% at 0% 0%, rgba(59,130,246,.13), transparent 60%), var(--panel-2); }
.fq-switch-head { display: grid; gap: 14px; margin-bottom: 40px; }
.fq-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 28px; counter-reset: fqs; }
.fq-step { position: relative; min-width: 0; display: grid; gap: 10px; align-content: start; counter-increment: fqs; }
.fq-node { position: relative; z-index: 1; width: 60px; height: 60px; display: grid; place-items: center; margin-bottom: 10px; border: 1px solid var(--line); border-radius: 16px; background: var(--panel); color: var(--sky); }
.fq-node .fq-ic { width: 28px; height: 28px; }
.fq-step:not(:last-child)::after { content: ""; position: absolute; top: 29px; left: 72px; right: -16px; height: 2px; border-radius: 2px; background: linear-gradient(90deg, var(--blue-hi), rgba(59,130,246,.18)); }
.fq-step-last .fq-node { border-color: var(--blue); background: var(--blue); color: #fff; box-shadow: 0 0 0 6px rgba(59,130,246,.14); }
.fq-step-label { display: flex; align-items: baseline; gap: 10px; font: 700 2.1rem/1 var(--display); text-transform: uppercase; letter-spacing: .01em; }
.fq-step-label::before { content: counter(fqs, decimal-leading-zero); font: 600 .76rem/1 var(--mono); letter-spacing: .12em; color: var(--sky); }
.fq-step-line { color: var(--muted); font-size: 1rem; line-height: 1.45; text-wrap: pretty; }
.fq-time { position: absolute; z-index: 1; top: 16px; left: 86px; display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px 6px 9px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel-2); color: var(--fg); font: 600 .76rem/1 var(--mono); letter-spacing: .04em; white-space: nowrap; }
.fq-time .fq-ic { width: 15px; height: 15px; color: var(--sky); stroke-width: 2; }

/* All questions, in four groups */
.fq-all { margin-top: 96px; }
.fq-all > h2 { margin-bottom: 40px; }
.fq-groups { display: grid; gap: 56px; }
.fq-group { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 40px; align-items: start; }
.fq-group-head { display: grid; grid-template-columns: 52px minmax(0, 1fr); column-gap: 14px; row-gap: 6px; align-items: center; padding-top: 12px; }
.fq-group-ic { grid-row: 1 / span 2; width: 52px; height: 52px; display: grid; place-items: center; border-radius: 14px; background: rgba(59,130,246,.12); color: var(--sky); }
.fq-group-ic .fq-ic { width: 26px; height: 26px; }
.fq-group-label { align-self: end; font: 700 2rem/1 var(--display); text-transform: uppercase; letter-spacing: .01em; }
.fq-count { align-self: start; font: 600 .72rem/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--muted); }
.fq-list { max-width: none; }
.fq-list summary:hover { color: #fff; }
.fq-list summary:hover::after { color: var(--sky); }

/* Topic chips under the heading jump straight to the questions */
.fq-jump { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; }
.fq-jump a { display: inline-flex; align-items: center; gap: 8px; padding: 10px 16px 10px 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel-2); color: var(--fg); font-weight: 600; font-size: .95rem; text-decoration: none; }
.fq-jump a:hover { border-color: var(--blue-hi); }
.fq-jump .fq-ic { width: 18px; height: 18px; color: var(--sky); }
.fq-group { scroll-margin-top: 120px; }
.fq-list a { color: var(--sky); }
@media (min-width: 900px) { .fq-group-head { position: sticky; top: 96px; } }

@media (max-width: 1099px) {
  .fq-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 36px 24px; }
}
@media (max-width: 899px) {
  .fq-switch { padding: 36px 28px 40px; }
  .fq-steps { grid-template-columns: 1fr; gap: 28px; }
  .fq-step { grid-template-columns: 52px minmax(0, 1fr); column-gap: 18px; row-gap: 6px; }
  .fq-node { grid-row: 1 / span 2; width: 52px; height: 52px; margin: 0; border-radius: 14px; }
  .fq-node .fq-ic { width: 25px; height: 25px; }
  .fq-step-label { font-size: 1.9rem; padding-top: 4px; }
  .fq-step:not(:last-child)::after { top: 60px; bottom: -22px; left: 25px; right: auto; width: 2px; height: auto; background: linear-gradient(180deg, var(--blue-hi), rgba(59,130,246,.18)); }
  .fq-time { top: 6px; left: auto; right: 0; }
  .fq-group { grid-template-columns: 1fr; gap: 18px; }
  .fq-group-head { padding-top: 0; }
}
@media (max-width: 599px) {
  .fq-head { margin-bottom: 36px; }
  .fq-tiles { grid-template-columns: 1fr; gap: 28px; }
  .fq-art { height: 156px; padding: 12px; margin-bottom: 6px; }
  .fq-phone { height: 132px; }
  .fq-door { max-width: 200px; }
  .fq-ui { gap: 8px; }
  .fq-entry { padding: 7px 11px; }
  .fq-jump { gap: 8px; }
  .fq-jump a { padding: 8px 13px 8px 10px; font-size: .9rem; }
  .fq-switch { margin-top: 72px; padding: 30px 20px 34px; border-radius: 16px; }
  .fq-switch-head { margin-bottom: 32px; }
  .fq-all { margin-top: 72px; }
  .fq-all > h2 { margin-bottom: 28px; }
  .fq-groups { gap: 44px; }
  .fq-group-head { grid-template-columns: 46px minmax(0, 1fr); column-gap: 12px; }
  .fq-group-ic { width: 46px; height: 46px; border-radius: 12px; }
  .fq-group-ic .fq-ic { width: 23px; height: 23px; }
  .fq-group-label { font-size: 1.8rem; }
}
/* FQ-END */
/* FAQ-END */

/* HX-START */
/* How it works, "Key Features": the nine member-app graphics shown one at a time in the slider (ks.css, ks.js).
   Each is a small redrawn app screen in the app's dark palette. Slide order: 1 muscle map, 2 class calendar,
   3 workout tracker, 4 calorie tracker, 5 Flex Points, 6 progress, 7 guided setup, 8 waitlists, 9 session packs.
   ks.css lays out the slides and scales each .hx-ui with zoom; nothing here depends on the card around it. */

/* Section spacing and the heading block (the home page's "For owners" section uses .hx-head too) */
section.block.hx { padding-top: 8px; }
.hx-head { display: grid; gap: 14px; max-width: 760px; margin-bottom: 40px; }
@media (max-width: 639px) { .hx-head { margin-bottom: 32px; } }

/* Shared bits inside the graphics (app dark palette: surface #151a23, cell #1c222d, cell edge #2a313b) */
.hx-ui { width: 100%; max-width: 264px; display: grid; gap: 9px; font-size: .86rem; line-height: 1.25; color: var(--fg); }
.hx-ui svg:not(.hx-trend) { display: block; flex: none; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hx-pill { flex: none; display: inline-block; padding: 5px 8px; border-radius: 999px; font: 600 .66rem/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }
.hx-ok { color: var(--ok); background: rgba(74,222,128,.13); }
.hx-warn { color: var(--warn); background: rgba(242,184,75,.14); }
.hx-class { display: flex; align-items: center; gap: 9px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 10px; background: #1c222d; min-width: 0; }
.hx-cdot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--blue-hi); }
.hx-what { flex: 1; min-width: 0; display: grid; gap: 3px; }
.hx-what b { font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hx-what small { display: flex; align-items: center; gap: 5px; font: 400 .7rem/1 var(--mono); color: var(--muted); white-space: nowrap; }
.hx-what small svg { width: 11px; height: 11px; color: var(--sky); }
/* Slide 2: class calendar, a slice of the app's month view: Classes, Workouts and Meals chips, a dot under each day per thing booked or logged (blue class, orange workout, green meals), and the picked day's class, workout and meals */
.hx-cal { --cal-c: var(--blue-hi); --cal-w: #f59e0b; --cal-m: var(--ok); gap: 6px; padding: 9px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.hx-cal i { display: block; flex: none; width: 6px; height: 6px; border-radius: 50%; }
.hx-cal i.hx-cal-c { background: var(--cal-c); }
.hx-cal i.hx-cal-w { background: var(--cal-w); }
.hx-cal i.hx-cal-m { background: var(--cal-m); }
.hx-cal-keys { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
.hx-cal-key { min-width: 0; display: flex; align-items: center; justify-content: center; gap: 5px; padding: 3px 0; border: 1px solid #2a313b; border-radius: 999px; background: #1c222d; font-size: .68rem; font-weight: 600; line-height: 1.1; white-space: nowrap; }
.hx-cal-top { display: flex; align-items: center; justify-content: space-between; }
.hx-cal-top b { font-weight: 650; font-size: .84rem; line-height: 1; }
.hx-cal-nav { display: grid; place-items: center; width: 18px; height: 18px; border-radius: 6px; border: 1px solid #2a313b; background: #1c222d; }
.hx-cal-nav svg { width: 11px; height: 11px; stroke-width: 2.4; }
.hx-cal-wk { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.hx-cal-dow { text-align: center; font-size: .6rem; line-height: 1; color: var(--muted); padding-bottom: 1px; }
.hx-cal-d { min-width: 0; height: 28px; display: grid; align-content: center; justify-items: center; gap: 4px; border: 1px solid #2a313b; border-radius: 7px; background: #1c222d; font-size: .7rem; line-height: 1; }
.hx-cal-d b { font-weight: 700; }
.hx-cal-d span { display: flex; gap: 3px; height: 4px; }
.hx-cal-d i { width: 4px; height: 4px; }
/* the picked day: solid blue with a white ring; its dots sit on a dark capsule so the blue one still shows */
.hx-cal-d.hx-cal-on { gap: 3px; background: var(--blue); border: 1.5px solid #fff; color: #fff; }
.hx-cal-on span { height: auto; margin: -1.5px 0 -.5px; padding: 1.5px 3px; border-radius: 999px; background: rgba(11,14,20,.55); }
.hx-cal-day { display: grid; border: 1px solid #2a313b; border-radius: 10px; background: #1c222d; }
.hx-cal-row { min-height: 28px; display: grid; grid-template-columns: 7px minmax(0, 1fr) auto; align-items: center; gap: 2px 6px; padding: 3px 7px; }
.hx-cal-row + .hx-cal-row { border-top: 1px solid #2a313b; }
.hx-cal-row > i { width: 7px; height: 7px; }
.hx-cal-txt { min-width: 0; font-size: .73rem; line-height: 1.3; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hx-cal-txt b { font-weight: 650; color: var(--fg); }
.hx-cal-ok { padding: 4px 6px; border-radius: 999px; font: 600 .62rem/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; color: var(--ok); background: rgba(74,222,128,.13); }
.hx-ui .hx-cal-go { width: 12px; height: 12px; color: var(--muted); stroke-width: 2.4; }
.hx-cal-row.hx-cal-meal { padding-block: 4px; }
.hx-cal-meal .hx-cal-go { grid-row: 1 / 3; grid-column: 3; }
.hx-cal-mac { grid-column: 2; font-size: .64rem; line-height: 1.1; color: var(--muted); white-space: nowrap; }

/* Slide 8: waitlists, a full class plus two push notifications */
.hx-wait { gap: 8px; }
.hx-notif { display: flex; align-items: flex-start; gap: 9px; padding: 9px 11px; border-radius: 14px; background: rgba(32,38,50,.97); border: 1px solid rgba(255,255,255,.09); box-shadow: 0 14px 30px -14px rgba(0,0,0,.8); }
.hx-notif + .hx-notif { opacity: .92; }
.hx-app { flex: none; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 7px; background: var(--blue); color: #fff; font: 700 .9rem/1 var(--body); }
.hx-notif-txt { flex: 1; min-width: 0; display: grid; gap: 2px; font-size: .8rem; line-height: 1.3; color: #c9d1dc; }
.hx-notif-top { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.hx-notif-top b { font-weight: 650; color: var(--fg); }
.hx-notif-top time { font-size: .7rem; color: var(--muted); white-space: nowrap; }

/* Slide 3: workout tracker, the Push Day routine */
.hx-rt { gap: 8px; }
.hx-rt-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.hx-rt-head b { font-size: 1.08rem; font-weight: 700; line-height: 1.1; }
.hx-rt-head small { font: 400 .7rem/1 var(--mono); color: var(--muted); }
.hx-btn { display: flex; align-items: center; justify-content: center; gap: 7px; padding: 9px; border-radius: 9px; background: var(--blue); color: #fff; font-weight: 600; font-size: .84rem; box-shadow: 0 10px 22px -10px rgba(59,130,246,.8); }
.hx-btn svg { width: 15px; height: 15px; }
.hx-ex { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 11px; border-radius: 9px; background: #1c222d; }
.hx-ex b { font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hx-ex span { flex: none; font: 400 .74rem/1 var(--mono); color: var(--muted); }
.hx-ss { position: relative; display: grid; gap: 4px; padding: 13px 5px 5px; margin-top: 2px; border: 1px solid rgba(59,130,246,.55); border-radius: 11px; background: rgba(59,130,246,.07); }
.hx-ss-tag { position: absolute; top: -7px; left: 10px; padding: 2px 6px; border-radius: 999px; background: var(--blue); color: #fff; font: 600 .58rem/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.hx-ss .hx-ex { padding: 7px 8px; }

/* Shared by the redrawn cards: the Workout | Nutrition toggle, thin bars, the trend chart */
.hx-seg { display: grid; grid-template-columns: 1fr 1fr; padding: 3px; border: 1px solid var(--line); border-radius: 9px; background: var(--panel); }
.hx-seg span { text-align: center; padding: 5px 0; border-radius: 6px; font-size: .78rem; font-weight: 600; color: var(--muted); }
.hx-seg .hx-on { background: #1c222d; color: var(--sky); box-shadow: 0 1px 0 rgba(255,255,255,.04), 0 2px 6px rgba(0,0,0,.35); }
.hx-bar { display: block; height: 5px; border-radius: 999px; background: #2a313b; overflow: hidden; }
.hx-fill { display: block; height: 100%; border-radius: inherit; }
.hx-trend { display: block; flex: none; width: 100%; height: auto; overflow: visible; }
.hx-trend text { font: 400 11px/1 var(--body); fill: var(--muted); }

/* Slide 9: session packs, the calendar screen's Purchased Sessions Available panel plus a PT session booked with the pack */
.hx-pk { gap: 9px; padding: 11px 10px 10px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.hx-pk-head { display: flex; align-items: center; gap: 7px; padding-left: 1px; }
.hx-pk-head svg { width: 16px; height: 16px; color: var(--blue-hi); }
.hx-pk-head b { font-weight: 700; font-size: .84rem; line-height: 1.2; white-space: nowrap; }
.hx-pk-tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.hx-pk-tile { min-width: 0; display: grid; justify-items: center; gap: 6px; padding: 9px 8px 10px; border: 1px solid #2a313b; border-radius: 10px; background: #1c222d; }
.hx-pk-tile small { font-size: .72rem; line-height: 1; color: var(--muted); white-space: nowrap; }
.hx-pk-n { display: flex; align-items: baseline; gap: 4px; }
.hx-pk-n b { font: 700 1.9rem/.9 var(--display); letter-spacing: .01em; }
.hx-pk-n em { font: 600 .6rem/1 var(--mono); font-style: normal; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.hx-pk-pips { width: 100%; display: grid; grid-template-columns: repeat(var(--n), minmax(0, 1fr)); gap: 3px; }
.hx-pk-pips i { display: block; height: 4px; border-radius: 999px; background: #2a313b; }
.hx-pk-pips i.hx-pk-on { background: var(--blue-hi); }
.hx-pk .hx-class { padding: 8px 9px; }

/* when the line wraps (1024px and phones), break between the two sentences, never inside "PT packs" */
.hx-pk-nb { white-space: nowrap; }

/* Slide 5: Flex Points, the app's daily streak pop-up on day 4 */
.hx-fx { justify-items: center; gap: 0; padding: 12px 9px 10px; border: 1px solid #2a313b; border-radius: 14px; background: var(--panel); text-align: center; box-shadow: 0 18px 34px -20px rgba(0,0,0,.9); }
.hx-ui .hx-fx-award { width: 30px; height: 30px; color: var(--blue-hi); stroke-width: 1.8; }
.hx-fx-title { margin-top: 6px; font-size: 1.2rem; font-weight: 800; line-height: 1.1; letter-spacing: -.005em; white-space: nowrap; }
.hx-fx-sub { margin-top: 3px; font-size: .74rem; line-height: 1.2; color: var(--muted); white-space: nowrap; }
.hx-fx-days { list-style: none; margin: 12px 0 0; padding: 0; width: 100%; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.hx-fx-days li { position: relative; min-width: 0; display: grid; justify-items: center; gap: 4px; padding: 7px 0 6px; border: 1px solid #2a313b; border-radius: 8px; background: #1c222d; }
.hx-fx-days small { font-size: .6rem; line-height: 1; color: var(--muted); white-space: nowrap; }
.hx-fx-days b { font-size: .76rem; font-weight: 800; line-height: 1; white-space: nowrap; }
.hx-fx-days .hx-fx-done { border-color: rgba(124,58,237,.42); background: rgba(124,58,237,.12); }
.hx-fx-days .hx-fx-done b { color: #c4b5fd; }
.hx-fx-days .hx-fx-today { padding: 6px 0 5px; border: 2px solid #7c3aed; background: #231e3f; box-shadow: 0 6px 16px -8px rgba(124,58,237,.9); }
.hx-fx-days .hx-fx-today small { color: var(--fg); }
.hx-fx-chk { position: absolute; top: -7px; right: -6px; display: grid; place-items: center; width: 14px; height: 14px; border-radius: 50%; background: #7c3aed; color: #fff; }
.hx-ui .hx-fx-chk svg { width: 9px; height: 9px; stroke-width: 3.4; }

/* when the line wraps, break after "A daily streak." */
.hx-fx-nb { white-space: nowrap; }
.hx-fx-claim { margin-top: 12px; width: 100%; padding: 8px; border-radius: 9px; background: var(--blue-hi); color: #fff; font-weight: 700; font-size: .86rem; line-height: 1.2; box-shadow: 0 10px 22px -12px rgba(59,130,246,.8); }

/* Slide 7: guided setup, the three-question start squeezed to a goal pick, the days chips and the plan it gives */
.hx-gs { gap: 5px; }
.hx-gs-q { font: 700 .6rem/1 var(--body); letter-spacing: .09em; text-transform: uppercase; color: var(--muted); white-space: nowrap; }
.hx-gs-q:not(:first-child) { margin-top: 3px; }
.hx-gs-opt { display: flex; align-items: center; gap: 9px; padding: 6px 10px; border: 1px solid var(--line); border-radius: 10px; background: #1c222d; min-width: 0; }
.hx-gs-opt.hx-gs-on { border-color: var(--blue-hi); box-shadow: inset 0 0 0 .5px var(--blue-hi); }
.hx-gs-radio { flex: none; width: 15px; height: 15px; border-radius: 50%; border: 1.5px solid #8e8e95; background: #000; }
.hx-gs-on .hx-gs-radio { border-color: var(--blue-hi); background: radial-gradient(circle, #fff 0 2.6px, var(--blue-hi) 3.2px); }
.hx-gs-txt { flex: 1; min-width: 0; display: grid; gap: 2px; }
.hx-gs-txt b { font-weight: 650; font-size: .84rem; line-height: 1.15; white-space: nowrap; }
.hx-gs-txt small { font-size: .68rem; line-height: 1.2; color: var(--muted); white-space: nowrap; }
.hx-gs-days { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.hx-gs-days span { padding: 6px 0; text-align: center; border: 1px solid var(--line); border-radius: 999px; background: var(--panel); font-size: .74rem; font-weight: 650; line-height: 1.1; white-space: nowrap; }
.hx-gs-days .hx-gs-on { border-color: var(--blue-hi); background: #19263c; color: var(--blue-hi); }
.hx-gs-plan { display: flex; align-items: center; gap: 9px; margin-top: 2px; padding: 6px 10px 6px 6px; border: 1px solid rgba(59,130,246,.5); border-radius: 11px; background: rgba(59,130,246,.09); }
.hx-gs-ico { flex: none; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: var(--blue); color: #fff; box-shadow: 0 8px 18px -8px rgba(59,130,246,.8); }
.hx-gs-ico svg { width: 16px; height: 16px; stroke-width: 1.9; }
.hx-gs-plan small { font: 700 .58rem/1 var(--body); letter-spacing: .09em; text-transform: uppercase; color: var(--sky); }
.hx-gs-plan b { font-size: .86rem; }

/* Slide 1: muscle map, the Build it yourself body map (front and back) with two exercise rows */
.hx-mm { grid-template-columns: 146px minmax(0, 1fr); align-items: center; gap: 12px; }
.hx-mm-map { display: grid; justify-items: center; gap: 4px; }
.hx-mm-sel { font-weight: 700; font-size: .9rem; line-height: 1.1; color: var(--blue-hi); white-space: nowrap; }
.hx-ui.hx-mm svg.hx-mm-fig { width: 146px; height: 168px; fill: #2a2f36; stroke: none; }
.hx-mm-sil { fill: #2a2f36; }
.hx-mm-seg { fill: #1c222d; stroke: #262d3a; stroke-width: 1; }
.hx-mm-hit { fill: var(--blue-hi); }
.hx-mm-cap { justify-self: stretch; display: grid; grid-template-columns: 1fr 1fr; text-align: center; font: 700 .56rem/1 var(--body); letter-spacing: .09em; text-transform: uppercase; color: var(--muted); }
.hx-mm-list { display: grid; gap: 6px; min-width: 0; }
.hx-mm-h { font: 700 .6rem/1 var(--body); letter-spacing: .09em; text-transform: uppercase; color: var(--muted); }
.hx-mm-ex { display: flex; align-items: center; gap: 8px; padding: 8px 8px 8px 9px; border: 1px solid var(--line); border-radius: 9px; background: #1c222d; min-width: 0; }
.hx-mm-ex b { flex: 1; min-width: 0; font-weight: 650; white-space: nowrap; }
.hx-mm-box { flex: none; display: grid; place-items: center; width: 15px; height: 15px; border-radius: 4px; border: 1.5px solid #8e8e95; background: #000; color: #fff; }
.hx-mm-on .hx-mm-box { border-color: var(--blue-hi); background: var(--blue-hi); }
.hx-mm-box svg { width: 11px; height: 11px; stroke-width: 3; }
.hx-mm-on { border-color: rgba(59,130,246,.55); }

/* Slide 4: calorie tracker, the Nutrition tab's Daily progress panel (four rows, each with a thin bar) */
.hx-nu { gap: 5px; }
.hx-nu-seg { padding: 2px; }
.hx-nu-seg span { display: flex; align-items: center; justify-content: center; gap: 6px; padding: 4px 0; font-size: .76rem; }
.hx-nu-seg svg { width: 13px; height: 13px; stroke-width: 1.9; }
.hx-nu-panel { display: grid; gap: 5px; padding: 8px 11px 10px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.hx-nu-head { display: flex; align-items: center; gap: 6px; margin-bottom: 1px; }
.hx-nu-head > svg { width: 14px; height: 14px; stroke-width: 1.9; }
.hx-nu-head b { flex: 1; font-weight: 700; font-size: .88rem; line-height: 1; white-space: nowrap; }
.hx-nu-row { display: grid; gap: 3px; }
.hx-nu-top { display: flex; justify-content: space-between; gap: 8px; font-size: .7rem; line-height: 1; color: var(--muted); white-space: nowrap; }
.hx-nu-top span:first-child { color: var(--fg); font-weight: 500; }
.hx-nu .hx-bar { height: 4px; }
.hx-nu-f { background: var(--blue-hi); }
.hx-nu-cal { width: 74.5%; }
.hx-nu-pro { width: 74.7%; }
.hx-nu-carb { width: 84.5%; }
.hx-nu-fat { width: 65.8%; }
.hx-nu-note { margin: -1px 0 0; font-size: .62rem; line-height: 1; color: var(--muted); white-space: nowrap; }
.hx-nu-meals { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 2px 3px 0; }
.hx-nu-meals > span:first-child { font-size: .64rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); line-height: 1; }
.hx-nu-add { display: inline-flex; align-items: center; gap: 4px; color: var(--sky); font-weight: 700; font-size: .82rem; line-height: 1; }
.hx-nu-add svg { width: 12px; height: 12px; stroke-width: 2.4; }

/* Slide 6: progress, the Weight screen with demo numbers: weight and change, goal row, trend chart, lift maxes */
.hx-wg { gap: 8px; padding: 11px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.hx-wg-now { display: flex; align-items: center; gap: 7px; }
.hx-wg-now > b { font-size: 1.45rem; font-weight: 800; letter-spacing: -.01em; line-height: 1; }
.hx-wg-chg { color: var(--ok); font-weight: 700; font-size: .8rem; align-self: flex-end; padding-bottom: 2px; }
.hx-wg-log { margin-left: auto; flex: none; padding: 6px 13px; border-radius: 8px; background: var(--blue-hi); color: #fff; font-weight: 700; font-size: .78rem; line-height: 1; box-shadow: 0 8px 18px -10px rgba(59,130,246,.8); }
.hx-wg-goal { display: flex; align-items: center; gap: 7px; padding: 6px 9px; border-radius: 8px; background: #1c222d; font-size: .76rem; line-height: 1.2; color: var(--muted); white-space: nowrap; }
.hx-wg-goal b { font-weight: 700; color: var(--fg); }
.hx-wg-goal svg { width: 14px; height: 14px; color: var(--blue-hi); stroke-width: 2; }
.hx-wg-grid { stroke: #2a313b; stroke-width: 1; }
.hx-wg-goalln { stroke: #34d399; stroke-width: 1.5; stroke-dasharray: 4 3; }
.hx-wg-line { fill: none; stroke: var(--blue-hi); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.hx-wg-pt circle { fill: var(--panel); stroke: var(--blue-hi); stroke-width: 1.6; }
.hx-wg-maxes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
.hx-wg-maxes span { display: grid; justify-items: center; gap: 3px; padding: 5px 4px; border-radius: 8px; background: #1c222d; }
.hx-wg-maxes small { font: 400 .6rem/1 var(--mono); letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.hx-wg-maxes b { font: 700 1.05rem/1 var(--display); letter-spacing: .02em; }

/* 10: faith, the Exercise your Faith screen: this week's title, a blue-ruled verse and a devotional link */
.hx-vs { gap: 9px; }
.hx-vs-head { display: flex; align-items: center; gap: 7px; padding-left: 2px; }
.hx-vs-head svg { width: 17px; height: 17px; stroke-width: 1.9; }
.hx-vs-head b { font-weight: 800; font-size: 1.02rem; line-height: 1; white-space: nowrap; }
.hx-vs-panel { display: grid; gap: 4px; padding: 11px 12px 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.hx-vs-eyebrow { font-size: .6rem; line-height: 1; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.hx-vs-title { font-weight: 800; font-size: .98rem; line-height: 1.1; text-transform: uppercase; letter-spacing: .01em; white-space: nowrap; }
.hx-vs-quote { display: grid; gap: 4px; margin-top: 5px; padding: 7px 10px 8px; border-left: 3px solid var(--blue-hi); border-radius: 0 8px 8px 0; background: #1c222d; }
.hx-vs-quote q { quotes: "\201C" "\201D"; font-style: italic; font-size: .8rem; line-height: 1.38; color: #d5dbe4; }
.hx-vs-quote small { font-size: .68rem; line-height: 1; color: var(--muted); }

/* KS-START: How it works "Key Features". Brayden: make the features "a slide instead of boxes" and "click through them
   with arrows". A rail of the nine names (01 to 09) beside one big stage: the enlarged app graphic, its big title and
   one line. ks.js builds the controls and adds .ks-on; without JS the nine cards sit in a plain grid. Phones (< 720 px)
   swap the rail for dots and a 03 / 09 counter. The rail and dots follow the slide count (ks.js sets --ks-n), so a
   tenth slide still fits. The graphic area fits a graphic up to 264 x 250 at natural size. */

/* Titles and rail names: Barlow Condensed, and while it loads (or if it never does) Arial scaled to Barlow's width,
   so a long title never outgrows its line. */
@font-face { font-family: "KS Display Fallback"; font-weight: 700; size-adjust: 65%;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("LiberationSans-Bold"), local("Helvetica Bold"), local("Helvetica-Bold"), local("Roboto Bold"), local("Roboto-Bold"); }

[data-ks] { --ks-font: "Barlow Condensed", "KS Display Fallback", "Arial Narrow", sans-serif;
  --ks-z: 1; --ks-py: 14px; --ks-px: 8px; --ks-art-h: calc(250px * var(--ks-z) + 2 * var(--ks-py)); --ks-dir: 1; }
@media (min-width: 340px) { [data-ks] { --ks-px: 12px; } }
@media (min-width: 360px) { [data-ks] { --ks-z: 1.05; --ks-py: 16px; } }
@media (min-width: 390px) { [data-ks] { --ks-z: 1.15; --ks-py: 18px; } }
@media (min-width: 480px) { [data-ks] { --ks-z: 1.3; --ks-py: 22px; } }
@media (min-width: 720px) { [data-ks] { --ks-px: 20px; } }
@media (min-width: 880px) { [data-ks] { --ks-z: 1.4; } }
@media (min-width: 1024px) { [data-ks] { --ks-z: 1.5; --ks-py: 20px; } }
/* Shorter laptop screens: a smaller graphic, so the heading and the whole slider fit on screen under the menu */
@media (min-width: 880px) and (max-height: 750px) { [data-ks] { --ks-z: 1.4; --ks-py: 16px; } }
@media (min-width: 720px) and (max-height: 700px) { [data-ks] { --ks-z: 1.25; --ks-py: 12px; } }
@media (min-width: 720px) and (max-height: 660px) { [data-ks] { --ks-z: 1.15; } }

/* Head: eyebrow and heading, with the pause / play button on the right */
.ks-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin-bottom: 40px; }
@media (max-width: 639px) { .ks-head { margin-bottom: 32px; } }   /* the same heading gap as .hx-head (hx-cards.css) */
.ks-head .hx-head { min-width: 0; margin: 0; }
/* The button's middle sits on the middle of the heading's capitals at every width: it takes the h2's size
   (styles.css: clamp(2.2rem, 4.6vw, 3.4rem)), and the capitals' middle is .47em above the h2's bottom. */
.ks-play { flex: none; width: 42px; height: 42px; display: grid; place-items: center; font-size: clamp(2.2rem, 4.6vw, 3.4rem); margin: 0 0 calc(.47em - 21px); padding: 0; border: 1px solid var(--line); border-radius: 50%; background: var(--panel); color: var(--fg); cursor: pointer; transition: border-color .2s, background-color .2s; }
.ks-play[hidden] { display: none; }
@media (hover: hover) { .ks-play:hover { border-color: var(--muted); background: #1a202b; } }
.ks-play svg { grid-area: 1 / 1; width: 15px; height: 15px; fill: currentColor; }
.ks-play .ks-i-play { display: none; }
.ks-play[data-paused] .ks-i-pause { display: none; }
.ks-play[data-paused] .ks-i-play { display: block; }

/* Without JS: the nine cards in a grid (three, two, then one across) */
.ks-slides { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.ks-slide { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr; border: 1px solid var(--line); border-radius: 16px; background: var(--panel-2); overflow: hidden; }
.ks-slide .hx-art { position: relative; height: 286px; display: grid; grid-template-columns: minmax(0, 1fr); place-items: center; padding: 18px 16px; border-bottom: 1px solid var(--line); background: radial-gradient(120% 90% at 50% 0%, rgba(59,130,246,.16), transparent 66%), var(--panel-2); overflow: hidden; }
.ks-slide .hx-text { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; align-content: start; padding: 18px 22px 24px; }
.ks-slide .hx-title { font: 700 clamp(2rem, 1.4rem + 1.2vw, 2.4rem)/1 var(--ks-font); text-transform: uppercase; letter-spacing: .01em; color: var(--fg); white-space: nowrap; }
.ks-slide .hx-line { color: var(--muted); font-size: 1rem; line-height: 1.45; text-wrap: balance; }
.ks-count { display: none; }
.ks-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
@media (max-width: 1023px) { .ks-slides { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) {
  .ks-slides { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  .ks-slide .hx-art { height: 278px; padding: 14px 12px; }
  .ks-slide .hx-text { gap: 6px; padding: 14px 18px 18px; }
}

/* ---------- With JS ---------- */
/* Computer sizes, set per width below: rail column and gap, the caption's side padding (the right one keeps room for
   the arrows), arrow size and the stage title's largest size. The arrows' height in the caption is worked out from them. */
.ks-on .ks-body { --ks-rail-w: 204px; --ks-gap: 24px; --ks-cap-l: 24px; --ks-cap-r: 132px; --ks-ar: 42px; --ks-tmax: 3.1rem;
  position: relative; display: grid; grid-template-columns: var(--ks-rail-w) minmax(0, 1fr); grid-template-rows: minmax(var(--ks-art-h), auto) auto; column-gap: var(--ks-gap); }

/* Stage: a frame behind the stacked slides; the graphic sits on a soft blue glow and a faint dot grid, the words on a
   darker strip. The frame shares the slides' rows, so its strip always starts where the words do. */
.ks-frame { grid-column: 2; grid-row: 1 / span 2; position: relative; display: grid; grid-template-rows: var(--ks-art-h) auto; grid-template-rows: subgrid; border: 1px solid var(--line); border-radius: 18px; overflow: hidden;
  background: radial-gradient(52% 62% at 50% 48%, rgba(59,130,246,.17), transparent 72%), radial-gradient(circle, rgba(120,178,255,.075) 1px, transparent 1.4px) 0 0 / 18px 18px, #0d1118; }
.ks-frame::after { content: ""; grid-row: 2; border-top: 1px solid var(--line); background: var(--panel-2); }

/* The slides sit in one cell; only the current one shows. The stage clips them, so nothing in a slide (even a hidden
   one) can widen the page. */
.ks-on .ks-slides { grid-column: 2; grid-row: 1 / span 2; position: relative; z-index: 1; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: var(--ks-art-h) auto; grid-template-rows: subgrid; gap: 0; border-radius: 18px; overflow: hidden; overflow: clip; touch-action: pan-y pinch-zoom; }
.ks-on .ks-slide { grid-column: 1; grid-row: 1 / span 2; display: grid; grid-template-rows: var(--ks-art-h) auto; grid-template-rows: subgrid; border: 0; border-radius: 0; background: none; overflow: visible; opacity: 0; visibility: hidden; transition: opacity .12s ease, visibility 0s linear .12s; }
.ks-on .ks-slide.is-on { opacity: 1; visibility: visible; transition: opacity .32s ease .12s, visibility 0s; }
.ks-on .ks-slide .hx-art { grid-row: 1; height: auto; min-width: 0; display: grid; place-items: center; padding: var(--ks-py) var(--ks-px); border: 0; background: none; overflow: visible; }
.ks-on .ks-slide .hx-ui { zoom: var(--ks-z); }
.ks-on .ks-slide .hx-text { grid-row: 2; align-content: start; gap: 8px; padding: 20px var(--ks-cap-r) 22px var(--ks-cap-l); container-type: inline-size; }
.ks-on .ks-slide .hx-title { font-size: 2.6rem; font-size: min(3.1rem, 13.2cqi); line-height: 1; }
.ks-on .ks-slide .hx-line { font-size: 1.08rem; color: var(--muted); }

/* Slide change: the old slide fades out first (.12 s), then the new one fades in, so two slides never show at once.
   The graphic and the words slide in from the side they come from, and the graphic grows into place. */
.ks-on .ks-slide .hx-ui, .ks-on .ks-slide .hx-text > * { transition: transform .3s cubic-bezier(.4,0,.6,1); }
.ks-on .ks-slide .hx-ui { transform: translateX(calc(var(--ks-dir) * 26px)) scale(.96); }
.ks-on .ks-slide .hx-text > * { transform: translateX(calc(var(--ks-dir) * 16px)); }
.ks-on .ks-slide.is-out .hx-ui { transform: translateX(calc(var(--ks-dir) * -26px)) scale(.96); }
.ks-on .ks-slide.is-out .hx-text > * { transform: translateX(calc(var(--ks-dir) * -16px)); }
.ks-on .ks-slide.is-on .hx-ui { transform: translateX(var(--ks-drag, 0px)) scale(1); transition: transform .6s cubic-bezier(.2,.8,.2,1) .12s; }
.ks-on .ks-slide.is-on .hx-text > * { transform: none; transition: transform .6s cubic-bezier(.2,.8,.2,1) .16s; }
.ks-dragging .ks-slide.is-on .hx-ui { transition: none; }
.ks-boot .ks-slide, .ks-boot .ks-slide *, .ks-boot .ks-bar, .ks-boot .ks-pos * { transition: none !important; }
.ks-still .ks-slide, .ks-still .ks-slide .hx-ui, .ks-still .ks-slide .hx-text > * { transition: none !important; transform: none !important; }

/* Arrows: bottom right of the stage, beside the title and line (the words keep room for them). They go round:
   Next on 9 goes to 1, like the autoplay. */
.ks-arrows { grid-column: 2; grid-row: 2; align-self: center; justify-self: end; position: relative; z-index: 2; display: flex; gap: 8px; margin-right: 20px; }
.ks-arrow { flex: none; width: var(--ks-ar); height: var(--ks-ar); display: grid; place-items: center; margin: 0; padding: 0; border: 1px solid #323b4b; border-radius: 50%; background: var(--panel); color: var(--fg); cursor: pointer; transition: border-color .2s, background-color .2s; -webkit-tap-highlight-color: transparent; }
.ks-arrow svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.3; stroke-linecap: round; stroke-linejoin: round; }
.ks-next svg { transform: scaleX(-1); }
@media (hover: hover) { .ks-arrow:hover { border-color: var(--blue-hi); background: #18213a; } }

/* Rail: 01 to 09 in the display font; the current one bright, with a thin bar that fills while autoplay runs */
.ks-rail { grid-column: 1; grid-row: 1 / span 2; min-width: 0; display: grid; grid-auto-rows: minmax(0, 1fr); border-top: 1px solid var(--line); }
.ks-pos { position: relative; min-width: 0; display: flex; align-items: center; gap: 14px; margin: 0; padding: 0 6px 0 2px; border: 0; border-radius: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.ks-pos:focus-visible { outline-offset: -2px; border-radius: 6px; }
.ks-n { flex: none; width: 2.1em; font: 600 .74rem/1 var(--mono); letter-spacing: .12em; color: #747f92; transition: color .3s; }
.ks-name { min-width: 0; font: 700 1.35rem/1 var(--ks-font); text-transform: uppercase; letter-spacing: .01em; white-space: nowrap; color: #788396; transition: color .3s; }
@media (hover: hover) { .ks-pos:hover .ks-name { color: #bcc4cf; } }
.ks-pos.is-on .ks-name { color: var(--fg); }
.ks-pos::before { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(59,130,246,.11), rgba(59,130,246,0) 78%); opacity: 0; transition: opacity .35s; pointer-events: none; }
.ks-pos.is-on::before { opacity: 1; }
.ks-pos.is-on .ks-n { color: var(--sky); }
.ks-bar { position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: var(--line); pointer-events: none; }
.ks-bar i { position: absolute; left: 0; right: 0; bottom: 0; height: 2px; border-radius: 2px; background: linear-gradient(90deg, var(--blue-hi), var(--sky)); transform: scaleX(0); transform-origin: left center; }
.ks-on:not(.ks-running) .ks-bar i { transition: transform .35s cubic-bezier(.4,0,.2,1); }

/* 720 to 879: a narrower rail and smaller arrows leave the stage title room to stay as big as on phones (about 40 px) */
@media (min-width: 880px) {
  .ks-on .ks-body { --ks-rail-w: 250px; --ks-gap: 32px; --ks-cap-l: 28px; --ks-cap-r: 156px; --ks-ar: 46px; }
  .ks-arrows { gap: 10px; margin-right: 26px; }
  .ks-name { font-size: 1.55rem; }
}
@media (min-width: 1024px) {
  .ks-on .ks-body { --ks-rail-w: 300px; --ks-gap: 36px; --ks-tmax: clamp(3.2rem, 4.6vw, 3.8rem); }
  .ks-on .ks-slide .hx-title { font-size: min(clamp(3.2rem, 4.6vw, 3.8rem), 13.2cqi); }
  .ks-name { font-size: 1.7rem; }
  .ks-n { font-size: .78rem; }
}
@media (min-width: 1200px) {
  .ks-on .ks-body { --ks-rail-w: 330px; --ks-gap: 44px; }
}
/* The arrows sit level with the middle of a one-line caption (title and line), worked out from the sizes above, so
   they stay put and level with the words even when another slide's line wraps and makes the caption row taller.
   (The title is min(--ks-tmax, 13.2% of the caption's inner width), as set above.) */
@supports (width: 1cqi) {
  .ks-on .ks-body { container-type: inline-size; }
  .ks-arrows { align-self: start; margin-top: calc(20px + (min(var(--ks-tmax), (100cqi - var(--ks-rail-w) - var(--ks-gap) - var(--ks-cap-l) - var(--ks-cap-r)) * .132) + 8px + 1.08rem * 1.45 - var(--ks-ar)) / 2); }
}

/* Keyboard focus never lands under the sticky menu (92 px tall on phones) */
.ks-arrow, .ks-pos, .ks-play { scroll-margin-top: 110px; }

/* Phones: the stage takes the width; under it, one centred row of Prev, the dots and Next; a 03 / 09 counter over the
   title. ks.js moves the rail in between the arrows and sets --ks-n (the slide count). Every dot keeps a 24 px target
   (--ks-dots) and is at most 28 px; the arrows (42 px, down to 30) and the 8 px gaps (down to 2) give way first, and only
   when even that is too little (ten dots under 344 px) do the dots go under 24 px (21.6 at 320), so the row always ends
   at the stage's edges. The current pill is at most its button less 6 px, 16 px on a 24 px dot and 4 px in from the
   edges of a smaller one, so it sits about as far from an arrow as from the next dot. */
@media (max-width: 719px) {
  .ks-on .ks-body { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(var(--ks-art-h), auto) auto auto; }
  .ks-on .ks-frame, .ks-on .ks-slides { grid-column: 1 / -1; border-radius: 16px; }
  .ks-on .ks-slide .hx-text { gap: 6px; padding: 16px 18px 20px; }
  .ks-on .ks-slide .hx-title { font-size: 2.1rem; font-size: min(2.5rem, 13.2cqi); }
  .ks-on .ks-slide .hx-line { font-size: 1rem; }
  .ks-on .ks-count { display: block; margin-bottom: 4px; font: 600 .74rem/1 var(--mono); letter-spacing: .14em; color: var(--sky); }
  .ks-arrows { --ks-dots: min(calc(var(--ks-n, 9) * 24px), calc(100% - 64px)); --ks-aw: clamp(30px, calc((100% - var(--ks-dots) - 16px) / 2), 42px);
    grid-column: 1 / -1; grid-row: 3; align-self: center; justify-self: stretch; justify-content: center; align-items: center;
    gap: 0 clamp(2px, calc((100% - var(--ks-dots)) / 2 - var(--ks-aw)), 8px); margin: 16px 0 0; }
  .ks-arrow { width: var(--ks-aw); height: auto; aspect-ratio: 1 / 1; }
  .ks-rail { flex: 0 1 calc(var(--ks-n, 9) * 28px); min-width: var(--ks-dots); display: flex; align-items: center; border: 0; }
  .ks-pos { flex: 1 1 0; min-width: 0; height: 42px; justify-content: center; gap: 0; padding: 0; border-radius: 10px; }
  .ks-pos:focus-visible { outline-offset: -4px; }
  .ks-n { display: none; }
  .ks-pos::before { display: none; }
  .ks-name { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
  .ks-bar { position: relative; left: auto; right: auto; bottom: auto; width: 8px; height: 8px; border-radius: 999px; background: #5d687a; overflow: hidden; transition: width .3s cubic-bezier(.4,0,.2,1), background-color .3s; }
  @media (hover: hover) { .ks-pos:hover .ks-bar { background: #7a8598; } }
  .ks-pos.is-on .ks-bar { width: 22px; width: min(22px, calc(100% - 6px), max(calc(100% - 8px), calc((100% - 24px) * 3 + 16px))); background: #4a6aa3; }
  .ks-bar i { top: 0; height: auto; border-radius: inherit; }
}
/* Narrow phones: a smaller arrow icon, and a focus ring 1 px off the arrow, so with a 2 px gap it stays clear of the
   current pill on the first or last dot */
@media (max-width: 359px) {
  .ks-arrow svg { width: 16px; height: 16px; }
  .ks-arrow:focus-visible { outline-offset: 1px; }
}

/* Forced colours (Windows High Contrast): backgrounds are dropped there, so draw the dots and rail lines in GrayText
   and the current pill, bar and name in Highlight */
@media (forced-colors: active) {
  .ks-bar, .ks-bar i, .ks-pos.is-on .ks-name, .ks-pos.is-on .ks-n { forced-color-adjust: none; }
  .ks-bar { background: GrayText; }
  .ks-bar i { background: Highlight; }
  .ks-pos.is-on .ks-name, .ks-pos.is-on .ks-n { color: Highlight; }
}
@media (forced-colors: active) and (max-width: 719px) {
  .ks-pos.is-on .ks-bar { background: Highlight; }
}

@media (prefers-reduced-motion: reduce) {
  .ks-on .ks-slide, .ks-on .ks-slide .hx-ui, .ks-on .ks-slide .hx-text > *, .ks-bar, .ks-bar i { transition: none !important; }
  .ks-on .ks-slide .hx-ui, .ks-on .ks-slide .hx-text > * { transform: none !important; }
}
/* KS-END */
/* HX-END */

/* R2-START */
.stars { display: flex; gap: 3px; color: #fbbf24; }
.stars svg { width: 20px; height: 20px; fill: currentColor; }
.quote:has(.stars) { grid-template-rows: auto 1fr auto; align-content: stretch; gap: 20px; }
.quote:has(.stars) figcaption { padding: 0 0 16px; border-top: 0; border-bottom: 1px solid var(--line); }
.quote .stars { padding-top: 16px; border-top: 1px solid var(--line); }
.page-top h1 em { font-style: normal; color: var(--blue-hi); }
.hm-switch { padding-bottom: 88px; }
.hm-switch .fq-switch { margin-top: 0; }
.refer { max-width: 560px; margin-top: 20px; display: flex; gap: 16px; align-items: flex-start; padding: 18px 20px; border: 1px solid rgba(59,130,246,.35); border-radius: 12px; background: rgba(59,130,246,.08); }
.refer-ic { flex: none; width: 44px; height: 44px; display: grid; place-items: center; border-radius: 12px; background: var(--blue); color: #fff; }
.refer-ic svg { width: 24px; height: 24px; }
.refer h2 { font: 700 1.5rem/1 var(--display); text-transform: uppercase; letter-spacing: .01em; margin: 3px 0 6px; }
.refer p { color: var(--muted); font-size: .95rem; line-height: 1.5; }
@media (max-width: 599px) { .hm-switch { padding-bottom: 64px; } }
@media (min-width: 521px) { .keep { white-space: nowrap; } }
section.block.hw-own { padding-top: 8px; }
[data-go] { cursor: pointer; }
.fq-head + .fq-all { margin-top: 0; }
/* Brayden, 2026-10-20: "make your gym your way slightly bigger" (it sits under the hero on the home page), then "it doesnt
   look good right under the main for independent gyms section ... can you make it mesh better": it now sits on its own
   full-width band (panel color, hairlines top and bottom, like the Book a trial band) so it reads as the shelf under the
   hero, and its heading stays a step below the hero's headline instead of competing with it */
section.block.hw-own { padding-block: 64px 72px; border-block: 1px solid var(--line); background: radial-gradient(60% 120% at 50% 0%, rgba(59,130,246,.08), transparent 70%), var(--panel); }
.hw-own .hx-head { margin-bottom: 36px; }
.hw-own .fq-art { background: radial-gradient(120% 85% at 50% 0%, rgba(59,130,246,.14), transparent 65%), var(--ink); }
.hm-switch { padding-top: 72px; }
.hw-own .fq-art { height: 214px; }
.hw-own .fq-ui { transform: scale(1.05); }
.hw-own .fq-art-phone .fq-ui { transform-origin: 50% 100%; }
.hw-own .fq-label { font-size: clamp(2.1rem, 1.6rem + 1.1vw, 2.6rem); }
.hw-own .fq-line { font-size: 1.08rem; }
@media (max-width: 639px) { .hw-own .fq-art { height: 176px; } }
.fq-offline.fq-keyless { border-color: rgba(120,178,255,.45); background: rgba(120,178,255,.1); color: var(--sky); }
/* R2-END */

/* SW-START */
/* Home page "Switching over": a four-step track (Call > Set up > Install > Invite) above one stage that plays
   the active step's small built scene. Each step is a plain <h3> label and <p> line; sw.js puts a button in each heading,
   adds .sw-js (stage shown, steps clickable) and .sw-motion (auto-advance). Without JS the track alone reads like the old
   strip with no dead controls; with reduced motion the stage is static and steps are clicked. */

/* Placement: right under the hero, above the four feature cards, with the same gap above and below */
.hero + .hm-switch { margin-top: -16px; padding-bottom: 56px; }
.hm-switch + .ft { padding-top: 0; }
@media (max-width: 599px) { .hero + .hm-switch { margin-top: -28px; padding-bottom: 44px; } }

.hm-switch .sw { --g: 24px; padding-top: 38px; padding-bottom: 36px; }
.hm-switch .sw-head { grid-template-columns: minmax(0, 1fr) auto; align-items: end; column-gap: 20px; margin-bottom: 30px; }
.sw-titles { display: grid; gap: 14px; min-width: 0; }

/* Pause / play (WCAG 2.2.2) */
.sw-play { flex: none; width: 42px; height: 42px; display: grid; place-items: center; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: 50%; background: var(--panel); color: var(--fg); cursor: pointer; transition: border-color .2s, background-color .2s; }
.sw-play[hidden] { display: none; }
.sw-play:hover { border-color: var(--muted); background: #1a202b; }
.sw-play svg { grid-area: 1 / 1; width: 15px; height: 15px; fill: currentColor; }
.sw-play .sw-i-play { display: none; }
.sw-play[data-paused] .sw-i-pause { display: none; }
.sw-play[data-paused] .sw-i-play { display: block; }

/* Track */
.sw-track { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--g); }
.sw-step { position: relative; min-width: 0; display: grid; gap: 10px; justify-items: start; align-content: start; }
.sw-node { position: relative; z-index: 1; width: 52px; height: 52px; display: grid; place-items: center; margin-bottom: 6px; border: 1px solid var(--line); border-radius: 14px; background: var(--panel); color: var(--sky); transition: background-color .4s, border-color .4s, color .4s, box-shadow .4s; }
.sw-node > .fq-ic { grid-area: 1 / 1; width: 25px; height: 25px; transition: opacity .3s, transform .35s cubic-bezier(.3,1.4,.55,1); }
.sw-node > .sw-chk { opacity: 0; transform: scale(.4); color: var(--ok); stroke-width: 2.6; }
.sw-name { display: flex; align-items: baseline; gap: 10px; margin: 0; font: 700 2.1rem/1 var(--display); text-transform: uppercase; letter-spacing: .01em; color: var(--fg); white-space: nowrap; transition: color .4s; }
.sw-num { font: 600 .76rem/1 var(--mono); letter-spacing: .12em; color: var(--sky); }
.sw-line { max-width: 11.5em; margin: 0; color: var(--muted); font-size: 1rem; line-height: 1.45; text-wrap: balance; min-height: 2.9em; transition: color .4s; }
/* The button sw.js puts in each heading: its overlay makes the whole column one click target with one focus ring */
.sw-tab { margin: 0; padding: 0; border: 0; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; text-align: inherit; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.sw-tab::after { content: ""; position: absolute; z-index: 2; inset: 0; border-radius: 12px; }
.sw-tab:focus-visible { outline: none; }
.sw-tab:focus-visible::after { outline: 2px solid var(--blue-hi); outline-offset: 6px; }
.sw-seg { position: absolute; top: 25px; left: 66px; right: calc(14px - var(--g)); height: 2px; border-radius: 2px; background: rgba(59,130,246,.2); overflow: hidden; }
.sw-fill { position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(90deg, var(--blue-hi), var(--sky)); transform-origin: left center; }

/* Track states (JS on) */
.sw-js .sw-fill { transform: scaleX(0); transform-origin: right center; transition: transform .4s cubic-bezier(.4,0,.2,1); }
.sw-js .is-done .sw-fill { transform: scaleX(1); }
.sw-js .is-on .sw-fill, .sw-js .is-done .sw-fill { transform-origin: left center; }   /* fills left to right, drains onward to the right */
.sw-js .sw-name { color: var(--muted); }
.sw-js .sw-step:hover .sw-name, .sw-js .is-on .sw-name { color: var(--fg); }
.sw-js .is-on .sw-line { color: var(--fg); }
.sw-js .sw-step:not(.is-on):not(.is-done):hover .sw-node { border-color: #3a4558; }
/* Done steps swap their icon for a check, so done > now > next reads at a glance */
.sw-js .is-done .sw-node { border-color: rgba(74,222,128,.42); background: rgba(74,222,128,.09); }
.sw-js .is-done .sw-node > .fq-ic { opacity: 0; transform: scale(.4); }
.sw-js .is-done .sw-node > .sw-chk { opacity: 1; transform: none; }
.sw-js .is-on .sw-node { border-color: var(--blue); background: var(--blue); color: #fff; box-shadow: 0 0 0 6px rgba(59,130,246,.16), 0 12px 28px -10px rgba(59,130,246,.9); }
.sw-motion .is-on .sw-node::after { content: ""; position: absolute; inset: -1px; border: 2px solid var(--blue-hi); border-radius: inherit; animation: sw-ping 1.5s cubic-bezier(0,0,.2,1) infinite; }
.sw-motion .is-on .sw-fill { animation: sw-fill var(--sw-dur, 3s) linear both; }

/* Stage */
.sw-stage { display: none; }
.sw-js .sw-stage { position: relative; display: grid; grid-template-rows: minmax(0, 1fr) auto; margin-top: 22px; border: 1px solid var(--line); border-radius: 14px; overflow: hidden; container-type: inline-size;
  background: radial-gradient(70% 100% at 50% 0%, rgba(59,130,246,.11), transparent 70%), radial-gradient(circle, rgba(120,178,255,.085) 1px, transparent 1.4px) 0 0 / 18px 18px, var(--ink); }
.sw-rail { position: absolute; z-index: 3; top: 0; left: 0; width: calc((100% + var(--g)) / 4); height: 120px; pointer-events: none; transform: translateX(calc(var(--sw-i, 0) * 100%)); transition: transform .6s cubic-bezier(.2,.8,.2,1); }
.sw-beam { position: absolute; top: 0; left: 0; width: 52px; height: 2px; border-radius: 0 0 2px 2px; background: var(--blue-hi); box-shadow: 0 0 14px 2px rgba(59,130,246,.75); }
.sw-beam::after { content: ""; position: absolute; top: 2px; left: -34px; right: -34px; height: 100px; background: radial-gradient(50% 100% at 50% 0%, rgba(59,130,246,.2), transparent 75%); }
.sw-scene { grid-column: 1; grid-row: 1 / span 2; min-width: 0; display: grid; grid-template-rows: minmax(0, 1fr) auto; grid-template-rows: subgrid; opacity: 0; visibility: hidden; transform: translateX(28px);
  transition: opacity .2s ease-in, transform .45s cubic-bezier(.4,0,.6,1), visibility 0s linear .45s; }
.sw-scene.is-prev { transform: translateX(-28px); }
.sw-scene.is-on { opacity: 1; visibility: visible; transform: none; transition: opacity .4s ease .16s, transform .6s cubic-bezier(.2,.8,.2,1) .16s, visibility 0s; }
.sw-art { min-width: 0; min-height: 238px; display: flex; align-items: center; justify-content: center; gap: 26px; padding: 22px 24px 20px; font-size: .88rem; line-height: 1.25; }
.sw-art svg { display: block; flex: none; }
.sw-cap { display: none; }

/* Shared scene parts */
.sw-card { min-width: 0; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); box-shadow: 0 24px 48px -24px rgba(0,0,0,.9); }
.sw-chips { display: grid; gap: 8px; }
.sw-chip { display: flex; align-items: center; gap: 9px; min-width: 156px; padding: 7px 8px 7px 11px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel); font-weight: 600; font-size: .9rem; line-height: 1.2; white-space: nowrap; }
.sw-chip > .fq-ic { width: 16px; height: 16px; color: var(--sky); }
.sw-tick { flex: none; margin-left: auto; width: 20px; height: 20px; display: grid; place-items: center; border-radius: 50%; background: rgba(74,222,128,.15); color: var(--ok); }
.sw-tick .fq-ic, .sw-done .fq-ic { width: 12px; height: 12px; stroke-width: 3; }
.sw-dash { position: relative; flex: none; width: 50px; height: 10px; opacity: .9; }
.sw-dash::before { content: ""; position: absolute; top: 4px; left: 0; right: 5px; height: 2px; border-radius: 2px; background: repeating-linear-gradient(90deg, var(--blue-hi) 0 6px, transparent 6px 11px); }
.sw-dash::after { content: ""; position: absolute; top: 1px; right: 2px; width: 8px; height: 8px; border-top: 2px solid var(--blue-hi); border-right: 2px solid var(--blue-hi); border-radius: 1px; transform: rotate(45deg); }
.sw-pill { flex: none; padding: 5px 8px; border-radius: 999px; font: 600 .66rem/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }
.sw-pill-ok { color: var(--ok); background: rgba(74,222,128,.14); }
.sw-pill-sky { color: var(--sky); background: rgba(120,178,255,.13); }

/* 01 Call */
.sw-call { width: 272px; display: grid; grid-template-columns: 48px minmax(0, 1fr); column-gap: 13px; row-gap: 16px; align-items: center; padding: 16px 16px 15px; }
.sw-av { position: relative; width: 48px; height: 48px; display: grid; place-items: center; border-radius: 50%; background: linear-gradient(135deg, var(--blue-hi), var(--blue)); color: #fff; }
.sw-av .fq-ic { position: relative; width: 21px; height: 21px; stroke-width: 2; }
.sw-ring { position: absolute; inset: 0; border: 2px solid rgba(120,178,255,.6); border-radius: 50%; opacity: 0; }
.sw-call-txt { display: grid; gap: 5px; min-width: 0; }
.sw-status { display: grid; margin-top: 2px; font-size: .8rem; font-weight: 600; line-height: 1.1; }
.sw-st { grid-area: 1 / 1; display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.sw-st::before { content: ""; flex: none; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.sw-st-a { color: var(--muted); opacity: 0; }
.sw-st-b { color: var(--ok); }
.sw-call-txt small { font: 600 .66rem/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--sky); }
.sw-call-txt b { font-size: 1.04rem; font-weight: 700; line-height: 1.1; }
.sw-wave { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; height: 30px; padding: 0 2px; }
.sw-wave i { width: 3px; height: 100%; border-radius: 3px; background: var(--sky); opacity: .85; transform: scaleY(var(--h, .5)); }
.sw-wave i:nth-child(4n+1) { --h: .35; }
.sw-wave i:nth-child(4n+2) { --h: .8; }
.sw-wave i:nth-child(4n+3) { --h: .55; }
.sw-wave i:nth-child(4n) { --h: 1; }
.sw-wave i:nth-child(5n) { --h: .45; }
.sw-wave i:nth-child(7n) { --h: .7; }

/* 02 Set up */
.sw-clock { position: relative; flex: none; width: 132px; height: 132px; }
.sw-clock svg { width: 100%; height: 100%; }
.sw-clock-bg { fill: none; stroke: var(--line); stroke-width: 7; }
.sw-clock-fg { fill: none; stroke: var(--blue-hi); stroke-width: 7; stroke-linecap: round; stroke-dasharray: 100 100; filter: drop-shadow(0 0 6px rgba(59,130,246,.55)); }
.sw-clock-txt { position: absolute; inset: 0; display: grid; place-content: center; justify-items: center; gap: 3px; text-align: center; }
.sw-clock-txt b { font: 700 3rem/.85 var(--display); color: var(--fg); }
.sw-clock-txt small { font: 600 .64rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.sw-win { width: 360px; overflow: hidden; }
.sw-win-bar { display: flex; align-items: center; gap: 6px; padding: 10px 12px; border-bottom: 1px solid var(--line); background: var(--panel-2); font: 600 .68rem/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--muted); white-space: nowrap; }
.sw-win-bar > i { flex: none; width: 8px; height: 8px; border-radius: 50%; background: #2c3445; }
.sw-win-bar > span { margin-left: 8px; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.sw-win-time { display: none; align-items: center; gap: 5px; margin-left: auto; padding: 4px 8px; border: 1px solid var(--line); border-radius: 999px; color: var(--fg); font-style: normal; letter-spacing: .04em; text-transform: none; }
.sw-win-time .fq-ic { width: 12px; height: 12px; color: var(--sky); stroke-width: 2; }
.sw-win-body { display: grid; grid-template-columns: 42px minmax(0, 1fr); }
.sw-side { display: grid; gap: 10px; align-content: start; padding: 12px 11px; border-right: 1px solid var(--line); }
.sw-side i { height: 18px; border-radius: 5px; background: #1d2330; }
.sw-side i:first-child { background: rgba(59,130,246,.45); }
.sw-rows { display: grid; gap: 7px; padding: 12px; min-width: 0; }
.sw-row { display: flex; align-items: center; gap: 10px; min-width: 0; padding: 8px 9px 8px 10px; border: 1px solid var(--line); border-radius: 9px; background: var(--panel-2); }
.sw-row > .fq-ic { width: 16px; height: 16px; color: var(--sky); }
.sw-row b { flex: 1; min-width: 0; font-weight: 600; white-space: nowrap; }
.sw-done { flex: none; width: 20px; height: 20px; display: grid; place-items: center; border-radius: 50%; background: rgba(74,222,128,.15); color: var(--ok); }
.sw-row-hi { border-color: var(--blue-hi); background: rgba(59,130,246,.1); }
.sw-ready { flex: none; padding: 5px 9px; border-radius: 999px; background: var(--blue); color: #fff; font: 600 .66rem/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }

/* 03 Install */
.sw-door { width: 320px; height: auto; overflow: visible; }
.sw-d-floor { fill: none; stroke: var(--line); stroke-width: 2; stroke-linecap: round; }
.sw-d-frame { fill: none; stroke: #3a4456; stroke-width: 2; }
.sw-d-leaf { fill: var(--panel); stroke: #5b6678; stroke-width: 1.5; }
.sw-d-pane { fill: rgba(120,178,255,.07); stroke: #3a4456; stroke-width: 1.5; }
.sw-d-handle { fill: none; stroke: var(--fg); stroke-width: 3; stroke-linecap: round; }
.sw-d-knob { fill: var(--fg); }
.sw-d-strike { fill: var(--sky); filter: drop-shadow(0 0 4px rgba(120,178,255,.8)); }
.sw-d-wire { fill: none; stroke: var(--sky); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1 1; opacity: .85; }
.sw-d-ctrl rect { fill: var(--panel); stroke: var(--sky); stroke-width: 1.5; }
.sw-d-ctrl path { fill: none; stroke: #3a4558; stroke-width: 3; stroke-linecap: round; }
.sw-d-dot { fill: var(--sky); }
.sw-d-pad > rect { fill: var(--panel); stroke: var(--sky); stroke-width: 1.5; }
.sw-d-led { fill: var(--ok); filter: drop-shadow(0 0 4px rgba(74,222,128,.9)); }
.sw-d-keys circle { fill: var(--muted); }
.sw-d-badge circle { fill: #12301f; stroke: var(--ok); stroke-width: 1.5; }
.sw-d-badge path { fill: none; stroke: var(--ok); stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.sw-d-ctrl, .sw-d-pad, .sw-d-badge { transform-box: fill-box; transform-origin: center; }

/* 04 Invite */
.sw-join { width: 232px; display: grid; grid-template-columns: 44px minmax(0, 1fr); column-gap: 12px; row-gap: 14px; align-items: center; padding: 16px; }
.sw-join-ic { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 12px; background: rgba(59,130,246,.16); color: var(--sky); }
.sw-join-ic .fq-ic { width: 22px; height: 22px; stroke-width: 2; }
.sw-join-txt { display: grid; gap: 5px; min-width: 0; }
.sw-join-txt small { font: 600 .64rem/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--sky); white-space: nowrap; }
.sw-join-txt b { font-size: 1.04rem; font-weight: 700; line-height: 1.1; }
.sw-share { position: relative; grid-column: 1 / -1; display: grid; place-items: center; padding: 10px; border-radius: 9px; background: var(--blue); color: #fff; font-weight: 600; font-size: .88rem; line-height: 1; box-shadow: 0 10px 22px -10px rgba(59,130,246,.8); }
.sw-share::after { content: ""; position: absolute; inset: 0; border-radius: inherit; box-shadow: 0 0 0 0 rgba(120,178,255,.55); opacity: 0; }
.sw-mems { display: grid; gap: 8px; width: 290px; }
.sw-mem { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 10px; box-shadow: none; }
.sw-mem b { flex: 1; min-width: 0; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sw-ava { flex: none; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; background: linear-gradient(135deg, #2563eb, #6d4ee0); color: #fff; font: 700 .7rem/1 var(--body); letter-spacing: .02em; }
.sw-mem:nth-child(2) .sw-ava { background: linear-gradient(135deg, #0ea5e9, #2563eb); }
.sw-mem:nth-child(3) .sw-ava { background: linear-gradient(135deg, #3b82f6, #22c55e); }

/* Motion: each scene plays when it turns on (paused with .sw-paused, skipped with .sw-still) */
.sw-motion .is-on .sw-ring { animation: sw-ripple 1.8s cubic-bezier(.2,.6,.3,1) infinite; }
.sw-motion .is-on .sw-st-a { animation: sw-st-out .16s ease-in .52s both; }
.sw-motion .is-on .sw-st-a::before { animation: sw-blink .5s steps(1) infinite; }
.sw-motion .is-on .sw-st-b { animation: sw-st-in .3s cubic-bezier(.2,.8,.2,1) .66s both; }
.sw-motion .is-on .sw-st-b::before { animation: sw-pulse 2s ease-in-out 1s infinite; }
.sw-motion .is-on .sw-wave { animation: sw-wave-on .35s ease .55s both; }
.sw-motion .is-on .sw-ring-b { animation-delay: .9s; }
.sw-motion .is-on .sw-wave i { animation: sw-wave .9s ease-in-out infinite; }
.sw-motion .is-on .sw-wave i:nth-child(3n+1) { animation-duration: 1.1s; animation-delay: -.3s; }
.sw-motion .is-on .sw-wave i:nth-child(3n+2) { animation-duration: .8s; animation-delay: -.55s; }
.sw-motion .is-on .sw-wave i:nth-child(5n) { animation-duration: 1.25s; animation-delay: -.15s; }
.sw-motion .is-on .sw-dash { animation: sw-dash .3s ease-out .45s both; }   /* the arrow draws in just before what it points at */
.sw-motion .sw-s-invite.is-on .sw-dash { animation-delay: .32s; }
.sw-motion .is-on .sw-dash::before { animation: sw-march .6s linear infinite; }
.sw-motion .is-on .sw-chip { animation: sw-pop .5s cubic-bezier(.3,1.45,.55,1) both; }
.sw-motion .is-on .sw-tick { animation: sw-check .4s cubic-bezier(.3,1.5,.55,1) both; }
.sw-motion .sw-s-call.is-on .sw-chip:nth-child(1) { animation-delay: .6s; } .sw-motion .sw-s-call.is-on .sw-chip:nth-child(1) .sw-tick { animation-delay: .85s; }
.sw-motion .sw-s-call.is-on .sw-chip:nth-child(2) { animation-delay: .85s; } .sw-motion .sw-s-call.is-on .sw-chip:nth-child(2) .sw-tick { animation-delay: 1.1s; }
.sw-motion .sw-s-call.is-on .sw-chip:nth-child(3) { animation-delay: 1.1s; } .sw-motion .sw-s-call.is-on .sw-chip:nth-child(3) .sw-tick { animation-delay: 1.35s; }
.sw-motion .sw-s-call.is-on .sw-chip:nth-child(4) { animation-delay: 1.35s; } .sw-motion .sw-s-call.is-on .sw-chip:nth-child(4) .sw-tick { animation-delay: 1.6s; }

.sw-motion .is-on .sw-clock-fg { animation: sw-arc 1.6s cubic-bezier(.45,0,.25,1) .2s both; }
.sw-motion .is-on .sw-clock-txt b { animation: sw-pop .5s cubic-bezier(.3,1.45,.55,1) .25s both; }
.sw-motion .is-on .sw-row { animation: sw-slide .5s cubic-bezier(.2,.8,.2,1) both; }
.sw-motion .is-on .sw-row:nth-child(1) { animation-delay: .2s; }
.sw-motion .is-on .sw-row:nth-child(2) { animation-delay: .32s; }
.sw-motion .is-on .sw-row:nth-child(3) { animation: sw-slide .5s cubic-bezier(.2,.8,.2,1) .44s both, sw-hi .5s ease 1.45s both; }
.sw-motion .is-on .sw-done { animation: sw-done .45s cubic-bezier(.3,1.5,.55,1) both; }
.sw-motion .is-on .sw-row:nth-child(1) .sw-done { animation-delay: .7s; }
.sw-motion .is-on .sw-row:nth-child(2) .sw-done { animation-delay: 1.15s; }
.sw-motion .is-on .sw-ready { animation: sw-pop .5s cubic-bezier(.3,1.45,.55,1) 1.5s both; }

.sw-motion .is-on .sw-d-ctrl { animation: sw-drop .55s cubic-bezier(.3,1.3,.5,1) .2s both; }
.sw-motion .is-on .sw-d-dot { animation: sw-blink .3s steps(1) .75s 3 both; }
.sw-motion .is-on .sw-d-dot:nth-of-type(2) { animation-delay: .85s; }
.sw-motion .is-on .sw-d-dot:nth-of-type(3) { animation-delay: .95s; }
.sw-motion .is-on .sw-d-pad { animation: sw-in-r .55s cubic-bezier(.2,.8,.2,1) .5s both; }
.sw-motion .is-on .sw-d-w2 { animation: sw-draw .3s ease-out .95s both; }
.sw-motion .is-on .sw-d-w1 { animation: sw-draw .5s ease-in-out 1s both; }
.sw-motion .is-on .sw-d-strike { animation: sw-glow .4s ease 1.45s both; }
.sw-motion .is-on .sw-d-led { animation: sw-led .5s steps(1) 1.3s both; }
.sw-motion .is-on .sw-d-badge { animation: sw-badge .5s cubic-bezier(.3,1.6,.5,1) 1.6s both; }
.sw-motion .sw-s-install.is-on .sw-chip:nth-child(1) { animation-delay: .4s; } .sw-motion .sw-s-install.is-on .sw-chip:nth-child(1) .sw-tick { animation-delay: .9s; }
.sw-motion .sw-s-install.is-on .sw-chip:nth-child(2) { animation-delay: 1.45s; } .sw-motion .sw-s-install.is-on .sw-chip:nth-child(2) .sw-tick { animation-delay: 1.7s; }

.sw-motion .is-on .sw-share { animation: sw-press .45s ease .3s both; }
.sw-motion .is-on .sw-share::after { animation: sw-burst .7s ease-out .4s both; }
.sw-motion .is-on .sw-mem { animation: sw-in-r .5s cubic-bezier(.2,.8,.2,1) both; }
.sw-motion .is-on .sw-mem .sw-pill-ok { animation: sw-pop .45s cubic-bezier(.3,1.5,.55,1) both; }
.sw-motion .is-on .sw-mem:nth-child(1) { animation-delay: .55s; } .sw-motion .is-on .sw-mem:nth-child(1) .sw-pill-ok { animation-delay: .95s; }
.sw-motion .is-on .sw-mem:nth-child(2) { animation-delay: .85s; } .sw-motion .is-on .sw-mem:nth-child(2) .sw-pill-ok { animation-delay: 1.25s; }
.sw-motion .is-on .sw-mem:nth-child(3) { animation-delay: 1.15s; } .sw-motion .is-on .sw-mem:nth-child(3) .sw-pill-ok { animation-delay: 1.55s; }

.sw-paused .sw-track *, .sw-paused .sw-track *::after, .sw-paused .sw-stage *, .sw-paused .sw-stage *::before, .sw-paused .sw-stage *::after { animation-play-state: paused !important; }
.sw-still .sw-track *, .sw-still .sw-track *::after, .sw-still .sw-stage *, .sw-still .sw-stage *::before, .sw-still .sw-stage *::after { animation: none !important; }
.sw-boot, .sw-boot *, .sw-boot *::before, .sw-boot *::after { transition: none !important; }

@keyframes sw-fill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes sw-ping { from { opacity: .7; transform: scale(1); } to { opacity: 0; transform: scale(1.5); } }
@keyframes sw-ripple { from { opacity: .9; transform: scale(1); } to { opacity: 0; transform: scale(1.65); } }
@keyframes sw-wave { 0%, 100% { transform: scaleY(.22); } 50% { transform: scaleY(var(--h, .6)); } }
@keyframes sw-dash { from { opacity: 0; clip-path: inset(0 100% 0 0); } to { opacity: .9; clip-path: inset(0); } }
@keyframes sw-march { from { background-position: 0 0; } to { background-position: 11px 0; } }
@keyframes sw-pop { from { opacity: 0; transform: scale(.6) translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes sw-check { from { opacity: 0; transform: scale(0); } to { opacity: 1; transform: none; } }
@keyframes sw-slide { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes sw-arc { from { stroke-dashoffset: 100; } to { stroke-dashoffset: 0; } }
@keyframes sw-done { from { background-color: transparent; color: transparent; box-shadow: inset 0 0 0 1.5px #3a4558; transform: scale(.9); } to { background-color: rgba(74,222,128,.15); color: var(--ok); box-shadow: inset 0 0 0 1.5px transparent; transform: none; } }
@keyframes sw-hi { from { border-color: var(--line); background-color: var(--panel-2); } to { border-color: var(--blue-hi); background-color: rgba(59,130,246,.1); } }
@keyframes sw-drop { from { opacity: 0; transform: translateY(-18px); } to { opacity: 1; transform: none; } }
@keyframes sw-in-r { from { opacity: 0; transform: translateX(26px); } to { opacity: 1; transform: none; } }
@keyframes sw-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
@keyframes sw-blink { 0% { opacity: .25; } 50% { opacity: 1; } }
@keyframes sw-glow { from { fill: #3a4558; filter: none; } to { fill: var(--sky); } }
@keyframes sw-led { 0% { fill: #3a4558; filter: none; } 40% { fill: var(--warn); filter: drop-shadow(0 0 4px rgba(242,184,75,.9)); } 100% { fill: var(--ok); } }
@keyframes sw-pulse { 50% { opacity: .35; } }
@keyframes sw-st-out { from { opacity: 1; } to { opacity: 0; transform: translateY(-6px); } }
@keyframes sw-st-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes sw-wave-on { from { opacity: .4; transform: scaleY(.18); } to { opacity: 1; transform: none; } }
@keyframes sw-badge { from { opacity: 0; transform: scale(0); } to { opacity: 1; transform: none; } }
@keyframes sw-press { 0%, 100% { transform: none; } 45% { transform: scale(.93); } }
@keyframes sw-burst { 0% { opacity: 1; box-shadow: 0 0 0 0 rgba(120,178,255,.6); } 100% { opacity: 0; box-shadow: 0 0 0 12px rgba(120,178,255,0); } }

/* Wide stage (desktop): scenes a size up so they hold the width */
@container (min-width: 780px) {
  .sw-art { gap: 34px; font-size: .94rem; }
  .sw-call { width: 312px; grid-template-columns: 54px minmax(0, 1fr); column-gap: 14px; padding: 18px 18px 16px; }
  .sw-av { width: 54px; height: 54px; }
  .sw-av .fq-ic { width: 23px; height: 23px; }
  .sw-call-txt b, .sw-join-txt b { font-size: 1.14rem; }
  .sw-call-txt small, .sw-join-txt small { font-size: .7rem; }
  .sw-wave { height: 34px; }
  .sw-chips { gap: 9px; }
  .sw-chip { min-width: 178px; gap: 10px; padding: 8px 9px 8px 13px; font-size: .98rem; }
  .sw-chip > .fq-ic { width: 17px; height: 17px; }
  .sw-tick, .sw-done { width: 22px; height: 22px; }
  .sw-clock { width: 146px; height: 146px; }
  .sw-clock-txt b { font-size: 3.5rem; }
  .sw-clock-txt small { font-size: .7rem; }
  .sw-win { width: 400px; }
  .sw-win-bar { padding: 11px 14px; font-size: .72rem; }
  .sw-win-body { grid-template-columns: 46px minmax(0, 1fr); }
  .sw-side { gap: 11px; padding: 13px 12px; }
  .sw-rows { gap: 7px; padding: 12px; }
  .sw-row { padding: 8px 10px 8px 12px; }
  .sw-row > .fq-ic { width: 17px; height: 17px; }
  .sw-ready { font-size: .7rem; padding: 6px 10px; }
  .sw-door { width: 344px; }
  .sw-join { width: 262px; grid-template-columns: 50px minmax(0, 1fr); padding: 18px; row-gap: 16px; }
  .sw-join-ic { width: 50px; height: 50px; border-radius: 13px; }
  .sw-join-ic .fq-ic { width: 24px; height: 24px; }
  .sw-share { padding: 12px; font-size: .95rem; }
  .sw-mems { width: 330px; gap: 9px; }
  .sw-mem { padding: 9px 12px; gap: 12px; }
  .sw-ava { width: 34px; height: 34px; font-size: .74rem; }
  .sw-pill { font-size: .7rem; padding: 6px 9px; }
}

/* Laptop-wide stage: the whole scene a size up (zoom lays it out again at the larger size, so text stays sharp) */
@container (min-width: 880px) {
  .sw-art { zoom: 1.14; min-height: 226px; padding-block: 18px 16px; }
}

/* Narrow stage (under about 700 px wide windows): scenes stack */
@container (max-width: 600px) {
  .sw-art { flex-direction: column; gap: 12px; padding: 18px 14px 16px; min-height: 0; }
  .sw-dash, .sw-clock { display: none; }
  .sw-call { width: min(100%, 300px); row-gap: 12px; padding: 13px 14px 12px; }
  .sw-wave { height: 24px; }
  .sw-chips { width: min(100%, 300px); grid-template-columns: 1fr 1fr; gap: 7px; }
  .sw-tags { width: 100%; grid-template-columns: repeat(2, auto); justify-content: center; }
  .sw-chip { min-width: 0; font-size: .84rem; gap: 7px; padding: 6px 6px 6px 9px; }
  .sw-chip > .fq-ic { width: 14px; height: 14px; }
  .sw-tick { width: 18px; height: 18px; }
  .sw-win { width: min(100%, 320px); }
  .sw-win-time { display: inline-flex; }
  .sw-win-body { grid-template-columns: minmax(0, 1fr); }
  .sw-side { display: none; }
  .sw-door { width: min(100%, 272px); }
  .sw-join { width: min(100%, 320px); grid-template-columns: 40px minmax(0, 1fr) auto; row-gap: 0; padding: 11px 12px; }
  .sw-join-ic { width: 40px; height: 40px; border-radius: 11px; }
  .sw-share { grid-column: auto; padding: 9px 14px; }
  .sw-mems { width: min(100%, 320px); gap: 6px; }
  .sw-mem { padding: 7px 9px; }
  .sw-mem:nth-child(3) { display: none; }
}
/* Phone-width stage: tighter so every label shows in full */
@container (max-width: 330px) {
  .sw-tags { gap: 6px; }
  .sw-tags .sw-chip { gap: 6px; padding: 5px 5px 5px 8px; font-size: .8rem; }
  .sw-tags .sw-chip > .fq-ic { width: 13px; height: 13px; }
  .sw-win-bar { padding: 9px 10px; }
  .sw-win-bar > i { display: none; }
  .sw-win-bar > span { margin-left: 0; letter-spacing: .05em; }
  .sw-join { grid-template-columns: 36px minmax(0, 1fr) auto; column-gap: 10px; padding: 10px 11px; }
  .sw-join-ic { width: 36px; height: 36px; border-radius: 10px; }
  .sw-join-ic .fq-ic { width: 20px; height: 20px; }
  .sw-join-txt small { letter-spacing: .05em; }
  .sw-share { padding: 9px 12px; }
}
/* Small phones (under about 355 px): stack the install tags and put Share under the link, so nothing touches */
@container (max-width: 270px) {
  .sw-tags { grid-template-columns: auto; }
  .sw-join { grid-template-columns: 36px minmax(0, 1fr); row-gap: 10px; }
  .sw-share { grid-column: 1 / -1; }
}
/* Smallest phones (320 px): drop chip icons, tighter cards */
@container (max-width: 250px) {
  .sw-art { padding-inline: 10px; }
  .sw-call { grid-template-columns: 40px minmax(0, 1fr); column-gap: 10px; padding: 12px; }
  .sw-av { width: 40px; height: 40px; }
  .sw-av .fq-ic { width: 18px; height: 18px; }
  .sw-call-txt b, .sw-join-txt b { font-size: .98rem; }
  .sw-chips { gap: 6px; }
  .sw-chip { gap: 5px; padding: 5px 5px 5px 9px; font-size: .8rem; }
  .sw-chip > .fq-ic { display: none; }
  .sw-mem { gap: 7px; padding: 6px 8px; }
  .sw-ava { width: 26px; height: 26px; font-size: .64rem; }
}

/* Under 900px: with motion, the track turns into a compact row of four and the stage carries the label and line */
@media (max-width: 899px) {
  /* No JS or reduced motion: a plain vertical list, like the old strip */
  .hm-switch .sw { --g: 8px; padding-top: 34px; padding-bottom: 30px; }
  .sw-track { grid-template-columns: 1fr; grid-auto-rows: 1fr; gap: 24px; }   /* even rows: nodes and connectors evenly spaced */
  .sw-step { grid-template-columns: 52px minmax(0, 1fr); column-gap: 18px; row-gap: 4px; }
  .sw-node { grid-row: 1 / span 2; margin: 0; }
  .sw-name { font-size: 1.9rem; padding-top: 4px; }
  .sw-line { min-height: 0; max-width: none; }
  .sw-seg { top: 60px; bottom: -20px; left: 25px; right: auto; width: 2px; height: auto; }
  .sw-fill { transform-origin: center top; background: linear-gradient(180deg, var(--blue-hi), var(--sky)); }
  .sw-js:not(.sw-motion) .sw-fill, .sw-js:not(.sw-motion) .is-done .sw-fill { transform: scaleY(0); transform-origin: center top; }
  .sw-js:not(.sw-motion) .is-done .sw-fill { transform: scaleY(1); }
  /* With motion: a compact row of four */
  .sw-motion .sw-track { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--g); }
  .sw-motion .sw-step { grid-template-columns: minmax(0, 1fr); justify-items: center; text-align: center; gap: 8px; }
  .sw-motion .sw-node { grid-row: auto; width: 48px; height: 48px; border-radius: 13px; }
  .sw-motion .sw-node .fq-ic { width: 23px; height: 23px; }
  .sw-motion .sw-name { padding: 0; font-size: 1.32rem; }
  .sw-motion .sw-num { display: none; }
  .sw-motion .sw-line { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .sw-motion .sw-seg { top: 23px; bottom: auto; left: calc(50% + 32px); right: calc(32px - 50% - var(--g)); width: auto; height: 2px; }
  .sw-motion .sw-fill { background: linear-gradient(90deg, var(--blue-hi), var(--sky)); }
  .sw-motion .sw-beam { left: calc((100% - var(--g)) / 2 - 24px); width: 48px; }
  /* The scenes share the stage's rows (subgrid), so every caption box is as tall as the tallest and its top line never moves */
  .sw-motion .sw-cap { display: grid; justify-items: center; align-content: center; gap: 6px; padding: 14px 16px 16px; border-top: 1px solid var(--line); background: var(--panel-2); text-align: center; }
  .sw-motion .sw-cap b { font: 700 1.9rem/1 var(--display); text-transform: uppercase; letter-spacing: .01em; }
  .sw-motion .sw-cap span { color: var(--fg); font-size: 1rem; line-height: 1.4; text-wrap: balance; }
  .sw-js:not(.sw-motion) .sw-beam { display: none; }
}
@media (max-width: 599px) {
  .hm-switch .sw { padding-top: 30px; padding-bottom: 22px; }
  .hm-switch .sw-head { margin-bottom: 26px; column-gap: 12px; }
  .sw-play { width: 38px; height: 38px; }
  .sw-js .sw-stage { margin-top: 18px; }
  .sw-motion .sw-name { font-size: 1.12rem; }
  .sw-motion .sw-node { width: 44px; height: 44px; }
  .sw-motion .sw-seg { top: 21px; left: calc(50% + 29px); right: calc(29px - 50% - var(--g)); }
  .sw-motion .sw-beam { left: calc((100% - var(--g)) / 2 - 22px); width: 44px; }
  .sw-motion .sw-cap b { font-size: 1.7rem; }
  .sw-motion .sw-cap { padding-inline: 12px; }
  .sw-motion .sw-cap span { font-size: .9rem; }
}
/* Small phones: keep the four stage lines even. From 360 px each fits one line with room to spare;
   below that all four break into two balanced lines instead of one or two wrapping on their own. */
@container (max-width: 300px) {
  .sw-motion .sw-cap { padding-inline: 10px; }
  .sw-motion .sw-cap span { font-size: .86rem; }
}
@container (max-width: 270px) {
  .sw-motion .sw-cap span { max-width: 11.5em; }
}

@media (prefers-reduced-motion: reduce) {
  .hm-switch .sw *, .hm-switch .sw *::before, .hm-switch .sw *::after { animation: none !important; transition: none !important; }
}
/* SW-END */

/* TU-START */
/* Home page "Tap to unlock". Brayden, 2026-10-20: "the tap to unlock is like a really unique feature that most gyms dont
   have. this needs to be a focal point on the main page". The member home screen is drawn in code (Summit Fitness, demo
   numbers) so the button can be tapped on a loop: a tap ring, the button turns green "Unlocked", the entry pops up.
   Without JS or with reduced motion it shows the unlocked moment, still. */
.tu { overflow: hidden; }
.tu-wrap { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 48px; align-items: center; }
.tu-copy { min-width: 0; display: grid; gap: 18px; align-content: center; }
.tu h2 { font-size: clamp(2.6rem, 5.4vw, 4.2rem); }
.tu h2 em { font-style: normal; color: var(--blue-hi); }
.tu-line { color: var(--muted); font-size: 1.15rem; line-height: 1.5; max-width: 30ch; }
.tu-chips { list-style: none; margin: 6px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; }
.tu-chips li { display: inline-flex; align-items: center; gap: 8px; padding: 8px 13px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel); font-size: .92rem; font-weight: 600; color: var(--fg); }
.tu-chips svg { width: 16px; height: 16px; fill: none; stroke: var(--ok); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }

.tu-stage { position: relative; min-width: 0; display: grid; justify-items: center; padding: 8px 0 24px; }
.tu-stage::before { content: ""; position: absolute; left: 50%; top: 50%; width: 520px; max-width: 120%; aspect-ratio: 1; transform: translate(-50%, -50%); background: radial-gradient(closest-side, rgba(59,130,246,.22), transparent 70%); pointer-events: none; }
.tu-stage svg { display: block; flex: none; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.tu-phone { position: relative; width: min(318px, 86%); padding: 10px; border-radius: 46px; background: #05070b; border: 1px solid #262d3a; box-shadow: 0 40px 70px -30px rgba(0,0,0,.9), inset 0 0 0 2px #151a23; }
.tu-status { position: relative; display: flex; align-items: center; justify-content: space-between; height: 22px; padding: 0 10px; font-size: 12.5px; }
.tu-notch { position: absolute; left: 50%; top: 1px; width: 84px; height: 22px; margin-left: -42px; border-radius: 999px; background: #000; }
.tu-bars { display: flex; align-items: flex-end; gap: 2px; height: 10px; }
.tu-bars i { width: 3px; border-radius: 1px; background: var(--fg); }
.tu-bars i:nth-child(1) { height: 4px; } .tu-bars i:nth-child(2) { height: 6px; } .tu-bars i:nth-child(3) { height: 8px; } .tu-bars i:nth-child(4) { height: 10px; }
.tu-head { display: flex; align-items: center; gap: 10px; padding: 6px 2px 10px; border-bottom: 1px solid #1c222d; }
.tu-logo { flex: none; width: 34px; height: 34px; display: grid; place-items: center; border-radius: 9px; background: var(--blue-hi); color: #fff; font-weight: 800; font-size: 16px; }
.tu-gym { flex: 1; min-width: 0; display: grid; gap: 3px; }
.tu-gym b { font-size: 15px; font-weight: 750; }
.tu-gym small { font-size: 9px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.tu-bell { width: 20px; height: 20px; color: var(--fg); }
.tu-flex { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px 12px; border-radius: 13px; background: linear-gradient(90deg, #7c3aed, #3b5bfd 70%, #2563eb); color: #fff; }
.tu-flex-pts { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; }
.tu-flex-pts b { font-size: 17px; font-weight: 800; }
.tu-flex-pts svg { width: 17px; height: 17px; }
.tu-streak { display: inline-flex; align-items: center; gap: 4px; padding: 4px 9px; border-radius: 999px; background: rgba(255,255,255,.18); font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.tu-streak svg { width: 13px; height: 13px; color: #fb923c; fill: #fb923c; stroke: none; }
.tu-card { display: grid; gap: 9px; padding: 12px; border: 1px solid #262d3a; border-radius: 16px; background: #10141c; }
.tu-btn { position: relative; height: 54px; border-radius: 12px; background: #3b82f6; box-shadow: 0 14px 30px -14px rgba(59,130,246,.95); color: #fff; overflow: hidden; }
.tu-btn-face { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; gap: 9px; font-size: 18px; font-weight: 750; }
.tu-btn-face svg { width: 21px; height: 21px; stroke-width: 2.2; }
.tu-btn-open { opacity: 0; transform: translateY(8px); }
.tu-tap { position: absolute; left: 62%; top: 50%; width: 46px; height: 46px; margin: -23px 0 0 -23px; border-radius: 50%; background: rgba(255,255,255,.55); opacity: 0; transform: scale(.4); }
.tu-code { display: flex; align-items: center; justify-content: center; gap: 8px; height: 44px; border-radius: 11px; background: #1c222d; font-size: 15px; font-weight: 650; }
.tu-code svg { width: 18px; height: 18px; }
.tu-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.tu-tiles span { display: grid; justify-items: center; gap: 7px; padding: 15px 6px; border: 1px solid #262d3a; border-radius: 14px; background: #10141c; font-size: 13.5px; font-weight: 650; }
.tu-tiles svg { width: 24px; height: 24px; color: var(--blue-hi); }

.tu-toast { position: absolute; left: max(-4%, calc(50% - 300px)); bottom: 70px; z-index: 2; display: flex; align-items: center; gap: 11px; min-width: 250px; padding: 12px 14px; border: 1px solid #2a313b; border-radius: 14px; background: rgba(21,26,35,.97); box-shadow: 0 22px 40px -18px rgba(0,0,0,.9); }
.tu-toast-ic { flex: none; width: 36px; height: 36px; display: grid; place-items: center; border-radius: 10px; background: rgba(74,222,128,.14); color: var(--ok); }
.tu-toast-ic svg { width: 20px; height: 20px; }
.tu-toast-txt { flex: 1; min-width: 0; display: grid; gap: 3px; }
.tu-toast-txt b { font-size: 14.5px; font-weight: 700; }
.tu-toast-txt small { font: 400 11.5px/1 var(--mono); color: var(--muted); }
.tu-toast-tag { flex: none; padding: 5px 9px; border-radius: 999px; background: rgba(74,222,128,.13); color: var(--ok); font: 600 11px/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }

/* the unlocked moment: shown still without JS or under reduced motion, and on each loop with JS */
.tu-stage:not(.tu-live) .tu-btn, .tu-stage.is-open .tu-btn { background: #16a34a; box-shadow: 0 14px 30px -14px rgba(34,197,94,.95); }
.tu-stage:not(.tu-live) .tu-btn-lock, .tu-stage.is-open .tu-btn-lock { opacity: 0; transform: translateY(-8px); }
.tu-stage:not(.tu-live) .tu-btn-open, .tu-stage.is-open .tu-btn-open { opacity: 1; transform: none; }
.tu-live .tu-toast { opacity: 0; transform: translateY(12px) scale(.97); }
.tu-live.is-open .tu-toast { opacity: 1; transform: none; }
.tu-live .tu-btn { transition: background-color .35s ease, box-shadow .35s ease; }
.tu-live .tu-btn-face { transition: opacity .3s ease, transform .3s ease; }
.tu-live .tu-toast { transition: opacity .35s ease, transform .35s ease; }
.tu-live.is-tap .tu-tap { animation: tu-tap .6s ease-out; }
@keyframes tu-tap { 0% { opacity: .75; transform: scale(.4); } 100% { opacity: 0; transform: scale(2.6); } }

/* Brayden: "the tap to unlock looks really awkward cause its so small with so much space around it. make the phone look
   normal" -> a full-size phone at real proportions (whole screen, tab bar and home bar), and a tighter section */
section.block.tu { padding-block: 72px 80px; }
.tu-wrap { max-width: 1080px; grid-template-columns: minmax(0, 1fr) auto; gap: 72px; }
.tu h2 { font-size: clamp(2.8rem, 1.6rem + 3.6vw, 5rem); }
.tu-line { font-size: 1.25rem; max-width: 26ch; }
.tu-stage { padding: 0; }
.tu-stage::before { width: 640px; }
.tu-phone { width: 344px; max-width: 100%; padding: 11px; border-radius: 54px; }
.tu-screen { position: relative; display: flex; flex-direction: column; aspect-ratio: 322 / 698; border-radius: 44px; background: #0b0e14; overflow: hidden; font-size: 14px; color: var(--fg); }
.tu-status { flex: none; height: 46px; padding: 6px 26px 0 30px; font-size: 14px; }
.tu-notch { top: 11px; width: 96px; height: 28px; margin-left: -48px; }
.tu-sys { display: flex; align-items: center; gap: 5px; }
.tu-wifi { width: 15px; height: 15px; stroke-width: 2.4; }
.tu-batt { position: relative; width: 23px; height: 11px; padding: 1.5px; border: 1px solid rgba(230,233,239,.6); border-radius: 3.5px; }
.tu-batt::after { content: ""; position: absolute; right: -3.5px; top: 3px; width: 2px; height: 4px; border-radius: 0 1px 1px 0; background: rgba(230,233,239,.6); }
.tu-batt i { display: block; width: 78%; height: 100%; border-radius: 1.5px; background: var(--fg); }
.tu-body { flex: 1; min-height: 0; display: grid; align-content: start; gap: 13px; padding: 4px 14px 0; overflow: hidden; }
.tu-tiles span.tu-peek { padding-bottom: 40px; }
.tu-tabs { flex: none; display: grid; grid-template-columns: repeat(4, 1fr); padding: 9px 6px 6px; border-top: 1px solid #1c222d; background: #0e1219; }
.tu-tabs span { display: grid; justify-items: center; gap: 4px; font-size: 10.5px; font-weight: 600; color: var(--muted); }
.tu-tabs svg { width: 22px; height: 22px; }
.tu-tabs .tu-on { color: var(--blue-hi); }
.tu-home-bar { flex: none; display: block; width: 116px; height: 4.5px; margin: 8px auto 9px; border-radius: 99px; background: rgba(230,233,239,.85); }
.tu-toast { left: auto; right: calc(100% - 64px); bottom: auto; top: 46%; min-width: 262px; }

@media (max-width: 999px) {
  .tu-wrap { gap: 48px; }
  .tu-phone { width: 320px; }
}
@media (max-width: 799px) {
  section.block.tu { padding-block: 56px 64px; }
  .tu-wrap { grid-template-columns: minmax(0, 1fr); gap: 36px; }
  .tu-line { max-width: 34ch; }
  .tu-toast { right: auto; left: 50%; top: auto; bottom: 92px; transform: translateX(-50%); }
  .tu-live .tu-toast { transform: translate(-50%, 12px) scale(.97); }
  .tu-live.is-open .tu-toast { transform: translateX(-50%); }
}
@media (max-width: 420px) {
  .tu-phone { width: 318px; }
  .tu-toast { min-width: 0; width: calc(100% - 36px); }
}
/* Small phones: the phone keeps its real proportions and the whole stage scales down, so nothing inside is cut off */
@media (max-width: 379px) {
  .tu-stage { zoom: .86; }
  .tu-phone { width: min(318px, 100%); }
}
/* full screen: slightly bigger controls, and the next row of tiles runs on under the tab bar like a scrolling screen */
.tu h2 { max-width: none; }
.tu h2 em { display: block; }
.tu-flex { padding: 12px 14px; }
.tu-btn { height: 60px; }
.tu-code { height: 48px; }
.tu-tiles span { padding-block: 18px; }
.tu-tiles span.tu-peek { padding-bottom: 240px; }
.tu-toast { width: max-content; top: 52%; }
@media (max-width: 799px) { .tu-toast { top: auto; } }
@media (max-width: 420px) { .tu-toast { width: calc(100% - 36px); } }
.tu-tiles span.tu-peek { padding-bottom: 60px; }
.tu-next { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1px solid #262d3a; border-radius: 14px; background: #10141c; }
.tu-next-ic { flex: none; width: 40px; height: 40px; display: grid; place-items: center; border-radius: 11px; background: rgba(59,130,246,.14); color: var(--blue-hi); }
.tu-next-ic svg { width: 21px; height: 21px; }
.tu-next-txt { flex: 1; min-width: 0; display: grid; gap: 2px; }
.tu-next-txt small { font: 600 9.5px/1.2 var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.tu-next-txt b { font-size: 15px; font-weight: 700; }
.tu-next-txt span { font-size: 12.5px; color: var(--muted); }
.tu-next-tag { flex: none; padding: 5px 9px; border-radius: 999px; background: rgba(74,222,128,.13); color: var(--ok); font: 600 10.5px/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }
.tu-flex-pts { white-space: nowrap; }
.tu-toast { right: calc(100% - 30px); top: 61%; }
@media (max-width: 799px) { .tu-toast { right: auto; top: auto; } }
@media (max-width: 420px) {
  .tu-flex { padding-inline: 11px; }
  .tu-streak { padding-inline: 7px; }
}

/* Brayden, again: "tap to unlock section still looks awkward" -> laid out like Manage's "Your gym in your pocket", which he
   likes: phone on the left, a very big heading on the right with one short line, the two halves the same width, and the
   entry it logs on a small card on the phone's edge */
section.block.tu { padding-block: 72px; }
.tu-wrap { max-width: var(--wrap); grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 56px; }
.tu-copy { gap: 20px; }
.tu h2 { font-size: clamp(3.1rem, 6.6vw, 5.6rem); font-weight: 800; line-height: .95; }
.tu-line { font-size: 1.2rem; max-width: 24ch; }
.tu-stage { justify-self: center; }
.tu-stage::before { width: 560px; }
.tu-phone { width: 306px; padding: 10px; border-radius: 50px; }
.tu-screen { aspect-ratio: 286 / 600; border-radius: 41px; }
.tu-toast { top: auto; bottom: 26%; left: calc(100% - 92px); right: auto; width: max-content; min-width: 0; display: grid; grid-template-columns: auto auto auto; column-gap: 11px; row-gap: 8px; padding: 11px 13px 12px; }
.tu-toast-head { grid-column: 1 / -1; font: 600 9.5px/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--sky); }
.tu-toast-txt b { font-size: 14px; }
@media (max-width: 999px) {
  .tu-wrap { gap: 40px; }
  .tu-toast { left: auto; right: -14px; }
}
@media (max-width: 799px) {
  section.block.tu { padding-block: 56px 64px; }
  .tu-wrap { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  .tu-copy { order: -1; }
  .tu-toast { left: auto; right: -12px; bottom: 22%; transform: none; }
  .tu-live .tu-toast { transform: translateY(12px) scale(.97); }
  .tu-live.is-open .tu-toast { transform: none; }
}
@media (max-width: 420px) {
  .tu-phone { width: 300px; }
  .tu-toast { width: max-content; right: -6px; }
}
/* the entry card drops in over the top of the phone, like the sales alerts on Manage */
.tu-stage { padding-top: 30px; }
.tu .tu-toast, .tu .tu-live.is-open .tu-toast { top: 0; bottom: auto; left: 50%; right: auto; width: min(300px, calc(100% - 8px)); grid-template-columns: auto minmax(0, 1fr) auto; transform: translateX(-50%); }
.tu .tu-live .tu-toast { transform: translate(-50%, -16px) scale(.97); }
.tu .tu-live.is-open .tu-toast { transform: translateX(-50%); }
/* TU-END */

/* HW-START */
/* Brayden: the four cards should not be exactly as wide as the "Moving your gym is our job" panel above them */
.ft > .wrap { max-width: 1360px; }
@media (min-width: 1240px) { .ft-grid { gap: 24px; } .ft-card { --aw: 300px; } .ft-text { padding-inline: 32px 30px; } }
/* HW-END */

/* FA-START */
/* FA: Brayden, "exercise your faith ... just make it simple". Home page verse of the week strip, below the "Your gym,
   your way" owner section (the feature cards sit between them) and just above the Book a trial band. No box and no
   panel: a small cross between hairlines, the eyebrow, a big heading and one verse in large type on a faint blue glow.
   With JS (.fa-on) the four verses stack in one grid cell, so the stage always keeps the tallest verse's height at
   every width, and they crossfade; the dots and pause button come from fa.js. */
section.block.fa { padding-block: 24px 112px; text-align: center;
  background: radial-gradient(closest-side, rgba(37,99,235,.13), rgba(37,99,235,.05) 55%, rgba(37,99,235,0)) 50% 62% / min(980px, 100%) 72% no-repeat; }
.fa-wrap { display: flex; flex-direction: column; align-items: center; }

.fa-mark { display: flex; align-items: center; gap: 16px; margin-bottom: 26px; color: var(--sky); }
.fa-mark::before, .fa-mark::after { content: ""; width: 64px; height: 1px; background: linear-gradient(90deg, rgba(38,45,58,0), #323b4b); }
.fa-mark::after { transform: scaleX(-1); }
.fa-mark svg { display: block; width: 14px; height: 21px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; opacity: .9; }
.fa-eyebrow { margin: 0; }
.fa-title { margin: 16px 0 0; font-size: clamp(2.4rem, 1.5rem + 3.6vw, 4rem); }

.fa-show { width: 100%; max-width: 900px; margin-top: 44px; }
.fa-verse { margin: 0; min-width: 0; }
.fa-text { margin: 0; }
.fa-text p { max-width: 36ch; margin: 0 auto; font: 500 clamp(1.3rem, .95rem + 1.75vw, 2.25rem)/1.38 var(--body); letter-spacing: -.012em; color: var(--fg); text-wrap: balance; }
.fa-sc { font-variant: small-caps; letter-spacing: .02em; }
.fa-nw { white-space: nowrap; } /* keeps "thou goest." together so "goest." never sits alone on the last line */
.fa-ref { margin-top: 20px; font: 400 .84rem/1.4 var(--mono); letter-spacing: .03em; color: var(--sky); }
.fa-note { margin: 32px 0 0; max-width: 46ch; color: var(--muted); font-size: 1rem; line-height: 1.5; text-wrap: balance; }

/* Slideshow (fa.js adds .fa-on): every verse in the same cell; the visible one is centred in the reserved height.
   The new verse starts fading in only once the old one has faded out, so the two never overlap. */
.fa-on .fa-stage { display: grid; grid-template-columns: minmax(0, 1fr); }
.fa-on .fa-verse { grid-area: 1 / 1; display: flex; flex-direction: column; justify-content: center; opacity: 0; visibility: hidden; transition: opacity .45s ease, visibility 0s linear .45s; }
.fa-on .fa-verse.fa-cur { opacity: 1; visibility: visible; transition: opacity .75s ease .4s, visibility 0s; }

.fa-controls { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 30px; }
.fa-dots { display: flex; gap: 2px; }
.fa-dot { width: 28px; height: 28px; display: grid; place-items: center; margin: 0; padding: 0; border: 0; border-radius: 999px; background: none; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.fa-dot::before { content: ""; width: 8px; height: 8px; border-radius: 999px; background: #5e687c; transition: width .3s ease, background-color .3s ease; }
.fa-dot:hover::before { background: var(--muted); }
.fa-dot[aria-current="true"]::before { width: 22px; background: var(--blue-hi); }
.fa-play { flex: none; width: 32px; height: 32px; display: grid; place-items: center; margin: 0; padding: 0; border: 1px solid #3a4456; border-radius: 50%; background: none; color: var(--muted); cursor: pointer; transition: color .2s, border-color .2s; -webkit-tap-highlight-color: transparent; }
.fa-play[hidden] { display: none; }
.fa-play:hover { color: var(--fg); border-color: #5e687c; }
.fa-play svg { grid-area: 1 / 1; width: 12px; height: 12px; fill: currentColor; }
.fa-play .fa-i-play, .fa-play[data-paused] .fa-i-pause { display: none; }
.fa-play[data-paused] .fa-i-play { display: block; }

@media (max-width: 560px) {
  section.block.fa { padding-block: 16px 80px; background-size: 100% 70%; }
  .fa-mark { margin-bottom: 22px; }
  .fa-show { margin-top: 32px; }
  .fa-ref { margin-top: 16px; }
  .fa-controls { margin-top: 24px; }
  .fa-note { margin-top: 24px; }
}
@media (prefers-reduced-motion: reduce) {
  .fa-on .fa-verse, .fa-on .fa-verse.fa-cur, .fa-dot::before { transition: none; }
}
/* FA-END */

/* FB-START */
/* Brayden: "make the cross and verse of the week slightly bigger and make it fade to the next verse slightly faster"
   (the verse also changes every 4.5 s instead of 6 s, set in the FA step) */
.fa-mark { gap: 20px; margin-bottom: 30px; }
.fa-mark::before, .fa-mark::after { width: 88px; }
.fa-mark svg { width: 22px; height: 33px; stroke-width: 1.8; }
.fa-eyebrow { font-size: 1rem; }
.fa-text p { font-size: clamp(1.42rem, 1.02rem + 1.95vw, 2.5rem); }
.fa-on .fa-verse { transition: opacity .25s ease, visibility 0s linear .25s; }
.fa-on .fa-verse.fa-cur { transition: opacity .4s ease .2s, visibility 0s; }
@media (prefers-reduced-motion: reduce) { .fa-on .fa-verse, .fa-on .fa-verse.fa-cur { transition: none; } }
/* FB-END */

/* HB-START */
/* Brayden, 2026-10-20: "make your gym your way bigger and more promonite" -> a much bigger centred heading, wider and taller
   tiles, the graphics drawn about a fifth bigger (zoom, so they keep their layout), bigger labels, a stronger glow on the band */
section.block.hw-own { padding-block: 88px 100px; background: radial-gradient(70% 120% at 50% 0%, rgba(59,130,246,.17), transparent 70%), var(--panel); }
.hw-own > .wrap { max-width: 1360px; }
.hw-own .hx-head { max-width: none; justify-items: center; text-align: center; margin-bottom: 52px; }
.hw-own .hx-head h2 { font-size: clamp(3rem, 1.5rem + 4.4vw, 5.6rem); line-height: .95; }
.hw-own .hx-head .eyebrow { font-size: .92rem; }
.hw-own .fq-tiles { gap: 28px; }
.hw-own .fq-art { height: 272px; border-color: rgba(59,130,246,.32); }
.hw-own .fq-ui { transform: none; zoom: 1.2; }
.hw-own .fq-label { font-size: clamp(2.4rem, 1.6rem + 1.5vw, 3.2rem); }
.hw-own .fq-line { font-size: 1.15rem; }
@media (max-width: 1239px) { .hw-own .fq-ui { zoom: 1.08; } .hw-own .fq-art { height: 250px; } }
@media (max-width: 1099px) { .hw-own .fq-ui { zoom: 1.25; } .hw-own .fq-art { height: 280px; } }   /* two columns */
@media (max-width: 799px) { .hw-own .fq-ui { zoom: 1.05; } .hw-own .fq-art { height: 240px; } }
@media (max-width: 599px) { section.block.hw-own { padding-block: 64px 72px; } .hw-own .hx-head { margin-bottom: 36px; } .hw-own .fq-ui { zoom: 1.12; } .hw-own .fq-art { height: 224px; } }
@media (max-width: 359px) { .hw-own .fq-ui { zoom: 1; } .hw-own .fq-art { height: 196px; } }
/* HB-END */

/* LG-START */
/* Owners page: partner gym logos. Brayden, 2026-10-20: "add each partner's gym logo on the owners page. if they are blurry
   make them clear", then "i dont like the white backgrounds and then the one black background ... make it a slidehow or do
   something creative with it" -> every logo cut out of its background in one light tone, on a slow endless strip that pauses
   under the mouse, fading out at both ends. Each owner's review card carries its gym's logo next to the name. */
.quote figcaption:has(.lg-own) { grid-template-columns: 72px minmax(0, 1fr); column-gap: 16px; align-content: center; }
.quote figcaption:has(.lg-own) > b, .quote figcaption:has(.lg-own) > span { grid-column: 2; }
.lg-own { grid-row: 1 / span 2; width: 72px; height: 50px; object-fit: contain; opacity: .92; }
section.block.lg { --lh: 128px; --lg-gap: 104px; padding-top: 24px; overflow: hidden; }
.lg .block-head { margin-bottom: 44px; }
.lg-marquee { overflow: hidden; padding-block: 16px; -webkit-mask-image: linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent); mask-image: linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent); }
/* 40s and 30s per set (Brayden, 2026-10-23: "make it go a bit faster"); ls/ls.js takes over from this animation */
.lg-track { display: flex; width: max-content; animation: lg-scroll 40s linear infinite; }
.lg-set { flex: none; display: flex; align-items: center; gap: var(--lg-gap); margin: 0; padding: 0 var(--lg-gap) 0 0; list-style: none; }
.lg-set li { flex: none; height: var(--lh); display: grid; place-items: center; }
.lg-set img { display: block; width: auto; height: calc(var(--lh) * var(--k, 1)); opacity: .85; transition: opacity .25s ease, transform .25s ease; }
.lg-set li:hover img { opacity: 1; transform: scale(1.07); }
.lg-marquee:hover .lg-track { animation-play-state: paused; }
@keyframes lg-scroll { to { transform: translateX(-50%); } }
@media (max-width: 639px) {
  section.block.lg { --lh: 88px; --lg-gap: 60px; }
  .lg .block-head { margin-bottom: 32px; }
  .lg-track { animation-duration: 30s; }
  .lg-marquee { -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); }
}
/* no motion: the logos simply sit in centred rows */
@media (prefers-reduced-motion: reduce) {
  .lg-track { width: auto; animation: none; }
  .lg-set { flex: 1; flex-wrap: wrap; justify-content: center; row-gap: 40px; padding: 0 20px; }
  .lg-set[aria-hidden="true"] { display: none; }
  .lg-marquee { -webkit-mask-image: none; mask-image: none; }
  .lg-set img, .lg-set li:hover img { transition: none; transform: none; }
}
/* LG-END */

/* RF-START */
/* Contact. Brayden, 2026-10-20: "talk to us is off to the left" (centred), the big $500 "looks to salesy keep it simple",
   then "make the contact page flow better" -> one centred column: heading, a two-way switch (Get help / Refer a gym, get
   $500), then the one form that was picked. Without script both forms simply show one after the other. */
.page-head:has(#contact-form) > .wrap { justify-items: center; text-align: center; }
.page-head:has(#contact-form) .lede { margin-inline: auto; }
.cf-switch, .cf-panel { width: 100%; max-width: 720px; }
.cf-switch { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 18px; padding: 6px; border: 1px solid var(--line); border-radius: 16px; background: var(--panel-2); }
.cf-switch[hidden], .cf-panel[hidden] { display: none; }
.cf-switch [role="tab"] { all: unset; box-sizing: border-box; display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 52px; padding: 10px 12px; border-radius: 11px; font: 650 1.02rem/1.2 var(--body); color: var(--muted); text-align: center; cursor: pointer; transition: background-color .2s ease, color .2s ease, box-shadow .2s ease; }
.cf-switch [role="tab"]:hover { color: var(--fg); background: rgba(59,130,246,.12); }
.cf-switch [role="tab"][aria-selected="true"] { background: var(--blue); color: #fff; box-shadow: 0 10px 24px -12px rgba(37,99,235,.95); }
.cf-switch [role="tab"]:focus-visible { outline: 2px solid var(--blue-hi); outline-offset: 2px; }
.cf-switch svg { flex: none; width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
.cf-panel { display: grid; gap: 14px; text-align: left; }
.cf-panel .contact-form, .cf-panel .rf-form { max-width: none; margin-top: 0; }
.cf-panel .form-msg { text-align: center; }
.page-head:has(#contact-form) .btn[type="submit"] { justify-self: stretch !important; justify-content: center; }
.cf-refer { margin-top: 28px; }
.cf-refer > h2 { text-align: center; font-size: clamp(2rem, 1.5rem + 1.4vw, 2.7rem); }
.cf-refer > h2 em { font-style: normal; color: var(--blue-hi); }
.rf-line { text-align: center; color: var(--muted); font-size: 1.05rem; line-height: 1.5; max-width: 62ch; justify-self: center; text-wrap: balance; }
/* With the switch, the referral heading is the switch itself, so its h2 only labels the panel for screen readers */
.cf-on .cf-refer { margin-top: 0; }
.cf-on .cf-refer > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.rf-form { gap: 22px; }
.rf-form fieldset { min-width: 0; margin: 0; padding: 0; border: 0; display: grid; gap: 14px; }
.rf-form legend { margin-bottom: 12px; padding: 0; font: 600 .74rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--sky); }
.rf-form .row2 > * { min-width: 0; }
.rf-opt { color: #6f7a8b; }
.rf-form textarea { min-height: 5.5em; }
.rf-form select { appearance: none; -webkit-appearance: none; padding-right: 2.4em; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239aa4b2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right .8em center; background-size: 16px; }
@media (max-width: 599px) { .rf-form .row2 { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 479px) {
  .cf-switch { gap: 4px; padding: 4px; border-radius: 14px; }
  .cf-switch [role="tab"] { min-height: 50px; padding: 8px 6px; font-size: .9rem; text-wrap: balance; }
  .cf-switch svg { display: none; }
}
/* RF-END */

/* LB-START */
/* Brayden, 2026-10-20: "on the main page make mygymfitness and the logo bigger" -> the logo and name in the top bar, on every
   page so the bar stays the same everywhere; still one row with the button on phones */
.nav .wrap { min-height: 78px; }
.logo { gap: 12px; font-size: 1.6rem; letter-spacing: -.015em; }
.logo img { width: 46px; height: 46px; }
@media (max-width: 900px) { header.nav .wrap { padding-top: 12px; } }
@media (max-width: 480px) { .logo { font-size: 1.38rem; gap: 10px; } .logo img { width: 40px; height: 40px; } }
@media (max-width: 400px) { .logo { font-size: 1.24rem; gap: 8px; } .logo img { width: 36px; height: 36px; } }
@media (max-width: 340px) { .logo { font-size: 1.1rem; gap: 7px; } .logo img { width: 32px; height: 32px; } .nav-cta .btn { padding: .68em .72em; font-size: .86rem; } }
/* LB-END */

/* FS-START */
/* Brayden, 2026-10-20: the FAQ groups "blend too much". Each group is its own panel with its own colour, matched
   on its topic chip at the top. */
#fq-start, a[href="#fq-start"] { --c: #78b2ff; --c-rgb: 120,178,255; }
#fq-members, a[href="#fq-members"] { --c: #b69cff; --c-rgb: 182,156,255; }
#fq-door, a[href="#fq-door"] { --c: #f2b84b; --c-rgb: 242,184,75; }
#fq-money, a[href="#fq-money"] { --c: #4ade80; --c-rgb: 74,222,128; }
.fq-jump a .fq-ic { color: var(--c, var(--sky)); }
.fq-jump a:hover { border-color: var(--c, var(--blue-hi)); background: rgba(var(--c-rgb, 59,130,246), .1); }
.fq-groups { gap: 36px; }
.fq-group { position: relative; padding: 44px 44px 30px; border: 1px solid rgba(var(--c-rgb), .3); border-top: 5px solid var(--c); border-radius: 22px; background: radial-gradient(70% 140% at 0% 0%, rgba(var(--c-rgb), .13), transparent 62%), var(--panel); gap: 48px; }
.fq-group-head { position: static; padding-top: 6px; grid-template-columns: 64px minmax(0, 1fr); column-gap: 16px; row-gap: 8px; }
.fq-group-ic { width: 64px; height: 64px; border-radius: 18px; background: rgba(var(--c-rgb), .16); border: 1px solid rgba(var(--c-rgb), .35); color: var(--c); }
.fq-group-ic .fq-ic { width: 32px; height: 32px; }
.fq-group-label { font-size: 2.6rem; }
.fq-count { color: var(--c); }
.fq-group .faq { border-top: 0; }
.fq-group .faq details:last-child { border-bottom: 0; }
.fq-group .faq summary { padding: 20px 0; }
.fq-group .faq summary::after { color: var(--c); }
.fq-group .fq-list summary:hover::after { color: var(--c); }
.fq-group .fq-list a { color: var(--c); }
.fq-group { scroll-margin-top: 110px; }
@media (max-width: 899px) {
  .fq-group { padding: 30px 28px 16px; gap: 14px; }
  .fq-group-head { padding: 0 0 18px; border-bottom: 1px solid rgba(var(--c-rgb), .25); }
}
@media (max-width: 599px) {
  .fq-groups { gap: 24px; }
  .fq-group { padding: 24px 18px 8px; border-radius: 18px; }
  .fq-group-head { grid-template-columns: 52px minmax(0, 1fr); column-gap: 13px; row-gap: 6px; }
  .fq-group-ic { width: 52px; height: 52px; border-radius: 14px; }
  .fq-group-ic .fq-ic { width: 26px; height: 26px; }
  .fq-group-label { font-size: 2.1rem; }
  .fq-group .faq summary { padding: 18px 0; font-size: 1.02rem; }
}
/* FS-END */

/* HC-START */
/* Brayden, 2026-10-20: "i dont like how all the lettering in the how it works is all white" -> the site's blues on the
   key words: the second half of the heading, "Features", the active feature and its big name. */
.hiw-head h1 em { font-style: normal; color: var(--blue-hi); }
.hiw-step::before { top: 12px; left: 12px; padding: 5px 9px; border-radius: 999px; background: rgba(59,130,246,.16); color: var(--sky); font-weight: 700; }
/* Brayden, later: "make join online, walk in, and door follows billing white" -> the step names stay white */
/* Brayden, later: "make key features all white again" -> no blue in the Key Features heading, list or names */
/* HC-END */

/* RV-START */
/* Partners: "Leave a review on the App Store" beside the 4.9 rating. Brayden, 2026-10-20: "where could i put leave a review
   in the app store with a link to it? put that where you think it would go best". Quiet outline button, not a banner. */
.rv-row { margin-top: 28px; display: flex; flex-wrap: wrap; align-items: center; gap: 14px 20px; scroll-margin-top: 110px; }
.rv-row .rating { margin: 0; margin-right: auto; }
.rv-ask { color: var(--fg); font-weight: 600; margin-right: -6px; }
.rv-btn { padding: .72em 1.1em; font-size: .95rem; gap: .55em; }
.rv-btn svg { width: 17px; height: 17px; fill: var(--warn); }
.rv-btn:hover { border-color: var(--blue-hi); background: rgba(59,130,246,.1); }
@media (max-width: 599px) { .rv-row .rating { flex-basis: 100%; } }
/* RV-END */

/* CC-START */

/* CC-END */

/* MX-START */
/* Manage page, "Also on the Manage tab". Brayden: "when you hover over each one, it lights it up and if you click it it
   gives additional information". Without JS each tile simply shows its extra line. With JS (.mng-feats-js) the line
   folds away and the tile's title becomes a button whose overlay covers the whole tile. Brayden later: no + in the corner, only the highlight and the click. */
.mng-feat { position: relative; transition: background .2s ease, box-shadow .2s ease, transform .2s ease; -webkit-tap-highlight-color: transparent; }
.mng-feat-ic { transition: background-color .2s ease, color .2s ease, box-shadow .2s ease; }
.mng-x { color: var(--fg); font-size: .95rem; line-height: 1.5; margin-top: 10px; padding-left: 12px; border-left: 2px solid var(--blue-hi); }
.mng-feats-js .mng-x { margin-top: 0; }
.mng-feats-js .mng-x-wrap { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .25s ease; }
.mng-feats-js .mng-x-wrap > .mng-x { min-height: 0; overflow: hidden; opacity: 0; transition: opacity .2s ease, margin-top .25s ease; }
.mng-feats-js .mng-feat.is-open .mng-x-wrap { grid-template-rows: 1fr; }
.mng-feats-js .mng-feat.is-open .mng-x { margin-top: 10px; opacity: 1; }
.mng-feat-btn { all: unset; cursor: pointer; }
.mng-feat-btn::after { content: ""; position: absolute; inset: 0; z-index: 1; }
.mng-feat-btn:focus-visible { outline: none; }
.mng-feat-btn:focus-visible::after { outline: 2px solid var(--blue-hi); outline-offset: -4px; border-radius: 4px; }
.mng-feats-js .mng-feat { cursor: pointer; }
.mng-feats-js .mng-feat h3 { transition: color .2s ease; }
/* Brayden: "when my mouse hovers them it highlights it or makes it bold or something so i know its possible to click on it".
   2026-10-20 again: "still not highlighting". The old dark-navy highlight was too faint, so the tile now turns clearly blue
   with a glow. .is-hot is set from script too (pointer events), and a tap gives the same highlight on touch screens. */
/* Brayden then: "make it less highlighted" -> a softer tint, a thin border and a small glow */
.mng-feat:hover, .mng-feat.is-hot, .mng-feat.is-open { z-index: 2; transform: translateY(-1px); background: linear-gradient(180deg, rgba(59,130,246,.16), rgba(59,130,246,.06)); box-shadow: inset 0 0 0 1px rgba(59,130,246,.75), 0 8px 22px -12px rgba(59,130,246,.55); }
.mng-feats-js .mng-feat:active { background: rgba(59,130,246,.24); }
.mng-feat:hover .mng-feat-ic, .mng-feat.is-hot .mng-feat-ic, .mng-feat.is-open .mng-feat-ic { background: var(--blue); color: #fff; box-shadow: 0 8px 22px -8px rgba(59,130,246,.9); }
.mng-feat:hover h3, .mng-feat.is-hot h3, .mng-feat.is-open h3 { color: #fff; }
.mng-feat:hover p:not(.mng-x), .mng-feat.is-hot p:not(.mng-x) { color: #dbe4f0; }
.mng-feat:focus-within { background: rgba(59,130,246,.12); }
@media (prefers-reduced-motion: reduce) {
  .mng-feat, .mng-feat-ic, .mng-feat h3, .mng-feats-js .mng-x-wrap, .mng-feats-js .mng-x-wrap > .mng-x { transition: none; }
}
/* MX-END */

/* BG-START */
/* Fixes from the background check of 2026-10-20 */
/* "Your gym, your way": the plan name fits ("Single Membership", not "Single Membe..."), "Keyless entry" stays on one
   line where the four tiles first share a row, and the phone and door drawings grow with the other two tiles */
.hw-own .fq-phone { zoom: 1.2; }
.hw-own .fq-door { max-width: 268px; }
@media (min-width: 1240px) and (max-width: 1339px) { .hw-own .fq-ui, .hw-own .fq-phone { zoom: 1.08; } }
@media (min-width: 1100px) and (max-width: 1239px) { .hw-own .fq-ui, .hw-own .fq-phone { zoom: 1; } .hw-own .fq-label { font-size: 2.3rem; } }
@media (max-width: 1239px) { .hw-own .fq-door { max-width: 236px; } }
@media (max-width: 1099px) { .hw-own .fq-phone { zoom: 1.25; } .hw-own .fq-door { max-width: 280px; } }
@media (max-width: 799px) { .hw-own .fq-phone { zoom: 1.05; } .hw-own .fq-door { max-width: 240px; } }
@media (max-width: 599px) { .hw-own .fq-phone { zoom: 1.1; } .hw-own .fq-door { max-width: 226px; } }
@media (max-width: 359px) { .hw-own .fq-phone { zoom: 1; } .hw-own .fq-door { max-width: 200px; } }
/* Tap to unlock: the Next class card's time line clears the tab bar on phones; the Entries card is solid, so the
   phone's status bar no longer shows through it */
.tu-body { gap: 11px; }
.tu-toast { background: #151a23; }
@media (max-width: 429px) { .tu-body { gap: 8px; } .tu-tiles span { padding-block: 12px; } }
/* Partners: TAC's disk and FitPhil's block read heavier than the line logos, so they sit a little smaller and softer */
.lg-set img[src$="tac.webp"] { height: calc(var(--lh) * .78); }
.lg-set img[src$="fitphil.svg"] { height: calc(var(--lh) * .8); }
.lg-own[src$="tac.webp"] { opacity: .8; }
/* Review cards on 320px phones: a smaller logo column so names and roles keep to one line */
@media (max-width: 359px) {
  .quote figcaption:has(.lg-own) { grid-template-columns: 56px minmax(0, 1fr); column-gap: 12px; }
  .lg-own { width: 56px; height: 40px; }
}
/* BG-END */

/* GP-START */
/* Home: even gaps between "Tap to unlock", "Moving your gym is our job", the four key cards and "Exercise your faith".
   Brayden, 2026-10-20: "make the gap between one tap the door opens and moving your gym is our job as even as the other
   gaps". 88px between them on computers and tablets, 72px on phones. */
section.hm-switch { padding-top: 47px; }
section.block.fa { padding-top: 0; }
@media (max-width: 799px) { section.hm-switch { padding-top: 55px; } }
@media (max-width: 599px) { section.hm-switch { padding-top: 38px; } section.hm-switch + .ft { padding-top: 8px; } section.block.fa { padding-top: 8px; } }
@media (max-width: 429px) { section.hm-switch { padding-top: 18px; } }
@media (min-width: 421px) and (max-width: 429px) { section.hm-switch { padding-top: 8px; } }
/* Brayden, 2026-10-20: "make book a trail at the bttom slightly bigger" -> the bottom banner's button on every page */
.cta-band .btn { font-size: 1.12rem; padding: 1.05em 1.75em; border-radius: 10px; }
@media (max-width: 480px) { .cta-band .btn { font-size: 1.06rem; padding: 1em 1.5em; } }
/* GP-END */

/* PH-START */
/* Phones that read as phones (Brayden, 2026-10-20: "the black blends in with the black"):
   a brushed-metal rim lit from the top left, side buttons and a soft blue glow.
   The two screenshot phones (hero, Owners) have the rim drawn into the image by ph/frame.py. */
.hero-visual .phone { filter: drop-shadow(0 0 36px rgba(59,130,246,.24)) drop-shadow(0 40px 60px rgba(0,0,0,.55)); }
.phone-stage > img { filter: drop-shadow(0 0 32px rgba(59,130,246,.22)) drop-shadow(0 30px 50px rgba(0,0,0,.55)); }

.tu-phone {
  border: 3px solid transparent;
  background:
    linear-gradient(#05070b, #05070b) padding-box,
    linear-gradient(150deg, #c9d0db 0%, #737b8b 16%, #3b414d 42%, #4f5765 70%, #a6aebc 100%) border-box;
  box-shadow: 0 0 70px -14px rgba(59,130,246,.4), 0 40px 70px -30px rgba(0,0,0,.9), inset 0 0 0 1px #000, inset 0 0 0 2.5px #161b24;
}
.tu-phone::before, .tu-phone::after { content: ""; position: absolute; width: 4px; border-radius: 2px; pointer-events: none; }
/* two volume buttons on the left, one long side button on the right */
.tu-phone::before { left: -7px; top: 25%; height: 17%; border-radius: 2px 0 0 2px;
  background: linear-gradient(180deg, #8d96a5 0 44%, transparent 44% 56%, #6f7786 56% 100%); }
.tu-phone::after { right: -7px; top: 29%; height: 12%; border-radius: 0 2px 2px 0;
  background: linear-gradient(180deg, #9aa3b2, #5f6776); }

.fq-phone, .ft-phone {
  border: 3px solid transparent; border-bottom: 0;
  background:
    linear-gradient(var(--ink), var(--ink)) padding-box,
    linear-gradient(150deg, #c9d0db 0%, #737b8b 18%, #3b414d 48%, #4f5765 78%, #a6aebc 100%) border-box;
}
.fq-phone { box-shadow: inset 4px 0 0 #05070b, inset -4px 0 0 #05070b, inset 0 4px 0 #05070b, 0 -12px 44px -18px rgba(59,130,246,.6); padding: 12px 15px 0; }
.ft-phone { box-shadow: inset 4px 0 0 #05070b, inset -4px 0 0 #05070b, inset 0 4px 0 #05070b, 0 -6px 44px -12px rgba(59,130,246,.5); padding: 11px 13px 0; }
/* PH-END */

/* MB-START */
/* Brayden, 2026-10-20: the top bar slides away while scrolling down and comes back on any scroll up (mb.js) */
header.nav { transition: transform .28s ease; will-change: transform; }
header.nav.nav-away { transform: translateY(calc(-100% - env(safe-area-inset-top, 0px) - 2px)); }
@media (prefers-reduced-motion: reduce) { header.nav { transition: none; } }

/* Brayden, 2026-10-20: less scrolling on phones. Computers keep their layout. */
@media (max-width: 599px) {
  /* Brayden: no big gap between the top bar and the first line of each page */
  section.hero { padding-top: 26px; }
  section.block.page-top, section.page-head { padding-top: 26px; }

  /* Your gym, your way: heading centred between the top of the blue band and the pictures (his ask), 2x2 tiles */
  section.block.hw-own { padding-top: 38px; }
  .hw-own .hx-head { margin-bottom: 37px; }
  .hw-own .fq-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 12px; }
  .hw-own .fq-tile { gap: 5px; }
  .hw-own .fq-art { height: 124px; padding: 8px 6px; margin-bottom: 6px; border-radius: 12px; }
  .hw-own .fq-art-phone { padding-bottom: 0; }
  .hw-own .fq-ui { zoom: .64; }
  .hw-own .fq-phone { zoom: .66; }
  .hw-own .fq-door { max-width: 150px; }
  .hw-own .fq-label { font-size: 1.5rem; line-height: 1; }
  .hw-own .fq-line { font-size: .9rem; line-height: 1.38; }
  /* Brayden: centre this section on phones (heading, labels and lines all on the middle line) */
  .hw-own .fq-label, .hw-own .fq-line { text-align: center; }
  .hw-own .hx-head .eyebrow { margin-right: calc(-1 * var(--ls, .13em)); }

  /* The four key cards: 2x2 */
  .ft-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .ft-card { border-radius: 14px; grid-template-rows: auto 1fr; }
  .ft-art { height: 124px; padding: 8px 6px; }
  .ft-art-phone { padding: 10px 8px 0; }
  .ft-ui { zoom: .66; }
  .ft-phone { zoom: .7; }
  .ft .ft-card .ft-text { gap: 6px; padding: 12px 12px 14px; align-content: start; }
  .ft .ft-title { font-size: 1.32rem; line-height: 1; }
  .ft-line { font-size: .86rem; line-height: 1.38; }
  .ft-line .ft-s + .ft-s { display: none; }

  /* Hero phone a little smaller */
  .hero-visual .phone { width: min(260px, 68%); }

  /* Verse of the week: smaller verse text, less reserved height */
  .fa-show { margin-top: 24px; }
  .fa-text p { font-size: 1.12rem; line-height: 1.4; }
  .fa-controls { margin-top: 18px; }
  .fa-note { margin-top: 18px; }
}
@media (max-width: 359px) {
  .hw-own .fq-tiles, .ft-grid { gap: 18px 10px; }
  .hw-own .fq-art, .ft-art { height: 108px; }
  .hw-own .fq-ui { zoom: .56; }
  .hw-own .fq-phone { zoom: .58; }
  .ft-ui { zoom: .58; }
  .ft-phone { zoom: .62; }
  .hw-own .fq-label { font-size: 1.32rem; }
  .ft .ft-title { font-size: 1.18rem; }
  .ft .ft-card .ft-text { padding: 10px 10px 12px; }
}

/* Brayden, 2026-10-20: menu tabs bigger and white so people who don't see well don't miss them.
   The current page keeps a blue underline; hover turns a tab light blue (class fallback in mb.js). */
.nav-links { font-size: 1.06rem; }
.nav-links a { color: #fff; font-weight: 600; text-decoration: none; text-decoration-thickness: 2px; text-underline-offset: 7px; transition: color .15s ease; }
.nav-links a[aria-current="page"] { color: #fff; text-decoration-line: underline; text-decoration-color: var(--blue-hi); }
.nav-links a:hover, .nav-links a.is-hot { color: var(--sky); }
@media (max-width: 900px) { header.nav .nav-links { font-size: 1.04rem; } }
@media (max-width: 480px) { header.nav .nav-links { font-size: 1rem; } }
/* these sizes are for the tab row shown when the menu script can't run; the menu popup sets its own */
@media (max-width: 400px) { header.nav:not(.js-menu) .nav-links { font-size: .95rem; gap: 8px; } }
@media (max-width: 379px) { header.nav:not(.js-menu) .nav-links { font-size: .88rem; gap: 6px; } }
@media (max-width: 349px) { header.nav:not(.js-menu) .nav-links { font-size: .8rem; gap: 5px; } }


/* Brayden, 2026-10-20: "put those into the 3 lines and when you click the three lines they pop up", then "keep the 3 lines
   for the phone but for the computer can you make it was it previously was" -> the menu button only up to 1023px (phones and
   tablets, where the tabs can't fit on one row beside the logo); computers show the tab row as before.
   Without JS the tabs stay in the bar as before; mb.js adds .js-menu. */
header.nav .nav-menu, header.nav .nav-links .nav-login, header.nav.js-menu .nav-links a.nav-login { display: none; }
@media (max-width: 1023px) {
  header.nav.js-menu .wrap { position: relative; flex-wrap: nowrap; column-gap: 12px; min-height: 72px; padding-block: 10px; }
  header.nav.js-menu .nav-cta { margin-left: auto; }
  header.nav.js-menu .nav-menu { display: grid; place-content: center; gap: 5px; flex: none; width: 46px; height: 46px; margin: 0; padding: 0; border: 1px solid #3a4456; border-radius: 12px; background: rgba(255,255,255,.04); color: #fff; cursor: pointer; transition: background-color .15s ease, border-color .15s ease; -webkit-tap-highlight-color: transparent; }
  header.nav.js-menu .nav-menu span { display: block; width: 22px; height: 2.5px; border-radius: 2px; background: currentColor; transition: transform .22s ease, opacity .15s ease; }
  header.nav.js-menu .nav-menu.is-hot, header.nav.menu-open .nav-menu { background: rgba(59,130,246,.16); border-color: rgba(59,130,246,.65); }
  @media (hover: hover) { header.nav.js-menu .nav-menu:hover { background: rgba(59,130,246,.16); border-color: rgba(59,130,246,.65); } }
  header.nav.js-menu .nav-menu:focus-visible { outline: 2px solid var(--sky); outline-offset: 2px; }
  header.nav.menu-open .nav-menu span:nth-child(1) { transform: translateY(7.5px) rotate(45deg); }
  header.nav.menu-open .nav-menu span:nth-child(2) { opacity: 0; }
  header.nav.menu-open .nav-menu span:nth-child(3) { transform: translateY(-7.5px) rotate(-45deg); }
  @media (max-width: 374px) { header.nav.menu-open .nav-menu span:nth-child(1) { transform: translateY(7px) rotate(45deg); } header.nav.menu-open .nav-menu span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } }

  header.nav.js-menu .nav-links { position: absolute; top: calc(100% + 1px); right: 20px; z-index: 11; order: 0; flex: none; display: grid; gap: 2px; justify-content: stretch; width: min(320px, calc(100vw - 24px)); margin: 0; padding: 8px; overflow: visible; border: 1px solid #2c3442; border-top: 0; border-radius: 0 0 16px 16px; background: #0f131b; box-shadow: 0 28px 50px -18px rgba(0,0,0,.9); font-size: 1.3rem; line-height: 1.2; white-space: normal; opacity: 0; visibility: hidden; transform: translateY(-6px); transition: opacity .18s ease, transform .18s ease, visibility 0s linear .18s; }
  header.nav.menu-open .nav-links { opacity: 1; visibility: visible; transform: none; transition: opacity .18s ease, transform .18s ease, visibility 0s; }
  header.nav.js-menu .nav-links a { display: block; padding: 14px 16px; border-radius: 10px; color: #fff; font-weight: 600; text-decoration: none; cursor: pointer; }
  header.nav.js-menu .nav-links a:hover, header.nav.js-menu .nav-links a.is-hot { background: rgba(255,255,255,.07); color: #fff; }
  header.nav.js-menu .nav-links a[aria-current="page"] { background: rgba(59,130,246,.18); box-shadow: inset 3px 0 0 var(--blue-hi); text-decoration: none; }
  header.nav.js-menu .nav-links a:focus-visible { outline: 2px solid var(--sky); outline-offset: -2px; }
}
@media (max-width: 599px) {
  header.nav.js-menu .wrap { min-height: 64px; padding-block: 9px; column-gap: 10px; }
  header.nav.js-menu .nav-links { left: 16px; right: 16px; width: auto; }   /* lines up with the logo and the menu button */
}
@media (max-width: 679px) { header.nav.js-menu .nav-cta .btn-ghost { display: none; } }
@media (max-width: 679px) { header.nav.js-menu .nav-links a.nav-login { display: block; margin-top: 4px; border-top: 1px solid #2c3442; border-radius: 0 0 10px 10px; } }
/* phones: logo, Book a trial and the menu button share one row, so all three step down a little */
@media (max-width: 599px) { header.nav.js-menu .wrap { padding-inline: 16px; } header.nav.js-menu .logo { flex: none; } }
@media (max-width: 429px) {
  header.nav.js-menu .wrap { column-gap: 8px; }
  header.nav.js-menu .logo { font-size: 1.12rem; gap: 7px; }
  header.nav.js-menu .logo img { width: 34px; height: 34px; }
  header.nav.js-menu .nav-cta .btn { padding: .72em .85em; font-size: .9rem; }
  header.nav.js-menu .nav-menu { width: 42px; height: 42px; }
}
@media (max-width: 374px) {
  header.nav.js-menu .logo { font-size: 1.02rem; gap: 6px; }
  header.nav.js-menu .logo img { width: 30px; height: 30px; }
  header.nav.js-menu .nav-cta .btn { padding: .68em .7em; font-size: .84rem; }
  header.nav.js-menu .nav-menu { width: 40px; height: 40px; gap: 4.5px; }
  header.nav.js-menu .nav-menu span { width: 20px; }
}
@media (max-width: 339px) {
  header.nav.js-menu .wrap { column-gap: 6px; padding-inline: 12px; }
  header.nav.js-menu .logo { font-size: .94rem; }
  header.nav.js-menu .logo img { width: 28px; height: 28px; }
  header.nav.js-menu .nav-cta .btn { padding: .64em .6em; font-size: .8rem; }
}
@media (prefers-reduced-motion: reduce) { header.nav.js-menu .nav-links, header.nav.js-menu .nav-menu span { transition: none; } }
/* the open menu never runs off a short (landscape) screen: it scrolls inside itself */
@media (max-width: 1023px) { header.nav.js-menu .nav-links { max-height: calc(100dvh - 81px - env(safe-area-inset-top, 0px)); overflow-y: auto; overscroll-behavior: contain; } }
@media (max-width: 599px) { header.nav.js-menu .nav-links { max-height: calc(100dvh - 73px - env(safe-area-inset-top, 0px)); } }
/* Log in and Book a trial in the bar light up by class too (the preview viewer misses :hover) */
header.nav .nav-cta .btn-primary.is-hot { background: var(--blue-hi); }
header.nav .nav-cta .btn-ghost.is-hot { border-color: var(--muted); }
/* computers: a larger browser font setting doesn't break the one-row bar */
@media (min-width: 1024px) {
  header.nav .logo { font-size: min(1.6rem, 25.6px); white-space: nowrap; }
  header.nav .nav-links { font-size: min(1.06rem, 16.96px); }
  header.nav .nav-links a { white-space: nowrap; }
  header.nav .nav-cta .btn { font-size: min(.92rem, 14.72px); }
}
/* small laptops: the tab row, search, Log in and Book a trial sit a little closer so they keep to one row */
@media (min-width: 1024px) and (max-width: 1149px) { header.nav .wrap { gap: 20px; } header.nav .nav-links { gap: 18px; } }
/* Brayden, 2026-10-20: on phones the How it works step names floated between two pictures, so it was unclear which
   picture they belonged to. Where the steps stack (one column), each step is one card: number, picture, name, line. */
@media (max-width: 860px) {
  .hiw-steps { row-gap: 18px; }
  .hiw-step { gap: 6px; padding: 10px 10px 20px; border: 1px solid #2c3442; border-radius: 18px; background: linear-gradient(180deg, rgba(59,130,246,.07), rgba(59,130,246,0) 60%), var(--panel); }
  .hiw-step::before { top: 22px; left: 22px; }
  .hiw-art { margin-bottom: 8px; border-radius: 12px; }
  .hiw-step .hiw-title, .hiw-step .hiw-line { padding-inline: 10px; }
}

/* Brayden, 2026-10-20: centre the home hero text where it stacks above the phone (phones and small tablets).
   Side by side with the phone on computers it stays left-aligned. */
@media (max-width: 940px) {
  .hero-copy { justify-items: center; text-align: center; }
  .hero-copy h1 { text-wrap: balance; }
  .hero-copy .lede { max-width: 36ch; text-wrap: balance; }
  .hero-copy .eyebrow { margin-right: -.13em; }
  .hero-actions { justify-content: center; }
}
/* keep the blue "You grow your gym." on one line on small phones too, sizing the headline to fit */
@media (max-width: 399px) {
  .hero h1 { font-size: min(2.7rem, calc((100vw - 40px) / 8.1)); }
  .hero h1 em { white-space: nowrap; }
}

/* Brayden, 2026-10-20: the Tap to unlock phone looked cut off at the bottom. Drop the half-hidden row that peeked
   under the tab bar and scale the screen's content a touch so every card shows whole above the tabs. */
.tu-tiles:has(.tu-peek) { display: none; }
.tu-body { zoom: .93; }

/* Brayden, 2026-10-20: on computers nudge the hero phone and its Entries card a little to the right */
@media (min-width: 941px) { .hero-visual { translate: clamp(8px, calc((100vw - 1100px) / 2), 28px) 0; } }


/* Brayden, 2026-10-20: "For owners / Your gym, your way" centred vertically between the top of its blue band and the
   pictures (it sat closer to the pictures). Phones are set in the 599px block above. */
@media (min-width: 600px) { section.block.hw-own { padding-top: 68px; } .hw-own .hx-head { margin-bottom: 72px; } }
/* Brayden, 2026-10-20: on phones the partner gyms strip sits a little closer to the review button above it */
@media (max-width: 599px) { section.block:has(+ section.block.lg) { padding-bottom: 56px; } section.block.lg { padding-top: 0; } }
/* Brayden, 2026-10-20: on phones the App Store 4.9 rating sits a bit closer to the review cards */
@media (max-width: 599px) { .rv-row { margin-top: 16px; } }
/* MB-END */

/* PP-START */
/* Brayden, 2026-10-20: "in the key features on number 7 the progress can you add progress pics" -> the Progress card gains a
   row of progress photos (drawn silhouettes, week 1 and week 8) and an Add photo tile; the trend chart is a little shorter
   so the card keeps its height */
.hx-pp { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
.hx-pp > span { position: relative; height: 50px; display: grid; justify-items: center; border-radius: 8px; overflow: hidden; }
.hx-pp-shot { grid-template-rows: minmax(0, 1fr) auto; background: linear-gradient(180deg, #252d3a, #171c25); border: 1px solid #2a313b; }
.hx-ui .hx-pp-shot svg { stroke: none; align-self: end; width: 24px; height: 34px; fill: #66748c; }
.hx-pp-new { border-color: rgba(59,130,246,.55); }
.hx-ui .hx-pp-new svg { fill: #8099c4; }
.hx-pp-shot small { justify-self: stretch; padding: 2px 0 3px; background: rgba(11,14,20,.72); font: 600 .52rem/1.1 var(--mono); letter-spacing: .06em; text-align: center; text-transform: uppercase; color: var(--fg); }
.hx-pp-add { align-content: center; gap: 3px; border: 1.5px dashed rgba(59,130,246,.6); background: rgba(59,130,246,.08); }
.hx-ui .hx-pp-add svg { width: 20px; height: 20px; fill: none; stroke: var(--blue-hi); stroke-width: 1.9; stroke-linejoin: round; }
.hx-pp-add small { font: 600 .6rem/1 var(--body); color: var(--sky); }
/* PP-END */

/* FE-START */
/* Brayden, 2026-10-21: Features opens with a centred title and one short line ("can you add some sort of title or intro
   section to the features page"), then the four key cards moved from Home */
section.ft.page-top { padding-top: 72px; }
.ft-head { display: grid; gap: 16px; justify-items: center; max-width: 900px; margin: 0 auto 48px; text-align: center; }
.ft-sub { margin: 0; color: var(--muted); font-size: 1.2rem; line-height: 1.5; }
@media (max-width: 599px) {
  section.ft.page-top { padding-top: 26px; }
  .ft-head { gap: 12px; margin-bottom: 30px; }
  .ft-head h1 { font-size: min(2.6rem, calc((100vw - 40px) / 8.6)); line-height: 1.1; }
  .ft-head h1 em { display: block; }
  .ft-sub { font-size: 1.05rem; }
}

/* Brayden, 2026-10-21: "Share your sign-up link. Members do the rest." with its three steps closes the Owners page (moved from
   Features), behind the same faint line it had there. Its heading keeps the look it had as the Features title. */
.hiw-head h2 { font-size: clamp(2.6rem, 6vw, 4.4rem); font-weight: 800; }
.hiw-head h2 em { font-style: normal; color: var(--blue-hi); }
@media (max-width: 599px) {
  .hiw-head h2 { font-size: min(2.6rem, calc((100vw - 40px) / 10.3)); line-height: 1.1; }
  .hiw-head h2 em { display: block; }
}
/* Brayden, later the same day: "move share your sign up link section to up above the demo gym section" -> it sits between the
   Owners opening and the demo gym, with the same space above and below it as between Home's sections */
section.pocket.page-top:has(+ section.block.hiw) { padding-bottom: 0; }
section.pocket + section.block.hiw { padding-block: 88px 0; }
section.block.mng-rest { padding-top: 88px; }
section.block.mng-rest .mng-kicker:first-child { margin-top: 0; }
@media (max-width: 599px) {
  section.pocket + section.block.hiw { padding-top: 72px; }
  section.block.mng-rest { padding-top: 72px; }
}
/* very small phones (under 320px): the Owners sales-alert chips fit their card */
@media (max-width: 339px) {
  .mng-dash .mng-chips { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mng-dash .mng-chips li { min-width: 0; gap: 6px; padding: 6px 9px; font-size: .78rem; }
  .mng-dash .mng-chips .mng-ic { display: none; }
}
/* the sales-alert cards over the Owners phone keep to their width (long titles end in "..." instead of pushing out) */
.notif { grid-template-columns: 36px minmax(0, 1fr); }
.notif-text { min-width: 0; grid-template-columns: minmax(0, 1fr); }

/* Brayden, 2026-10-21: "on the main page the one tap section can you center that", then "by ceneter it i meant the wording
   not the whole thing" -> the phone stays beside the words on computers; the eyebrow, heading, line, "Download here" and the
   store buttons are centred within their column */
.tu-copy { justify-items: center; text-align: center; }
.tu-line { margin-inline: auto; text-wrap: balance; }
.tu-copy .dl-stores { justify-content: center; }
/* Brayden, 2026-10-21: "move the phone and the wording slightly closer together" -> on computers the two columns take their
   own width and sit together in the middle of the page; on phones a little less space between the buttons and the phone */
@media (min-width: 800px) { .tu-wrap { grid-template-columns: auto minmax(0, max-content); justify-content: center; column-gap: 112px; } }
@media (min-width: 800px) and (max-width: 999px) { .tu-wrap { column-gap: 56px; } }
@media (max-width: 799px) { .tu-wrap { gap: 20px; } }
/* Brayden, 2026-10-21: "For gym owners" is longer, so on the smallest phones the two hero buttons stack; keep them the same width there */
@media (max-width: 345px) { .hero-actions .btn { min-width: 180px; } }
/* Brayden, 2026-10-21: "For gym owners" and Log in blended into the black, then "can you make it a white outline instead", then "fade it a bit":
   outline buttons and the phone menu's Log in get a white outline and white text; the inset shadow doubles the line without changing the size */
.btn.btn-ghost { border-color: rgba(255,255,255,.55); box-shadow: inset 0 0 0 1px rgba(255,255,255,.55); background: transparent; color: #fff; }
.btn.btn-ghost.is-hot { border-color: rgba(255,255,255,.85); box-shadow: inset 0 0 0 1px rgba(255,255,255,.85); background: rgba(255,255,255,.1); color: #fff; }
@media (hover: hover) { .btn.btn-ghost:hover { border-color: rgba(255,255,255,.85); box-shadow: inset 0 0 0 1px rgba(255,255,255,.85); background: rgba(255,255,255,.1); color: #fff; } }
html header.nav.js-menu .nav-links .nav-acts a.nav-login { border: 2px solid rgba(255,255,255,.55); background: transparent; color: #fff; box-shadow: none; }
html header.nav.js-menu .nav-links .nav-acts a.nav-login:hover, html header.nav.js-menu .nav-links .nav-acts a.nav-login.is-hot { border-color: rgba(255,255,255,.85); background: rgba(255,255,255,.1); color: #fff; }
.btn.btn-primary.is-hot { background: var(--blue-hi); }
/* Brayden, 2026-10-21: "made the log in button what it originally was to match the search button" -> the header Log in
   (computers and tablets) goes back to a plain box styled like the search button beside it, with the same blue hover */
header.nav .nav-cta .btn.btn-ghost { border-color: #3a4456; box-shadow: none; background: rgba(255,255,255,.04); color: #fff; }
header.nav .nav-cta .btn.btn-ghost.is-hot { border-color: rgba(59,130,246,.65); background: rgba(59,130,246,.16); color: #fff; }
@media (hover: hover) { header.nav .nav-cta .btn.btn-ghost:hover { border-color: rgba(59,130,246,.65); background: rgba(59,130,246,.16); color: #fff; } }
/* Brayden, 2026-10-21: City and State stay side by side on phones too (less scrolling); State is the narrower one */
@media (max-width: 480px) { #demo-form .row2.ct-row { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); } }
/* Brayden, 2026-10-21: "make the for gym owners button what it originally was", then "make the for gym owners button look the
   same as the search and the login button" -> the Home hero's second button is the header's plain dark box at hero size,
   with the same blue hover; "Leave a review" and the phone-menu Log in keep the faded white outline */
.hero-actions .btn.btn-ghost { border-color: #3a4456; box-shadow: none; background: rgba(255,255,255,.04); color: #fff; }
.hero-actions .btn.btn-ghost.is-hot { border-color: rgba(59,130,246,.65); box-shadow: none; background: rgba(59,130,246,.16); color: #fff; }
@media (hover: hover) { .hero-actions .btn.btn-ghost:hover { border-color: rgba(59,130,246,.65); box-shadow: none; background: rgba(59,130,246,.16); color: #fff; } }
/* Brayden, 2026-10-21: "make the download here and the buttons on the main page slightly bigger not too big" -> about 15%
   bigger on computers and tablets, a little less on phones so the two buttons still fit side by side */
.tu-copy .dl-label { font-size: .9rem; }
.tu-copy .dl-stores { zoom: 1.15; }
@media (max-width: 599px) { .tu-copy .dl-label { font-size: .86rem; } .tu-copy .dl-stores { zoom: 1.08; } }
@media (max-width: 374px) { .tu-copy .dl-store { min-width: 196px; } }   /* when the bigger buttons stack, they stack at one width */
/* Brayden, 2026-10-21: "make book a trial and for gym owners buttons slightly bigger but not too big" -> about 12% bigger
   (the padding scales with the text); a little less on phones so the pair still sits on one line */
.hero-actions .btn { font-size: 1.12rem; }
@media (max-width: 599px) { .hero-actions .btn { font-size: 1.06rem; } }
@media (max-width: 374px) { .hero-actions .btn { min-width: 190px; justify-content: center; } }   /* when the pair stacks, both buttons share one width */

/* Brayden, 2026-10-21: "add a section where they can download" -> "Get the app" at the end of Features, and the same two
   store buttons under "One tap. The door opens." on Home. Hover is also a class (dl.js): his preview viewer misses :hover. */
section.block.hx:has(+ section.block.dl) { padding-bottom: 0; }
section.block.dl { padding-top: 88px; }
.dl-card { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 28px; max-width: 1040px; margin-inline: auto; padding: 30px 34px; border: 1px solid rgba(59,130,246,.28); border-radius: 22px; background: radial-gradient(80% 140% at 0% 0%, rgba(59,130,246,.14), transparent 60%), var(--panel); box-shadow: 0 30px 60px -32px rgba(59,130,246,.45); }
.dl-icon { width: 84px; height: 84px; border-radius: 20px; box-shadow: 0 12px 30px -10px rgba(59,130,246,.6); }
.dl-copy { display: grid; gap: 10px; min-width: 0; }
.dl-copy h2 { font-size: clamp(2.2rem, 4vw, 3rem); }
.dl-line { margin: 0; color: var(--muted); font-size: 1.08rem; line-height: 1.5; }
.dl-stores { display: flex; flex-wrap: wrap; gap: 12px; }
.dl-store { display: inline-flex; align-items: center; gap: 10px; min-height: 56px; padding: 8px 18px 8px 14px; border: 1px solid #3a4456; border-radius: 12px; background: #05070b; color: #fff; text-decoration: none; cursor: pointer; transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease; -webkit-tap-highlight-color: transparent; }
.dl-store svg { flex: none; width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.dl-store span { display: grid; gap: 1px; line-height: 1.1; text-align: left; white-space: nowrap; }
.dl-store small { font-size: .72rem; color: #c3cad6; }
.dl-store b { font-size: 1.14rem; font-weight: 600; letter-spacing: .01em; }
.dl-store.is-hot { border-color: rgba(59,130,246,.65); background: #0d1422; box-shadow: 0 0 0 3px rgba(59,130,246,.12); }
@media (hover: hover) { .dl-store:hover { border-color: rgba(59,130,246,.65); background: #0d1422; box-shadow: 0 0 0 3px rgba(59,130,246,.12); } }
.dl-store:focus-visible { outline: 2px solid var(--sky); outline-offset: 2px; }
.tu-copy .dl-stores { margin-top: 6px; }
@media (max-width: 899px) {
  .dl-card { grid-template-columns: auto minmax(0, 1fr); }
  .dl-card .dl-stores { grid-column: 1 / -1; }
}
@media (max-width: 599px) {
  section.block.dl { padding-top: 72px; }
  .dl-card { grid-template-columns: minmax(0, 1fr); justify-items: center; gap: 18px; padding: 28px 18px; text-align: center; }
  .dl-icon { width: 72px; height: 72px; border-radius: 17px; }
  .dl-line { font-size: 1rem; max-width: 30ch; }
  .dl-stores { justify-content: center; gap: 10px; }
  .dl-store { min-height: 52px; gap: 8px; padding: 7px 14px 7px 11px; }
  .dl-store svg { width: 22px; height: 22px; }
  .dl-store b { font-size: 1.02rem; }
  .dl-store small { font-size: .66rem; }
}
/* the two store buttons stack at the same width where they can't sit side by side */
@media (max-width: 379px) { .dl-card .dl-store { min-width: 196px; } }
@media (max-width: 359px) { .tu-copy .dl-store { min-width: 196px; } }
/* Brayden, 2026-10-21: a small "Download here" label right above the store buttons on Home */
.dl-label { margin: 8px 0 0; font: 600 .78rem/1 var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--sky); }
.tu-copy .dl-label + .dl-stores { margin-top: -6px; }
/* FE-END */

/* FX-START */
/* Brayden, 2026-10-21: Features opens straight into the Key Features slider under a compact one-line title */
section.block.hx.page-top { padding-top: 56px; }
.hx-top { margin: 0 auto 36px; gap: 0; }
.hx-top h1 { font-size: clamp(2.6rem, 6vw, 4.6rem); line-height: 1.05; }
/* under the page title, "Key Features" keeps its full heading size ("make key features bigger") with a tighter gap */
.hx-top + .ks-head { margin-bottom: 28px; }
.hx-top + .ks-head .hx-head { gap: 8px; margin-bottom: 0; }
/* The Essentials: the four key cards, under a centred heading, between Key Features and Download now */
section.ft.ft-recap { padding-block: 88px 0; }
.ft-rhead { justify-items: center; text-align: center; margin-inline: auto; }
section.block.hx:has(+ section.ft.ft-recap) { padding-bottom: 0; }
section.ft.ft-recap + section.block.dl { padding-top: 88px; }
@media (max-width: 599px) {
  section.block.hx.page-top { padding-top: 26px; }
  .hx-top { margin-bottom: 26px; }
  .hx-top h1 { font-size: min(2.6rem, calc((100vw - 40px) / 8.6)); }
  .hx-top + .ks-head { margin-bottom: 20px; }
  section.ft.ft-recap, section.ft.ft-recap + section.block.dl { padding-top: 72px; }
}
/* Brayden, 2026-10-21: the title became "Train, book, and unlock. All in one app." (Features is mostly the member side,
   without saying "members"); each sentence gets its own line */
.hx-top h1 { text-wrap: balance; }
.hx-top h1 em { display: block; }
@media (max-width: 599px) { .hx-top h1 { font-size: min(2.4rem, calc((100vw - 40px) / 10.2)); } }
/* FX-END */

/* FM-START */
.hp-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
/* FM-END */

/* LS-START */
/* Partners strip you can move yourself (Brayden, 2026-10-23, ls.js): the strip scrolls for real, with no scrollbar showing,
   a hand cursor for dragging, and no image ghost or text selection while dragging. */
.lg-marquee.lg-js { overflow-x: auto; overflow-y: hidden; scrollbar-width: none; scroll-behavior: auto; overscroll-behavior-x: contain; cursor: grab; -webkit-user-select: none; user-select: none; }
.lg-marquee.lg-js::-webkit-scrollbar { display: none; }
.lg-marquee.lg-js .lg-track { animation: none; }
.lg-marquee.lg-js.lg-grab { cursor: grabbing; }
.lg-marquee.lg-js.lg-grab .lg-set li:hover img { transform: none; }
.lg-set img { -webkit-user-drag: none; }
/* LS-END */

/* PT-START */
/* Class calendar on Features (Brayden, 2026-10-27: every calendar shows all four kinds): Classes blue, Workouts orange,
   Nutrition green and PT purple, the app's own colors (CalendarPage.tsx). Four chips sized to their words fit in one
   row, and slightly tighter rows keep the slider as tall as before with the fourth row. */
.hx-cal { --cal-p: #a855f7; gap: 5px; }
.hx-cal i.hx-cal-p { background: var(--cal-p); }
/* Brayden, 2026-10-27: "its all pushed to the right so its sticking out". The chip row was a hair wider than the card, so
   it stretched the calendar's one column and everything ran past the right edge (worse with an iPhone's wider font).
   The column can no longer grow, and the chips are a little smaller with room to spare; a chip clips before it can push. */
.hx-cal { grid-template-columns: minmax(0, 1fr); }
.hx-cal-keys { display: flex; gap: 3px; min-width: 0; }
.hx-cal-keys .hx-cal-key { flex: 1 1 auto; min-width: 0; overflow: hidden; gap: 3px; padding: 3px 4px; font-size: .6rem; }
.hx-cal-row { min-height: 25px; padding-block: 2px; }
/* PT-END */

/* SR-START */
/* Site search (Brayden, 2026-10-20): magnifier button beside the menu button, search box over the page.
   Without JS the button stays hidden (sr.js adds .js-search). */
header.nav .nav-search { display: none; }
header.nav.js-search .nav-search { display: grid; place-items: center; flex: none; width: 46px; height: 46px; margin: 0; padding: 0; border: 1px solid #3a4456; border-radius: 12px; background: rgba(255,255,255,.04); color: #fff; cursor: pointer; transition: background-color .15s ease, border-color .15s ease; -webkit-tap-highlight-color: transparent; }
header.nav.js-search .nav-search svg { width: 21px; height: 21px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }
@media (hover: hover) { header.nav.js-search .nav-search:hover { background: rgba(59,130,246,.16); border-color: rgba(59,130,246,.65); } }
header.nav.js-search .nav-search.is-hot, header.nav.js-search .nav-search[aria-expanded="true"] { background: rgba(59,130,246,.16); border-color: rgba(59,130,246,.65); }
header.nav.js-search .nav-search:focus-visible { outline: 2px solid var(--sky); outline-offset: 2px; }

html.sr-open { overflow: hidden; }
.sr { position: fixed; inset: 0; z-index: 60; display: grid; justify-items: center; align-content: start; padding: calc(env(safe-area-inset-top, 0px) + 12px) max(12px, env(safe-area-inset-right, 0px)) 12px max(12px, env(safe-area-inset-left, 0px)); background: rgba(5,7,11,.72); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.sr[hidden] { display: none; }
.sr-panel { width: min(680px, 100%); max-height: calc(100dvh - 24px - env(safe-area-inset-top, 0px)); display: flex; flex-direction: column; border: 1px solid #2c3442; border-radius: 16px; background: #0f131b; box-shadow: 0 30px 70px -20px rgba(0,0,0,.9); overflow: hidden; }
.sr-bar { flex: none; display: flex; align-items: center; gap: 10px; padding: 10px 10px 10px 16px; border-bottom: 1px solid #2c3442; }
.sr-bar > svg { flex: none; width: 22px; height: 22px; fill: none; stroke: var(--sky); stroke-width: 2.4; stroke-linecap: round; }
.sr-input { flex: 1; min-width: 0; height: 46px; margin: 0; padding: 0; border: 0; background: none; color: #fff; font: 500 1.15rem/1.2 var(--body); outline: none; -webkit-appearance: none; appearance: none; }
.sr-input::placeholder { color: #8b95a5; }
.sr-input::-webkit-search-cancel-button { display: none; }
.sr-close { flex: none; display: grid; place-items: center; width: 44px; height: 44px; margin: 0; padding: 0; border: 1px solid #3a4456; border-radius: 12px; background: rgba(255,255,255,.04); color: #fff; cursor: pointer; }
.sr-close svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }
.sr-close:hover, .sr-close.is-hot { background: rgba(59,130,246,.16); border-color: rgba(59,130,246,.65); }
.sr-close:focus-visible, .sr-try:focus-visible, .sr-contact:focus-visible { outline: 2px solid var(--sky); outline-offset: 2px; }
.sr-list { flex: 1 1 auto; min-height: 0; margin: 0; padding: 6px; list-style: none; overflow-y: auto; overscroll-behavior: contain; }
.sr-list:empty { display: none; }
.sr-hit { display: grid; gap: 3px; padding: 12px 14px; border-radius: 10px; color: #fff; text-decoration: none; cursor: pointer; }
.sr-hit.is-on { background: rgba(59,130,246,.14); box-shadow: inset 3px 0 0 var(--blue-hi); }
.sr-where { font: 600 .7rem/1.2 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--sky); }
.sr-title { font: 600 1.06rem/1.3 var(--body); color: #fff; }
.sr-snip { font-size: .92rem; line-height: 1.45; color: #a9b2c0; }
.sr mark { padding: 0 1px; border-radius: 3px; background: rgba(59,130,246,.32); color: #fff; }
.sr-empty:empty { display: none; }
.sr-empty { padding: 16px 18px 20px; }
.sr-none { margin: 0 0 6px; color: #fff; font-weight: 600; font-size: 1.02rem; overflow-wrap: anywhere; }
.sr-hint { margin: 0; color: #a9b2c0; font-size: .95rem; line-height: 1.5; }
.sr-contact { color: var(--sky); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.sr-tries { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.sr-try { margin: 0; padding: 9px 14px; border: 1px solid #3a4456; border-radius: 999px; background: rgba(255,255,255,.04); color: #fff; font: 500 .95rem/1 var(--body); cursor: pointer; }
.sr-try:hover, .sr-try.is-hot { background: rgba(59,130,246,.16); border-color: rgba(59,130,246,.65); }
.sr-live { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
/* a short glow on the spot a result opened */
.sr-flash { animation: sr-flash 1.8s ease; }
@keyframes sr-flash { 0%, 35% { box-shadow: 0 0 0 2px var(--blue-hi), 0 0 28px rgba(59,130,246,.45); } 100% { box-shadow: 0 0 0 0 rgba(59,130,246,0); } }
[id^="sr-"], .fq-list details, section.page-top { scroll-margin-top: 96px; }
.cf-panel { scroll-margin-top: 180px; }   /* keeps the Get help / Refer switch in view under the bar */
@media (prefers-reduced-motion: reduce) { .sr-flash { animation: none; } }

/* phones: logo, Book a trial, search and menu share one row */
@media (max-width: 599px) {
  .sr { padding-top: calc(env(safe-area-inset-top, 0px) + 8px); padding-inline: 8px; }
  .sr-panel { max-height: calc(100dvh - 16px - env(safe-area-inset-top, 0px)); }
  .sr-input { font-size: 1.1rem; }
}
/* computers: the magnifier sits between the tabs and Log in; phones and tablets: between Book a trial and the menu button */
@media (max-width: 1023px) { header.nav.js-menu .nav-menu { order: 2; } }   /* sr.js moves the magnifier after Book a trial below 1024px */
/* phones: the magnifier matches the menu button beside it */
@media (max-width: 429px) { header.nav.js-search .nav-search { width: 42px; height: 42px; } }
@media (max-width: 374px) { header.nav.js-search .nav-search { width: 40px; height: 40px; } header.nav.js-search .nav-search svg { width: 20px; height: 20px; } }

/* Brayden, 2026-10-20: Log in in the menu popup is a blue button, set apart from the white tabs */
header.nav.js-menu .nav-links a.nav-login { margin-top: 8px; padding: 13px 16px; border-top: 0; border-radius: 10px; background: var(--blue); color: #fff; text-align: center; box-shadow: 0 10px 22px -12px rgba(59,130,246,.9); }
header.nav.js-menu .nav-links a.nav-login:hover, header.nav.js-menu .nav-links a.nav-login.is-hot { background: var(--blue-hi); color: #fff; }

/* phones: logo, search and the menu button share the bar (Book a trial moved into the menu, bk/bk.css), so the logo keeps
   its bigger size and the two buttons sit together on the right */
@media (max-width: 679px) {
  header.nav.js-menu.js-search .wrap { column-gap: 8px; }
  header.nav.js-menu.js-search .nav-search { margin-left: auto; }
}
@media (max-width: 480px) { header.nav.js-menu.js-search .logo { font-size: 1.38rem; gap: 10px; } header.nav.js-menu.js-search .logo img { width: 40px; height: 40px; } }
@media (max-width: 374px) {
  header.nav.js-menu.js-search .wrap { padding-inline: 14px; }
  header.nav.js-menu.js-search .logo { font-size: 1.26rem; gap: 9px; }
  header.nav.js-menu.js-search .logo img { width: 36px; height: 36px; }
}
@media (max-width: 339px) {
  header.nav.js-menu.js-search .wrap { column-gap: 6px; padding-inline: 12px; }
  header.nav.js-menu.js-search .logo { font-size: 1.14rem; gap: 8px; }
  header.nav.js-menu.js-search .logo img { width: 32px; height: 32px; }
}
/* the search field itself shows no box; the line under it turns blue while typing */
.sr .sr-input:focus, .sr .sr-input:focus-visible { outline: none; box-shadow: none; }
.sr-bar:focus-within { border-bottom-color: rgba(59,130,246,.65); }
/* SR-END */

/* KD-START */
/* Brayden, 2026-10-20: "seperate the key features and share your sign up link section by adding a faint line" -> a thin
   line that fades out at both ends, with the same space above and below it */
:is(section.block.hiw, section.ft):has(+ section.block.hx) { padding-bottom: 60px; }
:is(section.block.hiw, section.ft) + section.block.hx { position: relative; padding-top: 60px; }
:is(section.block.hiw, section.ft) + section.block.hx::before { content: ""; position: absolute; top: 0; left: 50%; width: min(900px, calc(100% - 48px)); height: 1px; transform: translateX(-50%); background: linear-gradient(90deg, rgba(148,163,184,0), rgba(148,163,184,.36) 22%, rgba(148,163,184,.36) 78%, rgba(148,163,184,0)); pointer-events: none; }
@media (max-width: 599px) {
  :is(section.block.hiw, section.ft):has(+ section.block.hx) { padding-bottom: 40px; }
  :is(section.block.hiw, section.ft) + section.block.hx { padding-top: 40px; }
  :is(section.block.hiw, section.ft) + section.block.hx::before { width: calc(100% - 40px); }
}
/* KD-END */

/* BK-START */
/* Brayden, 2026-10-20: "take out book a trial and add it to the 3 lines on the phone" -> on phones the bar keeps the logo,
   search and the menu button; Log in and Book a trial sit side by side at the bottom of the menu. Book a trial is solid blue
   like every other Book a trial button; Log in stays blue but outlined, so the two don't look the same. Computers unchanged. */
header.nav .nav-links .nav-acts { display: none; }
@media (max-width: 679px) {
  header.nav.js-menu .nav-cta { display: none; }
  header.nav.js-menu .nav-links .nav-acts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 8px; padding: 12px 0 2px; border-top: 1px solid #2c3442; }
  header.nav.js-menu .nav-links .nav-acts a { display: block; margin: 0; padding: 14px 8px; border-radius: 12px; font-size: 1.14rem; line-height: 1.2; text-align: center; white-space: nowrap; color: #fff; }
  header.nav.js-menu .nav-links .nav-acts a.nav-login { border: 2px solid var(--blue-hi); background: rgba(59,130,246,.14); color: #cfe2ff; box-shadow: none; }
  header.nav.js-menu .nav-links .nav-acts a.nav-login:hover, header.nav.js-menu .nav-links .nav-acts a.nav-login.is-hot { background: rgba(59,130,246,.26); color: #fff; }
  header.nav.js-menu .nav-links .nav-acts a.nav-book { border: 2px solid var(--blue); background: var(--blue); box-shadow: 0 10px 22px -12px rgba(59,130,246,.9); }
  header.nav.js-menu .nav-links .nav-acts a.nav-book:hover, header.nav.js-menu .nav-links .nav-acts a.nav-book.is-hot { border-color: var(--blue-hi); background: var(--blue-hi); }
}
@media (max-width: 339px) { header.nav.js-menu .nav-links .nav-acts a { font-size: 1.02rem; padding-inline: 6px; } }
/* BK-END */

/* MT-START */
/* Brayden, 2026-10-20: "on the phone on the owners tab make the titles bigger in the demo gym section" -> Money in, Revenue,
   Growth, Sales alerts and Breakdown go from 28px to about 37px on phones, still one line each */
@media (max-width: 599px) { .mng-dash .mng-label { font-size: 2.3rem; line-height: 1; } }
@media (max-width: 359px) { .mng-dash .mng-label { font-size: 2.1rem; } }
@media (max-width: 339px) { .mng-dash .mng-label { font-size: 2rem; } }
@media (max-width: 309px) { .mng-dash .mng-label { font-size: 1.78rem; } }
/* Brayden, 2026-10-20: "on the owners tab on the phone move also on the manage tab up slightly" -> 72px above it becomes 44px */
@media (max-width: 599px) { .mng-more { margin-top: 44px; } }
/* MT-END */

/* HS-START */
/* Brayden, 2026-10-20: "on the phone on how it works put the titles above the graphics so join online above instead of
   below" -> where the steps stack, each card reads top down: number and title on one row, the short line, then the picture */
@media (max-width: 860px) {
  .hiw-step { grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; row-gap: 8px; align-items: center; padding: 20px 10px 10px; }
  .hiw-step::before { position: static; grid-column: 1; grid-row: 1; margin-left: 10px; }
  .hiw-step .hiw-title { grid-column: 2; grid-row: 1; padding-inline: 0 10px; }
  .hiw-step .hiw-line { grid-column: 1 / -1; grid-row: 2; }
  .hiw-step .hiw-art { grid-column: 1 / -1; grid-row: 3; margin: 8px 0 0; padding-block: 20px; }
}
/* small phones: the titles shrink just enough that "Door follows billing" keeps to one line beside its number */
@media (max-width: 499px) { .hiw-step .hiw-title { font-size: min(1.7rem, calc((100vw - 132px) / 9)); } }
/* HS-END */

/* CB-START */
/* Brayden, 2026-10-20: "on the phone ready to put your gym in your pocket at the bottom make the header box smaller" ->
   on phones the bottom banner is more compact (less padding, a slightly smaller heading, the button closer) and centred.
   The heading's size is set inline on each page, so it needs !important here. */
@media (max-width: 599px) {
  .cta-band .wrap { flex-direction: column; justify-content: center; gap: 16px; padding-block: 36px; text-align: center; }
  .cta-band h2 { font-size: 1.62rem !important; line-height: 1.12; text-wrap: balance; }
  .cta-band .btn { font-size: 1.02rem; padding: .85em 1.5em; }
}
/* CB-END */

/* HH-START */
/* Brayden, 2026-10-20: "on the phone make share your sign up link. members do the rest. look or align better" -> on phones
   the heading is centred like the other phone headings, each sentence keeps to its own line (no "link. Members / do the
   rest." breaks), and the size follows the screen so the first sentence always fits on one line */
@media (max-width: 599px) {
  .hiw-head { justify-items: center; text-align: center; margin-inline: auto; }
  .hiw-head h1 { font-size: min(2.6rem, calc((100vw - 40px) / 10.3)); line-height: 1.1; }
  .hiw-head h1 em { display: block; }
}
/* HH-END */

/* HF-START */
/* Owners tiles (found by a background check, 2026-10-20): a mouse click left the clicked tile with a flat tint that beat its
   hover/open look. Now a click keeps the normal look; only keyboard focus tints the tile. */
.mng-feats .mng-feat:focus-within:not(:has(:focus-visible)) { background: var(--ink); }
.mng-feats.mng-feats-js .mng-feat:hover, .mng-feats.mng-feats-js .mng-feat.is-hot, .mng-feats.mng-feats-js .mng-feat.is-open { background: linear-gradient(180deg, rgba(59,130,246,.16), rgba(59,130,246,.06)); }
/* HF-END */

/* AV-START */
/* Phones, home page key cards (checked 2026-10-21) */
@media (max-width: 599px) {
  /* the whole Unlock Gym button shows inside the Member fitness app picture (it was cut in half) */
  .ft-art-phone { padding-top: 6px; }
  .ft-phone { gap: 5px; }
  /* "Your gym, your way" band: as much space under the tiles as above the heading */
  section.block.hw-own { padding-bottom: 38px; }
}
@media (max-width: 359px) {
  .ft-phone { zoom: .6; }
  .hw-own .fq-tiles { gap: 18px 10px; }
  .ft-grid { gap: 10px; }   /* same 10px gap between the four cards both ways */
}
/* the 24/7 card's entry log fits inside its picture on small phones */
@media (max-width: 399px) { .ft-ui.ft-access { zoom: .58; } }
@media (max-width: 359px) { .ft-ui.ft-access { zoom: .5; } }
@media (max-width: 319px) { .ft-ui.ft-access { zoom: .45; } }
/* both top-row titles take two lines, so the lines under them start level */
@media (max-width: 494px) {
  .ft-card:nth-child(-n+2) .ft-br { display: inline; }
  .ft .ft-card:nth-child(-n+2) .ft-title { min-height: 2em; }
}

/* the menu popup lines up with the logo and the menu button on small phones too */
@media (max-width: 374px) { header.nav.js-menu .nav-links { left: 14px; right: 14px; } }
@media (max-width: 339px) { header.nav.js-menu .nav-links { left: 12px; right: 12px; } }

/* Tab into the hidden top bar brings it straight back, so the page doesn't jump to reach it */
header.nav.nav-away:has(:focus-visible) { transform: none; transition: none; }

/* every box in the top bar is one height */
@media (min-width: 680px) and (max-width: 1023px) {
  header.nav.js-menu .nav-cta .btn { min-height: 46px; border-radius: 10px; }
}
@media (min-width: 1024px) {
  header.nav.js-search .nav-search { width: 38px; height: 38px; border-radius: 8px; }
  header.nav.js-search .nav-search svg { width: 19px; height: 19px; }
  header.nav .nav-cta .btn { min-height: 38px; }
}
/* AV-END */
