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

:root {
  /* Insets - The mobile apps may inject their own custom insets based on native elements on screen, like a floating navigation */
  --custom-safe-inset-top: var(
    --injected-safe-inset-top,
    env(safe-area-inset-top, 0px)
  );
  --custom-safe-inset-right: var(
    --injected-safe-inset-right,
    env(safe-area-inset-right, 0px)
  );
  --custom-safe-inset-bottom: var(
    --injected-safe-inset-bottom,
    env(safe-area-inset-bottom, 0px)
  );
  --custom-safe-inset-left: var(
    --injected-safe-inset-left,
    env(safe-area-inset-left, 0px)
  );

  /* 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:
    "Source Sans 3", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans",
    Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --font-display: "Rajdhani", var(--font-sans);
  --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;
  }

  /* Shape - square by default, with chamfered corners as opt-in utilities */
  --radius: 0;
  --chamfer-small: 6px;
  --chamfer-large: 12px;

  /* Borders - ink-light, not ink-lighter: the canvas is tinted, so a 92% */
  /* border would be invisible against it */
  --border: 1px solid var(--color-ink-light);

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

  /* Components */
  --btn-size: 2.65em;
  --footer-height: 2.65rem;
  --tray-size: clamp(12rem, 25dvw, 24rem);

  /* Focus rings for keyboard navigation */
  --focus-ring-color: var(--color-primary);
  --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;

  /* Z-index */
  --z-events-column-header: 1;
  --z-events-day-header: 3;
  --z-popup: 10;
  --z-nav: 20;
  --z-flash: 30;
  --z-tooltip: 40;
  --z-bar: 50;
  --z-tray: 51;
  --z-welcome: 52;
  --z-nav-open: 100;

  /* OKLCH colors: Fixed */
  /* paper and void are the two extremes the ramps deliberately don't reach */
  --lch-black: 0% 0 0;
  --lch-white: 100% 0 0;
  --lch-paper: 98.6% 0.002 68;
  --lch-void: 29% 0.033 263;

  /* OKLCH colors: Light mode */
  --lch-canvas: 92.2% 0.005 34;
  --lch-surface: var(--lch-paper);
  --lch-ink-inverted: var(--lch-paper);

  --lch-ink-darkest: 21% 0.034 264;
  --lch-ink-darker: 38% 0.032 262;
  --lch-ink-dark: 48% 0.027 260;
  --lch-ink-medium: 66% 0.02 258;
  --lch-ink-light: 84% 0.01 256;
  --lch-ink-lighter: 92% 0.006 254;
  --lch-ink-lightest: 96% 0.004 252;

  --lch-uncolor-darkest: 26% 0.018 45;
  --lch-uncolor-darker: 40% 0.016 42;
  --lch-uncolor-dark: 56% 0.015 41;
  --lch-uncolor-medium: 66% 0.014 41;
  --lch-uncolor-light: 84% 0.008 40;
  --lch-uncolor-lighter: 92% 0.005 34;
  --lch-uncolor-lightest: 96% 0.002 17;

  --lch-gold-darkest: 26% 0.055 84;
  --lch-gold-darker: 40% 0.085 86;
  --lch-gold-dark: 58% 0.112 88;
  --lch-gold-medium: 74% 0.132 90;
  --lch-gold-light: 84% 0.13 91;
  --lch-gold-lighter: 92% 0.072 93;
  --lch-gold-lightest: 96% 0.032 95;

  --lch-red-darkest: 26% 0.09 20;
  --lch-red-darker: 40% 0.135 22;
  --lch-red-dark: 58% 0.149 24;
  --lch-red-medium: 66% 0.165 26;
  --lch-red-light: 84% 0.07 28;
  --lch-red-lighter: 92% 0.028 30;
  --lch-red-lightest: 96% 0.013 32;

  --lch-bronze-darkest: 26% 0.048 50;
  --lch-bronze-darker: 40% 0.07 52;
  --lch-bronze-dark: 56% 0.095 55;
  --lch-bronze-medium: 66% 0.11 57;
  --lch-bronze-light: 84% 0.065 59;
  --lch-bronze-lighter: 92% 0.032 61;
  --lch-bronze-lightest: 96% 0.022 63;

  --lch-tan-darkest: 26% 0.04 76;
  --lch-tan-darker: 40% 0.06 78;
  --lch-tan-dark: 55% 0.08 80;
  --lch-tan-medium: 66% 0.095 82;
  --lch-tan-light: 84% 0.06 84;
  --lch-tan-lighter: 92% 0.035 86;
  --lch-tan-lightest: 96% 0.028 88;

  --lch-green-darkest: 26% 0.065 146;
  --lch-green-darker: 40% 0.095 147;
  --lch-green-dark: 56% 0.13 148;
  --lch-green-medium: 66% 0.146 148;
  --lch-green-light: 84% 0.072 149;
  --lch-green-lighter: 92% 0.04 150;
  --lch-green-lightest: 96% 0.02 151;

  --lch-foliage-darkest: 26% 0.032 166;
  --lch-foliage-darker: 40% 0.05 168;
  --lch-foliage-dark: 55% 0.065 170;
  --lch-foliage-medium: 66% 0.078 172;
  --lch-foliage-light: 84% 0.042 174;
  --lch-foliage-lighter: 92% 0.022 176;
  --lch-foliage-lightest: 96% 0.013 178;

  --lch-blue-darkest: 26% 0.115 262;
  --lch-blue-darker: 40% 0.155 259;
  --lch-blue-dark: 56% 0.197 255;
  --lch-blue-medium: 66% 0.19 253;
  --lch-blue-light: 84% 0.07 251;
  --lch-blue-lighter: 92% 0.026 249;
  --lch-blue-lightest: 96% 0.015 248;

  --lch-gunmetal-darkest: 26% 0.014 262;
  --lch-gunmetal-darker: 40% 0.018 261;
  --lch-gunmetal-dark: 56% 0.021 260;
  --lch-gunmetal-medium: 66% 0.022 259;
  --lch-gunmetal-light: 84% 0.012 258;
  --lch-gunmetal-lighter: 92% 0.006 257;
  --lch-gunmetal-lightest: 96% 0.004 256;

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

  --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 */
  /* The page is tinted and surfaces sit lighter on top of it, so --color-canvas */
  /* is the darkest surface in light mode. Panels, popups and dialogs use */
  /* --color-surface; --color-ink-lightest reads as a lift, not a shade. */
  --color-canvas: oklch(var(--lch-canvas));
  --color-surface: oklch(var(--lch-surface));

  --color-primary: oklch(var(--lch-gold-light));
  --color-primary-dark: oklch(var(--lch-gold-medium));
  --color-link: oklch(var(--lch-blue-dark));
  --color-info: oklch(var(--lch-blue-dark));
  --color-negative: oklch(var(--lch-red-dark));
  --color-positive: oklch(var(--lch-green-medium));
  --color-marker: oklch(var(--lch-red-medium));
  --color-highlight: oklch(var(--lch-gold-lighter));
  --color-selected-light: oklch(var(--lch-gold-lightest));
  --color-selected: oklch(var(--lch-gold-lighter));
  --color-selected-dark: oklch(var(--lch-gold-light));

  /* Colors: Categorical palette for user-assigned colors, avatars, tags */
  --color-accent-1: oklch(var(--lch-blue-dark));
  --color-accent-2: oklch(var(--lch-green-dark));
  --color-accent-3: oklch(var(--lch-tan-dark));
  --color-accent-4: oklch(var(--lch-red-dark));
  --color-accent-5: oklch(var(--lch-gunmetal-dark));
  --color-accent-6: oklch(var(--lch-bronze-dark));
  --color-accent-7: oklch(var(--lch-foliage-dark));
  --color-accent-8: oklch(var(--lch-gold-dark));
}

/* Dark mode - explicit theme choice overrides system preference */
html[data-theme="dark"] {
  --lch-canvas: 21% 0.034 264;
  --lch-surface: 28% 0.033 256;
  --lch-ink-inverted: var(--lch-void);

  --lch-ink-darkest: 96% 0.004 252;
  --lch-ink-darker: 86% 0.008 254;
  --lch-ink-dark: 74% 0.012 256;
  --lch-ink-medium: 62% 0.018 258;
  --lch-ink-light: 40% 0.03 259;
  --lch-ink-lighter: 30% 0.033 257;
  --lch-ink-lightest: 25% 0.034 262;

  --lch-uncolor-darkest: 96% 0.002 68;
  --lch-uncolor-darker: 86% 0.004 60;
  --lch-uncolor-dark: 74% 0.006 50;
  --lch-uncolor-medium: 62% 0.01 45;
  --lch-uncolor-light: 40% 0.014 42;
  --lch-uncolor-lighter: 30% 0.016 40;
  --lch-uncolor-lightest: 25% 0.018 38;

  --lch-gold-darkest: 96% 0.048 95;
  --lch-gold-darker: 86% 0.088 93;
  --lch-gold-dark: 74% 0.118 91;
  --lch-gold-medium: 62% 0.112 89;
  --lch-gold-light: 40% 0.07 87;
  --lch-gold-lighter: 30% 0.026 85;
  --lch-gold-lightest: 25% 0.011 84;

  --lch-red-darkest: 96% 0.02 32;
  --lch-red-darker: 86% 0.075 30;
  --lch-red-dark: 74% 0.12 28;
  --lch-red-medium: 62% 0.15 26;
  --lch-red-light: 40% 0.085 24;
  --lch-red-lighter: 30% 0.032 22;
  --lch-red-lightest: 25% 0.012 20;

  --lch-bronze-darkest: 96% 0.025 63;
  --lch-bronze-darker: 86% 0.055 61;
  --lch-bronze-dark: 74% 0.085 58;
  --lch-bronze-medium: 62% 0.1 56;
  --lch-bronze-light: 40% 0.058 54;
  --lch-bronze-lighter: 30% 0.03 52;
  --lch-bronze-lightest: 25% 0.015 50;

  --lch-tan-darkest: 96% 0.03 88;
  --lch-tan-darker: 86% 0.055 86;
  --lch-tan-dark: 74% 0.075 83;
  --lch-tan-medium: 62% 0.085 81;
  --lch-tan-light: 40% 0.048 79;
  --lch-tan-lighter: 30% 0.028 77;
  --lch-tan-lightest: 25% 0.014 75;

  --lch-green-darkest: 96% 0.032 151;
  --lch-green-darker: 86% 0.075 150;
  --lch-green-dark: 74% 0.11 149;
  --lch-green-medium: 62% 0.126 148;
  --lch-green-light: 40% 0.065 147;
  --lch-green-lighter: 30% 0.03 146;
  --lch-green-lightest: 25% 0.016 145;

  --lch-foliage-darkest: 96% 0.018 178;
  --lch-foliage-darker: 86% 0.04 176;
  --lch-foliage-dark: 74% 0.06 173;
  --lch-foliage-medium: 62% 0.07 171;
  --lch-foliage-light: 40% 0.04 169;
  --lch-foliage-lighter: 30% 0.02 167;
  --lch-foliage-lightest: 25% 0.011 165;

  --lch-blue-darkest: 96% 0.02 248;
  --lch-blue-darker: 86% 0.065 250;
  --lch-blue-dark: 74% 0.125 253;
  --lch-blue-medium: 62% 0.155 255;
  --lch-blue-light: 40% 0.092 258;
  --lch-blue-lighter: 30% 0.044 260;
  --lch-blue-lightest: 25% 0.03 262;

  --lch-gunmetal-darkest: 96% 0.005 256;
  --lch-gunmetal-darker: 86% 0.01 257;
  --lch-gunmetal-dark: 74% 0.016 258;
  --lch-gunmetal-medium: 62% 0.022 259;
  --lch-gunmetal-light: 40% 0.019 260;
  --lch-gunmetal-lighter: 30% 0.015 261;
  --lch-gunmetal-lightest: 25% 0.012 262;

  --color-primary: oklch(var(--lch-gold-dark));
  --color-highlight: oklch(var(--lch-gold-light));

  --shadow:
    0 0 0 1px oklch(var(--lch-black) / 0.42),
    0 0.2em 1.6em -0.8em oklch(var(--lch-black) / 0.6),
    0 0.4em 2.4em -1em oklch(var(--lch-black) / 0.7),
    0 0.4em 0.8em -1.2em oklch(var(--lch-black) / 0.8),
    0 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]) {
    --lch-canvas: 21% 0.034 264;
    --lch-surface: 28% 0.033 256;
    --lch-ink-inverted: var(--lch-void);

    --lch-ink-darkest: 96% 0.004 252;
    --lch-ink-darker: 86% 0.008 254;
    --lch-ink-dark: 74% 0.012 256;
    --lch-ink-medium: 62% 0.018 258;
    --lch-ink-light: 40% 0.03 259;
    --lch-ink-lighter: 30% 0.033 257;
    --lch-ink-lightest: 25% 0.034 262;

    --lch-uncolor-darkest: 96% 0.002 68;
    --lch-uncolor-darker: 86% 0.004 60;
    --lch-uncolor-dark: 74% 0.006 50;
    --lch-uncolor-medium: 62% 0.01 45;
    --lch-uncolor-light: 40% 0.014 42;
    --lch-uncolor-lighter: 30% 0.016 40;
    --lch-uncolor-lightest: 25% 0.018 38;

    --lch-gold-darkest: 96% 0.048 95;
    --lch-gold-darker: 86% 0.088 93;
    --lch-gold-dark: 74% 0.118 91;
    --lch-gold-medium: 62% 0.112 89;
    --lch-gold-light: 40% 0.07 87;
    --lch-gold-lighter: 30% 0.026 85;
    --lch-gold-lightest: 25% 0.011 84;

    --lch-red-darkest: 96% 0.02 32;
    --lch-red-darker: 86% 0.075 30;
    --lch-red-dark: 74% 0.12 28;
    --lch-red-medium: 62% 0.15 26;
    --lch-red-light: 40% 0.085 24;
    --lch-red-lighter: 30% 0.032 22;
    --lch-red-lightest: 25% 0.012 20;

    --lch-bronze-darkest: 96% 0.025 63;
    --lch-bronze-darker: 86% 0.055 61;
    --lch-bronze-dark: 74% 0.085 58;
    --lch-bronze-medium: 62% 0.1 56;
    --lch-bronze-light: 40% 0.058 54;
    --lch-bronze-lighter: 30% 0.03 52;
    --lch-bronze-lightest: 25% 0.015 50;

    --lch-tan-darkest: 96% 0.03 88;
    --lch-tan-darker: 86% 0.055 86;
    --lch-tan-dark: 74% 0.075 83;
    --lch-tan-medium: 62% 0.085 81;
    --lch-tan-light: 40% 0.048 79;
    --lch-tan-lighter: 30% 0.028 77;
    --lch-tan-lightest: 25% 0.014 75;

    --lch-green-darkest: 96% 0.032 151;
    --lch-green-darker: 86% 0.075 150;
    --lch-green-dark: 74% 0.11 149;
    --lch-green-medium: 62% 0.126 148;
    --lch-green-light: 40% 0.065 147;
    --lch-green-lighter: 30% 0.03 146;
    --lch-green-lightest: 25% 0.016 145;

    --lch-foliage-darkest: 96% 0.018 178;
    --lch-foliage-darker: 86% 0.04 176;
    --lch-foliage-dark: 74% 0.06 173;
    --lch-foliage-medium: 62% 0.07 171;
    --lch-foliage-light: 40% 0.04 169;
    --lch-foliage-lighter: 30% 0.02 167;
    --lch-foliage-lightest: 25% 0.011 165;

    --lch-blue-darkest: 96% 0.02 248;
    --lch-blue-darker: 86% 0.065 250;
    --lch-blue-dark: 74% 0.125 253;
    --lch-blue-medium: 62% 0.155 255;
    --lch-blue-light: 40% 0.092 258;
    --lch-blue-lighter: 30% 0.044 260;
    --lch-blue-lightest: 25% 0.03 262;

    --lch-gunmetal-darkest: 96% 0.005 256;
    --lch-gunmetal-darker: 86% 0.01 257;
    --lch-gunmetal-dark: 74% 0.016 258;
    --lch-gunmetal-medium: 62% 0.022 259;
    --lch-gunmetal-light: 40% 0.019 260;
    --lch-gunmetal-lighter: 30% 0.015 261;
    --lch-gunmetal-lightest: 25% 0.012 262;

    --color-primary: oklch(var(--lch-gold-dark));
    --color-highlight: oklch(var(--lch-gold-light));

    --shadow:
      0 0 0 1px oklch(var(--lch-black) / 0.42),
      0 0.2em 1.6em -0.8em oklch(var(--lch-black) / 0.6),
      0 0.4em 2.4em -1em oklch(var(--lch-black) / 0.7),
      0 0.4em 0.8em -1.2em oklch(var(--lch-black) / 0.8),
      0 0.8em 1.2em -1.6em oklch(var(--lch-black) / 0.9),
      0 1.2em 1.6em -2em oklch(var(--lch-black) / 1);
  }
}
