/* ===========================================================================
   KINDRED — COMPONENT LAYER  (requires tokens.css to be loaded FIRST)

   <link rel="stylesheet" href="assets/css/tokens.css">
   <link rel="stylesheet" href="assets/css/app.css">

   ---------------------------------------------------------------------------
   CLASS API — everything available to page authors. Nothing else exists.
   ---------------------------------------------------------------------------
   LAYOUT
     .container  .container--xs .container--sm .container--md .container--lg
                 .container--xl
     .section  .section--alt  .section--tight  .section--flush  .section--dark
     .section-head  .section-head--left
     .stack .stack--xs .stack--sm .stack--lg .stack--xl      (vertical rhythm)
     .cluster .cluster--sm .cluster--center .cluster--between (wrapping row)
     .grid .grid--2 .grid--3 .grid--4 .grid--sidebar  .grid--tight
     .center  .divider  .scroll-x  .full-bleed

   TYPOGRAPHY
     .display .h1 .h2 .h3 .h4 .lead .body .small .tiny
     .eyebrow  .muted  .subtle  .balance  .measure .measure-narrow .measure-wide
     .text-accent  .gradient-text  .link  .text-center  .text-left
     .nowrap  .tabular  .mono

   BUTTONS
     .btn  +  .btn--primary .btn--secondary .btn--ghost .btn--outline
               .btn--danger  .btn--on-accent
           +  .btn--sm .btn--md .btn--lg .btn--xl
           +  .btn--block .btn--pill .btn--icon .btn--loading .btn--wrap
     .btn-group   (side-by-side, stacks under 640px)

   SURFACES
     .card  .card--flat .card--elevated .card--accent .card--interactive
            .card--dark .card--pad-sm .card--pad-lg
     .card__media .card__header .card__eyebrow .card__title .card__text
            .card__body .card__footer
     .glass       (blurred translucent surface)
     .callout  .callout--accent .callout--success .callout--warn .callout--info
     .note
     .social-proof-placeholder     (honest empty slot — NO fake testimonials)

   CHIPS / BADGES
     .chip  .chip--sm .chip--lg .chip--accent .chip--outline .chip--active
     .chip-row            (horizontal scrolling chip strip on mobile)
     .badge .badge--accent .badge--success .badge--warn .badge--danger
            .badge--neutral .badge--dot

   NAV / FOOTER
     .nav .nav__inner .nav__brand .nav__logo .nav__wordmark
          .nav__links .nav__link .nav__link--active .nav__actions
          .nav--scrolled  .nav--static
     .footer .footer__inner .footer__brand .footer__blurb .footer__cols
             .footer__col .footer__heading .footer__links .footer__legal
             .footer__note
     .sticky-cta  .sticky-cta__text  .sticky-cta--hidden
                  (add .has-sticky-cta to <body> for bottom padding)

   HERO
     .hero .hero--center .hero__inner .hero__eyebrow .hero__title .hero__sub
           .hero__actions .hero__note .hero__visual  .hero-glow

   DEVICE MOCK
     .screenshot-frame .screenshot-frame--sm .screenshot-frame--lg
                       .screenshot-frame--float .screenshot-frame--tilt
     .screenshot-frame__screen .screenshot-frame__notch
     .screenshot-frame__statusbar .screenshot-frame__scroll
     .screenshot-frame__home

   CONTENT BLOCKS
     .feature-row .feature-row--reverse .feature-row__media .feature-row__body
     .feature-icon .feature-icon--moss .feature-icon--honey
     .feature-list .feature-list__item          (auto check marks)
     .steps-list  .steps-list__item             (auto numbers)
     .stat .stat__value .stat__label .stat__sub   .stat-row
     .avatar .avatar--xs .avatar--sm .avatar--md .avatar--lg .avatar--xl
             .avatar--g1 … .avatar--g8   .avatar-stack
     .person-card .person-card__head .person-card__id .person-card__name
                  .person-card__handle .person-card__why .person-card__tags
                  .person-card__actions
     .thread .bubble .bubble--in .bubble--out .bubble__meta .typing

   PRICING / FAQ
     .pricing-grid .pricing-card .pricing-card--featured .pricing-card__flag
        .pricing-card__name .pricing-card__price .pricing-card__amount
        .pricing-card__period .pricing-card__note .pricing-card__list
        .pricing-card__cta
     .faq .faq__item .faq__q .faq__a      (<details>/<summary> or button+aria)

   FORMS / FEEDBACK
     .field .field__label .field__hint .field__error .field--error
     .input .input--lg .textarea .select .input-group .input-group__btn
     .checkbox .switch
     .progress .progress__bar .progress--indeterminate   (set --progress: 40%)
     .steps .step .step__dot .step__label .step--active .step--done
     .toast-region .toast .toast--success .toast--warn .toast--danger
                   .toast__icon .toast__body .toast__title .toast__close
     .skeleton .skeleton--text .skeleton--title .skeleton--avatar
               .skeleton--btn .skeleton--card
     .spinner .spinner--lg
     .icon .icon--sm .icon--lg .icon--xl      (sizing box for inline SVG)
     .kbd

   MOTION
     .reveal  +  .reveal--d1 … .reveal--d6      (stagger)
        · JS present  : add class "js" to <html>, then toggle ".is-visible"
                        (".reveal--in" also accepted) via IntersectionObserver.
        · No JS       : content is visible; browsers with animation-timeline
                        get a native scroll reveal for free.
        · reduced motion: no transform, no fade, always visible.
     .float  .pulse-dot

   UTILITIES
     .visually-hidden  .skip-link  .no-scrollbar
     .hide-mobile .hide-desktop  .mt-0 .mb-0
   ---------------------------------------------------------------------------
   Breakpoints: 640px (sm) · 900px (md) · 1200px (lg). Mobile-first.
   =========================================================================== */


/* ===========================================================================
   0. BASE
   =========================================================================== */

*,
*::before,
*::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--nav-h) + var(--space-4));
  /* Belt and braces with the `overflow-x: clip` on <body> below. Without it,
     the 740px-wide comparison table on pricing.html leaves the DOCUMENT
     740px wide at a 390px viewport (documentElement.scrollWidth = 700).
     Chrome and Safari 16+ propagate body's clip to the viewport so nothing
     actually scrolls, but any engine that drops the unknown `clip` keyword
     gets a horizontally scrolling pricing page. `clip` (never `hidden`) so
     the sticky nav keeps working. */
  overflow-x: clip;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

body {
  margin: 0;
  background-color: var(--bg);
  color: var(--text);
  font-family: var(--font-sans);
  font-size: var(--text-lg);
  line-height: var(--leading-normal);
  font-weight: var(--weight-regular);
  letter-spacing: var(--tracking-normal);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  /* `clip` (not `hidden`) — hidden would turn <body> into a scroll container
     and break the sticky .nav in Chrome/Safari. */
  overflow-x: clip;
}

body.has-sticky-cta { padding-bottom: 92px; }
@media (min-width: 900px) {
  body.has-sticky-cta { padding-bottom: 0; }
}

h1, h2, h3, h4, h5, h6 {
  margin: 0;
  font-family: var(--font-display);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tight);
  color: var(--text);
  text-wrap: balance;
}

p { margin: 0; }
ul, ol { margin: 0; padding: 0; }
li { list-style: none; }

img, svg, video, canvas { display: block; max-width: 100%; }
img, video { height: auto; }

a {
  color: var(--text-link);
  text-decoration: none;
  transition: var(--transition-colors);
}
a:hover { color: var(--accent-hover); }

button, input, select, textarea {
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
}

button { background: none; border: 0; padding: 0; cursor: pointer; }

hr {
  border: 0;
  height: 1px;
  background: var(--border);
  margin: var(--space-8) 0;
}

strong, b { font-weight: var(--weight-semibold); color: var(--text); }

code, pre, .mono { font-family: var(--font-mono); font-size: 0.92em; }

::selection {
  background: rgb(var(--rgb-accent) / 0.22);
  color: var(--text);
}

:focus { outline: none; }

:focus-visible {
  outline: var(--focus-ring-width) solid var(--focus-ring);
  outline-offset: var(--focus-ring-offset);
  border-radius: var(--radius-xs);
}

/* ===========================================================================
   1. LAYOUT
   =========================================================================== */

.container {
  width: 100%;
  max-width: var(--container-xl);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.container--xs { max-width: var(--container-xs); }
.container--sm { max-width: var(--container-sm); }
.container--md { max-width: var(--container-md); }
.container--lg { max-width: var(--container-lg); }
.container--xl { max-width: var(--container-xl); }

.section {
  position: relative;
  padding-block: var(--section-y);
}
.section--tight { padding-block: calc(var(--section-y) * 0.55); }
.section--flush { padding-block: 0; }
.section--alt { background-color: var(--bg-subtle); }
.section--dark {
  background-image: var(--gradient-ink);
  color: var(--text-inverse);
}
.section--dark h1, .section--dark h2,
.section--dark h3, .section--dark h4 { color: #fafafa; }
.section--dark .muted,
.section--dark .subtle { color: rgb(250 250 250 / 0.62); }
.section--dark .card { background-color: rgb(255 255 255 / 0.05); border-color: rgb(255 255 255 / 0.10); color: var(--text-inverse); }

.section-head {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  align-items: center;
  text-align: center;
  margin-bottom: var(--space-10);
}
.section-head > * { margin: 0; }
.section-head--left { align-items: flex-start; text-align: left; }

@media (min-width: 900px) {
  .section-head { margin-bottom: var(--space-14); }
}

.stack { display: flex; flex-direction: column; gap: var(--space-4); }
.stack--xs { gap: var(--space-2); }
.stack--sm { gap: var(--space-3); }
.stack--lg { gap: var(--space-6); }
.stack--xl { gap: var(--space-10); }

.cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
}
.cluster--sm { gap: var(--space-2); }
.cluster--center { justify-content: center; }
.cluster--between { justify-content: space-between; width: 100%; }

.grid {
  display: grid;
  gap: var(--space-5);
  grid-template-columns: 1fr;
}
.grid--tight { gap: var(--space-3); }

@media (min-width: 640px) {
  .grid--2, .grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid { gap: var(--space-6); }
}
@media (min-width: 900px) {
  .grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .grid--sidebar { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: var(--space-12); align-items: center; }
}
@media (min-width: 1200px) {
  .grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.center { display: grid; place-items: center; text-align: center; }

.divider {
  height: 1px;
  width: 100%;
  background: linear-gradient(90deg, transparent, var(--border-strong), transparent);
  border: 0;
  margin: 0;
}

.scroll-x {
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.scroll-x::-webkit-scrollbar { display: none; }

.full-bleed {
  width: 100vw;
  margin-inline: calc(50% - 50vw);
}

/* ===========================================================================
   2. TYPOGRAPHY
   =========================================================================== */

.display {
  font-family: var(--font-display);
  font-size: var(--text-display);
  font-weight: var(--weight-heavy);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tighter);
  text-wrap: balance;
}

.h1 { font-size: var(--text-6xl); font-weight: var(--weight-heavy); line-height: var(--leading-tight);  letter-spacing: var(--tracking-tighter); }
.h2 { font-size: var(--text-4xl); font-weight: var(--weight-bold);  line-height: var(--leading-snug);  letter-spacing: var(--tracking-tight); }
.h3 { font-size: var(--text-2xl); font-weight: var(--weight-bold);  line-height: var(--leading-snug);  letter-spacing: var(--tracking-tight); }
.h4 { font-size: var(--text-xl);  font-weight: var(--weight-semibold); line-height: var(--leading-snug); letter-spacing: var(--tracking-tight); }

h1 { font-size: var(--text-6xl); font-weight: var(--weight-heavy); letter-spacing: var(--tracking-tighter); }
h2 { font-size: var(--text-4xl); }
h3 { font-size: var(--text-2xl); }
h4 { font-size: var(--text-xl); }

.lead {
  font-size: var(--text-xl);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
  letter-spacing: var(--tracking-normal);
  text-wrap: pretty;
}
@media (min-width: 900px) {
  .lead { font-size: var(--text-2xl); }
}

.body  { font-size: var(--text-lg); line-height: var(--leading-relaxed); color: var(--text-secondary); text-wrap: pretty; }
.small { font-size: var(--text-md); line-height: var(--leading-normal); }
.tiny  { font-size: var(--text-xs); line-height: var(--leading-normal); }

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wider);
  text-transform: uppercase;
  color: var(--accent-text);
}

.muted  { color: var(--text-muted); }
.subtle { color: var(--text-subtle); }
.balance { text-wrap: balance; }

.measure        { max-width: var(--measure); }
.measure-narrow { max-width: var(--measure-narrow); }
.measure-wide   { max-width: var(--measure-wide); }
.section-head .measure,
.section-head .measure-narrow,
.section-head .measure-wide,
.center .measure { margin-inline: auto; }

.text-accent { color: var(--accent-text); }

.gradient-text {
  background-image: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  /* Repaint safety for the clip in Safari */
  padding-bottom: 0.06em;
}

.link {
  color: var(--text-link);
  font-weight: var(--weight-medium);
  text-decoration: underline;
  text-decoration-color: rgb(var(--rgb-accent) / 0.35);
  text-underline-offset: 0.22em;
  text-decoration-thickness: 1.5px;
}
.link:hover { text-decoration-color: currentColor; }
/* A link that performs an action rather than navigating — "Sign in instead" on
   the account step. It has to be a <button> for the keyboard and the screen
   reader; this strips the control chrome so it still reads as a link. */
button.link {
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  font-weight: var(--weight-medium);
  cursor: pointer;
}

.text-center { text-align: center; }
.text-left   { text-align: left; }
.nowrap  { white-space: nowrap; }
.tabular { font-variant-numeric: tabular-nums; }

/* ===========================================================================
   3. BUTTONS
   =========================================================================== */

.btn {
  --btn-h: 46px;
  --btn-px: var(--space-5);
  --btn-fs: var(--text-lg);
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: var(--btn-h);
  padding: 0 var(--btn-px);
  font-size: var(--btn-fs);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-tight);
  line-height: 1;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  border: 1px solid transparent;
  border-radius: var(--radius-pill);
  cursor: pointer;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition:
    background-color var(--dur-fast) var(--ease-standard),
    border-color var(--dur-fast) var(--ease-standard),
    color var(--dur-fast) var(--ease-standard),
    box-shadow var(--dur-normal) var(--ease-out),
    transform var(--dur-fast) var(--ease-out);
}

.btn:active { transform: translateY(1px) scale(0.985); }
.btn:disabled,
.btn[aria-disabled="true"] { opacity: 0.5; pointer-events: none; }

.btn--sm { --btn-h: 36px; --btn-px: var(--space-4); --btn-fs: var(--text-md); }
.btn--md { --btn-h: 46px; --btn-px: var(--space-5); --btn-fs: var(--text-lg); }
.btn--lg { --btn-h: 54px; --btn-px: var(--space-7); --btn-fs: var(--text-xl); }
.btn--xl { --btn-h: 62px; --btn-px: var(--space-8); --btn-fs: var(--text-xl); }

.btn--primary {
  background-color: var(--accent);
  background-image: var(--gradient-ember);
  color: var(--text-on-accent);
  box-shadow: var(--shadow-accent);
}
.btn--primary:hover {
  background-image: none;
  background-color: var(--accent-hover);
  color: var(--text-on-accent);
  transform: translateY(-1px);
  box-shadow: 0 12px 30px rgb(var(--rgb-accent) / 0.34);
}
.btn--primary:active { box-shadow: var(--shadow-sm); background-color: var(--accent-press); }

.btn--secondary {
  background-color: var(--surface);
  color: var(--text);
  border-color: var(--border-strong);
  box-shadow: var(--shadow-sm);
}
.btn--secondary:hover {
  background-color: var(--surface-2);
  color: var(--text);
  border-color: var(--border-strong);
  transform: translateY(-1px);
  box-shadow: var(--shadow-md);
}

.btn--outline {
  background-color: transparent;
  color: var(--accent-text);
  border-color: var(--accent-border);
}
.btn--outline:hover {
  background-color: var(--accent-soft);
  color: var(--accent-text);
  border-color: var(--accent);
}

.btn--ghost {
  background-color: transparent;
  color: var(--text-secondary);
}
.btn--ghost:hover {
  background-color: var(--overlay-veil);
  color: var(--text);
}

.btn--danger {
  background-color: var(--color-danger);
  color: #fff;
}
.btn--danger:hover { background-color: var(--color-danger); filter: brightness(1.08); color: #fff; }

/* For use on top of an accent / dark surface */
.btn--on-accent {
  background-color: #fff;
  color: var(--accent-text);
  box-shadow: var(--shadow-md);
}
.btn--on-accent:hover { background-color: #fff; color: var(--accent-text); transform: translateY(-1px); }

.btn--block { display: flex; width: 100%; }
.btn--pill  { border-radius: var(--radius-pill); }

/* Long CTA labels: allow two lines instead of overflowing a narrow screen. */
.btn--wrap {
  white-space: normal;
  line-height: var(--leading-snug);
  padding-block: var(--space-3);
  text-wrap: balance;
}

@media (max-width: 420px) {
  .btn--lg { --btn-px: var(--space-5); }
  .btn--xl { --btn-px: var(--space-6); }
}

.btn--icon {
  --btn-px: 0;
  width: var(--btn-h);
  min-width: var(--btn-h);
  padding: 0;
  border-radius: var(--radius-circle);
}

.btn--loading { color: transparent !important; pointer-events: none; }
.btn--loading::after {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
  width: 1.1em;
  height: 1.1em;
  border-radius: 50%;
  border: 2px solid currentColor;
  border-color: rgb(255 255 255 / 0.4);
  border-top-color: #fff;
  animation: spin 0.7s linear infinite;
}
.btn--secondary.btn--loading::after,
.btn--ghost.btn--loading::after,
.btn--outline.btn--loading::after {
  border-color: var(--border-strong);
  border-top-color: var(--accent);
}

.btn-group {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  width: 100%;
}
@media (min-width: 640px) {
  .btn-group { flex-direction: row; flex-wrap: wrap; width: auto; }
  .btn-group .btn { width: auto; }
}
.cluster--center .btn-group,
.center .btn-group { justify-content: center; }

/* ===========================================================================
   4. SURFACES — cards, glass, callouts
   =========================================================================== */

.card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-6);
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-2xl);
  box-shadow: var(--shadow-sm);
  transition:
    transform var(--dur-normal) var(--ease-out),
    box-shadow var(--dur-normal) var(--ease-out),
    border-color var(--dur-fast) var(--ease-standard);
}

.card--pad-sm { padding: var(--space-4); border-radius: var(--radius-xl); }
.card--pad-lg { padding: var(--space-8); }
.card--pad-sm > .card__media { margin: calc(var(--space-4) * -1) calc(var(--space-4) * -1) var(--space-1); border-radius: var(--radius-xl) var(--radius-xl) 0 0; }
.card--pad-lg > .card__media { margin: calc(var(--space-8) * -1) calc(var(--space-8) * -1) var(--space-2); }
.card--flat   { box-shadow: none; background-color: var(--surface-2); }
.card--elevated { box-shadow: var(--shadow-lg); border-color: var(--border-subtle); }

.card--accent {
  background-color: var(--accent-soft);
  border-color: var(--accent-border);
  box-shadow: none;
}

.card--dark {
  background-image: var(--gradient-ink);
  border-color: rgb(255 255 255 / 0.08);
  color: var(--text-inverse);
}
.card--dark .card__title { color: #fafafa; }
.card--dark .card__text  { color: rgb(250 250 250 / 0.72); }

.card--interactive { cursor: pointer; }
.card--interactive:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lg);
  border-color: var(--border-strong);
}
.card--interactive:focus-within {
  border-color: var(--accent-border);
  box-shadow: var(--shadow-md);
}

.card__media {
  margin: calc(var(--space-6) * -1) calc(var(--space-6) * -1) var(--space-2);
  border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;
  overflow: hidden;
  background-image: var(--gradient-paper);
  aspect-ratio: 16 / 10;
  display: grid;
  place-items: center;
}

.card__header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); }
.card__eyebrow { font-size: var(--text-xs); font-weight: var(--weight-bold); letter-spacing: var(--tracking-wider); text-transform: uppercase; color: var(--text-subtle); }
.card__title { font-size: var(--text-xl); font-weight: var(--weight-bold); letter-spacing: var(--tracking-tight); line-height: var(--leading-snug); color: var(--text); }
.card__text  { font-size: var(--text-lg); line-height: var(--leading-relaxed); color: var(--text-secondary); text-wrap: pretty; }
.card__body  { display: flex; flex-direction: column; gap: var(--space-3); flex: 1; }
.card__footer {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding-top: var(--space-4);
  margin-top: auto;
  border-top: 1px solid var(--border-subtle);
}

.glass {
  background-color: var(--glass-bg);
  border: 1px solid var(--glass-border);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .glass { background-color: var(--glass-bg-solid); }
}

.callout {
  display: flex;
  gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-lg);
  border: 1px solid var(--border);
  background-color: var(--surface-2);
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
}
.callout--accent  { background-color: var(--accent-soft);        border-color: var(--accent-border);        color: var(--accent-text); }
.callout--success { background-color: var(--color-success-bg);   border-color: var(--color-success-border); color: var(--color-success-text); }
.callout--warn    { background-color: var(--color-warn-bg);      border-color: var(--color-warn-border);    color: var(--color-warn-text); }
.callout--info    { background-color: var(--color-info-bg);      border-color: var(--color-info-border);    color: var(--color-info-text); }

.note {
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  color: var(--text-muted);
}

/* Honest placeholder where social proof will live once it actually exists.
   Never replace with invented testimonials, logos, counts or ratings. */
.social-proof-placeholder {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-6);
  border: 1.5px dashed var(--border-strong);
  border-radius: var(--radius-xl);
  background-color: transparent;
  color: var(--text-muted);
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  text-align: center;
}

/* ===========================================================================
   5. CHIPS & BADGES
   =========================================================================== */

.chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 34px;
  padding: 0 var(--space-4);
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-pill);
  color: var(--text-secondary);
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  line-height: 1;
  white-space: nowrap;
  cursor: default;
  transition: var(--transition-colors), transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}

button.chip, a.chip, .chip[role="button"], .chip[tabindex] { cursor: pointer; }
button.chip:hover, a.chip:hover, .chip[role="button"]:hover {
  border-color: var(--border-strong);
  color: var(--text);
  transform: translateY(-1px);
  box-shadow: var(--shadow-sm);
}

.chip--sm { min-height: 26px; padding: 0 var(--space-3); font-size: var(--text-xs); gap: var(--space-1); }
.chip--lg { min-height: 44px; padding: 0 var(--space-5); font-size: var(--text-lg); }

.chip--accent {
  background-color: var(--accent-soft);
  border-color: var(--accent-border);
  color: var(--accent-text);
}

.chip--outline { background-color: transparent; }

.chip--active,
.chip[aria-pressed="true"],
.chip[aria-selected="true"] {
  background-color: var(--accent);
  background-image: var(--gradient-ember);
  border-color: transparent;
  color: var(--text-on-accent);
  box-shadow: var(--shadow-accent);
}
.chip--active:hover,
.chip[aria-pressed="true"]:hover { color: var(--text-on-accent); }


.chip-row {
  display: flex;
  gap: var(--space-2);
  overflow-x: auto;
  padding-block: var(--space-1);
  margin-inline: calc(var(--gutter) * -1);
  padding-inline: var(--gutter);
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  scroll-snap-type: x proximity;
}
.chip-row::-webkit-scrollbar { display: none; }
.chip-row > * { scroll-snap-align: start; flex: none; }

@media (min-width: 640px) {
  .chip-row {
    flex-wrap: wrap;
    overflow: visible;
    margin-inline: 0;
    padding-inline: 0;
  }
}

.badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: 3px var(--space-2);
  border-radius: var(--radius-xs);
  background-color: var(--surface-3);
  color: var(--text-muted);
  font-size: var(--text-2xs);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  line-height: 1.5;
  white-space: nowrap;
}
.badge--accent  { background-color: var(--accent-soft);      color: var(--accent-text); }
.badge--success { background-color: var(--color-success-bg); color: var(--color-success-text); }
.badge--warn    { background-color: var(--color-warn-bg);    color: var(--color-warn-text); }
.badge--danger  { background-color: var(--color-danger-bg);  color: var(--color-danger-text); }
.badge--neutral { background-color: var(--surface-3);        color: var(--text-muted); }

.badge--dot::before {
  content: "";
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background-color: currentColor;
  flex: none;
}

/* ===========================================================================
   6. NAV
   =========================================================================== */

.nav {
  position: sticky;
  top: 0;
  z-index: var(--z-nav);
  width: 100%;
  background-color: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-bottom: 1px solid transparent;
  transition:
    background-color var(--dur-normal) var(--ease-standard),
    border-color var(--dur-normal) var(--ease-standard),
    box-shadow var(--dur-normal) var(--ease-standard);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .nav { background-color: var(--glass-bg-solid); }
}
.nav--static { position: static; }
.nav--scrolled {
  border-bottom-color: var(--glass-border);
  box-shadow: var(--shadow-sm);
}

.nav__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  min-height: var(--nav-h);
  width: 100%;
  max-width: var(--container-xl);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.nav__brand {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  color: var(--text);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-tight);
  font-size: var(--text-xl);
  text-decoration: none;
}
.nav__brand:hover { color: var(--text); }

.nav__logo {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  flex: none;
  border-radius: 9px;
  background-image: var(--gradient-ember);
  color: #fff;
  font-size: var(--text-lg);
  font-weight: var(--weight-heavy);
  letter-spacing: 0;
  box-shadow: var(--shadow-sm), inset 0 1px 0 rgb(255 255 255 / 0.28);
}

.nav__wordmark { font-family: var(--font-display); }

.nav__links {
  display: none;
  align-items: center;
  gap: var(--space-1);
}
@media (min-width: 900px) {
  .nav__links { display: flex; }
}

/* Below 900px these were `display: none` with **nothing in their place** — no
   menu button, no disclosure, no duplicate list. Five destinations (How it
   works, What we read, Demo, Pricing, FAQ) were unreachable on every phone and
   every tablet; the only way to Pricing was a link in the page body.

   They get their own row rather than a hamburger: a menu nobody has to open
   beats one they do, and every link stays visible instead of hiding behind a
   control the user has to discover.

   **They do not fit on one line, and the header stops being sticky because of
   it.** Measured at 375px: the five links are 407px against 339px of available
   row, so they wrap to two lines and the bar becomes 136px tall. That is 17% of
   an iPhone viewport to give up permanently, which is too much to pay for a nav
   — so below the desktop breakpoint the bar scrolls away with the page instead
   of pinning. The height is then only paid at the top of the document, where it
   costs nothing.

   `flex-wrap` on the list is what keeps that safe further down: at 320px the
   links need more room again and take a third line rather than overflowing the
   page, which is the one thing the nav must never do. */
@media (max-width: 899px) {
  .nav {
    position: static;
  }
  /* `scroll-padding-top` on <html> exists to stop an anchor target landing
     underneath the pinned bar. With nothing pinned there is nothing to clear,
     and leaving it would drop every in-page jump 76px short of its heading. */
  html {
    scroll-padding-top: var(--space-4);
  }
  .nav__inner {
    flex-wrap: wrap;
    row-gap: var(--space-1);
    padding-block: var(--space-2);
    /* Sized by its content rather than held open to the desktop nav height —
       otherwise the two rows sit inside a box built for one tall one. */
    min-height: 0;
  }
  .nav__links {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    /* Own row: brand and the CTA keep line 1, links take line 2. */
    order: 3;
    flex-basis: 100%;
  }
  .nav__link {
    /* 44pt, not the 38 that the desktop padding produces here. These are the
       primary navigation on a touch screen and they were measured short. */
    min-height: 44px;
    padding-block: var(--space-1);
    padding-inline: var(--space-2);
  }
}

.nav__link {
  display: inline-flex;
  align-items: center;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  color: var(--text-muted);
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
}
.nav__link:hover { color: var(--text); background-color: var(--overlay-veil); }
.nav__link--active,
.nav__link[aria-current="page"] { color: var(--text); font-weight: var(--weight-semibold); }

.nav__actions { display: flex; align-items: center; gap: var(--space-2); }

/* ===========================================================================
   7. HERO
   =========================================================================== */

.hero {
  position: relative;
  isolation: isolate;
  padding-block: clamp(2.5rem, 1.2rem + 5.5vw, 5.5rem) var(--section-y);
  overflow: hidden;
}

.hero__inner {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  align-items: flex-start;
  text-align: left;
}
.hero--center .hero__inner { align-items: center; text-align: center; }
.hero--center .hero__sub,
.hero--center .hero__title { margin-inline: auto; }

.hero__eyebrow { margin-bottom: calc(var(--space-2) * -1); }

.hero__title {
  font-family: var(--font-display);
  font-size: var(--text-display);
  font-weight: var(--weight-heavy);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tighter);
  text-wrap: balance;
  max-width: 16ch;
}
.hero--center .hero__title { max-width: 18ch; }

.hero__sub {
  font-size: var(--text-xl);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
  max-width: 46ch;
  text-wrap: pretty;
}
@media (min-width: 900px) {
  .hero__sub { font-size: var(--text-2xl); }
}

.hero__actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  width: 100%;
  padding-top: var(--space-2);
}
@media (min-width: 640px) {
  .hero__actions { flex-direction: row; flex-wrap: wrap; width: auto; align-items: center; }
}
.hero--center .hero__actions { justify-content: center; }

.hero__note {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-md);
  color: var(--text-muted);
}

.hero__visual {
  position: relative;
  display: flex;
  justify-content: center;
  width: 100%;
}

.hero-glow {
  position: absolute;
  inset: -20% -10% auto -10%;
  height: 130%;
  z-index: var(--z-below);
  background-image: var(--glow-hero);
  filter: blur(10px);
  pointer-events: none;
}

/* ===========================================================================
   8. DEVICE FRAME — pure CSS, no images
   =========================================================================== */

.screenshot-frame {
  --frame-w: 288px;
  --frame-bezel: 11px;
  position: relative;
  flex: none;
  width: var(--frame-w);
  max-width: 100%;
  aspect-ratio: 393 / 852;
  padding: var(--frame-bezel);
  border-radius: var(--radius-device);
  background-image:
    linear-gradient(150deg, #3a3a3a 0%, #1a1a1a 28%, #0a0a0a 55%, #2e2e2e 100%);
  box-shadow:
    var(--shadow-2xl),
    inset 0 0 0 1.5px rgb(255 255 255 / 0.14),
    inset 0 0 0 4px rgb(0 0 0 / 0.55);
}

.screenshot-frame--sm { --frame-w: 232px; --frame-bezel: 9px; --radius-device: 38px; }
.screenshot-frame--lg { --frame-w: 340px; }

/* side buttons */
.screenshot-frame::before,
.screenshot-frame::after {
  content: "";
  position: absolute;
  width: 3px;
  border-radius: 3px;
  background: linear-gradient(180deg, #4a4a4a, #222222);
}
.screenshot-frame::before { left: -3px; top: 22%; height: 8%; }
.screenshot-frame::after  { right: -3px; top: 25%; height: 13%; }

.screenshot-frame__screen {
  position: relative;
  height: 100%;
  width: 100%;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border-radius: calc(var(--radius-device) - var(--frame-bezel) + 2px);
  background-color: var(--surface);
  color: var(--text);
  font-size: var(--text-md);
}

.screenshot-frame__notch {
  position: absolute;
  top: 9px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 3;
  width: 33%;
  height: 22px;
  border-radius: var(--radius-pill);
  background-color: #000000;
  pointer-events: none;
}

.screenshot-frame__statusbar {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  padding: 12px var(--space-5) 4px;
  font-size: var(--text-2xs);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wide);
  color: var(--text);
  flex: none;
}

.screenshot-frame__scroll {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  scrollbar-width: none;
}
.screenshot-frame__scroll::-webkit-scrollbar { display: none; }

.screenshot-frame__home {
  flex: none;
  width: 34%;
  height: 4px;
  margin: var(--space-2) auto var(--space-2);
  border-radius: var(--radius-pill);
  background-color: rgb(var(--rgb-ink) / 0.35);
}

.screenshot-frame--tilt { transform: perspective(1400px) rotateY(-11deg) rotateX(3deg) rotateZ(1deg); }
.screenshot-frame--float { animation: float 7s var(--ease-in-out) infinite; }

@media (prefers-reduced-motion: reduce) {
  .screenshot-frame--float { animation: none; }
  .screenshot-frame--tilt  { transform: none; }
}

/* ===========================================================================
   9. FEATURE ROW / LISTS / STATS
   =========================================================================== */

.feature-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  align-items: center;
}
.feature-row + .feature-row { margin-top: var(--section-y); }

.feature-row__media { display: flex; justify-content: center; order: -1; }
.feature-row__body  { display: flex; flex-direction: column; gap: var(--space-4); align-items: flex-start; }

@media (min-width: 900px) {
  .feature-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-16); }
  .feature-row__media { order: 0; }
  .feature-row--reverse .feature-row__media { order: -1; }
}

.feature-icon {
  display: grid;
  place-items: center;
  width: 48px;
  height: 48px;
  flex: none;
  border-radius: var(--radius-md);
  background-image: var(--gradient-ember);
  color: #fff;
  font-size: var(--text-2xl);
  font-weight: var(--weight-bold);
  box-shadow: var(--shadow-md), inset 0 1px 0 rgb(255 255 255 / 0.25);
}
.feature-icon--moss  { background-image: var(--gradient-moss); }
.feature-icon .icon { width: 24px; height: 24px; }

.feature-list { display: flex; flex-direction: column; gap: var(--space-3); }
.feature-list__item {
  position: relative;
  display: flex;
  gap: var(--space-3);
  padding-left: 30px;
  font-size: var(--text-lg);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
}
.feature-list__item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.42em;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background-color: var(--color-success-bg);
  border: 1px solid var(--color-success-border);
}
.feature-list__item::after {
  content: "";
  position: absolute;
  left: 6px;
  top: 0.72em;
  width: 5px;
  height: 9px;
  border-right: 2px solid var(--color-success);
  border-bottom: 2px solid var(--color-success);
  transform: rotate(42deg);
}

.steps-list { counter-reset: kstep; display: flex; flex-direction: column; gap: var(--space-5); }
.steps-list__item {
  counter-increment: kstep;
  position: relative;
  padding-left: 48px;
  font-size: var(--text-lg);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
}
.steps-list__item::before {
  content: counter(kstep);
  position: absolute;
  left: 0;
  top: -2px;
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background-color: var(--accent-soft);
  border: 1px solid var(--accent-border);
  color: var(--accent-text);
  font-size: var(--text-md);
  font-weight: var(--weight-bold);
  font-variant-numeric: tabular-nums;
}

.stat { display: flex; flex-direction: column; gap: var(--space-1); }
.stat__value {
  font-family: var(--font-display);
  font-size: var(--text-4xl);
  font-weight: var(--weight-heavy);
  letter-spacing: var(--tracking-tighter);
  line-height: var(--leading-none);
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.stat__label {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--text-muted);
}
.stat__sub { font-size: var(--text-xs); color: var(--text-subtle); }

.stat-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-6);
}
@media (min-width: 900px) {
  .stat-row { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-8); }
}

/* ===========================================================================
   10. AVATAR — CSS gradients + initials. No photographs, ever.
   =========================================================================== */

.avatar {
  --avatar-size: 44px;
  --avatar-gradient: var(--avatar-g1);
  display: inline-grid;
  place-items: center;
  flex: none;
  width: var(--avatar-size);
  height: var(--avatar-size);
  border-radius: var(--radius-circle);
  background-image: var(--avatar-gradient);
  color: #fff;
  font-family: var(--font-display);
  font-size: calc(var(--avatar-size) * 0.38);
  font-weight: var(--weight-bold);
  letter-spacing: 0.01em;
  line-height: 1;
  text-transform: uppercase;
  user-select: none;
  text-shadow: 0 1px 2px rgb(0 0 0 / 0.28);
  box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.18),
              inset 0 -2px 6px rgb(0 0 0 / 0.12);
}

.avatar--xs { --avatar-size: 26px; }
.avatar--sm { --avatar-size: 34px; }
.avatar--md { --avatar-size: 44px; }
.avatar--lg { --avatar-size: 56px; }
.avatar--xl { --avatar-size: 76px; }

.avatar--g1 { --avatar-gradient: var(--avatar-g1); }
.avatar--g2 { --avatar-gradient: var(--avatar-g2); }
.avatar--g3 { --avatar-gradient: var(--avatar-g3); }
.avatar--g4 { --avatar-gradient: var(--avatar-g4); }
.avatar--g5 { --avatar-gradient: var(--avatar-g5); }
.avatar--g6 { --avatar-gradient: var(--avatar-g6); }
.avatar--g7 { --avatar-gradient: var(--avatar-g7); }
.avatar--g8 { --avatar-gradient: var(--avatar-g8); }

.avatar-stack { display: flex; align-items: center; }
.avatar-stack > .avatar { margin-left: -10px; box-shadow: 0 0 0 3px var(--surface), inset 0 0 0 1px rgb(255 255 255 / 0.18); }
.avatar-stack > .avatar:first-child { margin-left: 0; }

/* ===========================================================================
   11. PERSON CARD + MESSAGE THREAD (demo surfaces)
   =========================================================================== */

.person-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4);
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-sm);
  transition: transform var(--dur-normal) var(--ease-out), box-shadow var(--dur-normal) var(--ease-out), border-color var(--dur-fast) var(--ease-standard);
}
.person-card:hover { border-color: var(--border-strong); box-shadow: var(--shadow-md); }

.person-card__head { display: flex; align-items: center; gap: var(--space-3); }
.person-card__id   { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.person-card__name {
  font-size: var(--text-lg);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-tight);
  color: var(--text);
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.person-card__handle { font-size: var(--text-md); color: var(--text-muted); line-height: 1.2; }
.person-card__why {
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
  text-wrap: pretty;
}
.person-card__tags { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.person-card__actions { display: flex; gap: var(--space-2); align-items: center; margin-top: var(--space-1); }

.thread { display: flex; flex-direction: column; gap: var(--space-2); }

.bubble {
  --bubble-radius: 20px;
  max-width: 88%;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--bubble-radius);
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  text-wrap: pretty;
  overflow-wrap: anywhere;
}
.bubble--in {
  align-self: flex-start;
  background-color: var(--surface-3);
  color: var(--text);
  border-bottom-left-radius: 6px;
}
.bubble--out {
  align-self: flex-end;
  background-image: var(--gradient-ember);
  color: var(--text-on-accent);
  border-bottom-right-radius: 6px;
  box-shadow: var(--shadow-sm);
}
.bubble__meta {
  display: block;
  margin-top: var(--space-1);
  font-size: var(--text-2xs);
  opacity: 0.72;
  letter-spacing: var(--tracking-wide);
}

.typing { display: inline-flex; align-items: center; gap: 4px; padding: var(--space-3) var(--space-4); }
.typing span {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background-color: var(--text-subtle);
  animation: typing-bounce 1.2s var(--ease-in-out) infinite;
}
.typing span:nth-child(2) { animation-delay: 0.15s; }
.typing span:nth-child(3) { animation-delay: 0.3s; }
@media (prefers-reduced-motion: reduce) {
  .typing span { animation: none; opacity: 0.6; }
}

/* ===========================================================================
   12. PRICING
   =========================================================================== */

.pricing-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: stretch;
}
@media (min-width: 900px) {
  .pricing-grid { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--space-6); }
}

.pricing-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding: var(--space-7) var(--space-6);
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-2xl);
  box-shadow: var(--shadow-sm);
  transition: transform var(--dur-normal) var(--ease-out), box-shadow var(--dur-normal) var(--ease-out);
}
.pricing-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }

.pricing-card--featured {
  border-color: var(--accent-border);
  box-shadow: var(--shadow-xl), 0 0 0 1px var(--accent-border);
  background-image: linear-gradient(180deg, var(--accent-soft) 0%, transparent 34%);
}

.pricing-card__flag {
  position: absolute;
  top: 0;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 5px var(--space-4);
  border-radius: var(--radius-pill);
  background-image: var(--gradient-ember);
  color: var(--text-on-accent);
  font-size: var(--text-2xs);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wider);
  text-transform: uppercase;
  white-space: nowrap;
  box-shadow: var(--shadow-accent);
}

.pricing-card__name {
  font-size: var(--text-md);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wider);
  text-transform: uppercase;
  color: var(--text-muted);
}

.pricing-card__price { display: flex; align-items: baseline; gap: var(--space-2); flex-wrap: wrap; }
.pricing-card__amount {
  font-family: var(--font-display);
  font-size: var(--text-5xl);
  font-weight: var(--weight-heavy);
  letter-spacing: var(--tracking-tighter);
  line-height: 1;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.pricing-card__period { font-size: var(--text-lg); color: var(--text-muted); font-weight: var(--weight-medium); }
.pricing-card__note   { font-size: var(--text-md); color: var(--text-muted); line-height: var(--leading-normal); text-wrap: pretty; }

.pricing-card__list { display: flex; flex-direction: column; gap: var(--space-3); margin-top: var(--space-1); }
.pricing-card__list li {
  position: relative;
  padding-left: 28px;
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
}
.pricing-card__list li::before {
  content: "";
  position: absolute;
  left: 4px;
  top: 0.42em;
  width: 5px;
  height: 9px;
  border-right: 2px solid var(--accent);
  border-bottom: 2px solid var(--accent);
  transform: rotate(42deg);
}

.pricing-card__cta { margin-top: auto; padding-top: var(--space-3); }
.pricing-card__cta .btn { width: 100%; }

/* ===========================================================================
   13. FAQ  (works with <details>/<summary> or button[aria-expanded])
   =========================================================================== */

.faq { display: flex; flex-direction: column; }

.faq__item {
  border-bottom: 1px solid var(--border);
}
.faq__item:first-child { border-top: 1px solid var(--border); }

.faq__q {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  width: 100%;
  padding: var(--space-5) 0;
  padding-right: var(--space-8);
  font-size: var(--text-xl);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-tight);
  line-height: var(--leading-snug);
  color: var(--text);
  text-align: left;
  cursor: pointer;
  list-style: none;
  transition: var(--transition-colors);
}
.faq__q::-webkit-details-marker { display: none; }
.faq__q::marker { content: ""; }
.faq__q:hover { color: var(--accent-text); }

.faq__q::after {
  content: "";
  position: absolute;
  right: 4px;
  top: 50%;
  width: 9px;
  height: 9px;
  margin-top: -6px;
  border-right: 2px solid var(--text-subtle);
  border-bottom: 2px solid var(--text-subtle);
  transform: rotate(45deg);
  transform-origin: center;
  transition: transform var(--dur-normal) var(--ease-out);
}
.faq__item[open] > .faq__q::after,
.faq__q[aria-expanded="true"]::after {
  transform: rotate(-135deg);
  margin-top: -2px;
}

.faq__a {
  padding: 0 var(--space-8) var(--space-6) 0;
  font-size: var(--text-lg);
  line-height: var(--leading-relaxed);
  color: var(--text-secondary);
  max-width: var(--measure);
  text-wrap: pretty;
}
.faq__a p + p { margin-top: var(--space-3); }

.faq__item[open] > .faq__a { animation: faq-open var(--dur-normal) var(--ease-out) both; }
@media (prefers-reduced-motion: reduce) {
  .faq__item[open] > .faq__a { animation: none; }
}

/* ===========================================================================
   14. FOOTER + STICKY CTA
   =========================================================================== */

.footer {
  border-top: 1px solid var(--border);
  background-color: var(--bg-subtle);
  padding-block: var(--space-12) var(--space-8);
  margin-top: var(--space-8);
}

.footer__inner {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
  width: 100%;
  max-width: var(--container-xl);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.footer__brand {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-tight);
  color: var(--text);
}
.footer__blurb {
  margin-top: var(--space-3);
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  color: var(--text-muted);
  max-width: 38ch;
}

.footer__cols {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-8);
}
@media (min-width: 900px) {
  .footer__inner { flex-direction: row; justify-content: space-between; gap: var(--space-16); }
  .footer__cols { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-12); }
}

.footer__col { display: flex; flex-direction: column; gap: var(--space-3); }
.footer__heading {
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wider);
  text-transform: uppercase;
  color: var(--text-subtle);
}
.footer__links { display: flex; flex-direction: column; gap: var(--space-2); }
.footer__links a { color: var(--text-muted); font-size: var(--text-md); }
.footer__links a:hover { color: var(--text); }

.footer__legal {
  width: 100%;
  max-width: var(--container-xl);
  margin-inline: auto;
  padding-inline: var(--gutter);
  padding-top: var(--space-8);
  margin-top: var(--space-10);
  border-top: 1px solid var(--border);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  font-size: var(--text-xs);
  color: var(--text-subtle);
}
.footer__note {
  font-size: var(--text-xs);
  line-height: var(--leading-normal);
  color: var(--text-subtle);
  max-width: var(--measure);
}

.sticky-cta {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: var(--z-sticky);
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--gutter);
  padding-bottom: calc(var(--space-3) + env(safe-area-inset-bottom, 0px));
  background-color: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-top: 1px solid var(--glass-border);
  box-shadow: 0 -6px 24px rgb(var(--shadow-rgb) / 0.10);
  transition: transform var(--dur-slow) var(--ease-out), opacity var(--dur-slow) var(--ease-out);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .sticky-cta { background-color: var(--glass-bg-solid); }
}
.sticky-cta__text { flex: 1; min-width: 0; font-size: var(--text-md); font-weight: var(--weight-medium); color: var(--text); line-height: 1.25; }
.sticky-cta .btn { flex: none; }
.sticky-cta--hidden { transform: translateY(110%); opacity: 0; pointer-events: none; }

@media (min-width: 900px) {
  .sticky-cta { display: none; }
}

/* ===========================================================================
   15. FORMS
   =========================================================================== */

.field { display: flex; flex-direction: column; gap: var(--space-2); width: 100%; }

.field__label {
  font-size: var(--text-md);
  font-weight: var(--weight-semibold);
  color: var(--text);
  letter-spacing: var(--tracking-tight);
}
.field__hint  { font-size: var(--text-xs); color: var(--text-muted); line-height: var(--leading-normal); }
.field__error { font-size: var(--text-xs); color: var(--color-danger); font-weight: var(--weight-medium); }

.input,
.textarea,
.select {
  width: 100%;
  min-height: 50px;
  padding: var(--space-3) var(--space-4);
  background-color: var(--surface);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--radius-lg);
  color: var(--text);
  font-size: var(--text-lg);
  line-height: var(--leading-snug);
  appearance: none;
  transition:
    border-color var(--dur-fast) var(--ease-standard),
    box-shadow var(--dur-fast) var(--ease-standard),
    background-color var(--dur-fast) var(--ease-standard);
}
.input::placeholder,
.textarea::placeholder { color: var(--text-subtle); }

.input:hover,
.textarea:hover,
.select:hover { border-color: var(--text-subtle); }

.input:focus,
.textarea:focus,
.select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 4px rgb(var(--rgb-accent) / 0.16);
}
.input:focus-visible,
.textarea:focus-visible,
.select:focus-visible { outline: none; }

.input--lg { min-height: 60px; font-size: var(--text-xl); padding-inline: var(--space-5); border-radius: var(--radius-xl); }

.textarea { min-height: 120px; resize: vertical; line-height: var(--leading-normal); }

.select {
  padding-right: var(--space-10);
  background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
                    linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: calc(100% - 22px) 50%, calc(100% - 16px) 50%;
  background-size: 6px 6px, 6px 6px;
  background-repeat: no-repeat;
  cursor: pointer;
}

.field--error .input,
.field--error .textarea,
.field--error .select,
.input[aria-invalid="true"] {
  border-color: var(--color-danger);
  background-color: var(--color-danger-bg);
}

.input-group { display: flex; flex-direction: column; gap: var(--space-3); width: 100%; }
@media (min-width: 640px) {
  .input-group {
    position: relative;
    flex-direction: row;
    align-items: center;
    gap: 0;
    padding: 6px;
    background-color: var(--surface);
    border: 1.5px solid var(--border-strong);
    border-radius: var(--radius-pill);
    box-shadow: var(--shadow-md);
    transition: border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard);
  }
  .input-group:focus-within { border-color: var(--accent); box-shadow: 0 0 0 4px rgb(var(--rgb-accent) / 0.16); }
  .input-group .input {
    flex: 1;
    min-height: 46px;
    border: 0;
    background: transparent;
    box-shadow: none;
    border-radius: var(--radius-pill);
  }
  .input-group .input:focus { box-shadow: none; }
  .input-group__btn { flex: none; }
}

.checkbox {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  color: var(--text-secondary);
  cursor: pointer;
}
.checkbox input[type="checkbox"] {
  appearance: none;
  flex: none;
  width: 22px;
  height: 22px;
  margin: 0;
  border: 1.5px solid var(--border-strong);
  border-radius: var(--radius-xs);
  background-color: var(--surface);
  cursor: pointer;
  position: relative;
  transition: var(--transition-colors);
}
.checkbox input[type="checkbox"]:checked {
  background-color: var(--accent);
  background-image: var(--gradient-ember);
  border-color: transparent;
}
.checkbox input[type="checkbox"]:checked::after {
  content: "";
  position: absolute;
  left: 7px;
  top: 3px;
  width: 5px;
  height: 10px;
  border-right: 2px solid #fff;
  border-bottom: 2px solid #fff;
  transform: rotate(42deg);
}

.switch {
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  cursor: pointer;
  font-size: var(--text-md);
  color: var(--text-secondary);
}
.switch input[type="checkbox"] {
  appearance: none;
  flex: none;
  width: 46px;
  height: 28px;
  margin: 0;
  border-radius: var(--radius-pill);
  background-color: var(--sand-300);
  position: relative;
  cursor: pointer;
  transition: background-color var(--dur-normal) var(--ease-standard);
}
.switch input[type="checkbox"]::after {
  content: "";
  position: absolute;
  top: 3px;
  left: 3px;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background-color: #fff;
  box-shadow: var(--shadow-sm);
  transition: transform var(--dur-normal) var(--ease-spring);
}
.switch input[type="checkbox"]:checked { background-color: var(--accent); }
.switch input[type="checkbox"]:checked::after { transform: translateX(18px); }

/* ===========================================================================
   16. PROGRESS / STEPS
   =========================================================================== */

.progress {
  --progress: 0%;
  position: relative;
  width: 100%;
  height: 8px;
  border-radius: var(--radius-pill);
  background-color: var(--surface-sunken);
  overflow: hidden;
  box-shadow: inset 0 1px 2px rgb(var(--shadow-rgb) / 0.07);
}
.progress__bar {
  display: block;
  height: 100%;
  width: var(--progress);
  border-radius: inherit;
  background-image: var(--gradient-ember-bright);
  transition: width var(--dur-slower) var(--ease-out);
}
.progress--indeterminate .progress__bar {
  width: 38%;
  animation: progress-slide 1.35s var(--ease-in-out) infinite;
}
@media (prefers-reduced-motion: reduce) {
  .progress--indeterminate .progress__bar { animation: none; width: 100%; opacity: 0.6; }
}

.steps {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  width: 100%;
}
.step {
  position: relative;
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
  text-align: center;
}
.step::before {
  content: "";
  position: absolute;
  top: 11px;
  left: calc(-50% + 14px);
  right: calc(50% + 14px);
  height: 2px;
  background-color: var(--border-strong);
}
.step:first-child::before { display: none; }

.step__dot {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background-color: var(--surface);
  border: 2px solid var(--border-strong);
  color: var(--text-subtle);
  font-size: var(--text-2xs);
  font-weight: var(--weight-bold);
  transition: var(--transition-colors);
}
.step__label { font-size: var(--text-xs); color: var(--text-muted); line-height: 1.3; }

.step--active .step__dot { border-color: transparent; background-image: var(--gradient-ember); color: var(--text-on-accent); box-shadow: 0 0 0 4px rgb(var(--rgb-accent) / 0.16); }
.step--active .step__label { color: var(--text); font-weight: var(--weight-semibold); }

.step--done .step__dot { border-color: var(--color-success); background-color: var(--color-success); color: #fff; }
.step--done::before,
.step--active::before { background-color: var(--color-success); }
.step--done .step__label { color: var(--text-secondary); }

/* ===========================================================================
   17. TOAST
   =========================================================================== */

.toast-region {
  position: fixed;
  left: 0;
  right: 0;
  bottom: calc(env(safe-area-inset-bottom, 0px) + var(--space-4));
  z-index: var(--z-toast);
  display: flex;
  flex-direction: column-reverse;
  align-items: center;
  gap: var(--space-2);
  padding-inline: var(--gutter);
  pointer-events: none;
}

.has-sticky-cta .toast-region {
  bottom: calc(env(safe-area-inset-bottom, 0px) + 84px);
}
@media (min-width: 900px) {
  .has-sticky-cta .toast-region { bottom: calc(env(safe-area-inset-bottom, 0px) + var(--space-4)); }
}

.toast {
  pointer-events: auto;
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  width: 100%;
  max-width: 26rem;
  padding: var(--space-4);
  border-radius: var(--radius-lg);
  background-color: var(--glass-bg-solid);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-xl);
  color: var(--text);
  font-size: var(--text-md);
  line-height: var(--leading-normal);
  animation: toast-in var(--dur-slow) var(--ease-spring) both;
}
@media (prefers-reduced-motion: reduce) {
  .toast { animation: none; }
}

.toast__icon {
  display: grid;
  place-items: center;
  flex: none;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background-color: var(--surface-3);
  color: var(--text-muted);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
}
.toast__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.toast__title { font-weight: var(--weight-semibold); color: var(--text); }
/* Optional second line under the title. index.html's toast helper targets it by
   class, so it is part of the component API and has to exist here. */
.toast__msg { color: var(--text-secondary); text-wrap: pretty; }
.toast__close {
  flex: none;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  color: var(--text-subtle);
  display: grid;
  place-items: center;
  font-size: var(--text-lg);
  line-height: 1;
  transition: var(--transition-colors);
}
.toast__close:hover { background-color: var(--overlay-veil); color: var(--text); }

.toast--success .toast__icon { background-color: var(--color-success-bg); color: var(--color-success-text); }
.toast--warn    .toast__icon { background-color: var(--color-warn-bg);    color: var(--color-warn-text); }
.toast--danger  .toast__icon { background-color: var(--color-danger-bg);  color: var(--color-danger-text); }

@media (min-width: 640px) {
  .toast-region { align-items: flex-end; padding-inline: var(--space-6); }
}

/* ===========================================================================
   18. SKELETON / SPINNER / ICON / KBD
   =========================================================================== */

.skeleton {
  position: relative;
  overflow: hidden;
  background-color: var(--surface-3);
  border-radius: var(--radius-sm);
  min-height: 1em;
}
.skeleton::after {
  content: "";
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background-image: linear-gradient(90deg, transparent, rgb(var(--rgb-ink) / 0.06), transparent);
  animation: shimmer 1.4s var(--ease-in-out) infinite;
}
@media (prefers-reduced-motion: reduce) {
  .skeleton::after { animation: none; }
}

.skeleton--text   { height: 0.9em; border-radius: var(--radius-xs); }
.skeleton--text:nth-of-type(even) { width: 82%; }
.skeleton--title  { height: 1.5em; width: 62%; border-radius: var(--radius-xs); }
.skeleton--avatar { width: 44px; height: 44px; border-radius: 50%; flex: none; }
.skeleton--btn    { height: 46px; width: 140px; border-radius: var(--radius-pill); }
.skeleton--card   { height: 132px; border-radius: var(--radius-xl); }

.spinner {
  display: inline-block;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid var(--border-strong);
  border-top-color: var(--accent);
  animation: spin 0.7s linear infinite;
}
.spinner--lg { width: 30px; height: 30px; border-width: 3px; }
@media (prefers-reduced-motion: reduce) {
  .spinner { animation-duration: 2.4s; }
}

.icon {
  width: 20px;
  height: 20px;
  flex: none;
  display: inline-block;
  vertical-align: middle;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.9;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.icon--sm { width: 16px; height: 16px; }
.icon--lg { width: 24px; height: 24px; }
.icon--xl { width: 32px; height: 32px; stroke-width: 1.6; }

.kbd {
  display: inline-block;
  padding: 2px 7px;
  border-radius: var(--radius-xs);
  background-color: var(--surface-2);
  border: 1px solid var(--border-strong);
  border-bottom-width: 2px;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-secondary);
}

.pulse-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  flex: none;
  border-radius: 50%;
  background-color: var(--color-success);
  box-shadow: 0 0 0 0 rgb(var(--rgb-moss) / 0.6);
  animation: pulse-ring 2.2s var(--ease-out) infinite;
}
@media (prefers-reduced-motion: reduce) {
  .pulse-dot { animation: none; }
}

/* ===========================================================================
   19. SCROLL REVEAL
   Degrades in three tiers:
     · no JS + no scroll-timeline  -> content simply visible (never blank)
     · no JS + scroll-timeline     -> native scroll-driven reveal, zero JS
     · JS (html.js)                -> IntersectionObserver toggles .is-visible
   =========================================================================== */

.reveal { opacity: 1; }

/* Tier 2 — native, no JavaScript required. */
@supports (animation-timeline: view()) {
  html:not(.js) .reveal {
    animation: reveal-in linear both;
    animation-timeline: view();
    animation-range: entry 4% cover 24%;
  }
}

/* Tier 3 — classic JS-driven reveal. */
.js .reveal {
  opacity: 0;
  transform: translateY(22px) scale(0.99);
  transition:
    opacity var(--dur-reveal) var(--ease-out),
    transform var(--dur-reveal) var(--ease-out);
  will-change: opacity, transform;
}
.js .reveal.is-visible,
.js .reveal.reveal--in {
  opacity: 1;
  transform: none;
  will-change: auto;
}

.reveal--d1 { transition-delay: 70ms;  animation-delay: 70ms; }
.reveal--d2 { transition-delay: 140ms; animation-delay: 140ms; }
.reveal--d3 { transition-delay: 210ms; animation-delay: 210ms; }
.reveal--d4 { transition-delay: 280ms; animation-delay: 280ms; }
.reveal--d5 { transition-delay: 350ms; animation-delay: 350ms; }
.reveal--d6 { transition-delay: 420ms; animation-delay: 420ms; }

@media (prefers-reduced-motion: reduce) {
  .reveal,
  .js .reveal {
    opacity: 1 !important;
    transform: none !important;
    animation: none !important;
    transition: none !important;
  }
}

.float { animation: float 7s var(--ease-in-out) infinite; }
@media (prefers-reduced-motion: reduce) {
  .float { animation: none; }
}

/* ===========================================================================
   20. KEYFRAMES
   =========================================================================== */

@keyframes reveal-in {
  from { opacity: 0; transform: translateY(22px) scale(0.99); }
  to   { opacity: 1; transform: none; }
}

@keyframes spin { to { transform: rotate(360deg); } }

@keyframes shimmer { 100% { transform: translateX(100%); } }

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-12px); }
}

@keyframes toast-in {
  from { opacity: 0; transform: translateY(14px) scale(0.97); }
  to   { opacity: 1; transform: none; }
}

@keyframes progress-slide {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(320%); }
}

@keyframes typing-bounce {
  0%, 60%, 100% { transform: translateY(0); opacity: 0.45; }
  30%           { transform: translateY(-5px); opacity: 1; }
}

@keyframes pulse-ring {
  0%   { box-shadow: 0 0 0 0 rgb(var(--rgb-moss) / 0.55); }
  70%  { box-shadow: 0 0 0 9px rgb(var(--rgb-moss) / 0); }
  100% { box-shadow: 0 0 0 0 rgb(var(--rgb-moss) / 0); }
}

@keyframes faq-open {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: none; }
}

/* ===========================================================================
   21. UTILITIES
   =========================================================================== */

.visually-hidden,
.sr-only {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: absolute;
  top: var(--space-2);
  left: var(--space-2);
  z-index: var(--z-max);
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-md);
  background-color: var(--surface);
  color: var(--text);
  font-weight: var(--weight-semibold);
  box-shadow: var(--shadow-lg);
  transform: translateY(-160%);
  transition: transform var(--dur-fast) var(--ease-out);
}
.skip-link:focus-visible { transform: translateY(0); }

.no-scrollbar { scrollbar-width: none; -ms-overflow-style: none; }
.no-scrollbar::-webkit-scrollbar { display: none; }

/* Presence-based so the element keeps its authored display value when shown. */
@media (max-width: 899px) {
  .hide-mobile { display: none !important; }
}
@media (min-width: 900px) {
  .hide-desktop { display: none !important; }
}

.mt-0 { margin-top: 0 !important; }
.mb-0 { margin-bottom: 0 !important; }

/* Print — keep it readable if someone PDFs the deck. */
@media print {
  .nav, .sticky-cta, .toast-region, .hero-glow { display: none !important; }
  body { background: #fff; color: #000; }
  .card, .pricing-card { box-shadow: none; border: 1px solid #ccc; }
  .reveal { opacity: 1 !important; transform: none !important; }
}

/* ---------------------------------------------------------------------------
   INSTDATE BRAND — glass buttons + brand mark.

   Buttons are deliberately translucent: an 88%-opaque IG gradient over a
   blurred backdrop, with a hairline light border to keep the edge crisp.
   background-color is declared UNDER background-image so browsers without
   backdrop-filter still get a solid, legible fill rather than a washed one.
   ------------------------------------------------------------------------- */

/* --- primary: glass gradient ------------------------------------------- */
.btn--primary {
  background-color: rgb(193 53 132 / 0.92);        /* fallback + under-layer */
  background-image: linear-gradient(45deg,
      rgb(217 119 6 / 0.88) 0%, rgb(220 38 38 / 0.88) 30%,
      rgb(193 53 132 / 0.88) 62%, rgb(131 58 180 / 0.88) 84%,
      rgb(91 81 216 / 0.88) 100%);
  border: 1px solid rgb(255 255 255 / 0.28);
  color: #fff;
  -webkit-backdrop-filter: blur(10px) saturate(1.4);
  backdrop-filter: blur(10px) saturate(1.4);
  box-shadow: 0 1px 2px rgb(0 0 0 / 0.08), 0 6px 18px rgb(193 53 132 / 0.18);
}
.btn--primary:hover {
  background-color: rgb(193 53 132 / 1);
  background-image: var(--gradient-ig, var(--gradient-ember));
  border-color: rgb(255 255 255 / 0.4);
  box-shadow: 0 2px 4px rgb(0 0 0 / 0.10), 0 10px 26px rgb(193 53 132 / 0.26);
  filter: saturate(1.05);
}
.btn--primary:active { transform: translateY(1px); }

/* --- secondary: fully transparent, border only -------------------------- */
.btn--secondary {
  background-color: transparent;
  border: 1px solid var(--border-strong);
  color: var(--text);
  box-shadow: none;
}
.btn--secondary:hover {
  background-color: rgb(0 0 0 / 0.04);
  border-color: var(--text-subtle);
  box-shadow: none;
}

/* --- on dark bands: frosted white ---------------------------------------- */
.btn--on-accent {
  background-color: rgb(255 255 255 / 0.14);
  background-image: none;
  border: 1px solid rgb(255 255 255 / 0.32);
  color: #fff;
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  box-shadow: none;
}
.btn--on-accent:hover {
  background-color: rgb(255 255 255 / 0.22);
  border-color: rgb(255 255 255 / 0.5);
  color: #fff;
  transform: translateY(-1px);
}

/* --- ghost: neutral hover, no warm tint ---------------------------------- */
.btn--ghost:hover { background-color: rgb(0 0 0 / 0.05); }
.section--dark .btn--ghost { color: rgb(250 250 250 / 0.86); }
/* .btn--secondary is transparent now, so on a dark band it inherited a dark
   border and near-black text and all but vanished. Give it the light edge. */
.section--dark .btn--secondary,
.section--dark .btn--outline {
  border-color: rgb(255 255 255 / 0.34);
  color: rgb(250 250 250 / 0.92);
}
.section--dark .btn--secondary:hover,
.section--dark .btn--outline:hover {
  background-color: rgb(255 255 255 / 0.10);
  border-color: rgb(255 255 255 / 0.55);
  color: #fff;
}
.section--dark .btn--ghost:hover { background-color: rgb(255 255 255 / 0.10); color: #fff; }

/* --- outline: keep transparent, brand border ----------------------------- */
.btn--outline { background-color: transparent; }

.gradient-text {
  background-image: var(--gradient-ig-text);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* Brand mark in the nav: the real logo, not a drawn glyph. */
.nav__logo {
  background: none !important;
  border: 0 !important;
  padding: 0 !important;
  width: 32px; height: 32px;
  display: inline-flex; align-items: center; justify-content: center;
  overflow: visible; border-radius: 0;
}
.nav__logo img { width: 100%; height: 100%; object-fit: contain; display: block; }
.nav__wordmark { letter-spacing: var(--tracking-tight); font-weight: 600; }

/* IG-ish chrome: hairline borders, flatter cards, tighter radii. */
.card, .pricing-card, .screenshot-frame { border-color: var(--border); }
.chip { border-radius: 8px; }
.nav { border-bottom: 1px solid var(--border); }


/* ---------------------------------------------------------------------------
   AVATAR PHOTOS
   The gradient-and-initials mark stays as the base layer, so it shows through
   whenever a portrait is missing or fails to load — the avatar is never empty.
   Drop files into assets/faces/ (see the README there).
   ------------------------------------------------------------------------- */
.avatar { position: relative; overflow: hidden; }
.avatar__img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
}
/* A hairline ring keeps the circle crisp on white cards. */
.avatar:has(.avatar__img) {
  box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.10);
  text-shadow: none;
}

/* ===========================================================================
   INSTAGRAM-STYLE CAROUSEL  (.ig-carousel)
   ---------------------------------------------------------------------------
   Shaped like an Instagram post: ONE slide fills a fixed frame, nothing of the
   neighbours is visible at rest, dots underneath, arrows inside the frame edge.

   The frame is the scroll container itself — border, radius and shadow live
   there, and the slides inside are plain. That way the rounded corners clip
   the sliding content instead of every slide carrying its own border, which
   would show two stacked outlines mid-swipe.

   Scrolling, snapping and swipe momentum are native, so with the script
   disabled the frame still swipes; the script only adds dots, arrows and the
   active-slide bookkeeping.
   =========================================================================== */

.ig-carousel {
  --slide-gap: 0px;      /* Instagram slides butt together — no seam, no peek */
  position: relative;
  /* An Instagram post is a narrow column, not a full-width band. Without this
     the "one slide" would stretch to the whole container on desktop. */
  max-width: 540px;
  margin: var(--space-8) auto 0;
}

.ig-carousel__viewport {
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  /* This element is the post frame. */
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  /* Hide the scrollbar: the dots are the affordance, as on Instagram. */
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.ig-carousel__viewport::-webkit-scrollbar { display: none; }

.ig-carousel__viewport:focus-visible {
  outline: var(--focus-ring-width) solid var(--focus-ring);
  outline-offset: var(--focus-ring-offset);
}

.ig-carousel__track {
  display: flex;
  gap: var(--slide-gap);
  margin: 0;
  padding: 0;
  list-style: none;
}

.ig-carousel__slide {
  /* Exactly the frame width: at rest you see this slide and nothing else. */
  flex: 0 0 100%;
  scroll-snap-align: center;
  display: flex;
}

/* --- the card ------------------------------------------------------------ */

.step-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  width: 100%;
  /* No border, radius or shadow: the frame around it already has them. */
  padding: var(--space-7) var(--space-6);
}

/* Instagram overlays its arrows on a photo, where covering part of the image
   costs nothing. Over text it clips words, so wherever the arrows are actually
   shown the copy is inset past them. Condition matches the arrow rule below. */
@media (min-width: 720px) and (hover: hover) {
  .step-card { padding-inline: var(--space-14); }
}

.step-card__index {
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wide);
  color: var(--text-subtle);
  font-variant-numeric: tabular-nums;
}

.step-card__title {
  margin: 0;
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-tight);
}

.step-card__text {
  margin: 0;
  color: var(--text-secondary);
  line-height: var(--leading-relaxed);
}

/* --- dots ---------------------------------------------------------------- */

.ig-carousel__dots {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-4);
}

.ig-carousel__dot {
  position: relative;
  width: 7px;
  height: 7px;
  padding: 0;
  flex: none;
  border: 0;
  border-radius: 50%;
  background-color: var(--sand-400);
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-out),
              transform var(--dur-fast) var(--ease-out);
}
.ig-carousel__dot:hover { background-color: var(--sand-600); }
.ig-carousel__dot[aria-selected="true"] {
  background-color: var(--accent);
  transform: scale(1.32);
}
.ig-carousel__dot:focus-visible {
  outline: var(--focus-ring-width) solid var(--focus-ring);
  outline-offset: 3px;
}
/* The tap target has to clear 24px even though the dot is 7px. */
.ig-carousel__dot::before {
  content: "";
  position: absolute;
  width: 24px;
  height: 24px;
  margin: -8.5px;
}

/* --- arrows -------------------------------------------------------------- */

.ig-carousel__arrow {
  position: absolute;
  top: 50%;
  z-index: 2;
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  margin-top: -17px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background-color: rgb(255 255 255 / 0.92);
  box-shadow: 0 1px 4px rgb(0 0 0 / 0.18);
  color: #262626;
  cursor: pointer;
  transition: opacity var(--dur-fast) var(--ease-out);
}
/* Inside the frame, as on Instagram — not floating off its edges. */
.ig-carousel__arrow--prev { inset-inline-start: var(--space-3); }
.ig-carousel__arrow--next { inset-inline-end: var(--space-3); }
.ig-carousel__arrow:focus-visible {
  outline: var(--focus-ring-width) solid var(--focus-ring);
  outline-offset: var(--focus-ring-offset);
}
.ig-carousel__arrow[disabled] {
  opacity: 0;
  pointer-events: none;
}
.ig-carousel__arrow .icon { width: 16px; height: 16px; }

/* Touch devices swipe; arrows would only cover the card. */
@media (hover: none), (max-width: 719px) {
  .ig-carousel__arrow { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .ig-carousel__viewport { scroll-behavior: auto; }
  .ig-carousel__dot { transition: none; }
}
