/* GENERATED FROM design/tokens/tokens.json - DO NOT EDIT BY HAND.
 *
 * Regenerate with: python scripts/build-tokens.py
 *
 * Three themes from one token set (§9.0): light, dark, and a high-contrast one
 * for outdoor gate tablets. Dark follows the viewer's system setting unless an
 * explicit choice overrides it, so every semantic colour is defined on bare
 * :root first and only *redefined* in the theme blocks. A colour whose only
 * definition lives inside a media query disappears for somebody who chose the
 * other theme.
 */

:root {
	/* Ramps - referenced by the semantic tokens, rarely used directly. */
	--ba-brand-50: #eef6ff;
	--ba-brand-100: #d9eaff;
	--ba-brand-200: #bcdaff;
	--ba-brand-300: #8ec3ff;
	--ba-brand-400: #59a2ff;
	--ba-brand-500: #2f7ff5;
	--ba-brand-600: #1a61db;
	--ba-brand-700: #164cad;
	--ba-brand-800: #17418a;
	--ba-brand-900: #183a70;
	--ba-neutral-0: #ffffff;
	--ba-neutral-50: #f7f8fa;
	--ba-neutral-100: #eef0f4;
	--ba-neutral-200: #e0e4ea;
	--ba-neutral-300: #c7ced8;
	--ba-neutral-400: #9aa5b4;
	--ba-neutral-500: #6b7787;
	--ba-neutral-600: #4c5665;
	--ba-neutral-700: #38414d;
	--ba-neutral-800: #232a33;
	--ba-neutral-900: #12171d;
	--ba-neutral-1000: #0a0d11;

	/* Status - the same meaning in every theme. */
	--ba-status-success: #1a8f5a;
	--ba-status-warning: #b3730a;
	--ba-status-danger: #c2382c;
	--ba-status-info: #1a61db;
	--ba-status-offline: #6b7787;

	/* Semantic - light is the base; the theme blocks only redefine. */
	--ba-bg: #ffffff;
	--ba-bg-subtle: #f7f8fa;
	--ba-surface: #ffffff;
	--ba-border: #e0e4ea;
	--ba-text: #12171d;
	--ba-text-muted: #6b7787;
	--ba-accent: #1a61db;
	--ba-accent-text: #ffffff;
	--ba-glass: rgba(255, 255, 255, 0.72);
	--ba-glass-strong: rgba(255, 255, 255, 0.88);
	--ba-glass-border: rgba(255, 255, 255, 0.9);
	--ba-glass-shine: rgba(255, 255, 255, 0.65);
	--ba-veil: rgba(10, 13, 17, 0.35);

	/* Type */
	--ba-font-sans: Inter, 'Noto Sans Arabic', 'Noto Nastaliq Urdu', system-ui, sans-serif;
	--ba-font-mono: 'JetBrains Mono', ui-monospace, monospace;
	--ba-text-xs: 12px;
	--ba-leading-xs: 16px;
	--ba-text-sm: 14px;
	--ba-leading-sm: 20px;
	--ba-text-base: 16px;
	--ba-leading-base: 24px;
	--ba-text-lg: 18px;
	--ba-leading-lg: 26px;
	--ba-text-xl: 22px;
	--ba-leading-xl: 30px;
	--ba-text-2xl: 28px;
	--ba-leading-2xl: 36px;
	--ba-text-3xl: 36px;
	--ba-leading-3xl: 44px;
	--ba-text-glance: 44px;
	--ba-leading-glance: 52px;
	--ba-weight-regular: 400;
	--ba-weight-medium: 500;
	--ba-weight-semibold: 600;
	--ba-weight-bold: 700;

	/* Space, radius, elevation, blur */
	--ba-space-0: 0;
	--ba-space-1: 4px;
	--ba-space-2: 8px;
	--ba-space-3: 12px;
	--ba-space-4: 16px;
	--ba-space-5: 24px;
	--ba-space-6: 32px;
	--ba-space-7: 48px;
	--ba-space-8: 64px;
	--ba-radius-none: 0;
	--ba-radius-sm: 4px;
	--ba-radius-md: 8px;
	--ba-radius-lg: 12px;
	--ba-radius-xl: 20px;
	--ba-radius-full: 9999px;
	--ba-shadow-0: none;
	--ba-shadow-1: 0 1px 2px rgba(10,13,17,0.06), 0 1px 3px rgba(10,13,17,0.08);
	--ba-shadow-2: 0 4px 8px rgba(10,13,17,0.08), 0 2px 4px rgba(10,13,17,0.06);
	--ba-shadow-3: 0 12px 24px rgba(10,13,17,0.12);
	--ba-shadow-glass: 0 8px 32px rgba(10, 13, 17, .10), inset 0 1px 0 var(--ba-glass-shine);
	--ba-shadow-lift: 0 16px 40px rgba(10, 13, 17, .16);
	--ba-shadow-glow: 0 0 0 4px color-mix(in srgb, var(--ba-accent) 18%, transparent);
	--ba-blur-sm: 8px;
	--ba-blur-md: 16px;
	--ba-blur-lg: 28px;

	/* Motion */
	--ba-duration-instant: 0ms;
	--ba-duration-fast: 120ms;
	--ba-duration-base: 200ms;
	--ba-duration-slow: 320ms;
	--ba-duration-slower: 480ms;
	--ba-ease-standard: cubic-bezier(0.2, 0, 0, 1);
	--ba-ease-decelerate: cubic-bezier(0, 0, 0, 1);
	--ba-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
	--ba-ease-exit: cubic-bezier(0.4, 0, 1, 1);

	/* Tap targets - gloves and daylight are a size, not a style. */
	--ba-target-min: 44px;
	--ba-target-technician: 48px;
	--ba-target-gate: 56px;
}

@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) {
		--ba-bg: #0a0d11;
		--ba-bg-subtle: #12171d;
		--ba-surface: #232a33;
		--ba-border: #38414d;
		--ba-text: #f7f8fa;
		--ba-text-muted: #9aa5b4;
		--ba-accent: #59a2ff;
		--ba-accent-text: #0a0d11;
		--ba-glass: rgba(35, 42, 51, 0.62);
		--ba-glass-strong: rgba(35, 42, 51, 0.82);
		--ba-glass-border: rgba(255, 255, 255, 0.12);
		--ba-glass-shine: rgba(255, 255, 255, 0.08);
		--ba-veil: rgba(0, 0, 0, 0.5);
	}
}

/* An explicit choice wins in both directions. */
[data-theme="dark"] {
	--ba-bg: #0a0d11;
	--ba-bg-subtle: #12171d;
	--ba-surface: #232a33;
	--ba-border: #38414d;
	--ba-text: #f7f8fa;
	--ba-text-muted: #9aa5b4;
	--ba-accent: #59a2ff;
	--ba-accent-text: #0a0d11;
	--ba-glass: rgba(35, 42, 51, 0.62);
	--ba-glass-strong: rgba(35, 42, 51, 0.82);
	--ba-glass-border: rgba(255, 255, 255, 0.12);
	--ba-glass-shine: rgba(255, 255, 255, 0.08);
	--ba-veil: rgba(0, 0, 0, 0.5);
}

/* Outdoor gate tablets. 7:1 on body text, in direct sunlight. */
[data-theme="contrast"] {
	--ba-bg: #ffffff;
	--ba-bg-subtle: #ffffff;
	--ba-surface: #ffffff;
	--ba-border: #000000;
	--ba-text: #000000;
	--ba-text-muted: #2b2b2b;
	--ba-accent: #0b3ea8;
	--ba-accent-text: #ffffff;
	--ba-glass: #ffffff;
	--ba-glass-strong: #ffffff;
	--ba-glass-border: #000000;
	--ba-glass-shine: transparent;
	--ba-veil: rgba(0, 0, 0, 0.6);
}
