@hotelfriendag/design-tokens 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,67 @@
1
+ /* HotelFriend design tokens — shadcn/ui v4 contract
2
+ * Generated from docs/tokens.figma.json — do NOT edit by hand.
3
+ *
4
+ * Usage: append to app/globals.css (after @import "tailwindcss")
5
+ * @import "./pre-built/shadcn-tokens.css";
6
+ */
7
+ @theme inline {
8
+ /* ── Base ── */
9
+ --color-background: #FFFFFF;
10
+ --color-foreground: #2B2B2B; /* text-primary */
11
+
12
+ /* ── Card ── */
13
+ --color-card: #FFFFFF;
14
+ --color-card-foreground: #2B2B2B;
15
+
16
+ /* ── Popover ── */
17
+ --color-popover: #FFFFFF;
18
+ --color-popover-foreground: #2B2B2B;
19
+
20
+ /* ── Primary ── */
21
+ --color-primary: #24AFE8; /* canonical brand */
22
+ --color-primary-foreground: #FFFFFF;
23
+
24
+ /* ── Secondary ── */
25
+ --color-secondary: #E4E8EF; /* neutral border */
26
+ --color-secondary-foreground: #4B5675; /* text-secondary */
27
+
28
+ /* ── Muted ── */
29
+ --color-muted: #F1F3F6; /* very-light bg */
30
+ --color-muted-foreground: #99A1B7; /* placeholder */
31
+
32
+ /* ── Accent ── */
33
+ --color-accent: #E9F6FC; /* primary light tint */
34
+ --color-accent-foreground: #149AD1; /* primary-hover */
35
+
36
+ /* ── Destructive ── */
37
+ --color-destructive: #EA6565; /* status error */
38
+ --color-destructive-foreground: #FFFFFF;
39
+
40
+ /* ── Border / Input / Ring ── */
41
+ --color-border: #D1D6DD;
42
+ --color-input: #D1D6DD;
43
+ --color-ring: #24AFE8; /* focus ring = primary */
44
+
45
+ /* ── Chart palette (maps to HF status colors) ── */
46
+ --color-chart-1: #59B59D; /* success */
47
+ --color-chart-2: #FFBD5A; /* warning */
48
+ --color-chart-3: #24AFE8; /* primary */
49
+ --color-chart-4: #F87921; /* coral */
50
+ --color-chart-5: #EA6565; /* error */
51
+
52
+ /* ── Sidebar ── */
53
+ --color-sidebar: #F6F7FB; /* bg-accent */
54
+ --color-sidebar-foreground: #4B5675;
55
+ --color-sidebar-primary: #24AFE8;
56
+ --color-sidebar-primary-foreground: #FFFFFF;
57
+ --color-sidebar-accent: #E9F6FC;
58
+ --color-sidebar-accent-foreground: #2B2B2B;
59
+ --color-sidebar-border: #E4E8EF;
60
+ --color-sidebar-ring: #24AFE8;
61
+
62
+ /* ── Radius ── */
63
+ --radius: 6px; /* $br-sm */
64
+
65
+ /* ── Font ── */
66
+ --font-sans: Roboto, sans-serif;
67
+ }
@@ -0,0 +1,51 @@
1
+ /*
2
+ * HotelFriend status pills — domain → semantic mapping
3
+ * Generated from docs/status-map.json — do NOT edit by hand.
4
+ *
5
+ * Each .status-{domain}-{state} class binds to a semantic status slot
6
+ * (--color-hf-status-{role}) so adding a new domain status is JSON-only —
7
+ * no CSS edit needed.
8
+ *
9
+ * Pair with .hf-pill from components.css for the visual chrome.
10
+ */
11
+
12
+ /* Booking */
13
+ .status-booking-new { color: var(--color-hf-status-warning); background: var(--color-hf-status-warning-bg); }
14
+ .status-booking-offer { color: var(--color-hf-status-violet); background: var(--color-hf-status-violet-bg); }
15
+ .status-booking-confirmed { color: var(--color-hf-status-info); background: var(--color-hf-status-info-bg); }
16
+ .status-booking-check-in { color: var(--color-hf-status-olive); background: var(--color-hf-status-olive-bg); }
17
+ .status-booking-check-out { color: var(--color-hf-status-coral); background: var(--color-hf-status-coral-bg); }
18
+ .status-booking-no-show { color: var(--color-hf-status-error); background: var(--color-hf-status-error-bg); }
19
+ .status-booking-due-in { color: var(--color-hf-status-success); background: var(--color-hf-status-success-bg); }
20
+ .status-booking-due-out { color: var(--color-hf-status-orange-deep); background: var(--color-hf-status-orange-deep-bg); }
21
+ .status-booking-canceled,
22
+ .status-booking-canceled-by-hotel,
23
+ .status-booking-canceled-by-guest,
24
+ .status-booking-canceled-by-hf { color: var(--color-hf-status-cancel); background: var(--color-hf-status-cancel-bg); }
25
+
26
+ /* Order */
27
+ .status-order-waiting { color: var(--color-hf-status-warning); background: var(--color-hf-status-warning-bg); }
28
+ .status-order-confirmed { color: var(--color-hf-status-info); background: var(--color-hf-status-info-bg); }
29
+ .status-order-completed { color: var(--color-hf-status-success); background: var(--color-hf-status-success-bg); }
30
+ .status-order-in-progress { color: var(--color-hf-status-coral); background: var(--color-hf-status-coral-bg); }
31
+ .status-order-action-required { color: var(--color-hf-status-error); background: var(--color-hf-status-error-bg); }
32
+ .status-order-canceled,
33
+ .status-order-canceled-by-hotel,
34
+ .status-order-canceled-by-guest,
35
+ .status-order-canceled-by-pos { color: var(--color-hf-status-cancel); background: var(--color-hf-status-cancel-bg); }
36
+
37
+ /* Front Desk */
38
+ .status-front-desk-quota-free { color: var(--color-hf-status-success); background: var(--color-hf-status-success-bg); }
39
+ .status-front-desk-quota-busy { color: var(--color-hf-status-error); background: var(--color-hf-status-error-bg); }
40
+ .status-front-desk-out-of-order { color: var(--color-hf-status-warning-strong); background: var(--color-hf-status-warning-strong-bg); }
41
+
42
+ /* Room Item Cleaning */
43
+ .status-room-item-cleaning-clean { color: var(--color-hf-status-success); background: var(--color-hf-status-success-bg); }
44
+ .status-room-item-cleaning-cleaning { color: var(--color-hf-status-info); background: var(--color-hf-status-info-bg); }
45
+ .status-room-item-cleaning-dirty { color: var(--color-hf-status-error); background: var(--color-hf-status-error-bg); }
46
+ .status-room-item-cleaning-inspected { color: var(--color-hf-status-violet); background: var(--color-hf-status-violet-bg); }
47
+ .status-room-item-cleaning-out-of-service { color: var(--color-hf-status-cancel); background: var(--color-hf-status-cancel-bg); }
48
+
49
+ /* Standalone (no domain prefix) */
50
+ .status-deleted { color: var(--color-hf-status-cancel); background: var(--color-hf-status-cancel-bg); }
51
+
@@ -0,0 +1,69 @@
1
+ /**
2
+ * HotelFriend Design System — Stylelint plugin config
3
+ *
4
+ * Drop-in shareable config that enforces RFC-0001 §4.6 rules:
5
+ * 1. No raw hex colors in app code (use `var(--color-hf-*)` instead).
6
+ * 2. No Tailwind arbitrary values like `bg-[#26ADE4]` (use `bg-hf-accent`).
7
+ * 3. No bespoke `box-shadow` declarations (use `var(--shadow-hf-*)`).
8
+ *
9
+ * Usage in your project's stylelint config:
10
+ *
11
+ * // .stylelintrc.cjs
12
+ * module.exports = {
13
+ * extends: [
14
+ * 'stylelint-config-standard',
15
+ * './docs/portable-design/pre-built/stylelint-design-system.cjs'
16
+ * ],
17
+ * // Override rules per-file if needed:
18
+ * overrides: [
19
+ * { files: ['**\/pre-built/*.css'], rules: { 'color-no-hex': null } }, // generated files OK
20
+ * ],
21
+ * };
22
+ *
23
+ * Requires: stylelint ^16.0.0
24
+ *
25
+ * Phase 3B (RFC-0001 §4.6) — ships shareable config; consumers integrate into their CI.
26
+ */
27
+ module.exports = {
28
+ rules: {
29
+ /* Hex colors — must use design tokens instead.
30
+ * Exception: --color-hf-white / --color-hf-black (#FFFFFF / #000000) are still OK
31
+ * via their tokens, but raw #fff / #000 in stylesheets is disallowed too.
32
+ */
33
+ 'color-no-hex': [true, {
34
+ message: 'Disallowed hex color. Use a design-system token instead, e.g. `var(--color-hf-accent)`, `var(--color-hf-fg)`, or `var(--color-hf-status-success)`.',
35
+ severity: 'error',
36
+ }],
37
+
38
+ /* Disallow named CSS colors (red, blue, etc.) — even more error-prone than hex. */
39
+ 'color-named': ['never', {
40
+ ignore: ['inside-function'],
41
+ message: 'Disallowed named color. Use a design-system token, e.g. `var(--color-hf-accent)`.',
42
+ }],
43
+
44
+ /* Forbid rolling your own box-shadow declarations — must reference a token. */
45
+ 'declaration-property-value-disallowed-list': [
46
+ {
47
+ 'box-shadow': ['/^\\s*\\d/'], // anything starting with a number = literal shadow
48
+ },
49
+ {
50
+ message: 'Disallowed literal `box-shadow`. Use `var(--shadow-hf-default)`, `--shadow-hf-modal`, `--shadow-hf-card`, `--shadow-hf-subtle`, `--shadow-hf-outline`, or `--shadow-hf-hover`.',
51
+ severity: 'error',
52
+ },
53
+ ],
54
+
55
+ /* Forbid arbitrary-value Tailwind utilities like `bg-[#26ADE4]` in HTML/JSX.
56
+ * Stylelint by itself can't lint HTML — this rule scopes to `@apply` directives.
57
+ * For full Tailwind arbitrary-value linting in HTML/JSX, use ESLint
58
+ * `eslint-plugin-tailwindcss` with the `no-arbitrary-value` rule. */
59
+ 'declaration-property-value-disallowed-list': [
60
+ {
61
+ '/^.*$/': ['/bg-\\[#/', '/text-\\[#/', '/border-\\[#/'],
62
+ },
63
+ {
64
+ message: 'Disallowed Tailwind arbitrary hex (e.g. `bg-[#26ADE4]`). Use a token utility like `bg-hf-accent`.',
65
+ severity: 'warning', // warning because @apply usage of arbitrary values is rare
66
+ },
67
+ ],
68
+ },
69
+ };
@@ -0,0 +1,158 @@
1
+ /*
2
+ * HotelFriend design tokens — Tailwind v4 CSS theme
3
+ * Generated from docs/tokens.figma.json — do NOT edit by hand.
4
+ *
5
+ * Usage in your main CSS entry file:
6
+ * @import "tailwindcss";
7
+ * @import "./pre-built/tailwind.css";
8
+ *
9
+ * Tailwind v4 auto-generates utilities from @theme variables:
10
+ * --color-* → bg-*, text-*, border-*, ring-*, …
11
+ * --text-* → text-*
12
+ * --font-* → font-* (family)
13
+ * --font-weight-*→ font-* (weight)
14
+ * --leading-* → leading-*
15
+ * --radius-* → rounded-*
16
+ * --shadow-* → shadow-*
17
+ * --z-* → z-*
18
+ */
19
+ @theme {
20
+ /* Colors */
21
+ --color-hf-blue-50: #E9F6FC;
22
+ --color-hf-blue-100: #EFF6FF;
23
+ --color-hf-blue-500: #24AFE8;
24
+ --color-hf-blue-600: #149AD1;
25
+ --color-hf-gray-25: #FBFBFC;
26
+ --color-hf-gray-50: #F6F7FB;
27
+ --color-hf-gray-100: #F1F3F6;
28
+ --color-hf-gray-200: #E4E8EF;
29
+ --color-hf-gray-300: #D1D6DD;
30
+ --color-hf-gray-400: #AEBCCF;
31
+ --color-hf-gray-500: #99A1B7;
32
+ --color-hf-gray-550: #7E8EA6;
33
+ --color-hf-gray-600: #50627E;
34
+ --color-hf-gray-700: #485B78;
35
+ --color-hf-gray-800: #4B5675;
36
+ --color-hf-gray-900: #2B2B2B;
37
+ --color-hf-gray-950: #252F4A;
38
+ --color-hf-green-500: #59B59D;
39
+ --color-hf-amber-400: #FFBD5A;
40
+ --color-hf-amber-600: #FFC900;
41
+ --color-hf-red-400: #EA6565;
42
+ --color-hf-red-500: #FB5A56;
43
+ --color-hf-red-700: #D9534F;
44
+ --color-hf-orange-500: #F87921;
45
+ --color-hf-orange-700: #A55505;
46
+ --color-hf-violet-500: #5761D8;
47
+ --color-hf-slate-500: #7F8FA4;
48
+ --color-hf-olive-700: #5B7A02;
49
+ --color-hf-white: #FFFFFF;
50
+ --color-hf-black: #000000;
51
+ --color-hf-accent: var(--color-hf-blue-500);
52
+ --color-hf-accent-hover: var(--color-hf-blue-600);
53
+ --color-hf-accent-subtle: var(--color-hf-blue-50);
54
+ --color-hf-accent-subtler: var(--color-hf-blue-100);
55
+ --color-hf-on-accent: var(--color-hf-white);
56
+ --color-hf-bg-page: var(--color-hf-gray-25);
57
+ --color-hf-bg-section: var(--color-hf-gray-50);
58
+ --color-hf-bg-muted: var(--color-hf-gray-100);
59
+ --color-hf-bg-surface: var(--color-hf-white);
60
+ --color-hf-fg: var(--color-hf-gray-900);
61
+ --color-hf-fg-muted: var(--color-hf-gray-800);
62
+ --color-hf-fg-subtle: var(--color-hf-gray-550);
63
+ --color-hf-fg-faint: var(--color-hf-gray-400);
64
+ --color-hf-border: var(--color-hf-gray-300);
65
+ --color-hf-border-subtle: var(--color-hf-gray-200);
66
+ --color-hf-border-strong: var(--color-hf-gray-400);
67
+ --color-hf-tab-fg-inactive: var(--color-hf-gray-700);
68
+ --color-hf-tab-count-fg: var(--color-hf-gray-700);
69
+ --color-hf-pagination-fg-inactive: var(--color-hf-gray-700);
70
+ --color-hf-pagination-fg-active: var(--color-hf-gray-950);
71
+ --color-hf-input-border: #DBDFE9;
72
+ --color-hf-menu-bg-hover: #F5F5F5;
73
+ --color-hf-status-success: var(--color-hf-green-500);
74
+ --color-hf-status-success-bg: rgba(89,181,157,0.15);
75
+ --color-hf-status-warning: var(--color-hf-amber-400);
76
+ --color-hf-status-warning-bg: rgba(255,189,90,0.15);
77
+ --color-hf-status-warning-strong: var(--color-hf-amber-600);
78
+ --color-hf-status-warning-strong-bg: rgba(255,201,0,0.15);
79
+ --color-hf-status-error: var(--color-hf-red-400);
80
+ --color-hf-status-error-bg: rgba(234,101,101,0.15);
81
+ --color-hf-status-error-strong: var(--color-hf-red-700);
82
+ --color-hf-status-error-alt: var(--color-hf-red-500);
83
+ --color-hf-status-info: var(--color-hf-accent);
84
+ --color-hf-status-info-bg: rgba(36,175,232,0.15);
85
+ --color-hf-status-cancel: var(--color-hf-slate-500);
86
+ --color-hf-status-cancel-bg: rgba(127,143,164,0.15);
87
+ --color-hf-status-coral: var(--color-hf-orange-500);
88
+ --color-hf-status-coral-bg: rgba(248,121,33,0.15);
89
+ --color-hf-status-violet: var(--color-hf-violet-500);
90
+ --color-hf-status-violet-bg: rgba(87,97,216,0.15);
91
+ --color-hf-status-olive: var(--color-hf-olive-700);
92
+ --color-hf-status-olive-bg: rgba(91,122,2,0.15);
93
+ --color-hf-status-orange-deep: var(--color-hf-orange-700);
94
+ --color-hf-status-orange-deep-bg: rgba(165,85,5,0.15);
95
+ /* Typography — font families */
96
+ --font-hf-sans: Roboto;
97
+ /* Typography — font weights */
98
+ --font-weight-hf-regular: 400;
99
+ --font-weight-hf-medium: 500;
100
+ --font-weight-hf-semibold: 600;
101
+ /* Typography — font sizes */
102
+ --text-hf-xs: 11px;
103
+ --text-hf-sm: 13px;
104
+ --text-hf-base: 14px;
105
+ --text-hf-md: 15px;
106
+ --text-hf-lg: 16px;
107
+ --text-hf-xl: 18px;
108
+ --text-hf-2xl: 20px;
109
+ --text-hf-h2: 24px;
110
+ --text-hf-page: 26px;
111
+ --text-hf-hero: 30px;
112
+ /* Typography — line heights */
113
+ --leading-hf-headings: 1.2;
114
+ --leading-hf-body: 1.5;
115
+ --leading-hf-tight: 1;
116
+ /* Border radius */
117
+ --radius-hf-sm: 6px;
118
+ --radius-hf-md: 8px;
119
+ --radius-hf-lg: 9px;
120
+ --radius-hf-xl: 12px;
121
+ --radius-hf-pill: 99px;
122
+ /* Spacing */
123
+ --spacing-hf-0: 0px;
124
+ --spacing-hf-1: 4px;
125
+ --spacing-hf-2: 8px;
126
+ --spacing-hf-3: 12px;
127
+ --spacing-hf-4: 16px;
128
+ --spacing-hf-5: 20px;
129
+ --spacing-hf-6: 24px;
130
+ --spacing-hf-7: 30px;
131
+ --spacing-hf-8: 32px;
132
+ --spacing-hf-sidebar-expanded: 215px;
133
+ --spacing-hf-sidebar-collapsed: 80px;
134
+ --spacing-hf-header-height: 60px;
135
+ --spacing-hf-content-max: 1440px;
136
+ --spacing-hf-btn-default: 40px;
137
+ --spacing-hf-btn-sm: 32px;
138
+ --spacing-hf-btn-search: 38px;
139
+ --spacing-hf-input-default: 39px;
140
+ --spacing-hf-tap-target: 44px;
141
+ /* Shadows */
142
+ --shadow-hf: 0px 1px 8px 0px rgba(0,0,0,0.1);
143
+ --shadow-hf-subtle: 0px 2px 4px 0px rgba(0,0,0,0.05);
144
+ --shadow-hf-wrapper: 0px 3px 4px 0px rgba(0,0,0,0.03);
145
+ --shadow-hf-card: 0px 12px 24px 0px rgba(26,26,30,0.06);
146
+ --shadow-hf-modal: 0px 6px 18px 0px rgba(0,0,0,0.1);
147
+ --shadow-hf-outline: 0px 1px 2px 0px rgba(72,91,120,0.18);
148
+ --shadow-hf-hover: 0px 2px 3px 0px rgba(0,0,0,0.06);
149
+ /* Z-index */
150
+ --z-hf-sidebar: 1000;
151
+ --z-hf-dropdown: 1001;
152
+ --z-hf-datepicker: 3000;
153
+ --z-hf-sticky-topbar: 4000;
154
+ --z-hf-modal-backdrop: 10050;
155
+ --z-hf-modal-dialog: 10051;
156
+ --z-hf-preloader: 99999;
157
+ --z-hf-topmost-overlay: 1000001;
158
+ }
@@ -0,0 +1,158 @@
1
+ /*
2
+ * HotelFriend design tokens — Tailwind v4 CSS theme
3
+ * Generated from docs/tokens.figma.json — do NOT edit by hand.
4
+ *
5
+ * Usage in your main CSS entry file:
6
+ * @import "tailwindcss";
7
+ * @import "./pre-built/tailwind.css";
8
+ *
9
+ * Tailwind v4 auto-generates utilities from @theme variables:
10
+ * --color-* → bg-*, text-*, border-*, ring-*, …
11
+ * --text-* → text-*
12
+ * --font-* → font-* (family)
13
+ * --font-weight-*→ font-* (weight)
14
+ * --leading-* → leading-*
15
+ * --radius-* → rounded-*
16
+ * --shadow-* → shadow-*
17
+ * --z-* → z-*
18
+ */
19
+ @theme {
20
+ /* Colors */
21
+ --color-hf-blue-50: #E9F6FC;
22
+ --color-hf-blue-100: #EFF6FF;
23
+ --color-hf-blue-500: #24AFE8;
24
+ --color-hf-blue-600: #149AD1;
25
+ --color-hf-gray-25: #FBFBFC;
26
+ --color-hf-gray-50: #F6F7FB;
27
+ --color-hf-gray-100: #F1F3F6;
28
+ --color-hf-gray-200: #E4E8EF;
29
+ --color-hf-gray-300: #D1D6DD;
30
+ --color-hf-gray-400: #AEBCCF;
31
+ --color-hf-gray-500: #99A1B7;
32
+ --color-hf-gray-550: #7E8EA6;
33
+ --color-hf-gray-600: #50627E;
34
+ --color-hf-gray-700: #485B78;
35
+ --color-hf-gray-800: #4B5675;
36
+ --color-hf-gray-900: #2B2B2B;
37
+ --color-hf-gray-950: #252F4A;
38
+ --color-hf-green-500: #59B59D;
39
+ --color-hf-amber-400: #FFBD5A;
40
+ --color-hf-amber-600: #FFC900;
41
+ --color-hf-red-400: #EA6565;
42
+ --color-hf-red-500: #FB5A56;
43
+ --color-hf-red-700: #D9534F;
44
+ --color-hf-orange-500: #F87921;
45
+ --color-hf-orange-700: #A55505;
46
+ --color-hf-violet-500: #5761D8;
47
+ --color-hf-slate-500: #7F8FA4;
48
+ --color-hf-olive-700: #5B7A02;
49
+ --color-hf-white: #FFFFFF;
50
+ --color-hf-black: #000000;
51
+ --color-hf-accent: var(--color-hf-blue-500);
52
+ --color-hf-accent-hover: var(--color-hf-blue-600);
53
+ --color-hf-accent-subtle: var(--color-hf-blue-50);
54
+ --color-hf-accent-subtler: var(--color-hf-blue-100);
55
+ --color-hf-on-accent: var(--color-hf-white);
56
+ --color-hf-bg-page: var(--color-hf-gray-25);
57
+ --color-hf-bg-section: var(--color-hf-gray-50);
58
+ --color-hf-bg-muted: var(--color-hf-gray-100);
59
+ --color-hf-bg-surface: var(--color-hf-white);
60
+ --color-hf-fg: var(--color-hf-gray-900);
61
+ --color-hf-fg-muted: var(--color-hf-gray-800);
62
+ --color-hf-fg-subtle: var(--color-hf-gray-550);
63
+ --color-hf-fg-faint: var(--color-hf-gray-400);
64
+ --color-hf-border: var(--color-hf-gray-300);
65
+ --color-hf-border-subtle: var(--color-hf-gray-200);
66
+ --color-hf-border-strong: var(--color-hf-gray-400);
67
+ --color-hf-tab-fg-inactive: var(--color-hf-gray-700);
68
+ --color-hf-tab-count-fg: var(--color-hf-gray-700);
69
+ --color-hf-pagination-fg-inactive: var(--color-hf-gray-700);
70
+ --color-hf-pagination-fg-active: var(--color-hf-gray-950);
71
+ --color-hf-input-border: #DBDFE9;
72
+ --color-hf-menu-bg-hover: #F5F5F5;
73
+ --color-hf-status-success: var(--color-hf-green-500);
74
+ --color-hf-status-success-bg: rgba(89,181,157,0.15);
75
+ --color-hf-status-warning: var(--color-hf-amber-400);
76
+ --color-hf-status-warning-bg: rgba(255,189,90,0.15);
77
+ --color-hf-status-warning-strong: var(--color-hf-amber-600);
78
+ --color-hf-status-warning-strong-bg: rgba(255,201,0,0.15);
79
+ --color-hf-status-error: var(--color-hf-red-400);
80
+ --color-hf-status-error-bg: rgba(234,101,101,0.15);
81
+ --color-hf-status-error-strong: var(--color-hf-red-700);
82
+ --color-hf-status-error-alt: var(--color-hf-red-500);
83
+ --color-hf-status-info: var(--color-hf-accent);
84
+ --color-hf-status-info-bg: rgba(36,175,232,0.15);
85
+ --color-hf-status-cancel: var(--color-hf-slate-500);
86
+ --color-hf-status-cancel-bg: rgba(127,143,164,0.15);
87
+ --color-hf-status-coral: var(--color-hf-orange-500);
88
+ --color-hf-status-coral-bg: rgba(248,121,33,0.15);
89
+ --color-hf-status-violet: var(--color-hf-violet-500);
90
+ --color-hf-status-violet-bg: rgba(87,97,216,0.15);
91
+ --color-hf-status-olive: var(--color-hf-olive-700);
92
+ --color-hf-status-olive-bg: rgba(91,122,2,0.15);
93
+ --color-hf-status-orange-deep: var(--color-hf-orange-700);
94
+ --color-hf-status-orange-deep-bg: rgba(165,85,5,0.15);
95
+ /* Typography — font families */
96
+ --font-hf-sans: Roboto;
97
+ /* Typography — font weights */
98
+ --font-weight-hf-regular: 400;
99
+ --font-weight-hf-medium: 500;
100
+ --font-weight-hf-semibold: 600;
101
+ /* Typography — font sizes */
102
+ --text-hf-xs: 11px;
103
+ --text-hf-sm: 13px;
104
+ --text-hf-base: 14px;
105
+ --text-hf-md: 15px;
106
+ --text-hf-lg: 16px;
107
+ --text-hf-xl: 18px;
108
+ --text-hf-2xl: 20px;
109
+ --text-hf-h2: 24px;
110
+ --text-hf-page: 26px;
111
+ --text-hf-hero: 30px;
112
+ /* Typography — line heights */
113
+ --leading-hf-headings: 1.2;
114
+ --leading-hf-body: 1.5;
115
+ --leading-hf-tight: 1;
116
+ /* Border radius */
117
+ --radius-hf-sm: 6px;
118
+ --radius-hf-md: 8px;
119
+ --radius-hf-lg: 9px;
120
+ --radius-hf-xl: 12px;
121
+ --radius-hf-pill: 99px;
122
+ /* Spacing */
123
+ --spacing-hf-0: 0px;
124
+ --spacing-hf-1: 4px;
125
+ --spacing-hf-2: 8px;
126
+ --spacing-hf-3: 12px;
127
+ --spacing-hf-4: 16px;
128
+ --spacing-hf-5: 20px;
129
+ --spacing-hf-6: 24px;
130
+ --spacing-hf-7: 30px;
131
+ --spacing-hf-8: 32px;
132
+ --spacing-hf-sidebar-expanded: 215px;
133
+ --spacing-hf-sidebar-collapsed: 80px;
134
+ --spacing-hf-header-height: 60px;
135
+ --spacing-hf-content-max: 1440px;
136
+ --spacing-hf-btn-default: 40px;
137
+ --spacing-hf-btn-sm: 32px;
138
+ --spacing-hf-btn-search: 38px;
139
+ --spacing-hf-input-default: 39px;
140
+ --spacing-hf-tap-target: 44px;
141
+ /* Shadows */
142
+ --shadow-hf: 0px 1px 8px 0px rgba(0,0,0,0.1);
143
+ --shadow-hf-subtle: 0px 2px 4px 0px rgba(0,0,0,0.05);
144
+ --shadow-hf-wrapper: 0px 3px 4px 0px rgba(0,0,0,0.03);
145
+ --shadow-hf-card: 0px 12px 24px 0px rgba(26,26,30,0.06);
146
+ --shadow-hf-modal: 0px 6px 18px 0px rgba(0,0,0,0.1);
147
+ --shadow-hf-outline: 0px 1px 2px 0px rgba(72,91,120,0.18);
148
+ --shadow-hf-hover: 0px 2px 3px 0px rgba(0,0,0,0.06);
149
+ /* Z-index */
150
+ --z-hf-sidebar: 1000;
151
+ --z-hf-dropdown: 1001;
152
+ --z-hf-datepicker: 3000;
153
+ --z-hf-sticky-topbar: 4000;
154
+ --z-hf-modal-backdrop: 10050;
155
+ --z-hf-modal-dialog: 10051;
156
+ --z-hf-preloader: 99999;
157
+ --z-hf-topmost-overlay: 1000001;
158
+ }