@import url("https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,900&family=Outfit:wght@400;500;600;700;800;900&display=swap");

@layer reset, base, components, modules, utilities;

: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: "Outfit", "Avenir Next", "Segoe UI", sans-serif;
  --font-serif: "Fraunces", "Iowan Old Style", "Times New Roman", serif;
  --font-mono: "JetBrains Mono", "SFMono-Regular", 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;
  }

  /* Borders */
  --border: 1px solid var(--color-ink-lighter);

  /* Shadows */
  --shadow: 0 0 0 1px oklch(var(--lch-black) / 35%),
            0 0.6em 1.2em -0.6em oklch(var(--lch-black) / 70%),
            0 0 24px oklch(var(--lch-curious-blue-500) / 0.12);

  /* Components */
  --btn-size: 2.65em;
  --footer-height: 2.65rem;
  --tray-size: clamp(12rem, 25dvw, 24rem);
  --panel-bg: linear-gradient(
    160deg,
    color-mix(in oklch, var(--color-canvas) 86%, oklch(var(--lch-curious-blue-900)) 14%),
    color-mix(in oklch, var(--color-canvas) 90%, oklch(var(--lch-sun-900)) 10%)
  );
  --panel-border-color: color-mix(in oklch, var(--lch-curious-blue-500) 35%, transparent);
  --input-background: color-mix(in oklch, var(--color-canvas) 70%, oklch(var(--lch-curious-blue-900)) 30%);
  --input-border-color: color-mix(in oklch, var(--lch-curious-blue-500) 35%, var(--color-canvas));
  --input-color: var(--color-ink);

  /* Focus rings for keyboard navigation */
  --focus-ring-color: var(--color-link);
  --focus-ring-offset: 1px;
  --focus-ring-size: 2px;
  --focus-ring: var(--focus-ring-size) solid var(--focus-ring-color);

  /* Dialogs */
  --dialog-duration: 150ms;

  /* 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);

  @media (max-width: 799px) {
    --tray-size: var(--footer-height);
  }

  /* Layout */
  --main-padding: clamp(var(--inline-space), 3vw, calc(var(--inline-space) * 3));
  --main-width: 1400px;
  --app-bg: radial-gradient(1200px 800px at 5% -15%, oklch(var(--lch-curious-blue-500) / 0.35), transparent 60%),
    radial-gradient(900px 700px at 95% -20%, oklch(var(--lch-sun-500) / 0.35), transparent 60%),
    radial-gradient(800px 600px at 20% 120%, oklch(var(--lch-pastel-green-500) / 0.3), transparent 65%),
    oklch(var(--lch-canvas));

  /* Z-index */
  --z-events-column-header: 1;
  --z-events-day-header: 3;
  --z-popup: 10;
  --z-nav: 30;
  --z-flash: 40;
  --z-tooltip: 50;
  --z-bar: 60;
  --z-tray: 61;

  /* OKLCH colors: Fixed */
  --lch-black: 0% 0 0;
  --lch-white: 100% 0 0;

  /* Palette: Sun (primary accent) */
  --lch-sun-50: 98.7% 0.011 76.6;
  --lch-sun-100: 97.6% 0.02 81.8;
  --lch-sun-200: 93.9% 0.051 80.5;
  --lch-sun-300: 90.5% 0.081 81.7;
  --lch-sun-400: 83.8% 0.132 78.8;
  --lch-sun-500: 78% 0.162 72.8;
  --lch-sun-600: 72.2% 0.15 73;
  --lch-sun-700: 53.6% 0.109 73.4;
  --lch-sun-800: 43.9% 0.088 75.1;
  --lch-sun-900: 33.5% 0.065 74.9;

  /* Palette: Curious Blue (support) */
  --lch-curious-blue-50: 98.2% 0.008 241.7;
  --lch-curious-blue-100: 96.6% 0.016 233;
  --lch-curious-blue-200: 91.3% 0.039 237.6;
  --lch-curious-blue-300: 86.4% 0.063 237.6;
  --lch-curious-blue-400: 76.7% 0.107 238.6;
  --lch-curious-blue-500: 67.8% 0.146 243.1;
  --lch-curious-blue-600: 62.8% 0.135 243.1;
  --lch-curious-blue-700: 46.9% 0.097 242.3;
  --lch-curious-blue-800: 38.5% 0.077 241.9;
  --lch-curious-blue-900: 29.6% 0.056 240.9;

  /* Palette: Pastel Green (positive) */
  --lch-pastel-green-50: 98.8% 0.01 145.5;
  --lch-pastel-green-100: 97.6% 0.021 140.9;
  --lch-pastel-green-200: 93.9% 0.05 141.6;
  --lch-pastel-green-300: 90.3% 0.08 141.6;
  --lch-pastel-green-400: 83.7% 0.139 141;
  --lch-pastel-green-500: 77.4% 0.19 141.1;
  --lch-pastel-green-600: 71.6% 0.175 141.1;
  --lch-pastel-green-700: 53.3% 0.126 141;
  --lch-pastel-green-800: 43.7% 0.101 141.2;
  --lch-pastel-green-900: 33.3% 0.072 141;

  /* Palette: Inch Worm (bright lime) */
  --lch-inch-worm-50: 99.3% 0.013 115.8;
  --lch-inch-worm-100: 98.5% 0.028 115.7;
  --lch-inch-worm-200: 96.4% 0.068 117.4;
  --lch-inch-worm-300: 94.4% 0.108 118.4;
  --lch-inch-worm-400: 90.8% 0.174 120.1;
  --lch-inch-worm-500: 87.7% 0.21 122.7;
  --lch-inch-worm-600: 81.1% 0.194 122.8;
  --lch-inch-worm-700: 60.1% 0.142 122.4;
  --lch-inch-worm-800: 49.1% 0.114 122;
  --lch-inch-worm-900: 37.3% 0.085 122.1;

  /* OKLCH colors: Light mode */
  --lch-canvas: var(--lch-white);
  --lch-ink-inverted: var(--lch-white);

  --lch-ink-darkest: 26% 0.05 264;
  --lch-ink-darker: 40% 0.026 262;
  --lch-ink-dark: 56% 0.014 260;
  --lch-ink-medium: 66% 0.008 258;
  --lch-ink-light: 84% 0.005 256;
  --lch-ink-lighter: 92% 0.003 254;
  --lch-ink-lightest: 96% 0.002 252;

  --lch-uncolor-darkest: 26% 0.018 40;
  --lch-uncolor-darker: 40.04% 0.0376 50.06;
  --lch-uncolor-dark: 57.09% 0.0676 60.5;
  --lch-uncolor-medium: 66% 0.0944 71.46;
  --lch-uncolor-light: 83.97% 0.0457 80.84;
  --lch-uncolor-lighter: 92% 0.014 90;
  --lch-uncolor-lightest: 96% 0.012 100;

  --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;

  /* Palette aliases to legacy tokens */
  --lch-yellow-darkest: var(--lch-sun-700);
  --lch-yellow-darker: var(--lch-sun-600);
  --lch-yellow-dark: var(--lch-sun-500);
  --lch-yellow-medium: var(--lch-sun-400);
  --lch-yellow-light: var(--lch-sun-300);
  --lch-yellow-lighter: var(--lch-sun-200);
  --lch-yellow-lightest: var(--lch-sun-100);

  --lch-orange-darkest: var(--lch-sun-900);
  --lch-orange-darker: var(--lch-sun-800);
  --lch-orange-dark: var(--lch-sun-700);
  --lch-orange-medium: var(--lch-sun-500);
  --lch-orange-light: var(--lch-sun-300);
  --lch-orange-lighter: var(--lch-sun-200);
  --lch-orange-lightest: var(--lch-sun-50);

  --lch-blue-darkest: var(--lch-curious-blue-900);
  --lch-blue-darker: var(--lch-curious-blue-800);
  --lch-blue-dark: var(--lch-curious-blue-700);
  --lch-blue-medium: var(--lch-curious-blue-500);
  --lch-blue-light: var(--lch-curious-blue-300);
  --lch-blue-lighter: var(--lch-curious-blue-200);
  --lch-blue-lightest: var(--lch-curious-blue-50);

  --lch-green-darkest: var(--lch-pastel-green-900);
  --lch-green-darker: var(--lch-pastel-green-800);
  --lch-green-dark: var(--lch-pastel-green-700);
  --lch-green-medium: var(--lch-pastel-green-500);
  --lch-green-light: var(--lch-pastel-green-300);
  --lch-green-lighter: var(--lch-pastel-green-200);
  --lch-green-lightest: var(--lch-pastel-green-50);

  --lch-lime-darkest: var(--lch-inch-worm-900);
  --lch-lime-darker: var(--lch-inch-worm-800);
  --lch-lime-dark: var(--lch-inch-worm-700);
  --lch-lime-medium: var(--lch-inch-worm-500);
  --lch-lime-light: var(--lch-inch-worm-300);
  --lch-lime-lighter: var(--lch-inch-worm-200);
  --lch-lime-lightest: var(--lch-inch-worm-50);

  --lch-violet-darkest: var(--lch-curious-blue-900);
  --lch-violet-darker: var(--lch-curious-blue-800);
  --lch-violet-dark: var(--lch-curious-blue-700);
  --lch-violet-medium: var(--lch-curious-blue-500);
  --lch-violet-light: var(--lch-curious-blue-300);
  --lch-violet-lighter: var(--lch-curious-blue-200);
  --lch-violet-lightest: var(--lch-curious-blue-50);

  --lch-purple-darkest: var(--lch-sun-900);
  --lch-purple-darker: var(--lch-sun-800);
  --lch-purple-dark: var(--lch-sun-700);
  --lch-purple-medium: var(--lch-sun-500);
  --lch-purple-light: var(--lch-sun-300);
  --lch-purple-lighter: var(--lch-sun-200);
  --lch-purple-lightest: var(--lch-sun-50);

  --lch-pink-darkest: var(--lch-pastel-green-900);
  --lch-pink-darker: var(--lch-pastel-green-800);
  --lch-pink-dark: var(--lch-pastel-green-700);
  --lch-pink-medium: var(--lch-pastel-green-500);
  --lch-pink-light: var(--lch-pastel-green-300);
  --lch-pink-lighter: var(--lch-pastel-green-200);
  --lch-pink-lightest: var(--lch-pastel-green-50);

  /* Colors: Named */
  --color-black: oklch(var(--lch-black));
  --color-white: oklch(var(--lch-white));

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

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

  /* Colors: Abstractions */
  --color-canvas: oklch(var(--lch-canvas));
  --color-negative: oklch(var(--lch-red-medium));
  --color-positive: oklch(var(--lch-pastel-green-500));
  --color-link: oklch(var(--lch-curious-blue-500));
  --color-accent: oklch(var(--lch-sun-500));
  --color-accent-dark: oklch(var(--lch-sun-700));
  --color-accent-light: oklch(var(--lch-sun-300));
  --color-selected-light: oklch(var(--lch-curious-blue-50));
  --color-selected: oklch(var(--lch-curious-blue-200));
  --color-selected-dark: oklch(var(--lch-curious-blue-400));
  --color-highlight: oklch(var(--lch-inch-worm-400));
  --color-marker: oklch(var(--lch-sun-500));
  --color-alert: oklch(var(--lch-red-dark));
  --color-terminal-bg: color-mix(in oklch, var(--color-canvas) 88%, oklch(var(--lch-curious-blue-900)) 12%);
  --color-terminal-text: var(--color-ink);
  --color-terminal-text-light: oklch(var(--lch-green-light));
  --color-golden: oklch(var(--lch-sun-400));
  --color-considering: oklch(var(--lch-blue-medium));

  /* Colors: Cards - aligned to sun-forward palette */
  --color-card-default: oklch(var(--lch-sun-500));
  --color-card-complete: oklch(var(--lch-pastel-green-500));
  --color-card-1: oklch(var(--lch-curious-blue-500));
  --color-card-2: oklch(var(--lch-sun-500));
  --color-card-3: oklch(var(--lch-pastel-green-500));
  --color-card-4: oklch(var(--lch-inch-worm-500));
  --color-card-5: oklch(var(--lch-curious-blue-300));
  --color-card-6: oklch(var(--lch-pastel-green-700));
  --color-card-7: oklch(var(--lch-sun-700));
  --color-card-8: oklch(var(--lch-curious-blue-200));

  /* Colors: Highlighter */
  --highlight-1: oklch(var(--lch-orange-medium));
  --highlight-2: oklch(var(--lch-orange-dark));
  --highlight-3: oklch(var(--lch-blue-medium));
  --highlight-4: oklch(var(--lch-green-medium));
  --highlight-5: oklch(var(--lch-lime-medium));
  --highlight-6: oklch(var(--lch-blue-darker));
  --highlight-7: oklch(var(--lch-orange-darker));
  --highlight-8: oklch(var(--lch-green-darker));
  --highlight-9: oklch(var(--lch-blue-lightest));

  --highlight-bg-1: oklch(var(--lch-orange-lightest) / 0.35);
  --highlight-bg-2: oklch(var(--lch-orange-lighter) / 0.35);
  --highlight-bg-3: oklch(var(--lch-blue-lightest) / 0.35);
  --highlight-bg-4: oklch(var(--lch-green-lightest) / 0.35);
  --highlight-bg-5: oklch(var(--lch-lime-lightest) / 0.35);
  --highlight-bg-6: oklch(var(--lch-blue-lighter) / 0.3);
  --highlight-bg-7: oklch(var(--lch-orange-light) / 0.3);
  --highlight-bg-8: oklch(var(--lch-green-light) / 0.3);
  --highlight-bg-9: oklch(var(--lch-blue-light) / 0.25);

  /* Colors: Syntax highlighting */
  --color-code-token__att: oklch(var(--lch-blue-medium));
  --color-code-token__comment: oklch(var(--lch-ink-medium));
  --color-code-token__function: oklch(var(--lch-orange-dark));
  --color-code-token__operator: oklch(var(--lch-orange-darker));
  --color-code-token__property: oklch(var(--lch-orange-medium));
  --color-code-token__punctuation: oklch(var(--lch-ink-dark));
  --color-code-token__selector: oklch(var(--lch-green-dark));
  --color-code-token__variable: oklch(var(--lch-blue-dark));

  /* Colors: Generating gradient */
  --color-gradient-1: oklch(var(--lch-orange-lighter));
  --color-gradient-2: oklch(var(--lch-blue-lighter));
  --color-gradient-3: oklch(var(--lch-green-lighter));
  --color-gradient-4: var(--color-canvas);

  @media (prefers-color-scheme: dark), (prefers-color-scheme: light), (prefers-color-scheme: no-preference) {
    color-scheme: dark;
    --lch-canvas: 18% 0.03 250;
    --lch-ink-inverted: var(--lch-black);

    /* Glow effects for interactive elements */
    --glow-accent: 0 0 16px oklch(var(--lch-sun-500) / 0.45);
    --glow-positive: 0 0 16px oklch(var(--lch-pastel-green-500) / 0.4);
    --glow-negative: 0 0 16px oklch(var(--lch-red-medium) / 0.4);
    --glow-blue: 0 0 16px oklch(var(--lch-curious-blue-500) / 0.45);
    --focus-glow: 0 0 10px var(--focus-ring-color);

    --lch-ink-darkest: 96% 0.006 260;
    --lch-ink-darker: 88% 0.008 260;
    --lch-ink-dark: 76% 0.012 260;
    --lch-ink-medium: 64% 0.016 260;
    --lch-ink-light: 46% 0.02 260;
    --lch-ink-lighter: 34% 0.02 260;
    --lch-ink-lightest: 26% 0.022 260;

    --lch-uncolor-darkest: 96% 0.01 100;
    --lch-uncolor-darker: 86% 0.02 90;
    --lch-uncolor-dark: 74% 0.04 80;
    --lch-uncolor-medium: 62% 0.055 70;
    --lch-uncolor-light: 40% 0.039 60;
    --lch-uncolor-lighter: 30% 0.012 50;
    --lch-uncolor-lightest: 25% 0.003 40;

    --lch-red-darkest: 96% 0.03 46;
    --lch-red-darker: 86% 0.09 44;
    --lch-red-dark: 74% 0.14 42;
    --lch-red-medium: 62% 0.16 40;
    --lch-red-light: 40% 0.09 38;
    --lch-red-lighter: 30% 0.035 36;
    --lch-red-lightest: 25% 0.012 34;

    --color-terminal-text-light: oklch(var(--lch-green-light));
    --color-golden: oklch(var(--lch-sun-500));
    --color-highlight: oklch(var(--lch-inch-worm-300));

    --shadow: 0 0 0 1px oklch(var(--lch-black) / 0.5),
              0 0.6em 1.6em -0.8em oklch(var(--lch-black) / 0.7),
              0 0 28px oklch(var(--lch-sun-500) / 0.18);
  }
}
