/* Self-hosted brand fonts (both OFL-licensed). Served same-origin from
 * /fonts/ so the strict CSP `font-src 'self'` allows them with no Google
 * Fonts CDN. Variable weight axis covers the 400–700 range the brand uses. */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url('/fonts/inter-latin-wght-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url('/fonts/jetbrains-mono-latin-wght-normal.woff2') format('woff2');
}

/* Nodevia marketing site — design tokens, themed.
 *
 * Light + dark palettes. Light is the default (matches the May 2026
 * brand direction the app uses); dark is opt-in via the header toggle
 * which sets `data-theme="dark"` on `<html>` and persists the choice
 * in localStorage. No build step, no JS framework — just a static
 * stylesheet driven by CSS custom properties.
 *
 * Hue family from the logo:
 *   Tile bg       #010612 / #09090B  (dark canvas)
 *   Mint stroke   #5EEAD4             (sparkline fills, healthy state)
 *   Brand teal    #0F766E (light) / #2DD4BF (dark)   primary accent
 */

:root,
:root[data-theme='light'] {
  /* Brand */
  --color-primary:        #0F766E;
  --color-primary-hover:  #0B5852;
  --color-primary-soft:   rgba(15, 118, 110, 0.10);
  --color-primary-on:     #FFFFFF;
  --color-accent:         #5EEAD4;

  /* Surfaces */
  --color-bg:             #FAFAF9;
  --color-bg-soft:        #F4F4F5;
  --color-bg-alt:         #FFFFFF;
  --color-surface:        #FFFFFF;
  --color-surface-2:      #F8F9FA;
  --color-border:         #E4E4E7;
  --color-border-strong:  #D4D4D8;
  --color-border-soft:    #F4F4F5;

  /* Text */
  --color-ink:            #09090B;
  --color-ink-body:       #3F3F46;
  --color-ink-subdued:    #71717A;
  --color-ink-muted:      #A1A1AA;

  /* Semantic */
  --color-success:        #10B981;
  --color-success-soft:   rgba(16, 185, 129, 0.12);
  --color-warning:        #F59E0B;
  --color-warning-soft:   rgba(245, 158, 11, 0.14);
  --color-danger:         #DC2626;
  --color-danger-soft:    rgba(220, 38, 38, 0.10);

  /* Elevation */
  --shadow-card:          0 1px 2px rgba(9, 9, 11, 0.04),
                          0 4px 12px -2px rgba(9, 9, 11, 0.06);
  --shadow-card-strong:   0 4px 16px -2px rgba(9, 9, 11, 0.08),
                          0 16px 48px -12px rgba(9, 9, 11, 0.10);
  --shadow-glow-teal:     0 6px 24px -6px rgba(15, 118, 110, 0.30);
  --shadow-glow-strong:   0 14px 40px -8px rgba(15, 118, 110, 0.35);

  /* Decorative */
  --grid-line:            rgba(9, 9, 11, 0.04);
  --glow-hero:            radial-gradient(circle, rgba(94, 234, 212, 0.22), transparent 70%);

  color-scheme: light;
}

:root[data-theme='dark'] {
  /* Brand */
  --color-primary:        #2DD4BF;
  --color-primary-hover:  #5EEAD4;
  --color-primary-soft:   rgba(45, 212, 191, 0.14);
  --color-primary-on:     #022C24;
  --color-accent:         #5EEAD4;

  /* Surfaces — anchored to the logo tile (#010612) */
  --color-bg:             #09090B;
  --color-bg-soft:        #0C0C0E;
  --color-bg-alt:         #141417;
  --color-surface:        #0F0F11;
  --color-surface-2:      #18181B;
  --color-border:         #27272A;
  --color-border-strong:  #3F3F46;
  --color-border-soft:    #1C1C1F;

  /* Text */
  --color-ink:            #FAFAFA;
  --color-ink-body:       #D4D4D8;
  --color-ink-subdued:    #A1A1AA;
  --color-ink-muted:      #71717A;

  /* Semantic */
  --color-success:        #34D399;
  --color-success-soft:   rgba(52, 211, 153, 0.16);
  --color-warning:        #FBBF24;
  --color-warning-soft:   rgba(251, 191, 36, 0.16);
  --color-danger:         #F87171;
  --color-danger-soft:    rgba(248, 113, 113, 0.14);

  /* Elevation — deep canvases need stronger drops */
  --shadow-card:          0 1px 2px rgba(0, 0, 0, 0.35),
                          0 4px 12px -2px rgba(0, 0, 0, 0.40);
  --shadow-card-strong:   0 4px 16px -2px rgba(0, 0, 0, 0.5),
                          0 16px 48px -12px rgba(0, 0, 0, 0.55);
  --shadow-glow-teal:     0 6px 24px -6px rgba(45, 212, 191, 0.30);
  --shadow-glow-strong:   0 14px 40px -8px rgba(45, 212, 191, 0.35);

  --grid-line:            rgba(255, 255, 255, 0.04);
  --glow-hero:            radial-gradient(circle, rgba(45, 212, 191, 0.18), transparent 70%);

  color-scheme: dark;
}

:root {
  /* Spacing — 4px base, multiples of 4. */
  --space-1: 4px;  --space-2: 8px;   --space-3: 12px;
  --space-4: 16px; --space-5: 24px;  --space-6: 32px;
  --space-7: 48px; --space-8: 64px;  --space-9: 96px;

  /* Radius */
  --radius-sm: 4px;  --radius-md: 8px;
  --radius-lg: 12px; --radius-xl: 16px;
  --radius-pill: 999px;

  /* Typography */
  --font-sans:
    'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
    Arial, sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  --text-xs: 12px;  --text-sm: 13px;  --text-base: 15px;
  --text-md: 17px;  --text-lg: 20px;  --text-xl: 28px;
  --text-2xl: 40px; --text-3xl: 56px; --text-4xl: 72px;

  --layout-max: 1200px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
html, body {
  font-family: var(--font-sans);
  font-size: var(--text-base);
  line-height: 1.55;
  color: var(--color-ink);
  background: var(--color-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  transition: background-color 200ms ease, color 200ms ease;
}

a { color: inherit; text-decoration: none; }
a:hover { text-decoration: underline; }
button { font-family: inherit; color: inherit; cursor: pointer; border: 0; background: none; padding: 0; }

:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

img, svg { display: block; max-width: 100%; }

h1, h2, h3, h4 {
  margin: 0 0 var(--space-4);
  color: var(--color-ink);
  font-weight: 700;
  letter-spacing: -0.015em;
  line-height: 1.15;
}
h1 { font-size: var(--text-3xl); letter-spacing: -0.025em; }
h2 { font-size: var(--text-2xl); letter-spacing: -0.020em; }
h3 { font-size: var(--text-md); }
h4 { font-size: var(--text-base); }
p  { margin: 0 0 var(--space-4); }

.accent-teal      { color: var(--color-primary); }
.accent-deep-teal { color: var(--color-primary-hover); }

/* --- Layout --------------------------------------------------------- */

.container {
  width: 100%;
  max-width: var(--layout-max);
  margin: 0 auto;
  padding: 0 var(--space-5);
}

main { padding: 0 0 var(--space-8); }
section {
  padding: var(--space-8) 0;
  scroll-margin-top: 80px;
}
@media (min-width: 800px) {
  section { padding: var(--space-9) 0; }
}

/* --- Header / nav --------------------------------------------------- */

.site-header {
  background: color-mix(in srgb, var(--color-bg) 82%, transparent);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid var(--color-border-soft);
  position: sticky;
  top: 0;
  z-index: 10;
}
.site-header .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: var(--space-3);
  padding-bottom: var(--space-3);
  gap: var(--space-5);
}

.brand {
  display: inline-flex;
  align-items: center;
  /* The lockup is now a single SVG — icon-as-N + "odevia" in the
   * brand's Poppins-outlined wordmark all baked into one file. No
   * inline text to align against. */
  line-height: 1;
}
.brand:hover { text-decoration: none; }
.brand-mark {
  /* Lockup aspect ratio is 703:220 — width follows from height to
   * preserve the brand's exact proportions. */
  height: 36px;
  width: auto;
  display: block;
}
/* `.brand-text` retired — the SVG carries the wordmark now. The
 * rule is removed entirely rather than left dangling so future
 * grep / refactor work doesn't trip over it. */

.nav {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  flex-wrap: wrap;
}
/* Scope the muted/grey treatment to plain nav links only — the
 * `Get a quote` <a class="btn btn-primary"> sits inside the same
 * <nav> and would otherwise inherit `.nav a { color }`, which beats
 * the .btn-primary white-text rule on specificity and lands the
 * button with grey text. The `:not(.btn)` cleanly exempts buttons. */
.nav a:not(.btn) {
  color: var(--color-ink-subdued);
  font-weight: 500;
  font-size: var(--text-sm);
  padding: 6px 10px;
  border-radius: 8px;
  transition: color 120ms ease, background 120ms ease;
}
.nav a:not(.btn):hover {
  color: var(--color-ink);
  background: var(--color-bg-alt);
  text-decoration: none;
}

/* Theme toggle — sun/moon swap. Light theme shows the moon (=switch
 * to dark); dark theme shows the sun (=switch back to light). */
.theme-toggle {
  width: 36px; height: 36px;
  border-radius: 8px;
  border: 1px solid var(--color-border);
  display: inline-grid;
  place-items: center;
  color: var(--color-ink-body);
  transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
}
.theme-toggle:hover { background: var(--color-bg-alt); border-color: var(--color-border-strong); color: var(--color-ink); }
.theme-toggle svg { width: 16px; height: 16px; }
.theme-toggle .sun { display: none; }
:root[data-theme='dark'] .theme-toggle .sun { display: block; }
:root[data-theme='dark'] .theme-toggle .moon { display: none; }

/* --- Buttons -------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  height: 44px;
  padding: 0 var(--space-5);
  border-radius: var(--radius-md);
  font-weight: 600;
  font-size: var(--text-sm);
  border: 1px solid transparent;
  cursor: pointer;
  transition: background 120ms ease, color 120ms ease,
    border-color 120ms ease, box-shadow 200ms ease,
    transform 120ms ease, filter 160ms ease;
  white-space: nowrap;
}
/* Primary CTA — brand-teal fill + white text. Restrained shadow (no
 * heavy outer glow) so it reads as a confident action button against
 * the light canvas without dominating it. */
.btn-primary {
  background: var(--color-primary);
  color: var(--color-primary-on);
  border-color: var(--color-primary);
}
.btn-primary:hover {
  background: var(--color-primary-hover);
  border-color: var(--color-primary-hover);
  color: var(--color-primary-on);
  text-decoration: none;
  transform: translateY(-1px);
  box-shadow: var(--shadow-card);
}
.btn-secondary {
  background: var(--color-surface);
  color: var(--color-ink);
  border-color: var(--color-border);
}
.btn-secondary:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
  background: var(--color-bg-alt);
  text-decoration: none;
}
.btn-ghost {
  background: transparent;
  color: var(--color-ink-body);
}
.btn-ghost:hover {
  background: var(--color-bg-alt);
  color: var(--color-ink);
  text-decoration: none;
}
.btn-sm { height: 36px; padding: 0 var(--space-3); font-size: var(--text-sm); }
.btn-lg { height: 48px; padding: 0 var(--space-5); }

/* --- Dev banner ----------------------------------------------------- */

.dev-banner {
  background: var(--color-primary-soft);
  color: var(--color-primary);
  text-align: center;
  font-size: var(--text-sm);
  padding: var(--space-2) var(--space-4);
  border-bottom: 1px solid var(--color-border-soft);
}

/* --- Hero ----------------------------------------------------------- */

.hero {
  padding: var(--space-8) 0 var(--space-7);
  position: relative;
  overflow: hidden;
}
.hero::before {
  content: '';
  position: absolute;
  top: -280px; right: -180px;
  width: 660px; height: 660px;
  background: var(--glow-hero);
  pointer-events: none;
  z-index: 0;
}
.hero::after {
  content: '';
  position: absolute; inset: 0;
  background-image:
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
  background-size: 48px 48px;
  mask-image: linear-gradient(180deg, black 0%, transparent 100%);
  -webkit-mask-image: linear-gradient(180deg, black 0%, transparent 100%);
  pointer-events: none;
  z-index: 0;
}
.hero-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  align-items: center;
  position: relative;
  z-index: 1;
}
@media (min-width: 960px) {
  .hero-grid { grid-template-columns: 1.05fr 1fr; gap: var(--space-8); }
}
.hero-text h1 {
  font-size: clamp(36px, 5vw, 64px);
  line-height: 1.04;
  margin-bottom: var(--space-4);
}
.hero-text .lede {
  max-width: 540px;
  font-size: var(--text-md);
  color: var(--color-ink-subdued);
  margin-bottom: var(--space-5);
}
.hero-text .actions {
  display: flex;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin-top: var(--space-4);
}

.hero-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  background: var(--color-surface);
  color: var(--color-ink-body);
  font-size: var(--text-sm);
  font-weight: 500;
  padding: 5px 14px 5px 8px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--color-border);
  margin-bottom: var(--space-4);
  box-shadow: var(--shadow-card);
}
.hero-pill-dot {
  width: 12px; height: 12px;
  border-radius: 50%;
  background: var(--color-success-soft);
  display: grid; place-items: center;
}
.hero-pill-dot::after {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--color-success);
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.55; transform: scale(0.9); }
}

.hero-stats {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-4);
  margin-top: var(--space-6);
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border);
  max-width: 540px;
}
@media (min-width: 600px) {
  .hero-stats { grid-template-columns: repeat(4, 1fr); }
}
.hero-stat .value {
  font-size: var(--text-lg);
  font-weight: 700;
  color: var(--color-primary);
  letter-spacing: -0.01em;
  margin-bottom: 4px;
  line-height: 1;
}
.hero-stat .label {
  font-size: var(--text-xs);
  color: var(--color-ink-subdued);
  line-height: 1.4;
}

/* --- Dashboard preview (hero) --------------------------------------- */

.dashboard-preview {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  padding: var(--space-5);
  box-shadow: var(--shadow-card-strong);
  position: relative;
  overflow: hidden;
}
.dashboard-preview > * { position: relative; }

.preview-titlebar {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding-bottom: var(--space-3);
  margin-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-border-soft);
}
.preview-titlebar .traffic-light {
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--color-border);
}
.preview-bar-url {
  margin-left: var(--space-3);
  font-size: 11px;
  color: var(--color-ink-subdued);
  font-family: var(--font-mono);
}
.preview-live {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  font-weight: 600;
  color: var(--color-success);
  background: var(--color-success-soft);
  padding: 3px 9px;
  border-radius: var(--radius-pill);
}
.preview-live i {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--color-success);
}

/* KPI strip — the heart of the dashboard mock */
.preview-kpis {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-2);
  margin-bottom: var(--space-4);
}
.preview-kpi {
  background: var(--color-bg-soft);
  border: 1px solid var(--color-border-soft);
  border-radius: var(--radius-md);
  padding: var(--space-3);
}
.preview-kpi-label {
  font-size: 10px;
  color: var(--color-ink-subdued);
  font-weight: 600;
  margin-bottom: 6px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}
.preview-kpi-value {
  font-size: var(--text-md);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1;
  color: var(--color-ink);
}
.preview-kpi-value .muted {
  color: var(--color-ink-subdued);
  font-size: var(--text-sm);
  font-weight: 500;
}
.preview-kpi-delta {
  font-size: 10px;
  margin-top: 6px;
  color: var(--color-ink-subdued);
}
.preview-kpi-delta.up { color: var(--color-success); }
.preview-kpi-delta.danger { color: var(--color-danger); }
.preview-spark {
  margin-top: 6px;
  height: 16px;
  width: 100%;
}

/* Site rows under the KPI strip */
.preview-sites {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-bottom: var(--space-4);
}
.preview-site {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 9px 12px;
  border: 1px solid var(--color-border-soft);
  background: var(--color-bg-soft);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
}
.preview-site-left {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}
.preview-site-name { font-weight: 600; color: var(--color-ink); }
.preview-site-meta { font-size: 11px; color: var(--color-ink-subdued); margin-left: var(--space-2); }
.dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  display: inline-block;
}
.dot.ok    { background: var(--color-success); box-shadow: 0 0 0 3px var(--color-success-soft); }
.dot.warn  { background: var(--color-warning); box-shadow: 0 0 0 3px var(--color-warning-soft); }
.dot.bad   { background: var(--color-danger);  box-shadow: 0 0 0 3px var(--color-danger-soft); }
.fridge-dots { display: flex; gap: 4px; }
.fridge-dots .dot { width: 6px; height: 6px; box-shadow: none; }

/* The big trend chart at the bottom of the mock */
.preview-chart-wrap {
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border-soft);
}
.preview-chart-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  font-size: var(--text-xs);
  color: var(--color-ink-subdued);
  margin-bottom: var(--space-2);
}
.preview-chart-header strong {
  color: var(--color-ink);
  font-weight: 600;
}
.preview-chart { width: 100%; height: auto; }
.preview-axis {
  display: flex;
  justify-content: space-between;
  color: var(--color-ink-subdued);
  font-size: 11px;
  margin-top: 6px;
  padding: 0 2px;
  font-family: var(--font-mono);
}

/* --- Section title -------------------------------------------------- */

.section-title {
  text-align: center;
  margin-bottom: var(--space-7);
}
.section-title.left { text-align: left; }
.section-title .eyebrow-small {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--color-primary);
  font-weight: 600;
  margin-bottom: var(--space-3);
  font-family: var(--font-mono);
}
.section-title .eyebrow-small::before {
  content: '';
  width: 14px;
  height: 1px;
  background: var(--color-primary);
}
.section-title h2 {
  margin-bottom: var(--space-2);
  font-size: clamp(28px, 4.2vw, 44px);
  letter-spacing: -0.02em;
  line-height: 1.1;
}
.section-title p {
  color: var(--color-ink-subdued);
  max-width: 640px;
  margin: 0 auto;
  font-size: var(--text-md);
}

/* --- Features strip (existing 4-icon row) -------------------------- */

.features-strip {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  padding: var(--space-5);
}
@media (min-width: 720px)  { .features-strip { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .features-strip { grid-template-columns: repeat(4, 1fr); gap: var(--space-5); } }
.feature {
  display: flex;
  gap: var(--space-3);
  align-items: flex-start;
}
.feature-icon {
  width: 42px; height: 42px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-md);
  flex-shrink: 0;
  color: var(--color-primary);
  background: var(--color-primary-soft);
  border: 1px solid color-mix(in srgb, var(--color-primary) 28%, transparent);
}
.feature-icon svg { width: 22px; height: 22px; }
.feature h4 { margin-bottom: var(--space-1); font-size: var(--text-base); font-weight: 600; color: var(--color-ink); }
.feature p  { color: var(--color-ink-subdued); margin: 0; font-size: var(--text-sm); }

/* --- "What you get" (6-tile detail grid) --------------------------- */

.what-you-get-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
@media (min-width: 700px) { .what-you-get-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .what-you-get-grid { grid-template-columns: repeat(3, 1fr); } }
.what-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  transition: border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease;
}
.what-card:hover {
  border-color: var(--color-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
}
.what-icon {
  width: 44px; height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-md);
  color: var(--color-primary);
  background: var(--color-primary-soft);
  margin-bottom: var(--space-4);
}
.what-icon svg { width: 22px; height: 22px; }
.what-card h3 {
  font-size: var(--text-md);
  font-weight: 600;
  margin-bottom: var(--space-2);
  color: var(--color-ink);
  letter-spacing: -0.01em;
}
.what-card p {
  color: var(--color-ink-subdued);
  margin: 0;
  font-size: var(--text-sm);
  line-height: 1.55;
}

/* --- Industries ---------------------------------------------------- */

.industries-strip {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-4);
}
@media (min-width: 720px)  { .industries-strip { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1000px) { .industries-strip { grid-template-columns: repeat(5, 1fr); } }
.industry {
  text-align: center;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-5) var(--space-3);
  transition: border-color 160ms ease, transform 160ms ease;
}
.industry:hover { border-color: var(--color-primary); transform: translateY(-2px); }
.industry-icon {
  width: 44px; height: 44px;
  margin: 0 auto var(--space-3);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-md);
  color: var(--color-primary);
  background: var(--color-primary-soft);
}
.industry-icon svg { width: 24px; height: 24px; }
.industry h4 { font-size: var(--text-sm); margin-bottom: var(--space-1); color: var(--color-ink); }
.industry p  { font-size: var(--text-xs); color: var(--color-ink-subdued); margin: 0; }

/* --- Card grid ------------------------------------------------------ */

.grid { display: grid; gap: var(--space-5); grid-template-columns: 1fr; }
@media (min-width: 720px) {
  .grid-3 { grid-template-columns: repeat(3, 1fr); }
  .grid-2 { grid-template-columns: repeat(2, 1fr); }
  .grid-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1040px) {
  .grid-4 { grid-template-columns: repeat(4, 1fr); }
}
.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  box-shadow: var(--shadow-card);
  transition: border-color 160ms ease;
}
.card:hover { border-color: var(--color-border-strong); }
.card h3 { margin-bottom: var(--space-2); }
.card p  { color: var(--color-ink-subdued); margin-bottom: 0; }

/* --- Pricing tiers -------------------------------------------------- */

.tier-grid { align-items: stretch; }
/* Second pricing row (add-ons / hardware / install) — was an inline
   style="margin-top:…"; moved to a class so the page needs no inline
   styles and the strict `style-src 'self'` CSP holds. */
.tier-grid-addons { margin-top: var(--space-6); }
.tier {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  position: relative;
}
.tier .price {
  font-size: var(--text-2xl);
  font-weight: 700;
  color: var(--color-ink);
  margin: var(--space-2) 0;
  line-height: 1;
}
.tier .price .unit {
  font-size: var(--text-base);
  font-weight: 500;
  color: var(--color-ink-subdued);
}
.tier .indicative {
  font-size: var(--text-xs);
  color: var(--color-primary);
  background: var(--color-primary-soft);
  display: inline-block;
  padding: var(--space-1) var(--space-2);
  border-radius: var(--radius-sm);
  margin-bottom: var(--space-3);
  border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
}
.tier ul {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.tier li {
  color: var(--color-ink-body);
  padding-left: var(--space-5);
  position: relative;
}
.tier li::before {
  content: '';
  position: absolute;
  left: 0; top: 0.6em;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--color-primary);
}
.tier.featured {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--color-primary) 30%, transparent),
              var(--shadow-card-strong);
}
.tier.featured::after {
  content: 'Most popular';
  position: absolute;
  top: -12px;
  right: var(--space-4);
  background: var(--color-primary);
  color: var(--color-primary-on);
  font-size: var(--text-xs);
  font-weight: 700;
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  letter-spacing: 0.04em;
}
.tier .btn { margin-top: auto; }

.pricing-note {
  text-align: center;
  color: var(--color-ink-subdued);
  font-size: var(--text-sm);
  margin: var(--space-6) auto 0;
  max-width: 640px;
}

/* Single café-plan card — centred and width-capped so one card doesn't
   stretch across the full tier-grid track. */
.pricing-single {
  max-width: 460px;
  margin: 0 auto;
}

/* Sensors & install footnote — one tidy aside instead of separate
   hardware/install tier cards. */
.pricing-addons {
  text-align: center;
  color: var(--color-ink-subdued);
  font-size: var(--text-sm);
  line-height: 1.7;
  margin: var(--space-5) auto 0;
  max-width: 720px;
  padding: var(--space-4) var(--space-5);
  background: var(--color-primary-soft);
  border: 1px solid color-mix(in srgb, var(--color-primary) 22%, transparent);
  border-radius: var(--radius-md);
}
.pricing-addons strong { color: var(--color-ink); }

/* "3 months free" trial banner — sits above the tier grid. */
.trial-banner {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  flex-wrap: wrap;
  justify-content: center;
  text-align: left;
  max-width: 760px;
  margin: 0 auto var(--space-6);
  padding: var(--space-4) var(--space-5);
  background: var(--color-primary-soft);
  border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
  border-radius: var(--radius-lg);
  color: var(--color-ink-body);
  font-size: var(--text-sm);
  line-height: 1.6;
}
.trial-banner span:last-child { flex: 1 1 320px; }
.trial-badge {
  flex-shrink: 0;
  background: var(--color-primary);
  color: var(--color-primary-on);
  font-weight: 700;
  font-size: var(--text-xs);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-pill);
  white-space: nowrap;
}

/* "What does this look like in practice" worked example — sits between
   the add-on tier row and the small-print note. Soft card so the worked
   example reads as a friendly aside, not another tier. */
.pricing-example {
  margin: var(--space-6) auto 0;
  max-width: 760px;
  padding: var(--space-4) var(--space-5);
  background: var(--color-primary-soft);
  border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
  border-radius: var(--radius-md);
}
.pricing-example h4 {
  margin: 0 0 var(--space-2);
  color: var(--color-primary);
  font-size: var(--text-base);
  font-weight: 700;
  letter-spacing: 0.01em;
}
.pricing-example p {
  margin: 0;
  color: var(--color-ink-body);
  font-size: var(--text-sm);
  line-height: 1.6;
}

/* --- FAQ ------------------------------------------------------------ */
/*
 * Built on native <details>/<summary> so expand/collapse works with
 * zero JS — every browser flips the `open` attribute on click and on
 * keyboard activation. The custom `+` icon rotates via the
 * `details[open]` selector. */

.faq-list {
  max-width: 760px;
  margin: 0 auto;
}
.faq-item {
  border-bottom: 1px solid var(--color-border-soft);
}
.faq-item:first-child { border-top: 1px solid var(--color-border-soft); }

.faq-question {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  text-align: left;
  padding: var(--space-4) 0;
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--color-ink);
  cursor: pointer;
  gap: var(--space-3);
  letter-spacing: -0.01em;
  list-style: none;
  user-select: none;
}
/* Hide the default browser disclosure marker — Chrome / Safari draw
 * one with the standard <details>, we use our own +/× icon. */
.faq-question::-webkit-details-marker { display: none; }
.faq-question::marker { content: ''; display: none; }

.faq-question:hover { color: var(--color-primary); }
.faq-question:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 4px;
  border-radius: var(--radius-sm);
}

.faq-icon {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  color: var(--color-ink-subdued);
  transition: transform 200ms ease, color 200ms ease;
}
.faq-item[open] .faq-icon { transform: rotate(45deg); color: var(--color-primary); }

.faq-answer {
  color: var(--color-ink-body);
  font-size: var(--text-base);
  line-height: 1.6;
  padding: 0 0 var(--space-4);
}

/* --- Final CTA ----------------------------------------------------- */

.final-cta {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  padding: var(--space-7) var(--space-5);
  text-align: center;
  box-shadow: var(--shadow-card);
  position: relative;
  overflow: hidden;
}
.final-cta::before {
  content: '';
  position: absolute;
  top: -200px; left: 50%;
  width: 600px; height: 400px;
  transform: translateX(-50%);
  background: var(--glow-hero);
  pointer-events: none;
}
.final-cta > * { position: relative; }
.final-cta h2 {
  font-size: clamp(28px, 4.2vw, 44px);
  margin-bottom: var(--space-4);
  letter-spacing: -0.02em;
}
.final-cta p {
  color: var(--color-ink-subdued);
  font-size: var(--text-md);
  max-width: 540px;
  margin: 0 auto var(--space-5);
}
.final-ctas {
  display: flex;
  gap: var(--space-3);
  justify-content: center;
  flex-wrap: wrap;
}

/* --- Contact ------------------------------------------------------- */

.contact-box {
  text-align: center;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-7) var(--space-5);
  margin-bottom: var(--space-6);
}
.contact-box p { color: var(--color-ink-subdued); margin-top: var(--space-3); }
.contact-actions {
  display: flex;
  gap: var(--space-3);
  flex-wrap: wrap;
  justify-content: center;
  margin: 0;
}
.contact-email-plain {
  font-family: var(--font-mono);
  background: var(--color-primary-soft);
  color: var(--color-primary);
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-md);
  display: inline-block;
  user-select: all;
  font-weight: 500;
  border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
}

/* --- Footer -------------------------------------------------------- */

.site-footer {
  border-top: 1px solid var(--color-border-soft);
  padding: var(--space-6) 0;
  color: var(--color-ink-subdued);
  font-size: var(--text-sm);
  background: var(--color-bg);
}
.site-footer .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--space-3);
}
.site-footer a { color: var(--color-ink-subdued); }
.site-footer a:hover { color: var(--color-primary); }

/* --- Responsive ---------------------------------------------------- */

@media (max-width: 820px) {
  .nav { gap: var(--space-2); font-size: var(--text-sm); }
  .nav a:not(.btn):not(.theme-toggle) { display: none; }
  .nav .btn, .nav .theme-toggle { display: inline-flex; }
}
@media (max-width: 600px) {
  .preview-kpis { grid-template-columns: repeat(2, 1fr); }
  .brand-mark { height: 32px; }
}
@media (max-width: 480px) {
  .hero { padding: var(--space-6) 0 var(--space-7); }
}

/* --- "See it in action" video carousel ------------------------------ */
/* Ported from the design system's marketing.css video showcase, extended
   into a carousel (auto-advancing player + prev/next + dots) per the
   product brief. The films themselves live under /videos/. */

#see-it { background: var(--color-bg-soft); }

.video-player {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: center;
  margin-bottom: var(--space-5);
}
@media (min-width: 900px) {
  .video-player { grid-template-columns: 1.55fr 1fr; gap: var(--space-7); }
}

.video-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: var(--radius-xl);
  overflow: hidden;
  background: #0b1220;
  border: 1px solid var(--color-border);
  box-shadow: var(--shadow-card-strong, 0 16px 48px -12px rgba(9, 9, 11, 0.1));
}
.video-iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
  background: #0b1220;
}

/* Prev / next arrows, overlaid on the frame so a visitor can scroll the
   carousel left and right at any time. */
.video-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  width: 44px;
  height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border-radius: var(--radius-pill);
  border: 1px solid rgba(255, 255, 255, 0.22);
  background: rgba(11, 18, 32, 0.55);
  color: #fff;
  cursor: pointer;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  transition: background 140ms ease, border-color 140ms ease, transform 140ms ease;
}
.video-arrow:hover {
  background: rgba(11, 18, 32, 0.78);
  border-color: rgba(255, 255, 255, 0.45);
}
.video-arrow:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}
.video-arrow svg { width: 22px; height: 22px; }
.video-arrow-prev { left: var(--space-3); }
.video-arrow-next { right: var(--space-3); }
.video-arrow-prev:active { transform: translateY(-50%) translateX(-1px); }
.video-arrow-next:active { transform: translateY(-50%) translateX(1px); }

.video-now {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.video-now-label {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--color-primary);
}
.video-now-label::before {
  content: '';
  width: 14px;
  height: 1px;
  background: var(--color-primary);
}
.video-now-title {
  font-size: var(--text-xl);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.1;
  color: var(--color-ink);
}
.video-now-blurb {
  font-size: var(--text-md);
  color: var(--color-ink-subdued);
  line-height: 1.55;
  margin: 0;
  max-width: 42ch;
}

/* Dot indicators */
.video-dots {
  display: flex;
  gap: var(--space-2);
  margin-top: var(--space-2);
}
.video-dot {
  width: 10px;
  height: 10px;
  padding: 0;
  border-radius: var(--radius-pill);
  border: 1px solid var(--color-border-strong);
  background: transparent;
  cursor: pointer;
  transition: background 140ms ease, border-color 140ms ease, transform 140ms ease;
}
.video-dot:hover { border-color: var(--color-primary); }
.video-dot.is-active {
  background: var(--color-primary);
  border-color: var(--color-primary);
  transform: scale(1.15);
}
.video-dot:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Feature cards (also act as carousel controls) */
.video-tabs {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
}
@media (min-width: 680px) {
  .video-tabs { grid-template-columns: repeat(3, 1fr); }
}
.video-tab {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  text-align: left;
  padding: var(--space-4);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  background: var(--color-bg-alt);
  cursor: pointer;
  transition: transform 140ms ease, border-color 140ms ease, box-shadow 140ms ease;
}
.video-tab:hover {
  transform: translateY(-2px);
  border-color: var(--color-border-strong);
}
.video-tab:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}
.video-tab.is-active {
  border-color: var(--color-primary);
  background: var(--color-surface);
  box-shadow: 0 0 0 1px var(--color-primary), var(--shadow-card, 0 4px 12px -2px rgba(9, 9, 11, 0.06));
}
.video-tab-icon {
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-md);
  background: var(--color-primary-soft);
  color: var(--color-primary);
}
.video-tab-icon svg { width: 22px; height: 22px; }
.video-tab-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.video-tab-name {
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--color-ink);
  letter-spacing: -0.01em;
}
.video-tab-sub {
  font-size: var(--text-sm);
  color: var(--color-ink-subdued);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Phones: the three feature cards stacked BELOW the player, so choosing a
   film left your thumb at the bottom of the section while it started
   playing off-screen above — and nothing near the top said which film was
   on. Reflow the carousel so the "Now playing" title leads, the cards
   shrink to three compact pills directly above the player (tap one and the
   film is right beneath it — no scrolling back), and the blurb tucks under
   the film. `display: contents` lifts the wrapper boxes so flex `order`
   can re-sequence the pieces without touching the markup or carousel.js —
   the pills keep the same .is-active highlight as the desktop cards. */
@media (max-width: 679px) {
  .video-carousel { display: flex; flex-direction: column; }
  .video-player,
  .video-now { display: contents; }

  .video-now-label { order: 1; margin-bottom: var(--space-1); }
  .video-now-title { order: 2; margin-bottom: var(--space-3); font-size: var(--text-lg); }
  .video-tabs      { order: 3; margin-bottom: var(--space-3); }
  .video-frame     { order: 4; }
  .video-now-blurb { order: 5; margin-top: var(--space-3); font-size: var(--text-sm); }

  /* The pills ARE the selector at this size — dots would duplicate them,
     and the prev/next arrows overlaid a big chunk of the (much smaller)
     film. Auto-advance still cycles the films; the pills do the jumping. */
  .video-dots,
  .video-arrow { display: none; }

  .video-tabs {
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-2);
  }
  .video-tab {
    justify-content: center;
    min-height: 44px; /* comfortable thumb target */
    padding: var(--space-2);
    border-radius: var(--radius-md);
  }
  /* Icon + subtitle don't earn their space in a pill; the active film's
     full title is already on show at the top of the section. */
  .video-tab-icon,
  .video-tab-sub { display: none; }
  .video-tab-text { align-items: center; }
  .video-tab-name {
    font-size: var(--text-sm);
    text-align: center;
    line-height: 1.2;
  }
}

/* ==================== HOW IT WORKS (sensor → cloud → phone) ============
   Three steps joined by arrows. Desktop: a single row reading left to
   right. Under 820px the flow stacks and the arrows rotate to point
   down, so the story still reads top-to-bottom on a phone. */
.hiw-flow {
  display: flex;
  align-items: stretch;
  gap: 16px;
  margin-top: 8px;
}

.hiw-step {
  flex: 1;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 14px;
  box-shadow: var(--shadow-card);
  padding: 26px 22px;
  text-align: center;
}

.hiw-step h4 {
  margin: 14px 0 8px;
  font-size: var(--text-base);
  color: var(--color-ink);
  letter-spacing: -0.01em;
}

.hiw-step p {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-ink-body);
  line-height: 1.55;
}

.hiw-icon {
  width: 52px;
  height: 52px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 14px;
  background: var(--color-primary-soft);
  color: var(--color-primary);
}

.hiw-icon svg {
  width: 30px;
  height: 30px;
}

.hiw-arrow {
  align-self: center;
  flex-shrink: 0;
  width: 44px;
  color: var(--color-ink-muted);
}

.hiw-arrow svg {
  width: 100%;
  height: auto;
  display: block;
}

@media (max-width: 820px) {
  .hiw-flow {
    flex-direction: column;
    align-items: center;
  }
  .hiw-step {
    width: 100%;
    max-width: 460px;
  }
  .hiw-arrow {
    width: 30px;
    transform: rotate(90deg);
  }
}
