@layer reset, base, components;

/*** Raw okclh values ***/
:root {
  --lch-ink: 2% 0 0;
  --lch-canvas: 99% 0 264;

  --lch-white: 100% 0 0;
  --lch-black: 0% 0 0;
  --lch-warm: 92.2% 0.005 34.3;

  --lch-gray-darkest: 27.4% 0.006 286.033;
  --lch-gray-darker: 44.2% 0.017 285.786;
  --lch-gray-dark: 55.2% 0.016 285.938;
  --lch-gray-medium: 70.5% 0.015 286.067;
  --lch-gray-light: 87.1% 0.006 286.286;
  --lch-gray-lighter: 92% 0.004 286.32;
  --lch-gray-lightest: 96.7% 0.001 286.375;

  --lch-red-darkest: 26% 0.105 34;
  --lch-red-darker: 40% 0.154 36;
  --lch-red-dark: 59% 0.19 38;
  --lch-red-medium: 66% 0.204 40;
  --lch-red-light: 84.08% 0.0837 41.96;
  --lch-red-lighter: 92% 0.03 44;
  --lch-red-lightest: 96% 0.013 46;

  --lch-yellow-darkest: 26% 0.0729 40;
  --lch-yellow-darker: 40% 0.12 50;
  --lch-yellow-dark: 58% 0.156 60;
  --lch-yellow-medium: 74% 0.184 70;
  --lch-yellow-light: 84% 0.12 80;
  --lch-yellow-lighter: 92% 0.076 90;
  --lch-yellow-lightest: 96% 0.034 100;

  --lch-green-darkest: 26% 0.071 149;
  --lch-green-darker: 40% 0.12 148;
  --lch-green-dark: 55% 0.162 147;
  --lch-green-medium: 66% 0.208 146;
  --lch-green-light: 83.92% 0.0772 145.06;
  --lch-green-lighter: 92% 0.044 144;
  --lch-green-lightest: 96% 0.022 143;

  --lch-blue-darkest: 26% 0.126 264;
  --lch-blue-darker: 40% 0.166 262;
  --lch-blue-dark: 57.02% 0.1895 260.46;
  --lch-blue-medium: 66% 0.196 257.82;
  --lch-blue-light: 84.04% 0.0719 255.29;
  --lch-blue-lighter: 92% 0.026 254;
  --lch-blue-lightest: 96% 0.016 252;

  /* Dark mode - explicit theme choice overrides system preference */
  &[data-theme="dark"] {
    --lch-ink: 99% 0 264;
    --lch-canvas: 2% 0 0;

    --lch-white: 0% 0 0;
    --lch-black: 100% 0 0;
    --lch-warm: 21% 0.006 285.885;

    --lch-gray-darkest: 96.7% 0.001 286.375;
    --lch-gray-darker: 92. 0%.004 286.32;
    --lch-gray-dark: 87.1% 0.006 286.286;
    --lch-gray-medium: 70.5% 0.015 286.067;
    --lch-gray-light: 55.2% 0.016 285.938;
    --lch-gray-lighter: 44.2% 0.017 285.786;
    --lch-gray-lightest: 27.4% 0.006 286.033;

    --lch-red-darkest: 95.85% 0.0218 46;
    --lch-red-darker: 86% 0.086 44;
    --lch-red-dark: 73.95% 0.139 42;
    --lch-red-medium: 62% 0.154 40;
    --lch-red-light: 40% 0.088 38;
    --lch-red-lighter: 30% 0.032 36;
    --lch-red-lightest: 25% 0.011 34;

    --lch-yellow-darkest: 96% 0.056 100;
    --lch-yellow-darker: 86% 0.103 90;
    --lch-yellow-dark: 74.06% 0.136 80;
    --lch-yellow-medium: 62.1% 0.146 70;
    --lch-yellow-light: 40% 0.0736 60;
    --lch-yellow-lighter: 30% 0.026 50;
    --lch-yellow-lightest: 25% 0.01 40;

    --lch-green-darkest: 96.12% 0.035 143;
    --lch-green-darker: 86% 0.082 144;
    --lch-green-dark: 73.99% 0.117 145;
    --lch-green-medium: 62% 0.1261 146;
    --lch-green-light: 40% 0.065 147;
    --lch-green-lighter: 30% 0.03 148;
    --lch-green-lightest: 25% 0.018 149;

    --lch-blue-darkest: 95.93% 0.0217 252;
    --lch-blue-darker: 86% 0.068 254;
    --lch-blue-dark: 74% 0.1293 256;
    --lch-blue-medium: 62% 0.159 258;
    --lch-blue-light: 40% 0.094 260;
    --lch-blue-lighter: 30% 0.0452 262;
    --lch-blue-lightest: 25% 0.0318 264;
  }

  /* Fallback to system preference when no explicit theme is set */
  @media (prefers-color-scheme: dark) {
    &:not([data-theme]) {
      --lch-ink: 99% 0 264;
      --lch-canvas: 14% 0 0;

      --lch-white: 0% 0 0;
      --lch-black: 100% 0 0;
      --lch-warm: 21% 0.006 285.885;

      --lch-gray-darkest: 96.7% 0.001 286.375;
      --lch-gray-darker: 92. 0%.004 286.32;
      --lch-gray-dark: 87.1% 0.006 286.286;
      --lch-gray-medium: 70.5% 0.015 286.067;
      --lch-gray-light: 55.2% 0.016 285.938;
      --lch-gray-lighter: 44.2% 0.017 285.786;
      --lch-gray-lightest: 27.4% 0.006 286.033;

      --lch-red-darkest: 95.85% 0.0218 46;
      --lch-red-darker: 86% 0.086 44;
      --lch-red-dark: 73.95% 0.139 42;
      --lch-red-medium: 62% 0.154 40;
      --lch-red-light: 40% 0.088 38;
      --lch-red-lighter: 30% 0.032 36;
      --lch-red-lightest: 25% 0.011 34;

      --lch-yellow-darkest: 96% 0.056 100;
      --lch-yellow-darker: 86% 0.103 90;
      --lch-yellow-dark: 74.06% 0.136 80;
      --lch-yellow-medium: 62.1% 0.146 70;
      --lch-yellow-light: 40% 0.0736 60;
      --lch-yellow-lighter: 30% 0.026 50;
      --lch-yellow-lightest: 25% 0.01 40;

      --lch-green-darkest: 96.12% 0.035 143;
      --lch-green-darker: 86% 0.082 144;
      --lch-green-dark: 73.99% 0.117 145;
      --lch-green-medium: 62% 0.1261 146;
      --lch-green-light: 40% 0.065 147;
      --lch-green-lighter: 30% 0.03 148;
      --lch-green-lightest: 25% 0.018 149;

      --lch-blue-darkest: 95.93% 0.0217 252;
      --lch-blue-darker: 86% 0.068 254;
      --lch-blue-dark: 74% 0.1293 256;
      --lch-blue-medium: 62% 0.159 258;
      --lch-blue-light: 40% 0.094 260;
      --lch-blue-lighter: 30% 0.0452 262;
      --lch-blue-lightest: 25% 0.0318 264;
    }
  }
}

/*** Named colors ***/
:root {
  /* Custom */
  --color-white: oklch(var(--lch-white));
  --color-black: oklch(var(--lch-black));

  --color-ink: oklch(var(--lch-ink));
  --color-canvas: oklch(var(--lch-canvas));

  --color-negative: oklch(var(--lch-red-dark));
  --color-positive: oklch(var(--lch-green-dark));
  --color-warm: oklch(var(--lch-warm));

  /* Base */
  --color-gray-darkest: oklch(var(--lch-gray-darkest));
  --color-gray-darker: oklch(var(--lch-gray-darker));
  --color-gray-dark: oklch(var(--lch-gray-dark));
  --color-gray-medium: oklch(var(--lch-gray-medium));
  --color-gray-light: oklch(var(--lch-gray-light));
  --color-gray-lighter: oklch(var(--lch-gray-lighter));
  --color-gray-lightest: oklch(var(--lch-gray-lightest));

  --color-red-darkest: oklch(var(--lch-red-darkest));
  --color-red-darker: oklch(var(--lch-red-darker));
  --color-red-dark: oklch(var(--lch-red-dark));
  --color-red-medium: oklch(var(--lch-red-medium));
  --color-red-light: oklch(var(--lch-red-light));
  --color-red-lighter: oklch(var(--lch-red-lighter));
  --color-red-lightest: oklch(var(--lch-red-lightest));

  --color-yellow-darkest: oklch(var(--lch-yellow-darkest));
  --color-yellow-darker: oklch(var(--lch-yellow-darker));
  --color-yellow-dark: oklch(var(--lch-yellow-dark));
  --color-yellow-medium: oklch(var(--lch-yellow-medium));
  --color-yellow-light: oklch(var(--lch-yellow-light));
  --color-yellow-lighter: oklch(var(--lch-yellow-lighter));
  --color-yellow-lightest: oklch(var(--lch-yellow-lightest));

  --color-green-darkest: oklch(var(--lch-green-darkest));
  --color-green-darker: oklch(var(--lch-green-darker));
  --color-green-dark: oklch(var(--lch-green-dark));
  --color-green-medium: oklch(var(--lch-green-medium));
  --color-green-light: oklch(var(--lch-green-light));
  --color-green-lighter: oklch(var(--lch-green-lighter));
  --color-green-lightest: oklch(var(--lch-green-lightest));

  --color-blue-darkest: oklch(var(--lch-blue-darkest));
  --color-blue-darker: oklch(var(--lch-blue-darker));
  --color-blue-dark: oklch(var(--lch-blue-dark));
  --color-blue-medium: oklch(var(--lch-blue-medium));
  --color-blue-light: oklch(var(--lch-blue-light));
  --color-blue-lighter: oklch(var(--lch-blue-lighter));
  --color-blue-lightest: oklch(var(--lch-blue-lightest));
}

/*** Globals ***/
:root {
  /* Spacing */
  --inline-space: 1ch;
  --inline-space-half: calc(var(--inline-space) / 2);
  --inline-space-double: calc(var(--inline-space) * 2);

  --block-space: 1rem;
  --block-space-half: calc(var(--block-space) / 2);
  --block-space-double: calc(var(--block-space) * 2);

  /* Text */
  --font-sans: system-ui, sans-serif;
  --font-serif: ui-serif, serif;
  --font-mono: ui-monospace, monospace;

  --text-xx-small: 0.55rem;
  --text-x-small: 0.75rem;
  --text-small: 0.85rem;
  --text-normal: 1rem;
  --text-medium: 1.1rem;
  --text-large: 1.5rem;
  --text-x-large: 1.8rem;
  --text-xx-large: 2.5rem;

  @media (max-width: 639px) {
    --text-xx-small: 0.65rem;
    --text-x-small: 0.85rem;
    --text-small: 0.95rem;
    --text-normal: 1.1rem;
    --text-medium: 1.2rem;
    --text-large: 1.5rem;
    --text-x-large: 1.8rem;
    --text-xx-large: 2.5rem;
  }

  /* Focus rings for keyboard navigation */
  --focus-ring-color: oklch(var(--lch-blue-dark) / 50%);
  --focus-ring-offset: 0px;
  --focus-ring-size: 3px;
  --focus-ring: var(--focus-ring-size) solid var(--focus-ring-color);

  /* Easing functions from https://easingwizard.com/ */
  --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-out-overshoot: cubic-bezier(0.25, 1.75, 0.5, 1);
  --ease-out-overshoot-subtle: cubic-bezier(0.25, 1.25, 0.5, 1);

  /* Layout */
  --main-padding: clamp(var(--inline-space), 3vw, calc(var(--inline-space) * 3));
  --main-width: 1400px;

  /* Borders */
  --border: 1px solid var(--color-gray-light);

  --border-radius: 0.5ch;
  --border-radius-medium: 0.8ch;
  --border-radius-large: 1.1ch;

  /* Shadows */
  --shadow: 0 0 0 1px oklch(var(--lch-black) / 5%),
            0 0.2em 0.2em oklch(var(--lch-black) / 5%),
            0 0.4em 0.4em oklch(var(--lch-black) / 5%),
            0 0.8em 0.8em oklch(var(--lch-black) / 5%);

    /* Dark mode - explicit theme choice overrides system preference */
  html[data-theme="dark"] {
    --shadow: 0 0 0 1px oklch(var(--lch-black) / 0.42),
              0 .2em 1.6em -0.8em oklch(var(--lch-black) / 0.6),
              0 .4em 2.4em -1em oklch(var(--lch-black) / 0.7),
              0 .4em .8em -1.2em oklch(var(--lch-black) / 0.8),
              0 .8em 1.2em -1.6em oklch(var(--lch-black) / 0.9),
              0 1.2em 1.6em -2em oklch(var(--lch-black) / 1);
  }

  /* Fallback to system preference when no explicit theme is set */
  @media (prefers-color-scheme: dark) {
    html:not([data-theme]) {
      --shadow: 0 0 0 1px oklch(var(--lch-black) / 0.42),
                0 .2em 1.6em -0.8em oklch(var(--lch-black) / 0.6),
                0 .4em 2.4em -1em oklch(var(--lch-black) / 0.7),
                0 .4em .8em -1.2em oklch(var(--lch-black) / 0.8),
                0 .8em 1.2em -1.6em oklch(var(--lch-black) / 0.9),
                0 1.2em 1.6em -2em oklch(var(--lch-black) / 1);
    }
  }
}