/* Copied by site/build.mjs from app/src/shared/config/theme.css. Do not edit. */
/*
 * The complete colour vocabulary. See docs/product/design-system.md.
 *
 * GENERATED FROM shared/config/palette.ts — palette.test.ts asserts the two
 * agree, so hand-editing one value here turns the suite red. Change palette.ts.
 *
 * Nothing outside this file writes a colour. Components reference the semantic
 * names only; a raw oklch() or a palette hue in a component is a bug.
 *
 * Neutrals carry the accent's hue (255) at near-zero chroma, so greys never go
 * muddy next to blue. Dark is the same H and C with L remapped — except the
 * boundary lightness, which is 0.52 rather than a mirrored 0.45: an even L
 * remap keeps text ratios balanced and does NOT keep boundary ratios balanced,
 * because chroma costs luminance. At 0.45 every dark border measured ~2.5:1
 * against a required 3:1.
 */

:root {
	color-scheme: light;

	--background: oklch(0.985 0.002 255);
	--background-raised: oklch(1 0 0);
	--background-sunken: oklch(0.965 0.004 255);
	--border: oklch(0.91 0.006 255);
	--border-strong: oklch(0.64 0.014 255);
	--text: oklch(0.255 0.015 255);
	--text-subtle: oklch(0.53 0.012 255);
	--accent: oklch(0.52 0.17 255);
	--accent-fg: oklch(1 0 0);
	--accent-bg: oklch(0.945 0.022 255);
	--accent-border: oklch(0.62 0.13 255);
	--accent-strong: oklch(0.44 0.14 255);
	--danger: oklch(0.52 0.17 27);
	--danger-fg: oklch(1 0 0);
	--danger-bg: oklch(0.945 0.022 27);
	--danger-border: oklch(0.62 0.15 27);
	--danger-strong: oklch(0.44 0.15 27);
	--warning: oklch(0.52 0.107 75);
	--warning-fg: oklch(1 0 0);
	--warning-bg: oklch(0.945 0.03 75);
	--warning-border: oklch(0.62 0.12 75);
	--warning-strong: oklch(0.44 0.09 75);
	--success: oklch(0.52 0.12 150);
	--success-fg: oklch(1 0 0);
	--success-bg: oklch(0.945 0.028 150);
	--success-border: oklch(0.62 0.13 150);
	--success-strong: oklch(0.44 0.105 150);
	--neutral: oklch(0.52 0.012 255);
	--neutral-fg: oklch(1 0 0);
	--neutral-bg: oklch(0.945 0.004 255);
	--neutral-border: oklch(0.62 0.01 255);
	--neutral-strong: oklch(0.44 0.012 255);
	--hue-slate-bg: oklch(0.945 0.004 255);
	--hue-slate-bg-strong: oklch(0.88 0.012 255);
	--hue-slate-border: oklch(0.62 0.01 255);
	--hue-slate-fg: oklch(0.44 0.012 255);
	--hue-red-bg: oklch(0.945 0.022 27);
	--hue-red-bg-strong: oklch(0.88 0.057 27);
	--hue-red-border: oklch(0.62 0.15 27);
	--hue-red-fg: oklch(0.44 0.15 27);
	--hue-amber-bg: oklch(0.945 0.03 75);
	--hue-amber-bg-strong: oklch(0.88 0.078 75);
	--hue-amber-border: oklch(0.62 0.12 75);
	--hue-amber-fg: oklch(0.44 0.09 75);
	--hue-green-bg: oklch(0.945 0.028 150);
	--hue-green-bg-strong: oklch(0.88 0.073 150);
	--hue-green-border: oklch(0.62 0.13 150);
	--hue-green-fg: oklch(0.44 0.105 150);
	--hue-teal-bg: oklch(0.945 0.024 195);
	--hue-teal-bg-strong: oklch(0.88 0.062 195);
	--hue-teal-border: oklch(0.62 0.09 195);
	--hue-teal-fg: oklch(0.44 0.073 195);
	--hue-blue-bg: oklch(0.945 0.022 255);
	--hue-blue-bg-strong: oklch(0.88 0.057 255);
	--hue-blue-border: oklch(0.62 0.13 255);
	--hue-blue-fg: oklch(0.44 0.14 255);
	--hue-violet-bg: oklch(0.945 0.024 300);
	--hue-violet-bg-strong: oklch(0.88 0.062 300);
	--hue-violet-border: oklch(0.62 0.15 300);
	--hue-violet-fg: oklch(0.44 0.15 300);
	--hue-pink-bg: oklch(0.945 0.026 340);
	--hue-pink-bg-strong: oklch(0.88 0.068 340);
	--hue-pink-border: oklch(0.62 0.15 340);
	--hue-pink-fg: oklch(0.44 0.15 340);
}

@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) {
		color-scheme: dark;

		--background: oklch(0.185 0.006 255);
		--background-raised: oklch(0.225 0.008 255);
		--background-sunken: oklch(0.145 0.006 255);
		--border: oklch(0.305 0.01 255);
		--border-strong: oklch(0.52 0.014 255);
		--text: oklch(0.96 0.003 255);
		--text-subtle: oklch(0.75 0.01 255);
		--accent: oklch(0.7 0.153 255);
		--accent-fg: oklch(0.185 0.03 255);
		--accent-bg: oklch(0.27 0.035 255);
		--accent-border: oklch(0.52 0.111 255);
		--accent-strong: oklch(0.8 0.1 255);
		--danger: oklch(0.7 0.153 27);
		--danger-fg: oklch(0.185 0.03 27);
		--danger-bg: oklch(0.27 0.035 27);
		--danger-border: oklch(0.52 0.128 27);
		--danger-strong: oklch(0.8 0.112 27);
		--warning: oklch(0.7 0.096 75);
		--warning-fg: oklch(0.185 0.03 75);
		--warning-bg: oklch(0.27 0.048 75);
		--warning-border: oklch(0.52 0.102 75);
		--warning-strong: oklch(0.8 0.07 75);
		--success: oklch(0.7 0.108 150);
		--success-fg: oklch(0.185 0.03 150);
		--success-bg: oklch(0.27 0.045 150);
		--success-border: oklch(0.52 0.111 150);
		--success-strong: oklch(0.8 0.082 150);
		--neutral: oklch(0.7 0.011 255);
		--neutral-fg: oklch(0.185 0.03 255);
		--neutral-bg: oklch(0.27 0.006 255);
		--neutral-border: oklch(0.52 0.009 255);
		--neutral-strong: oklch(0.8 0.009 255);
		--hue-slate-bg: oklch(0.27 0.006 255);
		--hue-slate-bg-strong: oklch(0.34 0.012 255);
		--hue-slate-border: oklch(0.52 0.009 255);
		--hue-slate-fg: oklch(0.8 0.009 255);
		--hue-red-bg: oklch(0.27 0.035 27);
		--hue-red-bg-strong: oklch(0.34 0.057 27);
		--hue-red-border: oklch(0.52 0.128 27);
		--hue-red-fg: oklch(0.8 0.112 27);
		--hue-amber-bg: oklch(0.27 0.048 75);
		--hue-amber-bg-strong: oklch(0.34 0.07 75);
		--hue-amber-border: oklch(0.52 0.102 75);
		--hue-amber-fg: oklch(0.8 0.07 75);
		--hue-green-bg: oklch(0.27 0.045 150);
		--hue-green-bg-strong: oklch(0.34 0.073 150);
		--hue-green-border: oklch(0.52 0.111 150);
		--hue-green-fg: oklch(0.8 0.082 150);
		--hue-teal-bg: oklch(0.27 0.038 195);
		--hue-teal-bg-strong: oklch(0.34 0.057 195);
		--hue-teal-border: oklch(0.52 0.077 195);
		--hue-teal-fg: oklch(0.8 0.057 195);
		--hue-blue-bg: oklch(0.27 0.035 255);
		--hue-blue-bg-strong: oklch(0.34 0.057 255);
		--hue-blue-border: oklch(0.52 0.111 255);
		--hue-blue-fg: oklch(0.8 0.1 255);
		--hue-violet-bg: oklch(0.27 0.038 300);
		--hue-violet-bg-strong: oklch(0.34 0.062 300);
		--hue-violet-border: oklch(0.52 0.128 300);
		--hue-violet-fg: oklch(0.8 0.117 300);
		--hue-pink-bg: oklch(0.27 0.042 340);
		--hue-pink-bg-strong: oklch(0.34 0.068 340);
		--hue-pink-border: oklch(0.52 0.128 340);
		--hue-pink-fg: oklch(0.8 0.117 340);
	}
}

:root[data-theme="dark"] {
	color-scheme: dark;

	--background: oklch(0.185 0.006 255);
	--background-raised: oklch(0.225 0.008 255);
	--background-sunken: oklch(0.145 0.006 255);
	--border: oklch(0.305 0.01 255);
	--border-strong: oklch(0.52 0.014 255);
	--text: oklch(0.96 0.003 255);
	--text-subtle: oklch(0.75 0.01 255);
	--accent: oklch(0.7 0.153 255);
	--accent-fg: oklch(0.185 0.03 255);
	--accent-bg: oklch(0.27 0.035 255);
	--accent-border: oklch(0.52 0.111 255);
	--accent-strong: oklch(0.8 0.1 255);
	--danger: oklch(0.7 0.153 27);
	--danger-fg: oklch(0.185 0.03 27);
	--danger-bg: oklch(0.27 0.035 27);
	--danger-border: oklch(0.52 0.128 27);
	--danger-strong: oklch(0.8 0.112 27);
	--warning: oklch(0.7 0.096 75);
	--warning-fg: oklch(0.185 0.03 75);
	--warning-bg: oklch(0.27 0.048 75);
	--warning-border: oklch(0.52 0.102 75);
	--warning-strong: oklch(0.8 0.07 75);
	--success: oklch(0.7 0.108 150);
	--success-fg: oklch(0.185 0.03 150);
	--success-bg: oklch(0.27 0.045 150);
	--success-border: oklch(0.52 0.111 150);
	--success-strong: oklch(0.8 0.082 150);
	--neutral: oklch(0.7 0.011 255);
	--neutral-fg: oklch(0.185 0.03 255);
	--neutral-bg: oklch(0.27 0.006 255);
	--neutral-border: oklch(0.52 0.009 255);
	--neutral-strong: oklch(0.8 0.009 255);
	--hue-slate-bg: oklch(0.27 0.006 255);
	--hue-slate-bg-strong: oklch(0.34 0.012 255);
	--hue-slate-border: oklch(0.52 0.009 255);
	--hue-slate-fg: oklch(0.8 0.009 255);
	--hue-red-bg: oklch(0.27 0.035 27);
	--hue-red-bg-strong: oklch(0.34 0.057 27);
	--hue-red-border: oklch(0.52 0.128 27);
	--hue-red-fg: oklch(0.8 0.112 27);
	--hue-amber-bg: oklch(0.27 0.048 75);
	--hue-amber-bg-strong: oklch(0.34 0.07 75);
	--hue-amber-border: oklch(0.52 0.102 75);
	--hue-amber-fg: oklch(0.8 0.07 75);
	--hue-green-bg: oklch(0.27 0.045 150);
	--hue-green-bg-strong: oklch(0.34 0.073 150);
	--hue-green-border: oklch(0.52 0.111 150);
	--hue-green-fg: oklch(0.8 0.082 150);
	--hue-teal-bg: oklch(0.27 0.038 195);
	--hue-teal-bg-strong: oklch(0.34 0.057 195);
	--hue-teal-border: oklch(0.52 0.077 195);
	--hue-teal-fg: oklch(0.8 0.057 195);
	--hue-blue-bg: oklch(0.27 0.035 255);
	--hue-blue-bg-strong: oklch(0.34 0.057 255);
	--hue-blue-border: oklch(0.52 0.111 255);
	--hue-blue-fg: oklch(0.8 0.1 255);
	--hue-violet-bg: oklch(0.27 0.038 300);
	--hue-violet-bg-strong: oklch(0.34 0.062 300);
	--hue-violet-border: oklch(0.52 0.128 300);
	--hue-violet-fg: oklch(0.8 0.117 300);
	--hue-pink-bg: oklch(0.27 0.042 340);
	--hue-pink-bg-strong: oklch(0.34 0.068 340);
	--hue-pink-border: oklch(0.52 0.128 340);
	--hue-pink-fg: oklch(0.8 0.117 340);
}

/* Expose the semantic names as Tailwind utilities: bg-background,
   text-text-subtle, border-border-strong, bg-hue-teal-bg. `inline` keeps them
   referencing the custom properties, so a theme swap is a variable change
   rather than a rebuild. */
/*
 * Motion and geometry. Values from docs/product/design-system.md — the six
 * named motions fix geometry and easing, the frequency budget sets duration.
 *
 * These live in `:root` because Tailwind v4 has no duration or shell-geometry
 * namespace; they are referenced as `duration-(--dur-menu)` and so on.
 */
:root {
	/* Built-in CSS easings are too weak to read as intentional. */
	--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
	--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);

	--dur-press: 120ms;
	--dur-tooltip: 125ms;
	--dur-menu: 150ms;
	--dur-modal: 200ms;
	/* The rail fold. A layout change, so it cannot run on the compositor — see
	   the `fold` row in design-system.md's motion set for what that costs and
	   the guard that pays for it. */
	--dur-fold: 200ms;

	/* Shell geometry, so the 2.4.11 scroll-margin rule and the shell agree on
	   one number rather than two that drift. */
	--view-header-h: 40px;
	--rail-w: 240px;
	--rail-w-collapsed: 56px;
}

/*
 * prefers-reduced-motion, globally and once.
 *
 * A property allow-list rather than `transition: none`: killing transitions
 * outright removes the colour feedback that confirms a press, which makes the
 * interface worse for exactly the people the setting exists to help. Movement
 * goes; colour and opacity stay.
 */
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		/* biome-ignore-start lint/complexity/noImportantStyles: reduced motion has
		   to beat component styles — a component that sets its own animation
		   would otherwise keep animating for exactly the user who asked it not to.
		   `transition-property` needs it just as much: a bare universal selector
		   is specificity (0,0,0) and loses to every Tailwind `transition-[…]`
		   utility, i.e. to every element that actually animates. Without it this
		   block only governed the elements that were never moving. */
		transition-property:
			opacity, background-color, border-color, color, outline-color, fill,
			stroke !important;
		animation-duration: 1ms !important;
		animation-iteration-count: 1 !important;
		/* biome-ignore-end lint/complexity/noImportantStyles: see above */
	}
}

