/* Reckona marketing site.
   Structure mirrors the previous landing page 1:1 (same sections, same
   class names, same breakpoints) — only tokens, fonts and copy changed
   for Reckona's own brand. Headline font (Fraunces) is self-hosted
   below: the same latin / latin-ext files Google Fonts served (variable
   weight 400-700, upright only; the hero <em> is styled upright), so
   the hero headline no longer waits on two extra origins.
   License: /assets/fonts/OFL-Fraunces.txt */

/* latin-ext */
@font-face {
  font-family: 'Fraunces';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/fraunces-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* latin */
@font-face {
  font-family: 'Fraunces';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/fraunces-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Reset and Base Styles */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
}

html {
  margin: 0;
  padding: 0;
  /* Fixed dark, matching the header/hero — not var(--surface), which
     flips with theme. This is what shows in the gap behind the sticky
     header during iOS Safari's elastic overscroll bounce at the top
     of the page; left unset it defaults to the browser's white
     canvas, flashing white behind the header on every page. */
  background-color: #1F2125;
}

:root {
  --color-black: #1F2125;
  --color-white: #ffffff;
  /* Section backgrounds step top to bottom: hero 1F2125 (fixed,
     --color-ink-fixed) → feature-1 E8E8E8 → feature-2 EDEDED →
     feature-3 F1F1F1 → pricing F5F5F5 → faq FFFFFF (--surface) →
     footer 1F2125 (fixed) — mirrors the dark-mode step, light side. */
  --color-gray-light: #F5F5F5;
  --color-gray-medium: #E2E2E2;
  --color-gray-dark: #3B3D41;
  --color-tint-a: #E8E8E8;
  --color-tint-b: #EDEDED;
  --color-tint-c: #F1F1F1;
  --color-coral: #EF5337;
  --color-coral-strong: #C93D24;
  /* Fixed dark surface for the hero/footer/phone bezel — these bands
     stay dark in both light and dark mode, so this never flips. */
  --color-ink-fixed: #1F2125;
  /* Light page/card surface — flips in dark mode. --color-white stays
     literal white always, for text sitting on the fixed-dark bands. */
  --surface: #ffffff;
  /* Secondary/tertiary text opacities, expressed against --color-black
     so a single override flips every one of them in dark mode. */
  --ink-90: rgba(0, 0, 0, 0.9);
  --ink-70: rgba(0, 0, 0, 0.7);
  --ink-60: rgba(0, 0, 0, 0.6);
  --ink-55: rgba(0, 0, 0, 0.55);

  --header-height: 80px;
  --section-padding: 64px;
  --max-width: 1320px;
}

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  line-height: 1.6;
  color: var(--color-black);
  background-color: var(--surface);
  margin: 0;
  padding: 0;
}

h1, h2, h3, h4, h5, h6 {
  font-family: 'Fraunces', 'Iowan Old Style', Georgia, serif;
  font-weight: 400;
}

button, input, textarea, select,
a, p, span, div, li, td, th {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}

/* Header */
.header {
  position: sticky;
  top: 0;
  z-index: 1000;
  height: var(--header-height);
  /* Solid, not translucent: an alpha background blends with whatever
     sits behind it (page canvas, backdrop-filter's sampled layer),
     which is what was making this read as a lighter gray instead of
     matching the hero exactly. Fixed --color-ink-fixed guarantees the
     same pixel value as the hero, independent of what's behind it. */
  background-color: var(--color-ink-fixed);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  color: var(--color-white);
  margin: 0;
  padding: 0;
  margin-bottom: 0 !important;
  transition: background-color 0.3s ease, color 0.3s ease;
}

.header.scrolled {
  background-color: rgba(255, 255, 255, 0.8);
  color: var(--color-black);
}

.header-wrapper {
  max-width: var(--max-width);
  margin: 0 auto;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--section-padding);
  width: 100%;
}

.logo {
  display: flex;
  align-items: center;
  text-decoration: none;
  cursor: pointer;
  transition: opacity 0.2s;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
}

.logo:hover {
  opacity: 0.7;
}

.logo-word {
  font-family: 'Fraunces', 'Iowan Old Style', Georgia, serif;
  font-weight: 400;
  font-size: 22px;
  line-height: 1;
  color: inherit;
}

.logo,
.footer-logo {
  gap: 10px;
}

.logo-icon {
  width: 28px;
  height: 28px;
  display: block;
  flex-shrink: 0;
}

.footer-logo .logo-icon {
  width: 32px;
  height: 32px;
}

.nav {
  display: flex;
  gap: 32px;
  align-items: center;
}

.nav-link {
  color: inherit;
  text-decoration: none;
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 0;
  transition: color 0.2s, color 0.3s ease;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
  position: relative;
}

/* Dimming is carried entirely by the rgba alpha below (0.7 default,
   0.9 hover, 1 active) — a separate `opacity` here used to compound
   with it (0.7 * 0.7 = 0.49), quietly failing contrast when scrolled. */

.header:not(.scrolled) .nav-link,
.header:not(.scrolled) .nav-link:link,
.header:not(.scrolled) .nav-link:visited {
  color: rgba(255, 255, 255, 0.7);
}

.header:not(.scrolled) .nav-link:hover {
  color: rgba(255, 255, 255, 0.9);
}

.header:not(.scrolled) .nav-link.active {
  color: rgba(255, 255, 255, 1);
}

.header.scrolled .nav-link,
.header.scrolled .nav-link:link,
.header.scrolled .nav-link:visited {
  color: rgba(0, 0, 0, 0.7);
}

.header.scrolled .nav-link:hover {
  color: rgba(0, 0, 0, 0.9);
}

.header.scrolled .nav-link.active {
  color: rgba(0, 0, 0, 1);
}

/* Sections */
.section {
  padding: 80px 0;
  min-height: calc(100vh - var(--header-height));
  display: flex;
  align-items: center;
  margin: 0;
}

/* Keeps a directly-loaded/back-forward-restored/externally-linked
   #anchor from landing under the sticky header — the in-page nav
   clicks already correct for this in JS, but native browser jumps
   (typed URL, bookmark, <a href="/#pricing"> from another page) do
   not run that JS and need the offset expressed here instead. */
#home,
#features,
#pricing,
#faq {
  scroll-margin-top: 96px;
}

@media (max-width: 899px) {
  #home,
  #features,
  #pricing,
  #faq {
    /* The header can wrap to two rows (logo + nav) at this width, so
       it's taller than the desktop 80px — pad the offset generously
       rather than trying to track its exact wrapped height. */
    scroll-margin-top: 140px;
  }
}

.section.section-hero {
  padding: 80px 0 !important;
  margin: 0 !important;
  margin-top: 0 !important;
  min-height: calc(100vh - 80px) !important;
  position: relative;
  top: 0;
}

@media (max-width: 899px) {
  .section.section-hero {
    min-height: 100vh !important;
  }
}

.section-layout {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--section-padding);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 96px;
  align-items: center;
  width: 100%;
}

.section-content {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.section-title {
  font-size: 48px;
  line-height: 1.1;
  font-weight: 400;
  letter-spacing: -0.01em;
  max-width: 440px;
}

.section-hero .section-title {
  font-size: 72px;
  max-width: none;
}

.section-body {
  font-size: 24px;
  line-height: 1.4;
  max-width: 440px;
  color: var(--ink-70);
}

.section-body strong {
  font-weight: 700;
  letter-spacing: 0;
}

/* Hero Section */
.section-hero {
  background-color: var(--color-ink-fixed);
  color: var(--color-white);
  margin-top: 0 !important;
  padding-top: 0 !important;
}

.section-hero .section-layout {
  padding-top: 0;
  padding-bottom: 0;
  /* Top of the phone lines up with the top of the headline, rather
     than the two columns being centered against each other. On mobile
     the grid is a single stacked column, so this has no effect there. */
  align-items: start;
}

.section-hero .section-title {
  color: var(--color-white);
}

.section-hero .section-title em {
  font-style: normal;
  color: var(--color-coral);
}

.section-hero .section-body {
  color: rgba(255, 255, 255, 0.8);
}

/* Feature Sections */
.section-feature-1 {
  background-color: var(--color-tint-a);
  position: relative;
  z-index: 2;
}

.section-feature-2 {
  background-color: var(--color-tint-b);
  position: relative;
  z-index: 2;
}

.section-feature-3 {
  background-color: var(--color-tint-c);
  position: relative;
  z-index: 2;
}

.section-pricing {
  background-color: var(--color-gray-light);
  position: relative;
  z-index: 2;
}

.section-faq {
  background-color: var(--surface);
  position: relative;
  z-index: 2;
}

.footer {
  background-color: var(--color-ink-fixed);
  position: relative;
  z-index: 2;
}

/* Phone Figure */
.phone-figure {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  margin-bottom: -200px;
  z-index: 1;
  /* Lets .phone size its corners off its own rendered width (cqw). */
  container-type: inline-size;
}

/* Corner radius scales with the phone's actual width: 64px at the
   409px desktop size (~15.6%), proportionally less as it narrows.
   Breakpoints only change --phone-max. */
.phone {
  --phone-max: 409px;
  position: relative;
  width: 100%;
  max-width: var(--phone-max);
  aspect-ratio: 409 / 868;
  background-color: var(--color-ink-fixed);
  border-radius: 64px;
  padding: 8px;
  border: 2px solid rgba(255, 255, 255, 0.1);
  overflow: hidden;
  box-sizing: border-box;
}

.phone-screen {
  width: 100%;
  height: 100%;
  background-color: var(--color-white);
  border-radius: 56px;
  overflow: hidden;
  position: relative;
  -webkit-overflow-scrolling: touch;
  box-sizing: border-box;
  contain: layout style paint;
}

@supports (width: 1cqw) {
  .phone {
    border-radius: calc(min(100cqw, var(--phone-max)) * 0.156);
  }

  .phone-screen {
    border-radius: calc(min(100cqw, var(--phone-max)) * 0.156 - 8px);
  }
}

.phone-content {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  max-width: 100%;
  max-height: 100%;
  -webkit-transform: translateZ(0);
  transform: translateZ(0);
  box-sizing: border-box;
}

/* No screenshots yet — this fills the phone frame until real product
   photography is dropped in (swap for an <img class="phone-content">). */
.phone-content-placeholder {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #2b2d31 0%, var(--color-ink-fixed) 100%);
  color: var(--color-white);
  font-size: 18px;
  padding: 40px;
  text-align: center;
}

.phone-content-placeholder .placeholder-kicker {
  display: block;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-coral);
  margin-bottom: 10px;
}

/* Chat Bubble (currently unused in markup, kept for parity) */
.chat-bubble {
  position: absolute;
  bottom: 16px;
  right: -40px;
  background-color: var(--color-gray-dark);
  color: var(--color-white);
  padding: 16px;
  border-radius: 16px;
  max-width: 280px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

.chat-message {
  font-size: 16px;
  margin-bottom: 12px;
  line-height: 1.4;
}

.chat-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.chat-action {
  background-color: rgba(255, 255, 255, 0.1);
  border: none;
  color: var(--color-white);
  padding: 8px 12px;
  border-radius: 8px;
  font-size: 14px;
  text-align: left;
  cursor: pointer;
  transition: background-color 0.2s;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
}

.chat-action:hover {
  background-color: rgba(255, 255, 255, 0.2);
}

/* App Store Button */
.app-download-group {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-top: 20px;
}

.app-store-button {
  display: inline-block;
  text-decoration: none;
  transition: opacity 0.2s;
  flex-shrink: 0;
}

.app-store-button:hover {
  opacity: 0.8;
}

.app-store-badge {
  height: 64px;
  width: auto;
  display: block;
}

.qr-code-image {
  width: 160px;
  height: 160px;
  display: block;
  border-radius: 12px;
}

/* A QR code is only useful on a screen you can point another phone
   at: hide it at tablet/phone widths and on any touch-first device
   (e.g. an iPad in landscape), where the tappable badge does the job. */
@media (max-width: 899px), (hover: none) and (pointer: coarse) {
  .qr-download-group {
    display: none;
  }
}

/* Hide App Store button on desktop for feature sections, show only on mobile */
.section-feature .app-store-button-feature {
  display: none;
}

/* Pricing Section */
.section-pricing {
  background-color: var(--color-gray-light);
  padding: 120px 0;
}

.section-pricing .section-layout {
  grid-template-columns: 1fr 1fr;
  gap: 0px;
}

.pricing-wrapper {
  display: flex;
  flex-direction: column;
  gap: 24px;
  width: 100%;
  max-width: 100%;
}

.pricing-toggle {
  display: flex;
  gap: 0;
  background-color: var(--color-gray-medium);
  padding: 4px;
  border-radius: 12px;
  width: fit-content;
  margin-bottom: 8px;
  align-self: flex-end;
  margin-left: auto;
  max-width: 100%;
}

.toggle-option {
  background: transparent;
  border: none;
  padding: 12px 24px;
  border-radius: 8px;
  font-family: inherit;
  font-size: 16px;
  font-weight: 400;
  cursor: pointer;
  color: var(--color-black);
  transition: all 0.2s;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
}

.toggle-option-active {
  background-color: var(--surface);
  color: var(--color-black);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}

.toggle-badge {
  background-color: var(--color-coral);
  color: #FFFFFF;
  padding: 3px 8px;
  border-radius: 12px;
  font-family: inherit;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0;
  white-space: nowrap;
}

.pricing-cards {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
  max-width: 100%;
}

.pricing-card {
  background-color: var(--surface);
  border: 1px solid var(--color-gray-medium);
  border-radius: 16px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 24px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
  width: 100%;
  min-width: 0;
}

.pricing-card-premium {
  border: 1px solid var(--color-gray-medium);
  width: 100%;
  min-width: 0;
}

.pricing-header {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.pricing-title {
  font-size: 32px;
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: -0.01em;
  margin: 0;
}

.pricing-subtitle {
  font-size: 16px;
  font-weight: 400;
  color: var(--ink-70);
  margin: 0;
}

.pricing-price {
  display: flex;
  align-items: baseline;
  gap: 4px;
  margin: 0;
}

.price-amount {
  font-size: 40px;
  font-weight: 400;
  letter-spacing: -0.01em;
  font-family: 'Fraunces', Georgia, serif;
}

.price-period {
  font-size: 20px;
  font-weight: 400;
  color: var(--ink-60);
}

.billing-original {
  text-decoration: line-through;
  margin-right: 4px;
}

.billing-discount {
  font-weight: 400;
}

.pricing-features {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.pricing-feature {
  font-size: 16px;
  padding-left: 32px;
  position: relative;
  line-height: 1.5;
}

.pricing-feature::before {
  content: '✓';
  position: absolute;
  left: 0;
  color: var(--color-coral);
  font-weight: 700;
  letter-spacing: 0;
  font-size: 18px;
}

/* FAQ Section */
.section-faq {
  background-color: var(--surface);
  padding: 120px 0;
}

.section-faq .section-layout {
  grid-template-columns: 1fr;
  gap: 16px;
}

.faq-title {
  font-size: 48px;
  line-height: 1.1;
  font-weight: 400;
  letter-spacing: -0.01em;
  margin-bottom: 48px;
}

.faq-list {
  display: flex;
  flex-direction: column;
  gap: 0;
}

.faq-item {
  border-bottom: 1px solid var(--color-gray-medium);
  padding: 16px 0;
}

.faq-question {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: none;
  border: none;
  -webkit-appearance: none;
  appearance: none;
  text-align: left;
  font-size: 20px;
  font-weight: 500;
  letter-spacing: 0;
  color: var(--ink-90) !important;
  -webkit-text-fill-color: var(--ink-90) !important;
  cursor: pointer;
  padding: 16px 0;
  transition: color 0.2s;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
  gap: 16px;
}

.faq-question span:first-child {
  color: var(--ink-90) !important;
  -webkit-text-fill-color: var(--ink-90) !important;
}

.faq-question:focus,
.faq-question:active {
  color: var(--ink-90) !important;
  -webkit-text-fill-color: var(--ink-90) !important;
  outline: none;
}

.faq-question:hover {
  color: var(--ink-70) !important;
  -webkit-text-fill-color: var(--ink-70) !important;
}

.faq-icon {
  color: var(--ink-90) !important;
  -webkit-text-fill-color: var(--ink-90) !important;
  font-size: 24px;
  font-weight: 400;
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  transform-origin: center center;
}

.faq-item.active .faq-icon {
  transform: rotate(45deg);
  color: var(--color-coral) !important;
  -webkit-text-fill-color: var(--color-coral) !important;
}

.faq-answer {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.5s cubic-bezier(0.4, 0, 0.2, 1),
              padding 0.5s cubic-bezier(0.4, 0, 0.2, 1),
              opacity 0.3s ease-in-out;
  padding: 0 40px 0 0;
  opacity: 0;
}

.faq-item.active .faq-answer {
  max-height: 1000px;
  padding: 12px 40px 12px 0;
  opacity: 1;
}

.faq-answer p {
  font-size: 18px;
  line-height: 1.4;
  color: var(--ink-70);
}

.faq-answer a,
.faq-answer a:link,
.faq-answer a:visited {
  color: var(--color-coral);
  text-decoration: none;
}

/* Footer */
.footer {
  background-color: var(--color-ink-fixed);
  color: var(--color-white);
  padding: 80px 0 24px;
}

.footer-wrapper {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--section-padding);
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 32px;
  margin-bottom: 48px;
  width: 100%;
}

.footer-slot {
  display: flex;
  align-items: center;
}

.footer-slot-left {
  justify-content: flex-start;
}

.footer-slot-right {
  justify-content: flex-end;
}

/* Reserved for a future badge (see the HTML comment) — while it's
   empty, drop it out of flow so it can't add a stray gap in the
   mobile footer's stacked layout. The desktop grid's third column
   stays reserved either way (grid tracks aren't collapsed by an
   absent item), so this is a no-op there. Re-appears automatically
   the moment real content is added inside it. */
.footer-slot-right:empty {
  display: none;
}

.footer-logo {
  flex-shrink: 0;
  height: 32px;
  display: flex;
  align-items: center;
  text-decoration: none;
  cursor: pointer;
  transition: opacity 0.2s;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
}

.footer-logo:hover {
  opacity: 0.7;
}

.footer-logo .logo-word {
  font-size: 26px;
}

.footer-links {
  display: flex;
  flex-direction: row;
  gap: 48px;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  justify-self: center;
}

.footer-link,
.footer-link:link,
.footer-link:visited {
  color: var(--color-white);
  text-decoration: none;
  font-size: 16px;
  transition: opacity 0.2s;
  -webkit-tap-highlight-color: transparent;
  tap-highlight-color: transparent;
  outline: none;
  user-select: none;
}

.footer-link:hover {
  opacity: 0.7;
}

.footer-copyright {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--section-padding);
  text-align: center;
  font-size: 14px;
  color: rgba(255, 255, 255, 0.6);
}

/* Privacy page */
.privacy-page main {
  max-width: 760px;
  margin: 0 auto;
  padding: 56px var(--section-padding) 96px;
}

.privacy-page h1 {
  font-size: 40px;
  margin-bottom: 8px;
}

.privacy-updated {
  color: var(--ink-55);
  font-size: 14px;
  margin-bottom: 40px;
}

.privacy-page h2 {
  font-size: 22px;
  margin: 40px 0 12px;
}

.privacy-page p,
.privacy-page li {
  font-size: 16px;
  line-height: 1.7;
  color: var(--ink-70);
}

.privacy-page ul {
  padding-left: 20px;
  margin: 12px 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

/* Scoped to <main>: .privacy-page is on <body>, so an unscoped rule
   also out-specified the header logo and footer links, tinting them
   coral on this page only. */
.privacy-page main a,
.privacy-page main a:link,
.privacy-page main a:visited {
  color: var(--color-coral);
  text-decoration: none;
}

.privacy-page strong {
  color: var(--color-black);
}

.privacy-page h3 {
  font-size: 17px;
  margin: 24px 0 8px;
}

.privacy-page .privacy-toc {
  list-style: none;
  padding-left: 0;
  gap: 4px;
}

.privacy-page .privacy-toc a {
  font-weight: 500;
}

.privacy-page .table-scroll {
  overflow-x: auto;
  margin: 16px 0;
}

.privacy-page table {
  width: 100%;
  min-width: 520px;
  border-collapse: collapse;
  font-size: 14px;
}

.privacy-page th,
.privacy-page td {
  border: 1px solid var(--color-gray-medium);
  padding: 10px 12px;
  text-align: left;
  vertical-align: top;
}

.privacy-page th {
  background: var(--color-gray-light);
  font-weight: 600;
  color: var(--color-black);
  white-space: nowrap;
}

.privacy-page .generator-credit {
  margin-top: 48px;
  font-size: 13px;
  color: var(--ink-55);
}

/* Responsive Design */
@media (max-width: 1349px) {
  .section-layout {
    padding: 0 var(--section-padding);
  }
}

@media (max-width: 1200px) {
  .section-hero .section-title {
    font-size: 64px;
  }

  .section-body {
    font-size: 22px;
  }
}

@media (max-width: 1050px) {
  .section-pricing .section-layout {
    grid-template-columns: 1fr;
    gap: 64px;
  }

  .section-pricing .section-content {
    order: 1;
  }

  .section-pricing .pricing-wrapper {
    order: 2;
    max-width: 600px;
    margin: 0 auto;
  }
}

@media (max-width: 899px) {
  :root {
    --section-padding: 32px;
  }

  .header {
    height: auto;
    min-height: 80px;
  }

  .section-layout {
    grid-template-columns: 1fr;
    gap: 48px;
    padding: 0 var(--section-padding);
  }

  .section-content {
    order: 1;
    align-items: center;
    text-align: center;
  }

  .section-figure {
    order: 2;
  }

  .section-pricing .section-content {
    order: 1;
  }

  .section-pricing .pricing-wrapper {
    order: 2;
  }

  .app-download-group {
    justify-content: center;
  }

  .section {
    padding: 64px 0;
    min-height: auto;
  }

  .section-hero {
    padding: 80px 0;
  }

  .section-pricing {
    padding: 64px 0;
  }

  .section-faq {
    padding: 64px 0;
  }

  .footer {
    padding: 64px 0 24px;
  }

  .section-hero .section-title {
    font-size: 56px;
  }

  .section-title {
    font-size: 40px;
    max-width: 100%;
  }

  .section-body {
    font-size: 20px;
    max-width: 100%;
  }

  .header-wrapper {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 12px;
    padding: 16px var(--section-padding);
  }

  .nav {
    display: flex;
    flex-direction: row;
    justify-content: center;
    gap: 24px;
    width: 100%;
    align-items: center;
    flex-wrap: wrap;
  }

  .nav-link {
    font-size: 16px;
  }

  .phone {
    --phone-max: 362px;
  }

  /* -200px was tuned for the 409px-tall desktop phone (~23% of its
     height). Left unscaled, that fixed amount eats a growing share of
     the shrinking mobile phone and risks covering the centered
     placeholder text with the next section — so it scales down with
     the phone instead of staying constant. */
  .phone-figure {
    margin-bottom: -130px;
  }

  .chat-bubble {
    position: relative;
    right: auto;
    bottom: auto;
    margin-top: 16px;
    max-width: 100%;
  }

  .pricing-toggle {
    width: 100%;
    max-width: 100%;
    justify-content: center;
    align-self: center;
    margin-left: 0;
    margin-right: 0;
  }

  .toggle-option {
    flex: 1;
    justify-content: center;
    min-width: 0;
    font-weight: 400;
  }

  .pricing-cards {
    grid-template-columns: 1fr;
    gap: 24px;
    display: flex;
    flex-direction: column;
  }

  .pricing-card {
    order: 2;
  }

  .pricing-card-premium {
    order: 1;
    margin-top: 0;
  }

  .faq-title {
    font-size: 48px;
  }

  .footer-wrapper {
    display: flex;
    flex-direction: column;
    gap: 32px;
    text-align: center;
    align-items: center;
  }

  .footer-slot,
  .footer-slot-left,
  .footer-slot-right {
    justify-content: center;
    width: 100%;
  }

  .footer-links {
    flex-direction: column;
    gap: 16px;
    justify-content: center;
    flex: 0;
  }
}

@media (max-width: 599px) {
  :root {
    --section-padding: 16px;
  }

  .header-wrapper {
    padding: 12px var(--section-padding);
  }

  .section {
    padding: 48px 0;
  }

  .section-hero {
    padding: 64px 0;
  }

  .section-pricing {
    padding: 48px 0;
  }

  .section-faq {
    padding: 48px 0;
  }

  .section-hero .section-title {
    font-size: 48px;
  }

  .section-title {
    font-size: 32px;
    line-height: 1.2;
  }

  .section-body {
    font-size: 18px;
  }

  .privacy-page h1 {
    font-size: 32px;
  }

  .logo-word {
    font-size: 19px;
  }

  .logo-icon {
    width: 24px;
    height: 24px;
  }

  .phone {
    --phone-max: 280px;
  }

  .phone-figure {
    margin-bottom: -90px;
  }

  .chat-bubble {
    padding: 12px;
    margin-top: 12px;
  }

  .chat-message {
    font-size: 14px;
  }

  .chat-action {
    font-size: 12px;
    padding: 6px 10px;
  }

  .pricing-toggle {
    padding: 4px;
    width: 100%;
    max-width: 100%;
    gap: 0;
  }

  .toggle-option {
    flex: 1;
    padding: 12px 16px;
    font-size: 15px;
    font-weight: 400;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    justify-content: center;
  }

  .toggle-badge {
    font-size: 11px;
    padding: 3px 6px;
    margin-left: 4px;
    flex-shrink: 0;
  }

  .pricing-card {
    padding: 20px;
  }

  .pricing-title {
    font-size: 24px;
  }

  .price-amount {
    font-size: 32px;
  }

  .price-period {
    font-size: 18px;
  }

  .pricing-feature {
    font-size: 15px;
  }

  .faq-title {
    font-size: 36px;
    margin-bottom: 32px;
  }

  .faq-question {
    font-size: 18px;
    padding: 12px 0;
  }

  .faq-answer {
    padding: 0 20px 0 0;
  }

  .faq-item.active .faq-answer {
    padding: 10px 20px 10px 0;
  }

  .faq-answer p {
    font-size: 16px;
  }

  /* Show the App Store button on mobile for feature sections (desktop
     shows only the badge in the hero; feature sections rely on scroll
     proximity to it otherwise). */
  .section-feature .app-store-button-feature {
    display: inline-block;
  }

  .app-store-badge {
    height: 56px;
  }

  .footer {
    padding: 48px 0 20px;
  }

  .footer-logo {
    height: 28px;
  }

  .footer-logo .logo-word {
    font-size: 21px;
  }

  .footer-logo .logo-icon {
    width: 28px;
    height: 28px;
  }

  .footer-links {
    flex-direction: column;
    gap: 16px;
    justify-content: center;
  }
}

@media (max-width: 399px) {
  .section-hero .section-title {
    font-size: 40px;
  }

  .section-title {
    font-size: 28px;
  }

  .section-body {
    font-size: 16px;
  }

  .privacy-page h1 {
    font-size: 28px;
  }

  .faq-title {
    font-size: 32px;
  }

  .phone {
    --phone-max: 240px;
  }

  .phone-figure {
    margin-bottom: -60px;
  }

  /* "Save 58%" can outgrow the button's share of a 320-360px screen
     next to "Yearly" on one line — let the badge drop to its own line
     instead of clipping. The sibling "Monthly" button auto-stretches
     to match (pricing-toggle's flex default is align-items: stretch). */
  .toggle-option {
    flex-wrap: wrap;
    row-gap: 2px;
  }
}

/* Safari-specific fixes for phone containers */
@supports (-webkit-appearance: none) {
  .phone-screen {
    min-height: 0;
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
  }

  .phone-content,
  .phone-content-placeholder {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100% !important;
    height: 100% !important;
  }
}

/* ---------------------------------------------------------------------
   Dark mode. The hero, footer and phone bezel (--color-ink-fixed) are
   already dark in light mode and stay exactly as they are — only the
   page surface, cards, borders, tints and text-opacity tokens flip.
   Everything below is a token override; no selector's structure or
   class list changes. */
@media (prefers-color-scheme: dark) {
  :root {
    --color-black: #ffffff;
    /* Section backgrounds step top to bottom: hero 1F2125 (fixed,
       --color-ink-fixed) → feature-1 25272B → feature-2 2F3135 →
       feature-3 35373B → pricing 404246 → faq 1F2125 (--surface) →
       footer 1F2125 (fixed) — a deliberate rise then bookend back
       down, not the light-mode tints just darkened. */
    --surface: #1F2125;
    --color-gray-light: #404246;
    --color-gray-medium: #3B3D41;
    --color-tint-a: #25272B;
    --color-tint-b: #2F3135;
    --color-tint-c: #35373B;
    --color-coral: #F9684E;
    --color-coral-strong: #F52C08;
    --ink-90: rgba(255, 255, 255, 0.9);
    --ink-70: rgba(255, 255, 255, 0.7);
    --ink-60: rgba(255, 255, 255, 0.6);
    --ink-55: rgba(255, 255, 255, 0.55);
  }

  /* The header stays on its dark, translucent treatment at every
     scroll position in dark mode — there's no light state to swap to. */
  .header.scrolled {
    background-color: rgba(31, 33, 37, 0.85);
    color: var(--color-white);
  }

  .header.scrolled .nav-link,
  .header.scrolled .nav-link:link,
  .header.scrolled .nav-link:visited {
    color: rgba(255, 255, 255, 0.7);
  }

  .header.scrolled .nav-link:hover {
    color: rgba(255, 255, 255, 0.9);
  }

  .header.scrolled .nav-link.active {
    color: rgba(255, 255, 255, 1);
  }
}

/* ---------------------------------------------------------------------
   Visible keyboard focus. Every interactive element above sets
   `outline: none` to drop the default ring on mouse/touch activation,
   with nothing standing in for it on keyboard focus — :focus-visible
   restores one, matching the brand accent, without affecting the
   mouse-click case those earlier rules were written for. */
a:focus-visible,
button:focus-visible {
  outline: 2px solid var(--color-coral);
  outline-offset: 3px;
  border-radius: 4px;
}
