@layer vitre.reset, vitre.theme, vitre.light, vitre.dark, vitre.base;

@layer vitre.reset {
  html {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
  }
}

@layer vitre.theme {
  :root {
    color-scheme: light dark;
    --vitre-font-sans: "Segoe UI", -apple-system, BlinkMacSystemFont, "Ubuntu", "Cantarell", "Noto Sans", "Roboto", ui-sans-serif, system-ui, sans-serif;
    --vitre-font-weight: 400;
    --vitre-leading: 1.65;
    --vitre-measure: 72ch;
    --vitre-width-narrow: 72ch;
    --vitre-width-wide: 72rem;
    --vitre-space-3: 0.75rem;
    --vitre-space-4: 1rem;
    --vitre-step-0: clamp(1rem, 0.97rem + 0.18vw, 1.1rem);
    --vitre-space-6: 2rem;
    --vitre-page-glow: color-mix(in oklab, var(--vitre-primary), transparent 78%);
    --vitre-page-tint: color-mix(in oklab, var(--vitre-bg), var(--vitre-primary) 5%);
    --vitre-hue: 214;
    --vitre-primary: hsl(var(--vitre-hue) 88% 46%);
  }
}

@layer vitre.light {
  :root,
  html[data-theme="light"] {
    color-scheme: light;
    --vitre-bg: hsl(210 32% 98%);
    --vitre-text: hsl(222 38% 14%);
  }
}

@layer vitre.dark {
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
      color-scheme: dark;
      --vitre-bg: hsl(224 26% 8%);
      --vitre-text: hsl(210 35% 94%);
    }
  }

  html[data-theme="dark"] {
    color-scheme: dark;
    --vitre-bg: hsl(224 26% 8%);
    --vitre-text: hsl(210 35% 94%);
  }
}

@layer vitre.base {
  html {
    min-block-size: 100%;
    accent-color: var(--vitre-primary);
    background:
      radial-gradient(circle at top left, var(--vitre-page-glow), transparent 34rem),
      linear-gradient(135deg, var(--vitre-bg), var(--vitre-page-tint));
  }

  body {
    min-block-size: 100%;
    color: var(--vitre-text);
    font-family: var(--vitre-font-sans);
    font-size: var(--vitre-step-0);
    font-weight: var(--vitre-font-weight);
    line-height: var(--vitre-leading);
    text-rendering: optimizeLegibility;
  }

  body > :where(header, main, footer),
  body > :where(article, section, aside, nav) {
    inline-size: min(100% - 2rem, var(--vitre-measure));
    margin-inline: auto;
  }

  body > [data-width="narrow"] {
    inline-size: min(100% - 2rem, var(--vitre-width-narrow));
  }

  body > [data-width="wide"] {
    inline-size: min(100% - 2rem, var(--vitre-width-wide));
  }

  body > [data-width="wide-80"] {
    inline-size: min(100% - 2rem, 80vw);
  }

  body > [data-width="full"] {
    inline-size: min(100% - 2rem, 100%);
  }

  body > header {
    padding-block-start: var(--vitre-space-6);
  }

  body > :where(main, footer) {
    padding-block: var(--vitre-space-6);
  }

  body > nav:first-child {
    position: sticky;
    inset-block-start: 0;
    z-index: 10;
    box-sizing: border-box;
    inline-size: 100%;
    margin: 0;
    padding-block: var(--vitre-space-3);
    padding-inline: max(var(--vitre-space-4), calc((100% - var(--vitre-measure)) / 2 + var(--vitre-space-4)));
    background: color-mix(in oklab, var(--vitre-bg), transparent 8%);
    backdrop-filter: blur(var(--vitre-backdrop-blur, 18px));
  }

  body > nav:first-child[data-width="narrow"] {
    padding-inline: max(var(--vitre-space-4), calc((100% - var(--vitre-width-narrow)) / 2 + var(--vitre-space-4)));
  }

  body > nav:first-child[data-width="wide"] {
    padding-inline: max(var(--vitre-space-4), calc((100% - var(--vitre-width-wide)) / 2 + var(--vitre-space-4)));
  }

  body > nav:first-child[data-width="wide-80"] {
    padding-inline: max(var(--vitre-space-4), 10vw);
  }
}
