@lancar/lxui 1.0.0 → 1.0.2

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.
Files changed (90) hide show
  1. package/CHANGELOG.md +222 -55
  2. package/LICENSE +1 -1
  3. package/README.md +224 -68
  4. package/fonts/accessibility/accessibility.css +34 -0
  5. package/fonts/accessibility/accessibility.min.css +2 -0
  6. package/fonts/accessibility/atkinson-hyperlegible/AtkinsonHyperlegible-400.woff2 +0 -0
  7. package/fonts/accessibility/atkinson-hyperlegible/AtkinsonHyperlegible-400Italic.woff2 +0 -0
  8. package/fonts/accessibility/atkinson-hyperlegible/AtkinsonHyperlegible-700.woff2 +0 -0
  9. package/fonts/accessibility/atkinson-hyperlegible/atkinson-hyperlegible.css +30 -0
  10. package/fonts/accessibility/atkinson-hyperlegible/atkinson-hyperlegible.min.css +2 -0
  11. package/fonts/fonts.css +357 -0
  12. package/fonts/fonts.min.css +2 -0
  13. package/fonts/mono/fira-code/FiraCode-400.woff2 +0 -0
  14. package/fonts/mono/fira-code/FiraCode-500.woff2 +0 -0
  15. package/fonts/mono/fira-code/FiraCode-700.woff2 +0 -0
  16. package/fonts/mono/fira-code/fira-code.css +30 -0
  17. package/fonts/mono/fira-code/fira-code.min.css +2 -0
  18. package/fonts/mono/jetbrains-mono/JetBrainsMono-400.woff2 +0 -0
  19. package/fonts/mono/jetbrains-mono/JetBrainsMono-500.woff2 +0 -0
  20. package/fonts/mono/jetbrains-mono/JetBrainsMono-700.woff2 +0 -0
  21. package/fonts/mono/jetbrains-mono/jetbrains-mono.css +30 -0
  22. package/fonts/mono/jetbrains-mono/jetbrains-mono.min.css +2 -0
  23. package/fonts/mono/mono.css +61 -0
  24. package/fonts/mono/mono.min.css +2 -0
  25. package/fonts/sans/ibm-plex-sans/IBMPlexSans-400.woff2 +0 -0
  26. package/fonts/sans/ibm-plex-sans/IBMPlexSans-400Italic.woff2 +0 -0
  27. package/fonts/sans/ibm-plex-sans/IBMPlexSans-500.woff2 +0 -0
  28. package/fonts/sans/ibm-plex-sans/IBMPlexSans-600.woff2 +0 -0
  29. package/fonts/sans/ibm-plex-sans/IBMPlexSans-700.woff2 +0 -0
  30. package/fonts/sans/ibm-plex-sans/ibm-plex-sans.css +48 -0
  31. package/fonts/sans/ibm-plex-sans/ibm-plex-sans.min.css +2 -0
  32. package/fonts/sans/inter/Inter-400.woff2 +0 -0
  33. package/fonts/sans/inter/Inter-500.woff2 +0 -0
  34. package/fonts/sans/inter/Inter-600.woff2 +0 -0
  35. package/fonts/sans/inter/Inter-700.woff2 +0 -0
  36. package/fonts/sans/inter/inter.css +39 -0
  37. package/fonts/sans/inter/inter.min.css +2 -0
  38. package/fonts/sans/manrope/Manrope-400.woff2 +0 -0
  39. package/fonts/sans/manrope/Manrope-500.woff2 +0 -0
  40. package/fonts/sans/manrope/Manrope-600.woff2 +0 -0
  41. package/fonts/sans/manrope/Manrope-700.woff2 +0 -0
  42. package/fonts/sans/manrope/manrope.css +39 -0
  43. package/fonts/sans/manrope/manrope.min.css +2 -0
  44. package/fonts/sans/plus-jakarta-sans/PlusJakartaSans-400.woff2 +0 -0
  45. package/fonts/sans/plus-jakarta-sans/PlusJakartaSans-400Italic.woff2 +0 -0
  46. package/fonts/sans/plus-jakarta-sans/PlusJakartaSans-500.woff2 +0 -0
  47. package/fonts/sans/plus-jakarta-sans/PlusJakartaSans-600.woff2 +0 -0
  48. package/fonts/sans/plus-jakarta-sans/PlusJakartaSans-700.woff2 +0 -0
  49. package/fonts/sans/plus-jakarta-sans/plus-jakarta-sans.css +48 -0
  50. package/fonts/sans/plus-jakarta-sans/plus-jakarta-sans.min.css +2 -0
  51. package/fonts/sans/sans.css +169 -0
  52. package/fonts/sans/sans.min.css +2 -0
  53. package/fonts/serif/literata/Literata-400.woff2 +0 -0
  54. package/fonts/serif/literata/Literata-400Italic.woff2 +0 -0
  55. package/fonts/serif/literata/Literata-600.woff2 +0 -0
  56. package/fonts/serif/literata/Literata-700.woff2 +0 -0
  57. package/fonts/serif/literata/literata.css +39 -0
  58. package/fonts/serif/literata/literata.min.css +2 -0
  59. package/fonts/serif/merriweather/Merriweather-400.woff2 +0 -0
  60. package/fonts/serif/merriweather/Merriweather-400Italic.woff2 +0 -0
  61. package/fonts/serif/merriweather/Merriweather-700.woff2 +0 -0
  62. package/fonts/serif/merriweather/merriweather.css +30 -0
  63. package/fonts/serif/merriweather/merriweather.min.css +2 -0
  64. package/fonts/serif/serif.css +106 -0
  65. package/fonts/serif/serif.min.css +2 -0
  66. package/fonts/serif/source-serif-4/SourceSerif4-400.woff2 +0 -0
  67. package/fonts/serif/source-serif-4/SourceSerif4-400Italic.woff2 +0 -0
  68. package/fonts/serif/source-serif-4/SourceSerif4-600.woff2 +0 -0
  69. package/fonts/serif/source-serif-4/SourceSerif4-700.woff2 +0 -0
  70. package/fonts/serif/source-serif-4/source-serif-4.css +39 -0
  71. package/fonts/serif/source-serif-4/source-serif-4.min.css +2 -0
  72. package/lx-grid.min.css +2 -2
  73. package/lx-utilities.min.css +2 -2
  74. package/lxeditor.min.css +2 -2
  75. package/lxfonts.min.css +2 -2
  76. package/lxicons.min.css +2 -2
  77. package/lxthemes.min.css +2 -2
  78. package/lxui.bundle.min.js +5 -5
  79. package/lxui.esm.min.js +3 -3
  80. package/lxui.js +3 -3
  81. package/lxui.min.css +1 -1
  82. package/lxui.min.js +3 -3
  83. package/lxui.rtl.min.css +1 -1
  84. package/package.json +4 -9
  85. package/types/index.d.ts +1 -1
  86. package/lxui.bundle.js +0 -540
  87. package/lxui.css +0 -2163
  88. package/lxui.esm.js +0 -669
  89. package/lxui.rtl.css +0 -2466
  90. package/marked.min.js +0 -69
package/lxui.rtl.css DELETED
@@ -1,2466 +0,0 @@
1
- /* ================================================================
2
- * LxUI RTL — Right-to-Left Support
3
- * Homepage : https://ui.lancar.id
4
- * CDN : https://cdn.lancar.id/ui/lxui.rtl.css
5
- * Usage : <html lang="ar" dir="rtl">
6
- * <link rel="stylesheet" href="https://cdn.lancar.id/ui/lxui.rtl.min.css">
7
- * Version : 1.0.0
8
- * License : MIT — Copyright (c) 2025 lancar.id
9
- * ================================================================ */
10
-
11
- /* ================================================================
12
- * LxUI — CSS Framework
13
- * Homepage : https://ui.lancar.id
14
- * CDN : https://cdn.lancar.id/ui/lxui.css
15
- * Version : 1.0.0
16
- * License : MIT — Copyright (c) 2025 lancar.id
17
- * ================================================================
18
- *
19
- * Structure
20
- * ─────────
21
- * §1 Core / Reset
22
- * §2 Design Tokens (CSS Variables)
23
- * §3 Typography
24
- * §4 Layout (Container, Grid, Flex, Stack)
25
- * §5 Utilities
26
- * §6 Components
27
- * §7 Forms
28
- *
29
- * ================================================================ */
30
-
31
-
32
- /* ================================================================
33
- §1 CORE / RESET
34
- ================================================================= */
35
-
36
- *,
37
- *::before,
38
- *::after {
39
- box-sizing: border-box;
40
- margin: 0;
41
- padding: 0;
42
- }
43
-
44
- html {
45
- font-size: 16px;
46
- scroll-behavior: smooth;
47
- tab-size: 4;
48
- -webkit-text-size-adjust: 100%;
49
- }
50
-
51
- body {
52
- min-height: 100vh;
53
- font-family: var(--lx-font-sans);
54
- font-size: var(--lx-text-base);
55
- line-height: 1.6;
56
- color: var(--lx-text);
57
- background-color: var(--lx-bg);
58
- -webkit-font-smoothing: antialiased;
59
- -moz-osx-font-smoothing: grayscale;
60
- text-rendering: optimizeLegibility;
61
- }
62
-
63
- img, svg, video, canvas, audio, iframe, embed, object {
64
- display: block;
65
- max-width: 100%;
66
- }
67
-
68
- input, button, textarea, select {
69
- font: inherit;
70
- color: inherit;
71
- margin: 0;
72
- }
73
-
74
- button { cursor: pointer; }
75
-
76
- p, h1, h2, h3, h4, h5, h6 { overflow-wrap: break-word; }
77
-
78
- ul[role="list"],
79
- ol[role="list"] { list-style: none; }
80
-
81
- a { color: inherit; text-decoration: none; }
82
-
83
- table {
84
- border-collapse: collapse;
85
- border-spacing: 0;
86
- }
87
-
88
- @media (prefers-reduced-motion: reduce) {
89
- *, *::before, *::after {
90
- animation-duration: 0.01ms !important;
91
- animation-iteration-count: 1 !important;
92
- transition-duration: 0.01ms !important;
93
- scroll-behavior: auto !important;
94
- }
95
- }
96
-
97
-
98
- /* ================================================================
99
- §2 DESIGN TOKENS
100
- ================================================================= */
101
-
102
- :root {
103
-
104
- /* ── Font families ── */
105
- --lx-font-system: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
106
- "Helvetica Neue", Arial, "Noto Sans", sans-serif,
107
- "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
108
- --lx-font-sans: "Plus Jakarta Sans", var(--lx-font-system);
109
- --lx-font-mono: "SFMono-Regular", "JetBrains Mono", Consolas,
110
- "Liberation Mono", Menlo, "Courier New", monospace;
111
- --lx-font-serif: "Source Serif Pro", Georgia, "Times New Roman", serif;
112
-
113
- /* ── Type scale ── */
114
- --lx-text-xs: clamp(0.65rem, 0.7vw + 0.4rem, 0.75rem);
115
- --lx-text-sm: clamp(0.8rem, 0.8vw + 0.45rem, 0.875rem);
116
- --lx-text-base: clamp(0.9rem, 1vw + 0.5rem, 1rem);
117
- --lx-text-lg: clamp(1rem, 1.1vw + 0.55rem, 1.125rem);
118
- --lx-text-xl: clamp(1.1rem, 1.3vw + 0.5rem, 1.25rem);
119
- --lx-text-2xl: clamp(1.2rem, 2vw + 0.5rem, 1.5rem);
120
- --lx-text-3xl: clamp(1.4rem, 3vw + 0.5rem, 1.875rem);
121
- --lx-text-4xl: clamp(1.6rem, 4vw + 0.5rem, 2.25rem);
122
- --lx-text-5xl: clamp(1.9rem, 5vw + 0.5rem, 3rem);
123
- --lx-text-6xl: clamp(2.2rem, 6vw + 0.5rem, 3.75rem);
124
-
125
- /* Display headings */
126
- --lx-text-d1: clamp(2.5rem, 8vw + 0.5rem, 5rem);
127
- --lx-text-d2: clamp(2.2rem, 7vw + 0.5rem, 4.5rem);
128
- --lx-text-d3: clamp(2rem, 6vw + 0.5rem, 4rem);
129
- --lx-text-d4: clamp(1.8rem, 5vw + 0.5rem, 3.5rem);
130
-
131
- /* ── Spacing ── */
132
- --lx-spacer: 1rem;
133
- --lx-space-px: 1px;
134
- --lx-space-0: 0;
135
- --lx-space-1: 0.25rem;
136
- --lx-space-2: 0.5rem;
137
- --lx-space-3: 0.75rem;
138
- --lx-space-4: 1rem;
139
- --lx-space-5: 1.25rem;
140
- --lx-space-6: 1.5rem;
141
- --lx-space-7: 1.75rem;
142
- --lx-space-8: 2rem;
143
- --lx-space-9: 2.25rem;
144
- --lx-space-10: 2.5rem;
145
- --lx-space-11: 2.75rem;
146
- --lx-space-12: 3rem;
147
- --lx-space-14: 3.5rem;
148
- --lx-space-16: 4rem;
149
- --lx-space-20: 5rem;
150
- --lx-space-24: 6rem;
151
- --lx-space-32: 8rem;
152
-
153
- /* ── Border radius ── */
154
- --lx-radius-none: 0;
155
- --lx-radius-xs: 2px;
156
- --lx-radius-sm: 4px;
157
- --lx-radius: 8px;
158
- --lx-radius-md: 12px;
159
- --lx-radius-lg: 16px;
160
- --lx-radius-xl: 24px;
161
- --lx-radius-2xl: 32px;
162
- --lx-radius-full: 9999px;
163
-
164
- /* ── Shadows ── */
165
- --lx-shadow-xs: 0 1px 2px 0 rgba(0,0,0,.04);
166
- --lx-shadow-sm: 0 1px 3px 0 rgba(0,0,0,.08), 0 1px 2px -1px rgba(0,0,0,.06);
167
- --lx-shadow: 0 4px 6px -1px rgba(0,0,0,.08), 0 2px 4px -2px rgba(0,0,0,.06);
168
- --lx-shadow-md: 0 8px 12px -2px rgba(0,0,0,.08), 0 4px 6px -3px rgba(0,0,0,.06);
169
- --lx-shadow-lg: 0 12px 20px -4px rgba(0,0,0,.10), 0 6px 8px -4px rgba(0,0,0,.07);
170
- --lx-shadow-xl: 0 20px 28px -6px rgba(0,0,0,.12), 0 10px 12px -5px rgba(0,0,0,.08);
171
- --lx-shadow-2xl:0 28px 40px -8px rgba(0,0,0,.14), 0 14px 16px -6px rgba(0,0,0,.08);
172
- --lx-shadow-inner: inset 0 2px 4px 0 rgba(0,0,0,.06);
173
-
174
- /* ── Transitions ── */
175
- --lx-ease: cubic-bezier(0.4, 0, 0.2, 1);
176
- --lx-ease-in: cubic-bezier(0.4, 0, 1, 1);
177
- --lx-ease-out: cubic-bezier(0, 0, 0.2, 1);
178
- --lx-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
179
- --lx-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
180
- --lx-duration-fast: 100ms;
181
- --lx-duration: 200ms;
182
- --lx-duration-slow: 300ms;
183
- --lx-transition: all var(--lx-duration) var(--lx-ease);
184
- --lx-transition-fast: all var(--lx-duration-fast) var(--lx-ease);
185
- --lx-transition-slow: all var(--lx-duration-slow) var(--lx-ease);
186
-
187
- /* ── Z-index ── */
188
- --lx-z-n1: -1;
189
- --lx-z-0: 0;
190
- --lx-z-10: 10;
191
- --lx-z-20: 20;
192
- --lx-z-30: 30;
193
- --lx-z-40: 40;
194
- --lx-z-50: 50;
195
- --lx-z-dropdown: 1000;
196
- --lx-z-sticky: 1020;
197
- --lx-z-fixed: 1030;
198
- --lx-z-offcanvas: 1040;
199
- --lx-z-modal-bg: 1050;
200
- --lx-z-modal: 1060;
201
- --lx-z-popover: 1070;
202
- --lx-z-tooltip: 1080;
203
- --lx-z-toast: 1090;
204
-
205
- /* ── Brand colors ── */
206
- --lx-primary: #3b82f6;
207
- --lx-primary-hover: #2563eb;
208
- --lx-primary-light: #93c5fd;
209
- --lx-primary-subtle: #eff6ff;
210
- --lx-primary-fg: #ffffff;
211
-
212
- --lx-secondary: #6b7280;
213
- --lx-secondary-hover: #4b5563;
214
- --lx-secondary-light: #d1d5db;
215
- --lx-secondary-subtle: #f9fafb;
216
- --lx-secondary-fg: #ffffff;
217
-
218
- --lx-success: #22c55e;
219
- --lx-success-hover: #16a34a;
220
- --lx-success-light: #86efac;
221
- --lx-success-subtle: #f0fdf4;
222
- --lx-success-fg: #ffffff;
223
-
224
- --lx-warning: #f59e0b;
225
- --lx-warning-hover: #d97706;
226
- --lx-warning-light: #fcd34d;
227
- --lx-warning-subtle: #fffbeb;
228
- --lx-warning-fg: #ffffff;
229
-
230
- --lx-danger: #ef4444;
231
- --lx-danger-hover: #dc2626;
232
- --lx-danger-light: #fca5a5;
233
- --lx-danger-subtle: #fef2f2;
234
- --lx-danger-fg: #ffffff;
235
-
236
- --lx-info: #06b6d4;
237
- --lx-info-hover: #0891b2;
238
- --lx-info-light: #67e8f9;
239
- --lx-info-subtle: #ecfeff;
240
- --lx-info-fg: #ffffff;
241
-
242
- --lx-dark: #111827;
243
- --lx-light: #f9fafb;
244
- --lx-white: #ffffff;
245
- --lx-black: #000000;
246
- --lx-transparent: transparent;
247
-
248
- /* ── Neutral grays ── */
249
- --lx-gray-50: #f9fafb;
250
- --lx-gray-100: #f3f4f6;
251
- --lx-gray-200: #e5e7eb;
252
- --lx-gray-300: #d1d5db;
253
- --lx-gray-400: #9ca3af;
254
- --lx-gray-500: #6b7280;
255
- --lx-gray-600: #4b5563;
256
- --lx-gray-700: #374151;
257
- --lx-gray-800: #1f2937;
258
- --lx-gray-900: #111827;
259
- --lx-gray-950: #030712;
260
-
261
- /* ── Text & background (default light) ── */
262
- --lx-text: #111827;
263
- --lx-text-secondary:#4b5563;
264
- --lx-text-muted: #9ca3af;
265
- --lx-text-disabled: #d1d5db;
266
- --lx-bg: #ffffff;
267
- --lx-bg-soft: #f9fafb;
268
- --lx-bg-muted: #f3f4f6;
269
- --lx-border: #e5e7eb;
270
- --lx-border-strong: #d1d5db;
271
-
272
- /* ── Component tokens ── */
273
- --lx-btn-padding-y: 0.5rem;
274
- --lx-btn-padding-x: 1rem;
275
- --lx-btn-font-size: var(--lx-text-sm);
276
- --lx-btn-font-weight: 600;
277
- --lx-btn-radius: var(--lx-radius);
278
- --lx-btn-transition: var(--lx-transition);
279
-
280
- --lx-card-padding: 1.5rem;
281
- --lx-card-radius: var(--lx-radius-md);
282
- --lx-card-shadow: var(--lx-shadow);
283
- --lx-card-border: 1px solid var(--lx-border);
284
-
285
- --lx-input-padding-y: 0.5rem;
286
- --lx-input-padding-x: 0.75rem;
287
- --lx-input-font-size: var(--lx-text-sm);
288
- --lx-input-radius: var(--lx-radius);
289
- --lx-input-border: 1px solid var(--lx-border-strong);
290
- --lx-input-bg: var(--lx-bg);
291
- --lx-input-focus-shadow: 0 0 0 3px rgba(59,130,246,.15);
292
-
293
- --lx-modal-radius: var(--lx-radius-lg);
294
- --lx-modal-shadow: var(--lx-shadow-xl);
295
- --lx-modal-backdrop: rgba(0,0,0,.5);
296
-
297
- --lx-tooltip-bg: var(--lx-gray-900);
298
- --lx-tooltip-color: var(--lx-white);
299
- --lx-tooltip-radius: var(--lx-radius-sm);
300
-
301
- --lx-badge-padding-y: 0.25em;
302
- --lx-badge-padding-x: 0.6em;
303
- --lx-badge-font-size: 0.75em;
304
- --lx-badge-font-weight: 600;
305
- --lx-badge-radius: var(--lx-radius-full);
306
-
307
- --lx-progress-height: 8px;
308
- --lx-progress-radius: var(--lx-radius-full);
309
- --lx-progress-bg: var(--lx-gray-200);
310
-
311
- --lx-breadcrumb-sep: '/';
312
-
313
- --lx-avatar-size: 2.5rem;
314
- --lx-avatar-font-size: 0.875rem;
315
- --lx-avatar-radius: var(--lx-radius-full);
316
-
317
- /* ── Container max-widths ── */
318
- --lx-container-sm: 640px;
319
- --lx-container-md: 768px;
320
- --lx-container-lg: 1024px;
321
- --lx-container-xl: 1280px;
322
- --lx-container-2xl: 1536px;
323
- --lx-container-pad: 1rem;
324
- }
325
-
326
-
327
- /* ================================================================
328
- §3 TYPOGRAPHY
329
- ================================================================= */
330
-
331
- h1, .lx-h1 { font-size: var(--lx-text-4xl); font-weight: 700; line-height: 1.2; letter-spacing: -0.03em; }
332
- h2, .lx-h2 { font-size: var(--lx-text-3xl); font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; }
333
- h3, .lx-h3 { font-size: var(--lx-text-2xl); font-weight: 700; line-height: 1.3; letter-spacing: -0.01em; }
334
- h4, .lx-h4 { font-size: var(--lx-text-xl); font-weight: 600; line-height: 1.35; }
335
- h5, .lx-h5 { font-size: var(--lx-text-lg); font-weight: 600; line-height: 1.4; }
336
- h6, .lx-h6 { font-size: var(--lx-text-base); font-weight: 600; line-height: 1.5; }
337
-
338
- h1,h2,h3,h4,h5,h6 {
339
- color: var(--lx-text);
340
- margin-top: 1.5em;
341
- margin-bottom: 0.5em;
342
- }
343
-
344
- .lx-display-1 { font-size: var(--lx-text-d1); font-weight: 700; line-height: 1.1; letter-spacing: -0.04em; }
345
- .lx-display-2 { font-size: var(--lx-text-d2); font-weight: 700; line-height: 1.1; letter-spacing: -0.04em; }
346
- .lx-display-3 { font-size: var(--lx-text-d3); font-weight: 700; line-height: 1.15; letter-spacing: -0.03em; }
347
- .lx-display-4 { font-size: var(--lx-text-d4); font-weight: 700; line-height: 1.2; letter-spacing: -0.03em; }
348
-
349
- p { margin-bottom: 1em; color: var(--lx-text); }
350
- p:last-child { margin-bottom: 0; }
351
-
352
- .lx-lead {
353
- font-size: var(--lx-text-lg);
354
- font-weight: 400;
355
- line-height: 1.7;
356
- color: var(--lx-text-secondary);
357
- }
358
-
359
- small, .lx-small { font-size: var(--lx-text-xs); color: var(--lx-text-muted); }
360
-
361
- strong, b { font-weight: 700; }
362
- em, i { font-style: italic; }
363
- mark { background: #fef08a; color: var(--lx-text); padding: 0 0.15em; border-radius: 2px; }
364
- del { color: var(--lx-text-muted); text-decoration: line-through; }
365
- ins { text-decoration: underline; text-decoration-color: var(--lx-success); }
366
-
367
- code {
368
- font-family: var(--lx-font-mono);
369
- font-size: 0.875em;
370
- background: var(--lx-bg-muted);
371
- border: 1px solid var(--lx-border);
372
- border-radius: var(--lx-radius-xs);
373
- padding: 0.1em 0.4em;
374
- color: var(--lx-danger);
375
- }
376
-
377
- pre {
378
- font-family: var(--lx-font-mono);
379
- font-size: var(--lx-text-sm);
380
- background: var(--lx-gray-950);
381
- color: #e2e8f0;
382
- border-radius: var(--lx-radius-md);
383
- padding: 1.25rem 1.5rem;
384
- overflow-x: auto;
385
- line-height: 1.65;
386
- }
387
-
388
- pre code {
389
- background: none;
390
- border: none;
391
- padding: 0;
392
- color: inherit;
393
- font-size: inherit;
394
- }
395
-
396
- kbd {
397
- font-family: var(--lx-font-mono);
398
- font-size: 0.85em;
399
- background: var(--lx-gray-100);
400
- border: 1px solid var(--lx-gray-300);
401
- border-bottom: 2px solid var(--lx-gray-300);
402
- border-radius: var(--lx-radius-xs);
403
- padding: 0.1em 0.45em;
404
- }
405
-
406
- blockquote, .lx-blockquote {
407
- border-left: 3px solid var(--lx-primary);
408
- padding: 1rem 1.5rem;
409
- margin: 1.5rem 0;
410
- background: var(--lx-primary-subtle);
411
- border-radius: 0 var(--lx-radius) var(--lx-radius) 0;
412
- font-style: italic;
413
- color: var(--lx-text-secondary);
414
- }
415
-
416
- .lx-blockquote-footer {
417
- font-size: var(--lx-text-sm);
418
- font-style: normal;
419
- font-weight: 600;
420
- color: var(--lx-text-muted);
421
- margin-top: 0.5rem;
422
- }
423
- .lx-blockquote-footer::before { content: "— "; }
424
-
425
- a {
426
- color: var(--lx-primary);
427
- text-decoration: none;
428
- transition: color var(--lx-duration-fast) var(--lx-ease);
429
- }
430
- a:hover { color: var(--lx-primary-hover); text-decoration: underline; }
431
- a:focus-visible {
432
- outline: 2px solid var(--lx-primary);
433
- outline-offset: 2px;
434
- border-radius: 2px;
435
- }
436
-
437
- hr {
438
- border: none;
439
- border-top: 1px solid var(--lx-border);
440
- margin: 1.5rem 0;
441
- }
442
-
443
- ::selection { background: rgba(59,130,246,.15); color: var(--lx-primary-hover); }
444
-
445
- /* Scrollbar */
446
- ::-webkit-scrollbar { width: 8px; height: 8px; }
447
- ::-webkit-scrollbar-track { background: var(--lx-bg-muted); }
448
- ::-webkit-scrollbar-thumb { background: var(--lx-gray-300); border-radius: 4px; }
449
- ::-webkit-scrollbar-thumb:hover { background: var(--lx-gray-400); }
450
-
451
-
452
- /* ================================================================
453
- §4 LAYOUT
454
- ================================================================= */
455
-
456
- /* Container */
457
- .lx-container {
458
- width: 100%;
459
- max-width: var(--lx-container-xl);
460
- margin-left: auto;
461
- margin-right: auto;
462
- padding-left: var(--lx-container-pad);
463
- padding-right: var(--lx-container-pad);
464
- }
465
- .lx-container-sm { max-width: var(--lx-container-sm); }
466
- .lx-container-md { max-width: var(--lx-container-md); }
467
- .lx-container-lg { max-width: var(--lx-container-lg); }
468
- .lx-container-xl { max-width: var(--lx-container-xl); }
469
- .lx-container-2xl { max-width: var(--lx-container-2xl); }
470
- .lx-container-fluid { max-width: 100%; }
471
-
472
- /* Grid */
473
- .lx-grid { display: grid; }
474
- .lx-cols-1 { grid-template-columns: repeat(1, minmax(0,1fr)); }
475
- .lx-cols-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
476
- .lx-cols-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
477
- .lx-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
478
- .lx-cols-5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
479
- .lx-cols-6 { grid-template-columns: repeat(6, minmax(0,1fr)); }
480
- .lx-cols-12 { grid-template-columns: repeat(12, minmax(0,1fr)); }
481
- .lx-cols-auto { grid-template-columns: repeat(auto-fit, minmax(200px,1fr)); }
482
-
483
- .lx-col-1 { grid-column: span 1 / span 1; }
484
- .lx-col-2 { grid-column: span 2 / span 2; }
485
- .lx-col-3 { grid-column: span 3 / span 3; }
486
- .lx-col-4 { grid-column: span 4 / span 4; }
487
- .lx-col-5 { grid-column: span 5 / span 5; }
488
- .lx-col-6 { grid-column: span 6 / span 6; }
489
- .lx-col-7 { grid-column: span 7 / span 7; }
490
- .lx-col-8 { grid-column: span 8 / span 8; }
491
- .lx-col-9 { grid-column: span 9 / span 9; }
492
- .lx-col-10 { grid-column: span 10 / span 10; }
493
- .lx-col-11 { grid-column: span 11 / span 11; }
494
- .lx-col-12 { grid-column: span 12 / span 12; }
495
- .lx-col-full { grid-column: 1 / -1; }
496
- .lx-col-offset-1 { margin-inline-start: calc(1/12*100%); }
497
- .lx-col-offset-2 { margin-inline-start: calc(2/12*100%); }
498
- .lx-col-offset-3 { margin-inline-start: calc(3/12*100%); }
499
- .lx-col-offset-4 { margin-inline-start: calc(4/12*100%); }
500
- .lx-col-offset-6 { margin-inline-start: calc(6/12*100%); }
501
-
502
- /* Flex */
503
- .lx-flex { display: flex; }
504
- .lx-inline-flex { display: inline-flex; }
505
- .lx-flex-row { flex-direction: row; }
506
- .lx-flex-col { flex-direction: column; }
507
- .lx-flex-row-reverse { flex-direction: row-reverse; }
508
- .lx-flex-col-reverse { flex-direction: column-reverse; }
509
- .lx-flex-wrap { flex-wrap: wrap; }
510
- .lx-flex-nowrap { flex-wrap: nowrap; }
511
- .lx-flex-1 { flex: 1 1 0%; }
512
- .lx-flex-auto { flex: 1 1 auto; }
513
- .lx-flex-none { flex: none; }
514
- .lx-grow { flex-grow: 1; }
515
- .lx-grow-0 { flex-grow: 0; }
516
- .lx-shrink { flex-shrink: 1; }
517
- .lx-shrink-0 { flex-shrink: 0; }
518
-
519
- .lx-justify-start { justify-content: flex-start; }
520
- .lx-justify-end { justify-content: flex-end; }
521
- .lx-justify-center { justify-content: center; }
522
- .lx-justify-between { justify-content: space-between; }
523
- .lx-justify-around { justify-content: space-around; }
524
- .lx-justify-evenly { justify-content: space-evenly; }
525
-
526
- .lx-items-start { align-items: flex-start; }
527
- .lx-items-end { align-items: flex-end; }
528
- .lx-items-center { align-items: center; }
529
- .lx-items-baseline { align-items: baseline; }
530
- .lx-items-stretch { align-items: stretch; }
531
-
532
- .lx-self-start { align-self: flex-start; }
533
- .lx-self-end { align-self: flex-end; }
534
- .lx-self-center { align-self: center; }
535
- .lx-self-stretch { align-self: stretch; }
536
- .lx-self-auto { align-self: auto; }
537
-
538
- .lx-content-start { align-content: flex-start; }
539
- .lx-content-center { align-content: center; }
540
- .lx-content-end { align-content: flex-end; }
541
- .lx-content-between { align-content: space-between; }
542
-
543
- /* Stack */
544
- .lx-stack { display: flex; flex-direction: column; }
545
- .lx-hstack { display: flex; flex-direction: row; align-items: center; }
546
-
547
- /* Order */
548
- .lx-order-first { order: -9999; }
549
- .lx-order-last { order: 9999; }
550
- .lx-order-1 { order: 1; } .lx-order-2 { order: 2; }
551
- .lx-order-3 { order: 3; } .lx-order-4 { order: 4; }
552
- .lx-order-5 { order: 5; } .lx-order-6 { order: 6; }
553
-
554
- /* Gap */
555
- .lx-gap-0 { gap: 0; }
556
- .lx-gap-1 { gap: var(--lx-space-1); }
557
- .lx-gap-2 { gap: var(--lx-space-2); }
558
- .lx-gap-3 { gap: var(--lx-space-3); }
559
- .lx-gap-4 { gap: var(--lx-space-4); }
560
- .lx-gap-5 { gap: var(--lx-space-5); }
561
- .lx-gap-6 { gap: var(--lx-space-6); }
562
- .lx-gap-8 { gap: var(--lx-space-8); }
563
- .lx-gap-10 { gap: var(--lx-space-10); }
564
- .lx-gap-12 { gap: var(--lx-space-12); }
565
- .lx-gap-16 { gap: var(--lx-space-16); }
566
- .lx-gap-x-2 { column-gap: var(--lx-space-2); }
567
- .lx-gap-x-4 { column-gap: var(--lx-space-4); }
568
- .lx-gap-x-6 { column-gap: var(--lx-space-6); }
569
- .lx-gap-x-8 { column-gap: var(--lx-space-8); }
570
- .lx-gap-y-2 { row-gap: var(--lx-space-2); }
571
- .lx-gap-y-4 { row-gap: var(--lx-space-4); }
572
- .lx-gap-y-6 { row-gap: var(--lx-space-6); }
573
- .lx-gap-y-8 { row-gap: var(--lx-space-8); }
574
-
575
-
576
- /* ================================================================
577
- §5 UTILITIES
578
- ================================================================= */
579
-
580
- /* Display */
581
- .lx-block { display: block; }
582
- .lx-inline { display: inline; }
583
- .lx-inline-block { display: inline-block; }
584
- .lx-grid-inline { display: inline-grid; }
585
- .lx-table-cell { display: table-cell; }
586
- .lx-contents { display: contents; }
587
- .lx-hidden { display: none !important; }
588
-
589
- /* Position */
590
- .lx-static { position: static; }
591
- .lx-relative { position: relative; }
592
- .lx-absolute { position: absolute; }
593
- .lx-fixed { position: fixed; }
594
- .lx-sticky { position: sticky; }
595
-
596
- .lx-top-0 { top: 0; } .lx-top-50 { top: 50%; } .lx-top-100 { top: 100%; }
597
- .lx-bottom-0 { bottom: 0; } .lx-bottom-50{ bottom: 50%; }
598
- .lx-start-0 { inset-inline-start: 0; } .lx-end-0 { inset-inline-end: 0; }
599
- .lx-start-50 { inset-inline-start: 50%; } .lx-end-50 { inset-inline-end: 50%; }
600
- .lx-inset-0 { inset: 0; }
601
-
602
- .lx-translate-middle { transform: translate(-50%,-50%); }
603
- .lx-translate-middle-x { transform: translateX(-50%); }
604
- .lx-translate-middle-y { transform: translateY(-50%); }
605
-
606
- .lx-sticky-top { position: sticky; top: 0; z-index: var(--lx-z-sticky); }
607
- .lx-fixed-top { position: fixed; top: 0; inset-inline: 0; z-index: var(--lx-z-fixed); }
608
- .lx-fixed-bottom { position: fixed; bottom: 0; inset-inline: 0; z-index: var(--lx-z-fixed); }
609
-
610
- /* Overflow */
611
- .lx-overflow-auto { overflow: auto; }
612
- .lx-overflow-hidden { overflow: hidden; }
613
- .lx-overflow-visible { overflow: visible; }
614
- .lx-overflow-scroll { overflow: scroll; }
615
- .lx-overflow-x-auto { overflow-x: auto; }
616
- .lx-overflow-y-auto { overflow-y: auto; }
617
- .lx-overflow-x-hidden{ overflow-x: hidden; }
618
- .lx-overflow-y-hidden{ overflow-y: hidden; }
619
-
620
- /* Sizing */
621
- .lx-w-auto { width: auto; }
622
- .lx-w-full { width: 100%; }
623
- .lx-w-screen { width: 100vw; }
624
- .lx-w-fit { width: fit-content; }
625
- .lx-w-1\/4 { width: 25%; } .lx-w-1\/3 { width: 33.333%; }
626
- .lx-w-1\/2 { width: 50%; } .lx-w-2\/3 { width: 66.666%; }
627
- .lx-w-3\/4 { width: 75%; }
628
- .lx-w-4 { width: 1rem; } .lx-w-8 { width: 2rem; }
629
- .lx-w-12 { width: 3rem; } .lx-w-16 { width: 4rem; }
630
- .lx-w-20 { width: 5rem; } .lx-w-24 { width: 6rem; }
631
- .lx-w-32 { width: 8rem; } .lx-w-40 { width: 10rem; }
632
- .lx-w-48 { width: 12rem; } .lx-w-64 { width: 16rem; }
633
-
634
- .lx-h-auto { height: auto; }
635
- .lx-h-full { height: 100%; }
636
- .lx-h-screen { height: 100vh; }
637
- .lx-h-fit { height: fit-content; }
638
- .lx-h-4 { height: 1rem; } .lx-h-8 { height: 2rem; }
639
- .lx-h-12 { height: 3rem; } .lx-h-16 { height: 4rem; }
640
- .lx-h-24 { height: 6rem; } .lx-h-32 { height: 8rem; }
641
- .lx-h-48 { height: 12rem; } .lx-h-64 { height: 16rem; }
642
-
643
- .lx-size-4 { width: 1rem; height: 1rem; }
644
- .lx-size-5 { width: 1.25rem;height: 1.25rem; }
645
- .lx-size-6 { width: 1.5rem; height: 1.5rem; }
646
- .lx-size-8 { width: 2rem; height: 2rem; }
647
- .lx-size-10 { width: 2.5rem; height: 2.5rem; }
648
- .lx-size-12 { width: 3rem; height: 3rem; }
649
- .lx-size-16 { width: 4rem; height: 4rem; }
650
- .lx-size-20 { width: 5rem; height: 5rem; }
651
- .lx-size-24 { width: 6rem; height: 6rem; }
652
-
653
- .lx-max-w-full { max-width: 100%; }
654
- .lx-max-w-screen-sm { max-width: 640px; }
655
- .lx-max-w-screen-md { max-width: 768px; }
656
- .lx-max-w-screen-lg { max-width: 1024px; }
657
- .lx-max-w-screen-xl { max-width: 1280px; }
658
- .lx-min-w-0 { min-width: 0; }
659
- .lx-min-h-screen { min-height: 100vh; }
660
-
661
- /* Spacing — Margin */
662
- .lx-m-0 { margin: 0; }
663
- .lx-m-auto { margin: auto; }
664
- .lx-mx-auto { margin-inline: auto; }
665
- .lx-m-1 { margin: var(--lx-space-1); } .lx-m-2 { margin: var(--lx-space-2); }
666
- .lx-m-3 { margin: var(--lx-space-3); } .lx-m-4 { margin: var(--lx-space-4); }
667
- .lx-m-5 { margin: var(--lx-space-5); } .lx-m-6 { margin: var(--lx-space-6); }
668
- .lx-m-8 { margin: var(--lx-space-8); } .lx-m-10 { margin: var(--lx-space-10); }
669
- .lx-m-12 { margin: var(--lx-space-12); } .lx-m-16 { margin: var(--lx-space-16); }
670
-
671
- .lx-mt-0 { margin-top: 0; } .lx-mb-0 { margin-bottom: 0; }
672
- .lx-mt-1 { margin-top: var(--lx-space-1); } .lx-mb-1 { margin-bottom: var(--lx-space-1); }
673
- .lx-mt-2 { margin-top: var(--lx-space-2); } .lx-mb-2 { margin-bottom: var(--lx-space-2); }
674
- .lx-mt-3 { margin-top: var(--lx-space-3); } .lx-mb-3 { margin-bottom: var(--lx-space-3); }
675
- .lx-mt-4 { margin-top: var(--lx-space-4); } .lx-mb-4 { margin-bottom: var(--lx-space-4); }
676
- .lx-mt-5 { margin-top: var(--lx-space-5); } .lx-mb-5 { margin-bottom: var(--lx-space-5); }
677
- .lx-mt-6 { margin-top: var(--lx-space-6); } .lx-mb-6 { margin-bottom: var(--lx-space-6); }
678
- .lx-mt-8 { margin-top: var(--lx-space-8); } .lx-mb-8 { margin-bottom: var(--lx-space-8); }
679
- .lx-mt-10{ margin-top: var(--lx-space-10); } .lx-mb-10{ margin-bottom: var(--lx-space-10); }
680
- .lx-mt-12{ margin-top: var(--lx-space-12); } .lx-mb-12{ margin-bottom: var(--lx-space-12); }
681
- .lx-mt-16{ margin-top: var(--lx-space-16); } .lx-mb-16{ margin-bottom: var(--lx-space-16); }
682
-
683
- .lx-ms-0 { margin-inline-start: 0; } .lx-me-0 { margin-inline-end: 0; }
684
- .lx-ms-1 { margin-inline-start: var(--lx-space-1); } .lx-me-1 { margin-inline-end: var(--lx-space-1); }
685
- .lx-ms-2 { margin-inline-start: var(--lx-space-2); } .lx-me-2 { margin-inline-end: var(--lx-space-2); }
686
- .lx-ms-3 { margin-inline-start: var(--lx-space-3); } .lx-me-3 { margin-inline-end: var(--lx-space-3); }
687
- .lx-ms-4 { margin-inline-start: var(--lx-space-4); } .lx-me-4 { margin-inline-end: var(--lx-space-4); }
688
- .lx-ms-6 { margin-inline-start: var(--lx-space-6); } .lx-me-6 { margin-inline-end: var(--lx-space-6); }
689
- .lx-ms-8 { margin-inline-start: var(--lx-space-8); } .lx-me-8 { margin-inline-end: var(--lx-space-8); }
690
- .lx-ms-auto { margin-inline-start: auto; } .lx-me-auto { margin-inline-end: auto; }
691
-
692
- .lx-mx-0 { margin-inline: 0; } .lx-my-0 { margin-block: 0; }
693
- .lx-mx-1 { margin-inline: var(--lx-space-1); }.lx-my-1 { margin-block: var(--lx-space-1); }
694
- .lx-mx-2 { margin-inline: var(--lx-space-2); }.lx-my-2 { margin-block: var(--lx-space-2); }
695
- .lx-mx-3 { margin-inline: var(--lx-space-3); }.lx-my-3 { margin-block: var(--lx-space-3); }
696
- .lx-mx-4 { margin-inline: var(--lx-space-4); }.lx-my-4 { margin-block: var(--lx-space-4); }
697
- .lx-mx-6 { margin-inline: var(--lx-space-6); }.lx-my-6 { margin-block: var(--lx-space-6); }
698
- .lx-mx-8 { margin-inline: var(--lx-space-8); }.lx-my-8 { margin-block: var(--lx-space-8); }
699
-
700
- /* Spacing — Padding */
701
- .lx-p-0 { padding: 0; }
702
- .lx-p-1 { padding: var(--lx-space-1); } .lx-p-2 { padding: var(--lx-space-2); }
703
- .lx-p-3 { padding: var(--lx-space-3); } .lx-p-4 { padding: var(--lx-space-4); }
704
- .lx-p-5 { padding: var(--lx-space-5); } .lx-p-6 { padding: var(--lx-space-6); }
705
- .lx-p-8 { padding: var(--lx-space-8); } .lx-p-10 { padding: var(--lx-space-10); }
706
- .lx-p-12 { padding: var(--lx-space-12); } .lx-p-16 { padding: var(--lx-space-16); }
707
-
708
- .lx-pt-0 { padding-top: 0; } .lx-pb-0 { padding-bottom: 0; }
709
- .lx-pt-1 { padding-top: var(--lx-space-1); } .lx-pb-1 { padding-bottom: var(--lx-space-1); }
710
- .lx-pt-2 { padding-top: var(--lx-space-2); } .lx-pb-2 { padding-bottom: var(--lx-space-2); }
711
- .lx-pt-3 { padding-top: var(--lx-space-3); } .lx-pb-3 { padding-bottom: var(--lx-space-3); }
712
- .lx-pt-4 { padding-top: var(--lx-space-4); } .lx-pb-4 { padding-bottom: var(--lx-space-4); }
713
- .lx-pt-5 { padding-top: var(--lx-space-5); } .lx-pb-5 { padding-bottom: var(--lx-space-5); }
714
- .lx-pt-6 { padding-top: var(--lx-space-6); } .lx-pb-6 { padding-bottom: var(--lx-space-6); }
715
- .lx-pt-8 { padding-top: var(--lx-space-8); } .lx-pb-8 { padding-bottom: var(--lx-space-8); }
716
- .lx-pt-10{ padding-top: var(--lx-space-10); } .lx-pb-10{ padding-bottom: var(--lx-space-10); }
717
- .lx-pt-12{ padding-top: var(--lx-space-12); } .lx-pb-12{ padding-bottom: var(--lx-space-12); }
718
- .lx-pt-16{ padding-top: var(--lx-space-16); } .lx-pb-16{ padding-bottom: var(--lx-space-16); }
719
-
720
- .lx-ps-0 { padding-inline-start: 0; } .lx-pe-0 { padding-inline-end: 0; }
721
- .lx-ps-1 { padding-inline-start: var(--lx-space-1); } .lx-pe-1 { padding-inline-end: var(--lx-space-1); }
722
- .lx-ps-2 { padding-inline-start: var(--lx-space-2); } .lx-pe-2 { padding-inline-end: var(--lx-space-2); }
723
- .lx-ps-3 { padding-inline-start: var(--lx-space-3); } .lx-pe-3 { padding-inline-end: var(--lx-space-3); }
724
- .lx-ps-4 { padding-inline-start: var(--lx-space-4); } .lx-pe-4 { padding-inline-end: var(--lx-space-4); }
725
- .lx-ps-6 { padding-inline-start: var(--lx-space-6); } .lx-pe-6 { padding-inline-end: var(--lx-space-6); }
726
- .lx-ps-8 { padding-inline-start: var(--lx-space-8); } .lx-pe-8 { padding-inline-end: var(--lx-space-8); }
727
-
728
- .lx-px-0 { padding-inline: 0; } .lx-py-0 { padding-block: 0; }
729
- .lx-px-1 { padding-inline: var(--lx-space-1); }.lx-py-1 { padding-block: var(--lx-space-1); }
730
- .lx-px-2 { padding-inline: var(--lx-space-2); }.lx-py-2 { padding-block: var(--lx-space-2); }
731
- .lx-px-3 { padding-inline: var(--lx-space-3); }.lx-py-3 { padding-block: var(--lx-space-3); }
732
- .lx-px-4 { padding-inline: var(--lx-space-4); }.lx-py-4 { padding-block: var(--lx-space-4); }
733
- .lx-px-5 { padding-inline: var(--lx-space-5); }.lx-py-5 { padding-block: var(--lx-space-5); }
734
- .lx-px-6 { padding-inline: var(--lx-space-6); }.lx-py-6 { padding-block: var(--lx-space-6); }
735
- .lx-px-8 { padding-inline: var(--lx-space-8); }.lx-py-8 { padding-block: var(--lx-space-8); }
736
- .lx-px-10 { padding-inline: var(--lx-space-10);}.lx-py-10 { padding-block: var(--lx-space-10); }
737
- .lx-px-12 { padding-inline: var(--lx-space-12);}.lx-py-12 { padding-block: var(--lx-space-12); }
738
- .lx-px-16 { padding-inline: var(--lx-space-16);}.lx-py-16 { padding-block: var(--lx-space-16); }
739
-
740
- /* Text */
741
- .lx-text-xs { font-size: var(--lx-text-xs); }
742
- .lx-text-sm { font-size: var(--lx-text-sm); }
743
- .lx-text-base { font-size: var(--lx-text-base); }
744
- .lx-text-lg { font-size: var(--lx-text-lg); }
745
- .lx-text-xl { font-size: var(--lx-text-xl); }
746
- .lx-text-2xl { font-size: var(--lx-text-2xl); }
747
- .lx-text-3xl { font-size: var(--lx-text-3xl); }
748
- .lx-text-4xl { font-size: var(--lx-text-4xl); }
749
- .lx-text-5xl { font-size: var(--lx-text-5xl); }
750
- .lx-text-6xl { font-size: var(--lx-text-6xl); }
751
-
752
- .lx-text-left { text-align: left; }
753
- .lx-text-center { text-align: center; }
754
- .lx-text-right { text-align: right; }
755
- .lx-text-justify { text-align: justify; }
756
- .lx-text-start { text-align: start; }
757
- .lx-text-end { text-align: end; }
758
-
759
- .lx-font-thin { font-weight: 100; }
760
- .lx-font-extralight { font-weight: 200; }
761
- .lx-font-light { font-weight: 300; }
762
- .lx-font-normal { font-weight: 400; }
763
- .lx-font-medium { font-weight: 500; }
764
- .lx-font-semibold { font-weight: 600; }
765
- .lx-font-bold { font-weight: 700; }
766
- .lx-font-extrabold { font-weight: 800; }
767
- .lx-font-black { font-weight: 900; }
768
-
769
- .lx-italic { font-style: italic; }
770
- .lx-not-italic{ font-style: normal; }
771
-
772
- .lx-uppercase { text-transform: uppercase; }
773
- .lx-lowercase { text-transform: lowercase; }
774
- .lx-capitalize { text-transform: capitalize; }
775
- .lx-normal-case{ text-transform: none; }
776
-
777
- .lx-underline { text-decoration-line: underline; }
778
- .lx-overline { text-decoration-line: overline; }
779
- .lx-line-through{ text-decoration-line: line-through; }
780
- .lx-no-underline{ text-decoration-line: none; }
781
-
782
- .lx-tracking-tighter { letter-spacing: -0.05em; }
783
- .lx-tracking-tight { letter-spacing: -0.025em; }
784
- .lx-tracking-normal { letter-spacing: 0; }
785
- .lx-tracking-wide { letter-spacing: 0.025em; }
786
- .lx-tracking-wider { letter-spacing: 0.05em; }
787
- .lx-tracking-widest { letter-spacing: 0.1em; }
788
-
789
- .lx-leading-none { line-height: 1; }
790
- .lx-leading-tight { line-height: 1.25; }
791
- .lx-leading-snug { line-height: 1.375; }
792
- .lx-leading-normal { line-height: 1.6; }
793
- .lx-leading-relaxed{ line-height: 1.75; }
794
- .lx-leading-loose { line-height: 2; }
795
-
796
- .lx-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
797
- .lx-text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
798
- .lx-whitespace-nowrap{ white-space: nowrap; }
799
- .lx-whitespace-pre { white-space: pre; }
800
- .lx-whitespace-wrap { white-space: normal; }
801
- .lx-break-all { word-break: break-all; }
802
- .lx-break-words { overflow-wrap: break-word; }
803
-
804
- .lx-line-clamp-1 { display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
805
- .lx-line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
806
- .lx-line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
807
- .lx-line-clamp-4 { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
808
-
809
- .lx-font-mono { font-family: var(--lx-font-mono); }
810
- .lx-font-sans { font-family: var(--lx-font-sans); }
811
- .lx-font-serif{ font-family: var(--lx-font-serif); }
812
-
813
- /* Colors */
814
- .lx-text-primary { color: var(--lx-primary); }
815
- .lx-text-secondary { color: var(--lx-text-secondary); }
816
- .lx-text-success { color: var(--lx-success); }
817
- .lx-text-warning { color: var(--lx-warning); }
818
- .lx-text-danger { color: var(--lx-danger); }
819
- .lx-text-info { color: var(--lx-info); }
820
- .lx-text-dark { color: var(--lx-dark); }
821
- .lx-text-light { color: var(--lx-gray-400); }
822
- .lx-text-white { color: #ffffff; }
823
- .lx-text-muted { color: var(--lx-text-muted); }
824
- .lx-text-body { color: var(--lx-text); }
825
- .lx-text-opacity-75{ opacity: .75; }
826
- .lx-text-opacity-50{ opacity: .50; }
827
- .lx-text-opacity-25{ opacity: .25; }
828
-
829
- /* Background */
830
- .lx-bg-primary { background-color: var(--lx-primary); color: var(--lx-primary-fg); }
831
- .lx-bg-secondary { background-color: var(--lx-secondary); color: var(--lx-secondary-fg); }
832
- .lx-bg-success { background-color: var(--lx-success); color: var(--lx-success-fg); }
833
- .lx-bg-warning { background-color: var(--lx-warning); color: var(--lx-warning-fg); }
834
- .lx-bg-danger { background-color: var(--lx-danger); color: var(--lx-danger-fg); }
835
- .lx-bg-info { background-color: var(--lx-info); color: var(--lx-info-fg); }
836
- .lx-bg-dark { background-color: var(--lx-dark); color: #ffffff; }
837
- .lx-bg-light { background-color: var(--lx-light); color: var(--lx-text); }
838
- .lx-bg-white { background-color: #ffffff; }
839
- .lx-bg-transparent { background-color: transparent; }
840
- .lx-bg-muted { background-color: var(--lx-bg-muted); }
841
- .lx-bg-soft { background-color: var(--lx-bg-soft); }
842
-
843
- .lx-bg-primary-soft { background-color: var(--lx-primary-subtle); color: var(--lx-primary); }
844
- .lx-bg-success-soft { background-color: var(--lx-success-subtle); color: var(--lx-success); }
845
- .lx-bg-warning-soft { background-color: var(--lx-warning-subtle); color: var(--lx-warning); }
846
- .lx-bg-danger-soft { background-color: var(--lx-danger-subtle); color: var(--lx-danger); }
847
- .lx-bg-info-soft { background-color: var(--lx-info-subtle); color: var(--lx-info); }
848
-
849
- .lx-bg-gradient-primary { background: linear-gradient(135deg, var(--lx-primary), var(--lx-primary-hover)); color: white; }
850
- .lx-bg-gradient-dark { background: linear-gradient(135deg, var(--lx-gray-800), var(--lx-gray-950)); color: white; }
851
-
852
- .lx-bg-opacity-10 { --lx-bg-alpha: .10; }
853
- .lx-bg-opacity-25 { --lx-bg-alpha: .25; }
854
- .lx-bg-opacity-50 { --lx-bg-alpha: .50; }
855
- .lx-bg-opacity-75 { --lx-bg-alpha: .75; }
856
-
857
- /* Borders */
858
- .lx-border { border: 1px solid var(--lx-border); }
859
- .lx-border-0 { border: none !important; }
860
- .lx-border-2 { border: 2px solid var(--lx-border); }
861
- .lx-border-t { border-top: 1px solid var(--lx-border); }
862
- .lx-border-b { border-bottom: 1px solid var(--lx-border); }
863
- .lx-border-s { border-inline-start: 1px solid var(--lx-border); }
864
- .lx-border-e { border-inline-end: 1px solid var(--lx-border); }
865
- .lx-border-t-0 { border-top: none; }
866
- .lx-border-b-0 { border-bottom: none; }
867
-
868
- .lx-border-primary { border-color: var(--lx-primary); }
869
- .lx-border-success { border-color: var(--lx-success); }
870
- .lx-border-warning { border-color: var(--lx-warning); }
871
- .lx-border-danger { border-color: var(--lx-danger); }
872
- .lx-border-white { border-color: #ffffff; }
873
- .lx-border-strong { border-color: var(--lx-border-strong); }
874
-
875
- .lx-rounded-none { border-radius: 0; }
876
- .lx-rounded-xs { border-radius: var(--lx-radius-xs); }
877
- .lx-rounded-sm { border-radius: var(--lx-radius-sm); }
878
- .lx-rounded { border-radius: var(--lx-radius); }
879
- .lx-rounded-md { border-radius: var(--lx-radius-md); }
880
- .lx-rounded-lg { border-radius: var(--lx-radius-lg); }
881
- .lx-rounded-xl { border-radius: var(--lx-radius-xl); }
882
- .lx-rounded-2xl { border-radius: var(--lx-radius-2xl); }
883
- .lx-rounded-full { border-radius: var(--lx-radius-full); }
884
- .lx-rounded-t { border-radius: var(--lx-radius) var(--lx-radius) 0 0; }
885
- .lx-rounded-b { border-radius: 0 0 var(--lx-radius) var(--lx-radius); }
886
- .lx-rounded-s { border-radius: var(--lx-radius) 0 0 var(--lx-radius); }
887
- .lx-rounded-e { border-radius: 0 var(--lx-radius) var(--lx-radius) 0; }
888
-
889
- /* Shadows */
890
- .lx-shadow-none { box-shadow: none; }
891
- .lx-shadow-xs { box-shadow: var(--lx-shadow-xs); }
892
- .lx-shadow-sm { box-shadow: var(--lx-shadow-sm); }
893
- .lx-shadow { box-shadow: var(--lx-shadow); }
894
- .lx-shadow-md { box-shadow: var(--lx-shadow-md); }
895
- .lx-shadow-lg { box-shadow: var(--lx-shadow-lg); }
896
- .lx-shadow-xl { box-shadow: var(--lx-shadow-xl); }
897
- .lx-shadow-2xl { box-shadow: var(--lx-shadow-2xl); }
898
- .lx-shadow-inner { box-shadow: var(--lx-shadow-inner); }
899
- .lx-shadow-primary { box-shadow: 0 4px 14px 0 rgba(59,130,246,.4); }
900
- .lx-shadow-success { box-shadow: 0 4px 14px 0 rgba(34,197,94,.4); }
901
- .lx-shadow-danger { box-shadow: 0 4px 14px 0 rgba(239,68,68,.4); }
902
-
903
- /* Visibility */
904
- .lx-visible { visibility: visible; }
905
- .lx-invisible { visibility: hidden; }
906
- .lx-sr-only {
907
- position: absolute;
908
- width: 1px;
909
- height: 1px;
910
- padding: 0;
911
- margin: -1px;
912
- overflow: hidden;
913
- clip: rect(0,0,0,0);
914
- white-space: nowrap;
915
- border: 0;
916
- }
917
- .lx-sr-only-focusable:focus-visible {
918
- position: static;
919
- width: auto;
920
- height: auto;
921
- overflow: visible;
922
- clip: auto;
923
- white-space: normal;
924
- }
925
-
926
- /* Interactions */
927
- .lx-pointer-events-none { pointer-events: none; }
928
- .lx-pointer-events-auto { pointer-events: auto; }
929
- .lx-select-none { user-select: none; }
930
- .lx-select-all { user-select: all; }
931
- .lx-select-text { user-select: text; }
932
- .lx-cursor-pointer { cursor: pointer; }
933
- .lx-cursor-default { cursor: default; }
934
- .lx-cursor-not-allowed{ cursor: not-allowed; }
935
- .lx-cursor-wait { cursor: wait; }
936
- .lx-cursor-move { cursor: move; }
937
- .lx-cursor-grab { cursor: grab; }
938
- .lx-cursor-text { cursor: text; }
939
-
940
- /* Float */
941
- .lx-float-start { float: inline-start; }
942
- .lx-float-end { float: inline-end; }
943
- .lx-float-none { float: none; }
944
- .lx-clearfix::after { content: ""; display: table; clear: both; }
945
-
946
- /* Vertical align */
947
- .lx-align-baseline { vertical-align: baseline; }
948
- .lx-align-top { vertical-align: top; }
949
- .lx-align-middle { vertical-align: middle; }
950
- .lx-align-bottom { vertical-align: bottom; }
951
- .lx-align-text-top { vertical-align: text-top; }
952
- .lx-align-text-bottom { vertical-align: text-bottom; }
953
- .lx-align-sub { vertical-align: sub; }
954
- .lx-align-super { vertical-align: super; }
955
-
956
- /* Opacity */
957
- .lx-opacity-0 { opacity: 0; }
958
- .lx-opacity-25 { opacity: .25; }
959
- .lx-opacity-50 { opacity: .50; }
960
- .lx-opacity-75 { opacity: .75; }
961
- .lx-opacity-100{ opacity: 1; }
962
-
963
- /* Aspect ratio */
964
- .lx-ratio { position: relative; width: 100%; }
965
- .lx-ratio::before{ display: block; content: ""; }
966
- .lx-ratio > * { position: absolute; inset: 0; width: 100%; height: 100%; }
967
- .lx-ratio-1x1 { aspect-ratio: 1 / 1; }
968
- .lx-ratio-4x3 { aspect-ratio: 4 / 3; }
969
- .lx-ratio-16x9 { aspect-ratio: 16 / 9; }
970
- .lx-ratio-21x9 { aspect-ratio: 21 / 9; }
971
-
972
- /* Object fit */
973
- .lx-object-cover { object-fit: cover; }
974
- .lx-object-contain { object-fit: contain; }
975
- .lx-object-fill { object-fit: fill; }
976
- .lx-object-none { object-fit: none; }
977
- .lx-object-center { object-position: center; }
978
- .lx-object-top { object-position: top; }
979
-
980
- /* Z-index */
981
- .lx-z-0 { z-index: 0; }
982
- .lx-z-10 { z-index: 10; }
983
- .lx-z-20 { z-index: 20; }
984
- .lx-z-50 { z-index: 50; }
985
- .lx-z-dropdown{ z-index: var(--lx-z-dropdown); }
986
- .lx-z-sticky { z-index: var(--lx-z-sticky); }
987
- .lx-z-fixed { z-index: var(--lx-z-fixed); }
988
- .lx-z-modal { z-index: var(--lx-z-modal); }
989
- .lx-z-toast { z-index: var(--lx-z-toast); }
990
- .lx-z-n1 { z-index: -1; }
991
-
992
- /* Responsive display (sm 640, md 768, lg 1024, xl 1280) */
993
- @media (min-width: 640px) {
994
- .lx-sm-hidden { display: none !important; }
995
- .lx-sm-block { display: block; }
996
- .lx-sm-flex { display: flex; }
997
- .lx-sm-grid { display: grid; }
998
- .lx-sm-inline-flex { display: inline-flex; }
999
- .lx-sm-cols-1 { grid-template-columns: repeat(1,minmax(0,1fr)); }
1000
- .lx-sm-cols-2 { grid-template-columns: repeat(2,minmax(0,1fr)); }
1001
- .lx-sm-cols-3 { grid-template-columns: repeat(3,minmax(0,1fr)); }
1002
- .lx-sm-col-6 { grid-column: span 6/span 6; }
1003
- .lx-sm-col-12 { grid-column: span 12/span 12; }
1004
- .lx-sm-text-left { text-align: left; }
1005
- .lx-sm-text-center { text-align: center; }
1006
- .lx-sm-p-4 { padding: var(--lx-space-4); }
1007
- .lx-sm-p-6 { padding: var(--lx-space-6); }
1008
- .lx-sm-px-6 { padding-inline: var(--lx-space-6); }
1009
- }
1010
-
1011
- @media (min-width: 768px) {
1012
- .lx-md-hidden { display: none !important; }
1013
- .lx-md-block { display: block; }
1014
- .lx-md-flex { display: flex; }
1015
- .lx-md-grid { display: grid; }
1016
- .lx-md-inline-flex { display: inline-flex; }
1017
- .lx-md-flex-row { flex-direction: row; }
1018
- .lx-md-flex-col { flex-direction: column; }
1019
- .lx-md-items-center { align-items: center; }
1020
- .lx-md-justify-between { justify-content: space-between; }
1021
- .lx-md-cols-1 { grid-template-columns: repeat(1, minmax(0,1fr)); }
1022
- .lx-md-cols-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
1023
- .lx-md-cols-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
1024
- .lx-md-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
1025
- .lx-md-col-4 { grid-column: span 4/span 4; }
1026
- .lx-md-col-6 { grid-column: span 6/span 6; }
1027
- .lx-md-col-8 { grid-column: span 8/span 8; }
1028
- .lx-md-col-12 { grid-column: span 12/span 12; }
1029
- .lx-md-col-offset-3 { margin-inline-start: 25%; }
1030
- .lx-md-text-left { text-align: left; }
1031
- .lx-md-text-center { text-align: center; }
1032
- .lx-md-text-xl { font-size: var(--lx-text-xl); }
1033
- .lx-md-text-2xl { font-size: var(--lx-text-2xl); }
1034
- .lx-md-text-3xl { font-size: var(--lx-text-3xl); }
1035
- .lx-md-text-4xl { font-size: var(--lx-text-4xl); }
1036
- .lx-md-p-4 { padding: var(--lx-space-4); }
1037
- .lx-md-p-6 { padding: var(--lx-space-6); }
1038
- .lx-md-p-8 { padding: var(--lx-space-8); }
1039
- .lx-md-px-8 { padding-inline: var(--lx-space-8); }
1040
- .lx-md-py-8 { padding-block: var(--lx-space-8); }
1041
- .lx-md-gap-4 { gap: var(--lx-space-4); }
1042
- .lx-md-gap-6 { gap: var(--lx-space-6); }
1043
- .lx-md-gap-8 { gap: var(--lx-space-8); }
1044
- .lx-md-w-1\/2{ width: 50%; }
1045
- .lx-md-float-start { float: inline-start; }
1046
- .lx-md-order-1 { order: 1; } .lx-md-order-2 { order: 2; }
1047
- }
1048
-
1049
- @media (min-width: 1024px) {
1050
- .lx-lg-hidden { display: none !important; }
1051
- .lx-lg-block { display: block; }
1052
- .lx-lg-flex { display: flex; }
1053
- .lx-lg-grid { display: grid; }
1054
- .lx-lg-inline-flex { display: inline-flex; }
1055
- .lx-lg-flex-row { flex-direction: row; }
1056
- .lx-lg-items-center{ align-items: center; }
1057
- .lx-lg-cols-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
1058
- .lx-lg-cols-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
1059
- .lx-lg-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
1060
- .lx-lg-col-4 { grid-column: span 4/span 4; }
1061
- .lx-lg-col-6 { grid-column: span 6/span 6; }
1062
- .lx-lg-col-8 { grid-column: span 8/span 8; }
1063
- .lx-lg-text-xl { font-size: var(--lx-text-xl); }
1064
- .lx-lg-text-2xl { font-size: var(--lx-text-2xl); }
1065
- .lx-lg-text-3xl { font-size: var(--lx-text-3xl); }
1066
- .lx-lg-text-4xl { font-size: var(--lx-text-4xl); }
1067
- .lx-lg-text-5xl { font-size: var(--lx-text-5xl); }
1068
- .lx-lg-p-8 { padding: var(--lx-space-8); }
1069
- .lx-lg-p-12 { padding: var(--lx-space-12); }
1070
- .lx-lg-px-12 { padding-inline: var(--lx-space-12); }
1071
- .lx-lg-gap-6 { gap: var(--lx-space-6); }
1072
- .lx-lg-gap-8 { gap: var(--lx-space-8); }
1073
- }
1074
-
1075
- @media (min-width: 1280px) {
1076
- .lx-xl-hidden { display: none !important; }
1077
- .lx-xl-block { display: block; }
1078
- .lx-xl-flex { display: flex; }
1079
- .lx-xl-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
1080
- .lx-xl-cols-5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
1081
- .lx-xl-text-5xl { font-size: var(--lx-text-5xl); }
1082
- .lx-xl-text-6xl { font-size: var(--lx-text-6xl); }
1083
- }
1084
-
1085
- @media (min-width: 1536px) {
1086
- .lx-2xl-hidden { display: none !important; }
1087
- .lx-2xl-block { display: block; }
1088
- .lx-2xl-cols-5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
1089
- .lx-2xl-cols-6 { grid-template-columns: repeat(6, minmax(0,1fr)); }
1090
- }
1091
-
1092
- @media print {
1093
- .lx-print-hidden { display: none !important; }
1094
- .lx-print-block { display: block !important; }
1095
- }
1096
-
1097
-
1098
- /* ================================================================
1099
- §6 COMPONENTS
1100
- ================================================================= */
1101
-
1102
- /* ── Button ── */
1103
- .lx-btn {
1104
- display: inline-flex;
1105
- align-items: center;
1106
- justify-content: center;
1107
- gap: 0.375rem;
1108
- padding: var(--lx-btn-padding-y) var(--lx-btn-padding-x);
1109
- font-size: var(--lx-btn-font-size);
1110
- font-weight: var(--lx-btn-font-weight);
1111
- line-height: 1.5;
1112
- border-radius: var(--lx-btn-radius);
1113
- border: 1px solid transparent;
1114
- background: transparent;
1115
- cursor: pointer;
1116
- text-decoration: none;
1117
- white-space: nowrap;
1118
- transition: var(--lx-btn-transition);
1119
- user-select: none;
1120
- -webkit-appearance: none;
1121
- }
1122
- .lx-btn:focus-visible { outline: 2px solid var(--lx-primary); outline-offset: 2px; }
1123
- .lx-btn:disabled, .lx-btn[aria-disabled="true"] { opacity: .55; cursor: not-allowed; pointer-events: none; }
1124
-
1125
- .lx-btn-xs { padding: .2rem .5rem; font-size: .7rem; }
1126
- .lx-btn-sm { padding: .35rem .75rem; font-size: .8rem; }
1127
- .lx-btn-lg { padding: .65rem 1.25rem; font-size: 1rem; }
1128
- .lx-btn-xl { padding: .8rem 1.5rem; font-size: 1.1rem; }
1129
- .lx-btn-block { width: 100%; justify-content: center; }
1130
- .lx-btn-icon { padding: var(--lx-btn-padding-y); aspect-ratio: 1; }
1131
-
1132
- .lx-btn-primary { background: var(--lx-primary); color: var(--lx-primary-fg); border-color: var(--lx-primary); }
1133
- .lx-btn-primary:hover { background: var(--lx-primary-hover); border-color: var(--lx-primary-hover); }
1134
-
1135
- .lx-btn-secondary { background: var(--lx-secondary); color: var(--lx-secondary-fg); border-color: var(--lx-secondary); }
1136
- .lx-btn-secondary:hover { background: var(--lx-secondary-hover); border-color: var(--lx-secondary-hover); }
1137
-
1138
- .lx-btn-success { background: var(--lx-success); color: var(--lx-success-fg); border-color: var(--lx-success); }
1139
- .lx-btn-success:hover { background: var(--lx-success-hover); border-color: var(--lx-success-hover); }
1140
-
1141
- .lx-btn-warning { background: var(--lx-warning); color: var(--lx-warning-fg); border-color: var(--lx-warning); }
1142
- .lx-btn-warning:hover { background: var(--lx-warning-hover); border-color: var(--lx-warning-hover); }
1143
-
1144
- .lx-btn-danger { background: var(--lx-danger); color: var(--lx-danger-fg); border-color: var(--lx-danger); }
1145
- .lx-btn-danger:hover { background: var(--lx-danger-hover); border-color: var(--lx-danger-hover); }
1146
-
1147
- .lx-btn-info { background: var(--lx-info); color: var(--lx-info-fg); border-color: var(--lx-info); }
1148
- .lx-btn-info:hover { background: var(--lx-info-hover); border-color: var(--lx-info-hover); }
1149
-
1150
- .lx-btn-dark { background: var(--lx-dark); color: #fff; border-color: var(--lx-dark); }
1151
- .lx-btn-dark:hover { background: var(--lx-gray-700); }
1152
-
1153
- .lx-btn-light { background: var(--lx-light); color: var(--lx-text); border-color: var(--lx-border); }
1154
- .lx-btn-light:hover { background: var(--lx-gray-200); }
1155
-
1156
- .lx-btn-outline-primary { border-color: var(--lx-primary); color: var(--lx-primary); }
1157
- .lx-btn-outline-primary:hover { background: var(--lx-primary); color: var(--lx-primary-fg); }
1158
-
1159
- .lx-btn-outline-secondary { border-color: var(--lx-secondary); color: var(--lx-secondary); }
1160
- .lx-btn-outline-secondary:hover { background: var(--lx-secondary); color: var(--lx-secondary-fg); }
1161
-
1162
- .lx-btn-outline-success { border-color: var(--lx-success); color: var(--lx-success); }
1163
- .lx-btn-outline-success:hover { background: var(--lx-success); color: var(--lx-success-fg); }
1164
-
1165
- .lx-btn-outline-warning { border-color: var(--lx-warning); color: var(--lx-warning); }
1166
- .lx-btn-outline-warning:hover { background: var(--lx-warning); color: var(--lx-warning-fg); }
1167
-
1168
- .lx-btn-outline-danger { border-color: var(--lx-danger); color: var(--lx-danger); }
1169
- .lx-btn-outline-danger:hover { background: var(--lx-danger); color: var(--lx-danger-fg); }
1170
-
1171
- .lx-btn-outline-info { border-color: var(--lx-info); color: var(--lx-info); }
1172
- .lx-btn-outline-info:hover { background: var(--lx-info); color: var(--lx-info-fg); }
1173
-
1174
- .lx-btn-ghost { color: var(--lx-text-secondary); }
1175
- .lx-btn-ghost:hover { background: var(--lx-bg-muted); color: var(--lx-text); }
1176
- .lx-btn-ghost-primary { color: var(--lx-primary); }
1177
- .lx-btn-ghost-primary:hover { background: var(--lx-primary-subtle); }
1178
-
1179
- .lx-btn-link { color: var(--lx-primary); text-decoration: underline; }
1180
- .lx-btn-link:hover { color: var(--lx-primary-hover); }
1181
-
1182
- .lx-btn-group {
1183
- display: inline-flex;
1184
- border-radius: var(--lx-radius);
1185
- overflow: hidden;
1186
- }
1187
- .lx-btn-group .lx-btn { border-radius: 0; border-inline-end-width: 0; }
1188
- .lx-btn-group .lx-btn:first-child { border-radius: var(--lx-radius) 0 0 var(--lx-radius); }
1189
- .lx-btn-group .lx-btn:last-child { border-radius: 0 var(--lx-radius) var(--lx-radius) 0; border-inline-end-width: 1px; }
1190
-
1191
- .lx-btn-group-vertical { display: inline-flex; flex-direction: column; }
1192
- .lx-btn-group-vertical .lx-btn { border-radius: 0; border-bottom-width: 0; }
1193
- .lx-btn-group-vertical .lx-btn:first-child { border-radius: var(--lx-radius) var(--lx-radius) 0 0; }
1194
- .lx-btn-group-vertical .lx-btn:last-child { border-radius: 0 0 var(--lx-radius) var(--lx-radius); border-bottom-width: 1px; }
1195
-
1196
- .lx-btn-toolbar { display: flex; flex-wrap: wrap; gap: .5rem; }
1197
- .lx-btn-check { position: absolute; clip: rect(0,0,0,0); pointer-events: none; }
1198
- .lx-btn-close {
1199
- display: flex;
1200
- align-items: center;
1201
- justify-content: center;
1202
- width: 2rem;
1203
- height: 2rem;
1204
- padding: 0;
1205
- background: transparent;
1206
- border: none;
1207
- border-radius: var(--lx-radius-full);
1208
- cursor: pointer;
1209
- opacity: .5;
1210
- transition: var(--lx-transition);
1211
- font-size: 1.2rem;
1212
- line-height: 1;
1213
- color: var(--lx-text);
1214
- }
1215
- .lx-btn-close::before { content: "×"; }
1216
- .lx-btn-close:hover { opacity: 1; background: var(--lx-bg-muted); }
1217
- .lx-btn-close-white { color: #fff; }
1218
- .lx-btn-close-white:hover { background: rgba(255,255,255,.15); }
1219
-
1220
-
1221
- /* ── Card ── */
1222
- .lx-card {
1223
- background: var(--lx-bg);
1224
- border: var(--lx-card-border);
1225
- border-radius: var(--lx-card-radius);
1226
- box-shadow: var(--lx-card-shadow);
1227
- overflow: hidden;
1228
- }
1229
- .lx-card-hover { transition: var(--lx-transition); }
1230
- .lx-card-hover:hover { transform: translateY(-2px); box-shadow: var(--lx-shadow-lg); }
1231
-
1232
- .lx-card-header {
1233
- padding: .875rem var(--lx-card-padding);
1234
- border-bottom: 1px solid var(--lx-border);
1235
- background: var(--lx-bg-soft);
1236
- font-weight: 600;
1237
- font-size: var(--lx-text-sm);
1238
- color: var(--lx-text-secondary);
1239
- text-transform: uppercase;
1240
- letter-spacing: .05em;
1241
- }
1242
- .lx-card-body { padding: var(--lx-card-padding); }
1243
- .lx-card-footer { padding: .875rem var(--lx-card-padding); border-top: 1px solid var(--lx-border); background: var(--lx-bg-soft); }
1244
- .lx-card-title { font-size: var(--lx-text-lg); font-weight: 600; margin-bottom: .5rem; color: var(--lx-text); }
1245
- .lx-card-subtitle{ font-size: var(--lx-text-sm); color: var(--lx-text-muted); margin-top: -.25rem; margin-bottom: .75rem; }
1246
- .lx-card-text { color: var(--lx-text-secondary); line-height: 1.65; }
1247
-
1248
- .lx-card-img-top { width: 100%; object-fit: cover; display: block; }
1249
- .lx-card-img-side{ object-fit: cover; flex-shrink: 0; }
1250
- .lx-card-img { width: 100%; height: 100%; object-fit: cover; }
1251
-
1252
- .lx-card-img-overlay-wrap { position: relative; }
1253
- .lx-card-img-overlay {
1254
- position: absolute;
1255
- inset: 0;
1256
- padding: var(--lx-card-padding);
1257
- display: flex;
1258
- flex-direction: column;
1259
- justify-content: flex-end;
1260
- background: linear-gradient(to top, rgba(0,0,0,.7) 0%, transparent 60%);
1261
- }
1262
-
1263
- .lx-card-stat .lx-card-body { padding: 1.25rem var(--lx-card-padding); }
1264
-
1265
-
1266
- /* ── Badge ── */
1267
- .lx-badge {
1268
- display: inline-flex;
1269
- align-items: center;
1270
- padding: var(--lx-badge-padding-y) var(--lx-badge-padding-x);
1271
- font-size: var(--lx-badge-font-size);
1272
- font-weight: var(--lx-badge-font-weight);
1273
- line-height: 1;
1274
- border-radius: var(--lx-badge-radius);
1275
- white-space: nowrap;
1276
- }
1277
- .lx-badge-sm { font-size: .65em; }
1278
- .lx-badge-lg { font-size: .875em; padding: .35em .7em; }
1279
-
1280
- .lx-badge-primary { background: var(--lx-primary); color: var(--lx-primary-fg); }
1281
- .lx-badge-secondary { background: var(--lx-secondary); color: var(--lx-secondary-fg); }
1282
- .lx-badge-success { background: var(--lx-success); color: var(--lx-success-fg); }
1283
- .lx-badge-warning { background: var(--lx-warning); color: var(--lx-warning-fg); }
1284
- .lx-badge-danger { background: var(--lx-danger); color: var(--lx-danger-fg); }
1285
- .lx-badge-info { background: var(--lx-info); color: var(--lx-info-fg); }
1286
- .lx-badge-dark { background: var(--lx-dark); color: #ffffff; }
1287
- .lx-badge-light { background: var(--lx-light); color: var(--lx-text); border: 1px solid var(--lx-border); }
1288
-
1289
- .lx-badge-outline-primary { border: 1px solid var(--lx-primary); color: var(--lx-primary); background: transparent; }
1290
- .lx-badge-outline-secondary{ border: 1px solid var(--lx-secondary); color: var(--lx-secondary); background: transparent; }
1291
- .lx-badge-outline-success { border: 1px solid var(--lx-success); color: var(--lx-success); background: transparent; }
1292
- .lx-badge-outline-danger { border: 1px solid var(--lx-danger); color: var(--lx-danger); background: transparent; }
1293
- .lx-badge-outline-warning { border: 1px solid var(--lx-warning); color: var(--lx-warning); background: transparent; }
1294
-
1295
- .lx-badge-soft-primary { background: var(--lx-primary-subtle); color: var(--lx-primary); }
1296
- .lx-badge-soft-secondary { background: var(--lx-gray-100); color: var(--lx-secondary); }
1297
- .lx-badge-soft-success { background: var(--lx-success-subtle); color: var(--lx-success-hover); }
1298
- .lx-badge-soft-warning { background: var(--lx-warning-subtle); color: var(--lx-warning-hover); }
1299
- .lx-badge-soft-danger { background: var(--lx-danger-subtle); color: var(--lx-danger-hover); }
1300
- .lx-badge-soft-info { background: var(--lx-info-subtle); color: var(--lx-info-hover); }
1301
-
1302
-
1303
- /* ── Alert ── */
1304
- .lx-alert {
1305
- position: relative;
1306
- padding: .875rem 1.125rem;
1307
- border-radius: var(--lx-radius);
1308
- border: 1px solid transparent;
1309
- font-size: var(--lx-text-sm);
1310
- line-height: 1.6;
1311
- }
1312
- .lx-alert-heading { font-weight: 700; font-size: var(--lx-text-base); margin-bottom: .375rem; }
1313
- .lx-alert-divider { border-color: currentColor; opacity: .2; margin: .75rem 0; }
1314
- .lx-alert-dismissible { padding-inline-end: 3rem; }
1315
- .lx-alert-close {
1316
- position: absolute;
1317
- top: .5rem;
1318
- inset-inline-end: .5rem;
1319
- }
1320
-
1321
- .lx-alert-primary { background: var(--lx-primary-subtle); color: var(--lx-primary-hover); border-color: var(--lx-primary-light); }
1322
- .lx-alert-secondary { background: var(--lx-gray-100); color: var(--lx-gray-700); border-color: var(--lx-gray-300); }
1323
- .lx-alert-success { background: var(--lx-success-subtle); color: var(--lx-success-hover); border-color: var(--lx-success-light); }
1324
- .lx-alert-warning { background: var(--lx-warning-subtle); color: var(--lx-warning-hover); border-color: var(--lx-warning-light); }
1325
- .lx-alert-danger { background: var(--lx-danger-subtle); color: var(--lx-danger-hover); border-color: var(--lx-danger-light); }
1326
- .lx-alert-info { background: var(--lx-info-subtle); color: var(--lx-info-hover); border-color: var(--lx-info-light); }
1327
-
1328
-
1329
- /* ── Progress ── */
1330
- .lx-progress {
1331
- height: var(--lx-progress-height);
1332
- background: var(--lx-progress-bg);
1333
- border-radius: var(--lx-progress-radius);
1334
- overflow: hidden;
1335
- }
1336
- .lx-progress-bar {
1337
- height: 100%;
1338
- background: var(--lx-primary);
1339
- border-radius: inherit;
1340
- transition: width .4s var(--lx-ease);
1341
- display: flex;
1342
- align-items: center;
1343
- justify-content: center;
1344
- font-size: .65rem;
1345
- font-weight: 700;
1346
- color: white;
1347
- }
1348
- .lx-progress-bar-striped {
1349
- background-image: repeating-linear-gradient(
1350
- 45deg, rgba(255,255,255,.15) 0, rgba(255,255,255,.15) 10px, transparent 10px, transparent 20px
1351
- );
1352
- }
1353
- .lx-progress-bar-animated { animation: lx-progress-stripes 1s linear infinite; }
1354
- @keyframes lx-progress-stripes { to { background-position-x: -20px; } }
1355
-
1356
-
1357
- /* ── Spinner ── */
1358
- .lx-spinner {
1359
- display: inline-block;
1360
- width: 1.5rem;
1361
- height: 1.5rem;
1362
- border: 2px solid currentColor;
1363
- border-right-color: transparent;
1364
- border-radius: 50%;
1365
- animation: lx-spin .6s linear infinite;
1366
- vertical-align: -.125em;
1367
- color: var(--lx-primary);
1368
- }
1369
- .lx-spinner-sm { width: 1rem; height: 1rem; border-width: 2px; }
1370
- .lx-spinner-lg { width: 2.25rem; height: 2.25rem; border-width: 3px; }
1371
- .lx-spinner-xl { width: 3rem; height: 3rem; border-width: 3px; }
1372
- .lx-spinner-grow {
1373
- background: currentColor;
1374
- border: none;
1375
- animation: lx-grow .75s ease-in-out infinite;
1376
- }
1377
- @keyframes lx-spin { to { transform: rotate(360deg); } }
1378
- @keyframes lx-grow {
1379
- 0% { transform: scale(0); opacity: 0; }
1380
- 50% { opacity: 1; }
1381
- 100% { transform: scale(1); opacity: 0; }
1382
- }
1383
-
1384
- .lx-loading-overlay {
1385
- position: fixed;
1386
- inset: 0;
1387
- background: rgba(255,255,255,.8);
1388
- display: flex;
1389
- align-items: center;
1390
- justify-content:center;
1391
- z-index: var(--lx-z-toast);
1392
- backdrop-filter: blur(2px);
1393
- }
1394
-
1395
-
1396
- /* ── Avatar ── */
1397
- .lx-avatar {
1398
- display: inline-flex;
1399
- align-items: center;
1400
- justify-content: center;
1401
- width: var(--lx-avatar-size);
1402
- height: var(--lx-avatar-size);
1403
- border-radius: var(--lx-avatar-radius);
1404
- font-size: var(--lx-avatar-font-size);
1405
- font-weight: 600;
1406
- background: var(--lx-gray-200);
1407
- color: var(--lx-gray-600);
1408
- overflow: hidden;
1409
- flex-shrink: 0;
1410
- user-select: none;
1411
- }
1412
- .lx-avatar img { width: 100%; height: 100%; object-fit: cover; }
1413
-
1414
- .lx-avatar-xs { width: 1.5rem; height: 1.5rem; font-size: .55rem; }
1415
- .lx-avatar-sm { width: 2rem; height: 2rem; font-size: .7rem; }
1416
- .lx-avatar-lg { width: 3.5rem; height: 3.5rem; font-size: 1rem; }
1417
- .lx-avatar-xl { width: 4.5rem; height: 4.5rem; font-size: 1.25rem; }
1418
- .lx-avatar-2xl { width: 6rem; height: 6rem; font-size: 1.5rem; }
1419
-
1420
- .lx-avatar-primary { background: var(--lx-primary-subtle); color: var(--lx-primary); }
1421
- .lx-avatar-secondary { background: var(--lx-gray-200); color: var(--lx-gray-600); }
1422
- .lx-avatar-success { background: var(--lx-success-subtle); color: var(--lx-success-hover); }
1423
- .lx-avatar-warning { background: var(--lx-warning-subtle); color: var(--lx-warning-hover); }
1424
- .lx-avatar-danger { background: var(--lx-danger-subtle); color: var(--lx-danger-hover); }
1425
- .lx-avatar-info { background: var(--lx-info-subtle); color: var(--lx-info-hover); }
1426
-
1427
- .lx-avatar-wrapper { position: relative; display: inline-block; }
1428
- .lx-avatar-status {
1429
- position: absolute;
1430
- bottom: 0;
1431
- inset-inline-end: 0;
1432
- width: .75rem;
1433
- height: .75rem;
1434
- border-radius: 50%;
1435
- border: 2px solid var(--lx-bg);
1436
- }
1437
- .lx-avatar-status-online { background: var(--lx-success); }
1438
- .lx-avatar-status-busy { background: var(--lx-danger); }
1439
- .lx-avatar-status-away { background: var(--lx-warning); }
1440
- .lx-avatar-status-offline { background: var(--lx-gray-400); }
1441
-
1442
- .lx-avatar-group { display: inline-flex; }
1443
- .lx-avatar-group .lx-avatar { margin-inline-start: -.5rem; border: 2px solid var(--lx-bg); }
1444
- .lx-avatar-group .lx-avatar:first-child { margin-inline-start: 0; }
1445
-
1446
-
1447
- /* ── Breadcrumb ── */
1448
- .lx-breadcrumb {
1449
- display: flex;
1450
- flex-wrap: wrap;
1451
- gap: .25rem;
1452
- list-style: none;
1453
- padding: 0;
1454
- margin: 0;
1455
- font-size: var(--lx-text-sm);
1456
- }
1457
- .lx-breadcrumb-item { display: flex; align-items: center; color: var(--lx-text-muted); }
1458
- .lx-breadcrumb-item a { color: var(--lx-text-secondary); transition: color var(--lx-duration-fast) var(--lx-ease); }
1459
- .lx-breadcrumb-item a:hover { color: var(--lx-primary); text-decoration: none; }
1460
- .lx-breadcrumb-item.lx-active { color: var(--lx-text); font-weight: 500; }
1461
- .lx-breadcrumb-item + .lx-breadcrumb-item::before {
1462
- content: var(--lx-breadcrumb-sep);
1463
- padding-inline: .4rem;
1464
- color: var(--lx-text-muted);
1465
- }
1466
-
1467
-
1468
- /* ── Modal ── */
1469
- .lx-modal {
1470
- display: none;
1471
- position: fixed;
1472
- inset: 0;
1473
- z-index: var(--lx-z-modal);
1474
- overflow-x: hidden;
1475
- overflow-y: auto;
1476
- align-items: center;
1477
- justify-content: center;
1478
- }
1479
- .lx-modal.lx-show { display: flex; }
1480
-
1481
- .lx-modal-backdrop {
1482
- position: fixed;
1483
- inset: 0;
1484
- background: var(--lx-modal-backdrop);
1485
- z-index: var(--lx-z-modal-bg);
1486
- backdrop-filter: blur(2px);
1487
- }
1488
- .lx-modal-dialog {
1489
- position: relative;
1490
- width: 100%;
1491
- max-width: 500px;
1492
- margin: auto;
1493
- padding: 1rem;
1494
- z-index: inherit;
1495
- }
1496
- .lx-modal-sm { max-width: 300px; }
1497
- .lx-modal-lg { max-width: 800px; }
1498
- .lx-modal-xl { max-width: 1100px; }
1499
- .lx-modal-fullscreen { max-width: none; padding: 0; min-height: 100dvh; }
1500
- .lx-modal-dialog-centered { display: flex; align-items: center; min-height: calc(100% - 2rem); }
1501
- .lx-modal-dialog-scrollable .lx-modal-body { overflow-y: auto; max-height: 60vh; }
1502
-
1503
- .lx-modal-content {
1504
- background: var(--lx-bg);
1505
- border-radius: var(--lx-modal-radius);
1506
- box-shadow: var(--lx-modal-shadow);
1507
- border: 1px solid var(--lx-border);
1508
- overflow: hidden;
1509
- }
1510
- .lx-modal-header {
1511
- display: flex;
1512
- align-items: center;
1513
- justify-content: space-between;
1514
- padding: 1.25rem var(--lx-card-padding);
1515
- border-bottom: 1px solid var(--lx-border);
1516
- }
1517
- .lx-modal-title { font-size: var(--lx-text-lg); font-weight: 600; color: var(--lx-text); }
1518
- .lx-modal-body { padding: var(--lx-card-padding); }
1519
- .lx-modal-footer {
1520
- display: flex;
1521
- align-items: center;
1522
- justify-content: flex-end;
1523
- gap: .5rem;
1524
- padding: 1rem var(--lx-card-padding);
1525
- border-top: 1px solid var(--lx-border);
1526
- background: var(--lx-bg-soft);
1527
- }
1528
-
1529
- .lx-modal.lx-fade .lx-modal-content {
1530
- animation: lx-modal-in var(--lx-duration-slow) var(--lx-ease);
1531
- }
1532
- @keyframes lx-modal-in {
1533
- from { opacity: 0; transform: scale(.96) translateY(-8px); }
1534
- to { opacity: 1; transform: scale(1) translateY(0); }
1535
- }
1536
-
1537
-
1538
- /* ── Offcanvas / Drawer ── */
1539
- .lx-offcanvas {
1540
- position: fixed;
1541
- z-index: var(--lx-z-offcanvas);
1542
- background: var(--lx-bg);
1543
- box-shadow: var(--lx-shadow-xl);
1544
- display: flex;
1545
- flex-direction: column;
1546
- visibility: hidden;
1547
- transition: transform var(--lx-duration-slow) var(--lx-ease), visibility var(--lx-duration-slow);
1548
- }
1549
- .lx-offcanvas.lx-show { visibility: visible; }
1550
-
1551
- .lx-offcanvas-start { top: 0; inset-inline-start: 0; height: 100%; width: min(80vw, 360px); transform: translateX(-100%); }
1552
- .lx-offcanvas-end { top: 0; inset-inline-end: 0; height: 100%; width: min(80vw, 360px); transform: translateX(100%); }
1553
- .lx-offcanvas-top { top: 0; inset-inline: 0; max-height: 80vh; transform: translateY(-100%); }
1554
- .lx-offcanvas-bottom { bottom: 0; inset-inline: 0; max-height: 80vh; transform: translateY(100%); }
1555
-
1556
- .lx-offcanvas.lx-show.lx-offcanvas-start,
1557
- .lx-offcanvas.lx-show.lx-offcanvas-end,
1558
- .lx-offcanvas.lx-show.lx-offcanvas-top,
1559
- .lx-offcanvas.lx-show.lx-offcanvas-bottom { transform: none; }
1560
-
1561
- .lx-offcanvas-header {
1562
- display: flex;
1563
- align-items: center;
1564
- justify-content: space-between;
1565
- padding: 1.25rem 1.5rem;
1566
- border-bottom: 1px solid var(--lx-border);
1567
- flex-shrink: 0;
1568
- }
1569
- .lx-offcanvas-title { font-weight: 600; font-size: var(--lx-text-lg); color: var(--lx-text); }
1570
- .lx-offcanvas-body { padding: 1.5rem; flex: 1; overflow-y: auto; }
1571
-
1572
-
1573
- /* ── Dropdown ── */
1574
- .lx-dropdown { position: relative; display: inline-block; }
1575
- .lx-dropdown-toggle::after { content: ""; display: inline-block; width: .35em; height: .35em; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg) translateY(-.1em); margin-inline-start: .4em; vertical-align: .1em; }
1576
-
1577
- .lx-dropdown-menu {
1578
- display: none;
1579
- position: absolute;
1580
- inset-block-start: calc(100% + .25rem);
1581
- inset-inline-start: 0;
1582
- min-width: 10rem;
1583
- padding: .375rem;
1584
- background: var(--lx-bg);
1585
- border: 1px solid var(--lx-border);
1586
- border-radius: var(--lx-radius-md);
1587
- box-shadow: var(--lx-shadow-lg);
1588
- z-index: var(--lx-z-dropdown);
1589
- list-style: none;
1590
- animation: lx-dropdown-in var(--lx-duration-fast) var(--lx-ease);
1591
- }
1592
- .lx-dropdown-menu.lx-show { display: block; }
1593
- .lx-dropdown-menu.lx-dropdown-menu-end { inset-inline-start: auto; inset-inline-end: 0; }
1594
-
1595
- .lx-dropup .lx-dropdown-menu { top: auto; bottom: calc(100% + .25rem); }
1596
- .lx-dropend .lx-dropdown-menu { top: 0; inset-inline-start: calc(100% + .25rem); }
1597
- .lx-dropstart .lx-dropdown-menu { top: 0; inset-inline-start: auto; inset-inline-end: calc(100% + .25rem); }
1598
-
1599
- .lx-dropdown-item {
1600
- display: flex;
1601
- align-items: center;
1602
- width: 100%;
1603
- padding: .45rem .75rem;
1604
- font-size: var(--lx-text-sm);
1605
- color: var(--lx-text-secondary);
1606
- background: transparent;
1607
- border: none;
1608
- border-radius: var(--lx-radius);
1609
- cursor: pointer;
1610
- white-space: nowrap;
1611
- text-decoration: none;
1612
- transition: background var(--lx-duration-fast) var(--lx-ease), color var(--lx-duration-fast) var(--lx-ease);
1613
- }
1614
- .lx-dropdown-item:hover { background: var(--lx-bg-muted); color: var(--lx-text); }
1615
- .lx-dropdown-item.lx-active { background: var(--lx-primary-subtle); color: var(--lx-primary); font-weight: 500; }
1616
- .lx-dropdown-item.lx-disabled { opacity: .5; cursor: not-allowed; pointer-events: none; }
1617
- .lx-dropdown-header { padding: .375rem .75rem; font-size: .7rem; font-weight: 700; color: var(--lx-text-muted); text-transform: uppercase; letter-spacing: .05em; }
1618
- .lx-dropdown-divider { border: none; border-top: 1px solid var(--lx-border); margin: .375rem 0; }
1619
-
1620
- @keyframes lx-dropdown-in {
1621
- from { opacity: 0; transform: translateY(-4px); }
1622
- to { opacity: 1; transform: translateY(0); }
1623
- }
1624
-
1625
-
1626
- /* ── Navbar ── */
1627
- .lx-navbar {
1628
- display: flex;
1629
- align-items: center;
1630
- flex-wrap: wrap;
1631
- padding: .75rem 0;
1632
- background: var(--lx-bg);
1633
- border-bottom: 1px solid var(--lx-border);
1634
- }
1635
- .lx-navbar-brand {
1636
- display: flex;
1637
- align-items: center;
1638
- gap: .5rem;
1639
- font-size: var(--lx-text-lg);
1640
- font-weight: 700;
1641
- color: var(--lx-text);
1642
- text-decoration: none;
1643
- margin-inline-end: 1.5rem;
1644
- flex-shrink: 0;
1645
- }
1646
- .lx-navbar-brand img { height: 32px; width: auto; }
1647
-
1648
- .lx-navbar-nav {
1649
- display: flex;
1650
- align-items: center;
1651
- gap: .125rem;
1652
- list-style: none;
1653
- padding: 0;
1654
- margin: 0;
1655
- }
1656
- .lx-navbar-nav .lx-nav-link {
1657
- font-size: var(--lx-text-sm);
1658
- font-weight:500;
1659
- padding: .45rem .75rem;
1660
- color: var(--lx-text-secondary);
1661
- border-radius: var(--lx-radius);
1662
- transition: background var(--lx-duration-fast) var(--lx-ease), color var(--lx-duration-fast) var(--lx-ease);
1663
- text-decoration: none;
1664
- }
1665
- .lx-navbar-nav .lx-nav-link:hover { background: var(--lx-bg-muted); color: var(--lx-text); }
1666
- .lx-navbar-nav .lx-nav-link.lx-active { background: var(--lx-primary-subtle); color: var(--lx-primary); font-weight: 600; }
1667
-
1668
- .lx-navbar-dark { background: var(--lx-dark); border-color: transparent; }
1669
- .lx-navbar-dark .lx-navbar-brand,
1670
- .lx-navbar-dark .lx-nav-link { color: rgba(255,255,255,.85); }
1671
- .lx-navbar-dark .lx-nav-link:hover { background: rgba(255,255,255,.1); color: #fff; }
1672
-
1673
- .lx-navbar-toggler {
1674
- padding: .375rem .5rem;
1675
- background: transparent;
1676
- border: 1px solid var(--lx-border);
1677
- border-radius: var(--lx-radius);
1678
- cursor: pointer;
1679
- display: none;
1680
- }
1681
- .lx-navbar-toggler-icon {
1682
- display: block;
1683
- width: 22px;
1684
- height: 2px;
1685
- background: currentColor;
1686
- box-shadow: 0 5px 0 currentColor, 0 10px 0 currentColor;
1687
- }
1688
-
1689
- .lx-navbar-collapse { display: flex; align-items: center; flex: 1; }
1690
- .lx-navbar-expand-lg .lx-navbar-collapse { display: flex !important; }
1691
-
1692
- @media (max-width: 1023.98px) {
1693
- .lx-navbar-expand-lg .lx-navbar-toggler { display: flex; }
1694
- .lx-navbar-expand-lg .lx-navbar-collapse {
1695
- display: none;
1696
- width: 100%;
1697
- flex-direction: column;
1698
- align-items: flex-start;
1699
- padding: .75rem 0;
1700
- border-top: 1px solid var(--lx-border);
1701
- margin-top: .75rem;
1702
- }
1703
- .lx-navbar-expand-lg .lx-navbar-collapse.lx-show { display: flex; }
1704
- .lx-navbar-expand-lg .lx-navbar-nav { flex-direction: column; width: 100%; gap: .125rem; }
1705
- .lx-navbar-expand-lg .lx-navbar-nav .lx-nav-link { width: 100%; }
1706
- }
1707
-
1708
-
1709
- /* ── Navs & Tabs ── */
1710
- .lx-nav {
1711
- display: flex;
1712
- flex-wrap: wrap;
1713
- gap: .125rem;
1714
- list-style: none;
1715
- padding: 0;
1716
- margin: 0;
1717
- }
1718
- .lx-nav-link {
1719
- display: block;
1720
- padding: .45rem .875rem;
1721
- font-size: var(--lx-text-sm);
1722
- font-weight: 500;
1723
- color: var(--lx-text-secondary);
1724
- border-radius: var(--lx-radius);
1725
- text-decoration: none;
1726
- background: transparent;
1727
- border: none;
1728
- cursor: pointer;
1729
- transition: var(--lx-transition);
1730
- }
1731
- .lx-nav-link:hover { background: var(--lx-bg-muted); color: var(--lx-text); }
1732
- .lx-nav-link.lx-active { background: var(--lx-primary-subtle); color: var(--lx-primary); font-weight: 600; }
1733
- .lx-nav-link.lx-disabled { opacity: .5; cursor: not-allowed; pointer-events: none; }
1734
-
1735
- .lx-nav-tabs { border-bottom: 1px solid var(--lx-border); gap: 0; border-radius: 0; padding-bottom: 0; }
1736
- .lx-nav-tabs .lx-nav-link { border-radius: var(--lx-radius) var(--lx-radius) 0 0; border: 1px solid transparent; margin-bottom: -1px; }
1737
- .lx-nav-tabs .lx-nav-link.lx-active { background: var(--lx-bg); border-color: var(--lx-border) var(--lx-border) var(--lx-bg); color: var(--lx-text); font-weight: 600; }
1738
-
1739
- .lx-nav-pills .lx-nav-link { border-radius: var(--lx-radius-full); }
1740
- .lx-nav-pills .lx-nav-link.lx-active { background: var(--lx-primary); color: var(--lx-primary-fg); }
1741
-
1742
- .lx-nav-fill .lx-nav-item { flex: 1; }
1743
- .lx-nav-fill .lx-nav-link { text-align: center; }
1744
- .lx-nav-justified .lx-nav-item { flex: 1; text-align: center; }
1745
- .lx-nav-justified .lx-nav-link { text-align: center; }
1746
-
1747
- .lx-tab-content .lx-tab-pane { display: none; }
1748
- .lx-tab-content .lx-tab-pane.lx-active { display: block; animation: lx-fadein var(--lx-duration) var(--lx-ease); }
1749
-
1750
- .lx-flex-col.lx-nav { flex-direction: column; }
1751
- .lx-flex-col.lx-nav .lx-nav-link { width: 100%; }
1752
-
1753
- @keyframes lx-fadein { from { opacity: 0; } to { opacity: 1; } }
1754
-
1755
-
1756
- /* ── List Group ── */
1757
- .lx-list-group {
1758
- display: flex;
1759
- flex-direction:column;
1760
- border-radius: var(--lx-radius-md);
1761
- overflow: hidden;
1762
- border: 1px solid var(--lx-border);
1763
- }
1764
- .lx-list-group-item {
1765
- padding: .75rem 1rem;
1766
- font-size: var(--lx-text-sm);
1767
- background: var(--lx-bg);
1768
- color: var(--lx-text-secondary);
1769
- border-bottom: 1px solid var(--lx-border);
1770
- }
1771
- .lx-list-group-item:last-child { border-bottom: none; }
1772
- .lx-list-group-item.lx-active { background: var(--lx-primary); color: var(--lx-primary-fg); border-color: var(--lx-primary); }
1773
- .lx-list-group-item.lx-disabled { opacity: .55; cursor: not-allowed; pointer-events: none; }
1774
-
1775
- .lx-list-group-item-action { cursor: pointer; text-decoration: none; display: block; transition: background var(--lx-duration-fast) var(--lx-ease); }
1776
- .lx-list-group-item-action:hover { background: var(--lx-bg-muted); color: var(--lx-text); }
1777
-
1778
- .lx-list-group-item-success { background: var(--lx-success-subtle); color: var(--lx-success-hover); border-color: var(--lx-success-light); }
1779
- .lx-list-group-item-warning { background: var(--lx-warning-subtle); color: var(--lx-warning-hover); border-color: var(--lx-warning-light); }
1780
- .lx-list-group-item-danger { background: var(--lx-danger-subtle); color: var(--lx-danger-hover); border-color: var(--lx-danger-light); }
1781
- .lx-list-group-item-info { background: var(--lx-info-subtle); color: var(--lx-info-hover); border-color: var(--lx-info-light); }
1782
-
1783
- .lx-list-group-horizontal { flex-direction: row; }
1784
- .lx-list-group-horizontal .lx-list-group-item { border-bottom: none; border-inline-end: 1px solid var(--lx-border); }
1785
- .lx-list-group-horizontal .lx-list-group-item:last-child { border-inline-end: none; }
1786
-
1787
-
1788
- /* ── Pagination ── */
1789
- .lx-pagination { display: inline-flex; align-items: center; gap: .125rem; list-style: none; padding: 0; margin: 0; }
1790
- .lx-page-link {
1791
- display: flex;
1792
- align-items: center;
1793
- justify-content: center;
1794
- min-width: 2rem;
1795
- height: 2rem;
1796
- padding: 0 .5rem;
1797
- font-size: var(--lx-text-sm);
1798
- font-weight: 500;
1799
- color: var(--lx-text-secondary);
1800
- background: var(--lx-bg);
1801
- border: 1px solid var(--lx-border);
1802
- border-radius: var(--lx-radius);
1803
- text-decoration: none;
1804
- cursor: pointer;
1805
- transition: var(--lx-transition);
1806
- }
1807
- .lx-page-link:hover { background: var(--lx-bg-muted); color: var(--lx-text); border-color: var(--lx-border-strong); }
1808
- .lx-page-item.lx-active .lx-page-link { background: var(--lx-primary); color: white; border-color: var(--lx-primary); }
1809
- .lx-page-item.lx-disabled .lx-page-link { opacity: .5; cursor: not-allowed; pointer-events: none; }
1810
- .lx-pagination-sm .lx-page-link { min-width: 1.75rem; height: 1.75rem; font-size: .75rem; }
1811
- .lx-pagination-lg .lx-page-link { min-width: 2.5rem; height: 2.5rem; font-size: 1rem; }
1812
-
1813
-
1814
- /* ── Accordion ── */
1815
- .lx-accordion {
1816
- border: 1px solid var(--lx-border);
1817
- border-radius: var(--lx-radius-md);
1818
- overflow: hidden;
1819
- }
1820
- .lx-accordion-item { border-bottom: 1px solid var(--lx-border); }
1821
- .lx-accordion-item:last-child { border-bottom: none; }
1822
- .lx-accordion-flush { border: none; border-radius: 0; }
1823
- .lx-accordion-flush .lx-accordion-item { border-inline: none; }
1824
-
1825
- .lx-accordion-trigger {
1826
- display: flex;
1827
- align-items: center;
1828
- justify-content: space-between;
1829
- width: 100%;
1830
- padding: 1rem 1.25rem;
1831
- font-size: var(--lx-text-sm);
1832
- font-weight: 600;
1833
- color: var(--lx-text);
1834
- background: var(--lx-bg);
1835
- border: none;
1836
- cursor: pointer;
1837
- text-align: start;
1838
- transition: background var(--lx-duration-fast) var(--lx-ease);
1839
- }
1840
- .lx-accordion-trigger:hover { background: var(--lx-bg-soft); }
1841
- .lx-accordion-trigger.lx-active { color: var(--lx-primary); background: var(--lx-primary-subtle); }
1842
-
1843
- .lx-accordion-icon {
1844
- width: .875rem;
1845
- height: .875rem;
1846
- border-right: 1.5px solid currentColor;
1847
- border-bottom: 1.5px solid currentColor;
1848
- transform: rotate(45deg);
1849
- flex-shrink: 0;
1850
- transition: transform var(--lx-duration) var(--lx-ease);
1851
- }
1852
- .lx-accordion-trigger.lx-active .lx-accordion-icon { transform: rotate(-135deg); }
1853
-
1854
- .lx-accordion-body { display: none; padding: 1rem 1.25rem; font-size: var(--lx-text-sm); color: var(--lx-text-secondary); line-height: 1.7; }
1855
- .lx-accordion-body.lx-show { display: block; animation: lx-fadein var(--lx-duration) var(--lx-ease); }
1856
-
1857
-
1858
- /* ── Collapse ── */
1859
- .lx-collapse { display: none; }
1860
- .lx-collapse.lx-show { display: block; animation: lx-fadein var(--lx-duration) var(--lx-ease); }
1861
-
1862
-
1863
- /* ── Toast ── */
1864
- .lx-toast-container { display: flex; flex-direction: column; gap: .5rem; }
1865
- .lx-toast {
1866
- min-width: 280px;
1867
- max-width: 380px;
1868
- background: var(--lx-bg);
1869
- border: 1px solid var(--lx-border);
1870
- border-radius: var(--lx-radius-md);
1871
- box-shadow: var(--lx-shadow-lg);
1872
- overflow: hidden;
1873
- opacity: 0;
1874
- transition: opacity var(--lx-duration) var(--lx-ease), transform var(--lx-duration) var(--lx-ease);
1875
- transform: translateX(1rem);
1876
- }
1877
- .lx-toast.lx-show { opacity: 1; transform: translateX(0); }
1878
-
1879
- .lx-toast-header {
1880
- display: flex;
1881
- align-items: center;
1882
- padding: .6rem .875rem;
1883
- border-bottom: 1px solid var(--lx-border);
1884
- background: var(--lx-bg-soft);
1885
- font-size: var(--lx-text-sm);
1886
- font-weight: 600;
1887
- gap: .5rem;
1888
- }
1889
- .lx-toast-body { padding: .75rem .875rem; font-size: var(--lx-text-sm); color: var(--lx-text-secondary); }
1890
-
1891
-
1892
- /* ── Tooltip ── */
1893
- .lx-tooltip {
1894
- position: absolute;
1895
- z-index: var(--lx-z-tooltip);
1896
- background: var(--lx-tooltip-bg);
1897
- color: var(--lx-tooltip-color);
1898
- font-size: .75rem;
1899
- padding: .3rem .6rem;
1900
- border-radius: var(--lx-tooltip-radius);
1901
- white-space: nowrap;
1902
- pointer-events:none;
1903
- max-width: 200px;
1904
- white-space: normal;
1905
- line-height: 1.4;
1906
- animation: lx-fadein var(--lx-duration-fast) var(--lx-ease);
1907
- }
1908
-
1909
-
1910
- /* ── Popover ── */
1911
- .lx-popover {
1912
- position: absolute;
1913
- z-index: var(--lx-z-popover);
1914
- background: var(--lx-bg);
1915
- border: 1px solid var(--lx-border);
1916
- border-radius: var(--lx-radius-md);
1917
- box-shadow: var(--lx-shadow-lg);
1918
- max-width: 280px;
1919
- font-size: var(--lx-text-sm);
1920
- animation: lx-fadein var(--lx-duration-fast) var(--lx-ease);
1921
- }
1922
- .lx-popover-header { padding: .6rem .875rem; font-weight: 600; border-bottom: 1px solid var(--lx-border); background: var(--lx-bg-soft); border-radius: var(--lx-radius-md) var(--lx-radius-md) 0 0; }
1923
- .lx-popover-body { padding: .75rem .875rem; color: var(--lx-text-secondary); line-height: 1.6; }
1924
-
1925
-
1926
- /* ── Carousel ── */
1927
- .lx-carousel { position: relative; overflow: hidden; }
1928
- .lx-carousel-inner { display: flex; transition: transform var(--lx-duration-slow) var(--lx-ease); }
1929
- .lx-carousel-item { min-width: 100%; flex-shrink: 0; }
1930
-
1931
- .lx-carousel-indicators {
1932
- position: absolute;
1933
- bottom: 1rem;
1934
- inset-inline: 0;
1935
- display: flex;
1936
- justify-content: center;
1937
- gap: .375rem;
1938
- z-index: 2;
1939
- list-style:none;
1940
- padding: 0;
1941
- margin: 0;
1942
- }
1943
- .lx-carousel-indicators button {
1944
- width: 8px;
1945
- height: 8px;
1946
- border-radius: 50%;
1947
- border: none;
1948
- background: rgba(255,255,255,.5);
1949
- cursor: pointer;
1950
- padding: 0;
1951
- transition: var(--lx-transition);
1952
- }
1953
- .lx-carousel-indicators button.lx-active { background: #fff; width: 20px; border-radius: 4px; }
1954
-
1955
- .lx-carousel-control {
1956
- position: absolute;
1957
- top: 50%;
1958
- transform: translateY(-50%);
1959
- z-index: 2;
1960
- background:rgba(0,0,0,.35);
1961
- border: none;
1962
- color: white;
1963
- width: 2.5rem;
1964
- height: 2.5rem;
1965
- border-radius: 50%;
1966
- cursor: pointer;
1967
- display: flex;
1968
- align-items: center;
1969
- justify-content:center;
1970
- transition:var(--lx-transition);
1971
- }
1972
- .lx-carousel-control:hover { background: rgba(0,0,0,.6); }
1973
- .lx-carousel-prev { inset-inline-start: 1rem; }
1974
- .lx-carousel-next { inset-inline-end: 1rem; }
1975
- .lx-carousel-prev-icon::before { content: "‹"; font-size: 1.5rem; line-height: 1; }
1976
- .lx-carousel-next-icon::before { content: "›"; font-size: 1.5rem; line-height: 1; }
1977
-
1978
- .lx-carousel-caption {
1979
- position: absolute;
1980
- bottom: 3rem;
1981
- inset-inline: 15%;
1982
- text-align: center;
1983
- color: white;
1984
- text-shadow:0 1px 3px rgba(0,0,0,.5);
1985
- }
1986
- .lx-carousel-caption h5 { font-size: var(--lx-text-xl); font-weight: 700; margin-bottom: .5rem; }
1987
-
1988
-
1989
- /* ── Skeleton ── */
1990
- .lx-skeleton {
1991
- background: linear-gradient(90deg, var(--lx-gray-100) 25%, var(--lx-gray-200) 50%, var(--lx-gray-100) 75%);
1992
- background-size: 200% 100%;
1993
- animation: lx-skeleton-wave 1.5s ease-in-out infinite;
1994
- border-radius: var(--lx-radius);
1995
- }
1996
- .lx-skeleton-text { height: 1em; margin-bottom: .5em; }
1997
- .lx-skeleton-img { width: 100%; border-radius: var(--lx-radius); }
1998
- .lx-skeleton-avatar { width: var(--lx-avatar-size); height: var(--lx-avatar-size); border-radius: 50%; }
1999
- .lx-skeleton-btn { height: 2.25rem; width: 5rem; }
2000
- .lx-skeleton-pulse { animation: lx-skeleton-pulse 1.5s ease-in-out infinite; background: var(--lx-gray-200); }
2001
- .lx-skeleton-none { animation: none; background: var(--lx-gray-200); }
2002
-
2003
- @keyframes lx-skeleton-wave {
2004
- 0% { background-position: 200% 0; }
2005
- 100% { background-position: -200% 0; }
2006
- }
2007
- @keyframes lx-skeleton-pulse {
2008
- 0%, 100% { opacity: 1; }
2009
- 50% { opacity: .4; }
2010
- }
2011
-
2012
-
2013
- /* ── Timeline ── */
2014
- .lx-timeline { position: relative; padding-inline-start: 1.75rem; }
2015
- .lx-timeline::before {
2016
- content: "";
2017
- position: absolute;
2018
- inset-inline-start: .55rem;
2019
- top: 0;
2020
- bottom: 0;
2021
- width: 2px;
2022
- background: var(--lx-border);
2023
- }
2024
-
2025
- .lx-timeline-item { position: relative; padding-bottom: 1.5rem; }
2026
- .lx-timeline-item:last-child { padding-bottom: 0; }
2027
-
2028
- .lx-timeline-marker {
2029
- position: absolute;
2030
- inset-inline-start: -1.2rem;
2031
- top: .25rem;
2032
- width: .875rem;
2033
- height: .875rem;
2034
- border-radius: 50%;
2035
- background: var(--lx-primary);
2036
- border: 2px solid var(--lx-bg);
2037
- box-shadow: 0 0 0 2px var(--lx-border);
2038
- flex-shrink: 0;
2039
- z-index: 1;
2040
- }
2041
- .lx-timeline-marker-icon {
2042
- width: 1.5rem;
2043
- height: 1.5rem;
2044
- inset-inline-start: -1.5rem;
2045
- display: flex;
2046
- align-items: center;
2047
- justify-content:center;
2048
- font-size: .6rem;
2049
- }
2050
-
2051
- .lx-timeline-content { padding-inline-start: .25rem; }
2052
- .lx-timeline-header { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; margin-bottom: .375rem; }
2053
- .lx-timeline-title { font-weight: 600; font-size: var(--lx-text-sm); color: var(--lx-text); margin: 0; }
2054
- .lx-timeline-time { font-size: var(--lx-text-xs); color: var(--lx-text-muted); white-space: nowrap; flex-shrink: 0; }
2055
-
2056
- .lx-timeline-item-pending .lx-timeline-marker { background: var(--lx-gray-300); box-shadow: 0 0 0 2px var(--lx-gray-200); }
2057
- .lx-timeline-item-pending .lx-timeline-title { color: var(--lx-text-muted); font-weight: 400; }
2058
-
2059
- .lx-timeline-horizontal { display: flex; padding-inline: 0; padding-block-end: 1.75rem; }
2060
- .lx-timeline-horizontal::before { top: .55rem; bottom: auto; inset-inline: 0; width: auto; height: 2px; }
2061
- .lx-timeline-horizontal .lx-timeline-item { padding-bottom: 0; padding-top: 1.75rem; flex: 1; }
2062
- .lx-timeline-horizontal .lx-timeline-marker { top: -1.2rem; inset-inline-start: 0; }
2063
-
2064
- .lx-timeline-compact .lx-timeline-item { padding-bottom: .75rem; }
2065
- .lx-timeline-compact .lx-timeline-content { display: flex; align-items: center; }
2066
-
2067
-
2068
- /* ── Scrollspy ── */
2069
- .lx-scrollspy-active { color: var(--lx-primary) !important; background: var(--lx-primary-subtle) !important; font-weight: 600 !important; }
2070
-
2071
-
2072
- /* ── Position helpers ── */
2073
- .lx-stretched-link::after {
2074
- content: "";
2075
- position: absolute;
2076
- inset: 0;
2077
- z-index: 1;
2078
- }
2079
-
2080
- .lx-link-primary { color: var(--lx-primary); }
2081
- .lx-link-secondary { color: var(--lx-secondary); }
2082
- .lx-link-success { color: var(--lx-success); }
2083
- .lx-link-warning { color: var(--lx-warning); }
2084
- .lx-link-danger { color: var(--lx-danger); }
2085
- .lx-link-info { color: var(--lx-info); }
2086
- .lx-link-dark { color: var(--lx-dark); }
2087
- .lx-link-light { color: var(--lx-gray-400); }
2088
-
2089
- [class^="lx-link-"]:hover { text-decoration: underline; }
2090
-
2091
-
2092
- /* ================================================================
2093
- §7 FORMS
2094
- ================================================================= */
2095
-
2096
- /* ── Form group ── */
2097
- .lx-form-group { margin-bottom: 1.125rem; }
2098
- .lx-form-group:last-child { margin-bottom: 0; }
2099
- .lx-form-inline { display: flex; align-items: flex-end; flex-wrap: wrap; }
2100
- .lx-form-horizontal .lx-label { margin-bottom: 0; padding-top: calc(var(--lx-input-padding-y) + 1px); }
2101
-
2102
- .lx-label {
2103
- display: block;
2104
- font-size: var(--lx-text-sm);
2105
- font-weight: 500;
2106
- color: var(--lx-text-secondary);
2107
- margin-bottom: .375rem;
2108
- }
2109
- .lx-label.lx-required::after { content: " *"; color: var(--lx-danger); }
2110
- .lx-form-hint { display: block; font-size: var(--lx-text-xs); color: var(--lx-text-muted); margin-top: .3rem; }
2111
-
2112
- /* ── Input ── */
2113
- .lx-input,
2114
- .lx-textarea,
2115
- .lx-select {
2116
- display: block;
2117
- width: 100%;
2118
- padding: var(--lx-input-padding-y) var(--lx-input-padding-x);
2119
- font-size: var(--lx-input-font-size);
2120
- font-family: var(--lx-font-sans);
2121
- line-height: 1.5;
2122
- color: var(--lx-text);
2123
- background: var(--lx-input-bg);
2124
- border: var(--lx-input-border);
2125
- border-radius: var(--lx-input-radius);
2126
- transition: border-color var(--lx-duration-fast) var(--lx-ease), box-shadow var(--lx-duration-fast) var(--lx-ease);
2127
- appearance: none;
2128
- -webkit-appearance: none;
2129
- }
2130
- .lx-input:focus,
2131
- .lx-textarea:focus,
2132
- .lx-select:focus {
2133
- outline: none;
2134
- border-color: var(--lx-primary);
2135
- box-shadow: var(--lx-input-focus-shadow);
2136
- }
2137
- .lx-input::placeholder,
2138
- .lx-textarea::placeholder { color: var(--lx-text-muted); }
2139
- .lx-input:disabled,
2140
- .lx-textarea:disabled,
2141
- .lx-select:disabled { opacity: .55; cursor: not-allowed; background: var(--lx-bg-muted); }
2142
- .lx-input[readonly] { background: var(--lx-bg-soft); cursor: default; }
2143
-
2144
- .lx-input-sm, .lx-textarea-sm, .lx-select-sm { padding: .3rem .65rem; font-size: .8rem; }
2145
- .lx-input-lg, .lx-textarea-lg, .lx-select-lg { padding: .65rem 1rem; font-size: 1rem; }
2146
-
2147
- .lx-input-success { border-color: var(--lx-success) !important; }
2148
- .lx-input-success:focus { box-shadow: 0 0 0 3px rgba(34,197,94,.15); }
2149
- .lx-input-warning { border-color: var(--lx-warning) !important; }
2150
- .lx-input-warning:focus { box-shadow: 0 0 0 3px rgba(245,158,11,.15); }
2151
- .lx-input-error { border-color: var(--lx-danger) !important; }
2152
- .lx-input-error:focus { box-shadow: 0 0 0 3px rgba(239,68,68,.15); }
2153
-
2154
- .lx-input-color { height: 2.4rem; padding: .25rem .4rem; cursor: pointer; }
2155
-
2156
- /* ── Textarea ── */
2157
- .lx-textarea { resize: vertical; min-height: 6rem; }
2158
- .lx-textarea-auto { resize: none; overflow: hidden; }
2159
-
2160
- /* ── Select ── */
2161
- .lx-select {
2162
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
2163
- background-repeat: no-repeat;
2164
- background-position: right .75rem center;
2165
- padding-right: 2.25rem;
2166
- cursor: pointer;
2167
- }
2168
- .lx-select[multiple], .lx-select[size] {
2169
- background-image: none;
2170
- padding-right: var(--lx-input-padding-x);
2171
- }
2172
-
2173
- /* ── Input Group ── */
2174
- .lx-input-group {
2175
- display: flex;
2176
- align-items: stretch;
2177
- }
2178
- .lx-input-group .lx-input,
2179
- .lx-input-group .lx-select { flex: 1; border-radius: 0; }
2180
- .lx-input-group .lx-input:first-child,
2181
- .lx-input-group .lx-select:first-child { border-radius: var(--lx-input-radius) 0 0 var(--lx-input-radius); }
2182
- .lx-input-group .lx-input:last-child,
2183
- .lx-input-group .lx-select:last-child { border-radius: 0 var(--lx-input-radius) var(--lx-input-radius) 0; }
2184
- .lx-input-group .lx-input:focus, .lx-input-group .lx-select:focus { z-index: 2; }
2185
-
2186
- .lx-input-addon {
2187
- display: flex;
2188
- align-items: center;
2189
- padding: var(--lx-input-padding-y) var(--lx-input-padding-x);
2190
- font-size: var(--lx-input-font-size);
2191
- font-weight: 500;
2192
- color: var(--lx-text-secondary);
2193
- background: var(--lx-bg-muted);
2194
- border: var(--lx-input-border);
2195
- white-space: nowrap;
2196
- }
2197
- .lx-input-group .lx-input-addon:first-child { border-radius: var(--lx-input-radius) 0 0 var(--lx-input-radius); border-right: none; }
2198
- .lx-input-group .lx-input-addon:last-child { border-radius: 0 var(--lx-input-radius) var(--lx-input-radius) 0; border-left: none; }
2199
-
2200
- .lx-input-group .lx-btn:first-child { border-radius: var(--lx-input-radius) 0 0 var(--lx-input-radius); }
2201
- .lx-input-group .lx-btn:last-child { border-radius: 0 var(--lx-input-radius) var(--lx-input-radius) 0; }
2202
-
2203
- /* ── Floating Label ── */
2204
- .lx-form-floating {
2205
- position: relative;
2206
- }
2207
- .lx-form-floating .lx-input,
2208
- .lx-form-floating .lx-select,
2209
- .lx-form-floating .lx-textarea {
2210
- padding-top: 1.5rem;
2211
- padding-bottom: .5rem;
2212
- height: 3.25rem;
2213
- }
2214
- .lx-form-floating .lx-textarea { height: auto; padding-top: 1.75rem; }
2215
- .lx-form-floating label {
2216
- position: absolute;
2217
- top: .875rem;
2218
- inset-inline-start: var(--lx-input-padding-x);
2219
- color: var(--lx-text-muted);
2220
- font-size: var(--lx-text-sm);
2221
- font-weight: 400;
2222
- pointer-events: none;
2223
- transform-origin: 0 0;
2224
- transition: transform var(--lx-duration-fast) var(--lx-ease), font-size var(--lx-duration-fast) var(--lx-ease), top var(--lx-duration-fast) var(--lx-ease);
2225
- }
2226
- .lx-form-floating .lx-input:focus ~ label,
2227
- .lx-form-floating .lx-input:not(:placeholder-shown) ~ label,
2228
- .lx-form-floating .lx-textarea:focus ~ label,
2229
- .lx-form-floating .lx-textarea:not(:placeholder-shown) ~ label,
2230
- .lx-form-floating .lx-select:focus ~ label,
2231
- .lx-form-floating .lx-select:not(:placeholder-shown) ~ label {
2232
- top: .375rem;
2233
- font-size: .7rem;
2234
- font-weight:600;
2235
- color: var(--lx-primary);
2236
- }
2237
-
2238
- /* ── Checkbox ── */
2239
- .lx-checkbox,
2240
- .lx-radio {
2241
- display: inline-flex;
2242
- align-items: flex-start;
2243
- gap: .5rem;
2244
- cursor: pointer;
2245
- font-size: var(--lx-text-sm);
2246
- color: var(--lx-text-secondary);
2247
- user-select: none;
2248
- line-height: 1.5;
2249
- }
2250
- .lx-checkbox input[type="checkbox"],
2251
- .lx-radio input[type="radio"] { position: absolute; opacity: 0; width: 0; height: 0; }
2252
-
2253
- .lx-checkbox-mark {
2254
- display: flex;
2255
- align-items: center;
2256
- justify-content:center;
2257
- width: 1.125rem;
2258
- height: 1.125rem;
2259
- border: 1.5px solid var(--lx-border-strong);
2260
- border-radius: var(--lx-radius-xs);
2261
- background: var(--lx-bg);
2262
- flex-shrink:0;
2263
- margin-top: .125rem;
2264
- transition: var(--lx-transition);
2265
- }
2266
- .lx-checkbox input:checked ~ .lx-checkbox-mark {
2267
- background: var(--lx-primary);
2268
- border-color: var(--lx-primary);
2269
- }
2270
- .lx-checkbox input:checked ~ .lx-checkbox-mark::after {
2271
- content: "";
2272
- width: .3rem;
2273
- height: .55rem;
2274
- border-right: 2px solid white;
2275
- border-bottom: 2px solid white;
2276
- transform: rotate(45deg) translate(-.05rem, -.1rem);
2277
- }
2278
- .lx-checkbox input:disabled ~ .lx-checkbox-mark { opacity: .5; cursor: not-allowed; }
2279
-
2280
- .lx-radio-mark {
2281
- width: 1.125rem;
2282
- height: 1.125rem;
2283
- border: 1.5px solid var(--lx-border-strong);
2284
- border-radius:50%;
2285
- background: var(--lx-bg);
2286
- flex-shrink: 0;
2287
- margin-top: .125rem;
2288
- display: flex;
2289
- align-items: center;
2290
- justify-content:center;
2291
- transition: var(--lx-transition);
2292
- }
2293
- .lx-radio input:checked ~ .lx-radio-mark {
2294
- border-color: var(--lx-primary);
2295
- }
2296
- .lx-radio input:checked ~ .lx-radio-mark::after {
2297
- content: "";
2298
- width: .45rem;
2299
- height: .45rem;
2300
- border-radius:50%;
2301
- background: var(--lx-primary);
2302
- }
2303
-
2304
- /* ── Switch ── */
2305
- .lx-switch {
2306
- display: inline-flex;
2307
- align-items: center;
2308
- gap: .625rem;
2309
- cursor: pointer;
2310
- font-size: var(--lx-text-sm);
2311
- color: var(--lx-text-secondary);
2312
- user-select: none;
2313
- }
2314
- .lx-switch input[type="checkbox"] { position: absolute; opacity: 0; width: 0; height: 0; }
2315
- .lx-switch-thumb {
2316
- position: relative;
2317
- width: 2.25rem;
2318
- height: 1.25rem;
2319
- background: var(--lx-gray-300);
2320
- border-radius: var(--lx-radius-full);
2321
- flex-shrink:0;
2322
- transition: background var(--lx-duration) var(--lx-ease);
2323
- }
2324
- .lx-switch-thumb::before {
2325
- content: "";
2326
- position: absolute;
2327
- top: .1875rem;
2328
- inset-inline-start: .1875rem;
2329
- width: .875rem;
2330
- height: .875rem;
2331
- border-radius:50%;
2332
- background: white;
2333
- box-shadow: var(--lx-shadow-sm);
2334
- transition: transform var(--lx-duration) var(--lx-ease-spring);
2335
- }
2336
- .lx-switch input:checked ~ .lx-switch-thumb { background: var(--lx-primary); }
2337
- .lx-switch input:checked ~ .lx-switch-thumb::before { transform: translateX(1rem); }
2338
- .lx-switch-success input:checked ~ .lx-switch-thumb { background: var(--lx-success); }
2339
- .lx-switch-danger input:checked ~ .lx-switch-thumb { background: var(--lx-danger); }
2340
- .lx-switch-warning input:checked ~ .lx-switch-thumb { background: var(--lx-warning); }
2341
- .lx-switch input:disabled ~ .lx-switch-thumb { opacity: .5; cursor: not-allowed; }
2342
-
2343
- /* ── Range ── */
2344
- .lx-range {
2345
- width: 100%;
2346
- height: .375rem;
2347
- appearance: none;
2348
- -webkit-appearance:none;
2349
- background: var(--lx-border);
2350
- border-radius: var(--lx-radius-full);
2351
- cursor: pointer;
2352
- outline: none;
2353
- }
2354
- .lx-range::-webkit-slider-thumb {
2355
- appearance: none;
2356
- width: 1.125rem;
2357
- height: 1.125rem;
2358
- border-radius:50%;
2359
- background: var(--lx-primary);
2360
- border: 2px solid white;
2361
- box-shadow: var(--lx-shadow-sm);
2362
- transition: transform var(--lx-duration-fast) var(--lx-ease);
2363
- }
2364
- .lx-range::-webkit-slider-thumb:hover { transform: scale(1.1); }
2365
- .lx-range::-moz-range-thumb {
2366
- width: 1.125rem;
2367
- height: 1.125rem;
2368
- border-radius:50%;
2369
- background: var(--lx-primary);
2370
- border: 2px solid white;
2371
- cursor: pointer;
2372
- }
2373
- .lx-range:disabled { opacity: .55; cursor: not-allowed; }
2374
-
2375
- /* ── Validation ── */
2376
- .lx-valid-feedback { display: none; font-size: var(--lx-text-xs); color: var(--lx-success-hover); margin-top: .3rem; }
2377
- .lx-invalid-feedback { display: none; font-size: var(--lx-text-xs); color: var(--lx-danger-hover); margin-top: .3rem; }
2378
-
2379
- .lx-was-validated .lx-input:valid ~ .lx-valid-feedback,
2380
- .lx-was-validated .lx-input:invalid ~ .lx-invalid-feedback { display: block; }
2381
- .lx-was-validated .lx-input:valid { border-color: var(--lx-success); }
2382
- .lx-was-validated .lx-input:invalid { border-color: var(--lx-danger); }
2383
-
2384
- /* ── Table ── */
2385
- .lx-table {
2386
- width: 100%;
2387
- caption-side: bottom;
2388
- border-collapse: collapse;
2389
- font-size: var(--lx-text-sm);
2390
- }
2391
- .lx-table th,
2392
- .lx-table td {
2393
- padding: .625rem .875rem;
2394
- vertical-align:middle;
2395
- border-bottom: 1px solid var(--lx-border);
2396
- color: var(--lx-text-secondary);
2397
- }
2398
- .lx-table th {
2399
- font-weight: 600;
2400
- font-size: .7rem;
2401
- text-transform: uppercase;
2402
- letter-spacing: .05em;
2403
- color: var(--lx-text-muted);
2404
- background: var(--lx-bg-soft);
2405
- white-space: nowrap;
2406
- }
2407
- .lx-table tbody tr:last-child td { border-bottom: none; }
2408
- .lx-table tbody tr:hover td { background: var(--lx-bg-soft); }
2409
-
2410
- .lx-table-striped tbody tr:nth-child(even) td { background: var(--lx-bg-muted); }
2411
- .lx-table-hover tbody tr:hover td { background: var(--lx-primary-subtle); }
2412
- .lx-table-bordered th,
2413
- .lx-table-bordered td { border: 1px solid var(--lx-border); }
2414
- .lx-table-borderless th,
2415
- .lx-table-borderless td { border: none; }
2416
- .lx-table-compact th,
2417
- .lx-table-compact td { padding: .35rem .75rem; }
2418
-
2419
- .lx-table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; }
2420
- .lx-table-responsive-md { overflow-x: auto; }
2421
- @media (min-width: 768px) { .lx-table-responsive-md { overflow: visible; } }
2422
-
2423
- .lx-table-primary td { background: var(--lx-primary-subtle); color: var(--lx-primary); }
2424
- .lx-table-success td { background: var(--lx-success-subtle); color: var(--lx-success-hover); }
2425
- .lx-table-warning td { background: var(--lx-warning-subtle); color: var(--lx-warning-hover); }
2426
- .lx-table-danger td { background: var(--lx-danger-subtle); color: var(--lx-danger-hover); }
2427
- .lx-table-active td { background: var(--lx-bg-muted); }
2428
-
2429
- /* ── Images ── */
2430
- .lx-img-fluid { max-width: 100%; height: auto; display: block; }
2431
- .lx-img-thumbnail { max-width: 100%; height: auto; border: 2px solid var(--lx-border); border-radius: var(--lx-radius); padding: .25rem; background: var(--lx-bg); }
2432
- .lx-img-cover { width: 100%; height: 100%; object-fit: cover; display: block; }
2433
-
2434
- /* ── Figure ── */
2435
- .lx-figure { margin: 0; }
2436
- .lx-figure-caption { margin-top: .5rem; font-size: var(--lx-text-xs); color: var(--lx-text-muted); }
2437
-
2438
- /* ================================================================
2439
- END OF LxUI CSS
2440
- https://ui.lancar.id · https://cdn.lancar.id/ui/lxui.css
2441
- ================================================================= */
2442
-
2443
-
2444
- /* ================================================================
2445
- RTL OVERRIDES
2446
- ================================================================= */
2447
-
2448
- [dir="rtl"] .lx-dropdown-toggle::after {
2449
- margin-inline-start: 0;
2450
- margin-inline-end: .4em;
2451
- }
2452
-
2453
- [dir="rtl"] .lx-carousel-prev { inset-inline-start: auto; inset-inline-end: 1rem; }
2454
- [dir="rtl"] .lx-carousel-next { inset-inline-end: auto; inset-inline-start: 1rem; }
2455
-
2456
- [dir="rtl"] .lx-float-start { float: inline-end; }
2457
- [dir="rtl"] .lx-float-end { float: inline-start; }
2458
-
2459
- [dir="rtl"] .lx-timeline { padding-inline-start: 0; padding-inline-end: 1.75rem; }
2460
- [dir="rtl"] .lx-timeline::before { inset-inline-start: auto; inset-inline-end: .55rem; }
2461
- [dir="rtl"] .lx-timeline-marker { inset-inline-start: auto; inset-inline-end: -1.2rem; }
2462
-
2463
- [dir="rtl"] .lx-input-group .lx-input:first-child { border-radius: 0 var(--lx-input-radius) var(--lx-input-radius) 0; }
2464
- [dir="rtl"] .lx-input-group .lx-input:last-child { border-radius: var(--lx-input-radius) 0 0 var(--lx-input-radius); }
2465
- [dir="rtl"] .lx-input-group .lx-input-addon:first-child { border-radius: 0 var(--lx-input-radius) var(--lx-input-radius) 0; border-right: var(--lx-input-border); border-left: none; }
2466
- [dir="rtl"] .lx-input-group .lx-input-addon:last-child { border-radius: var(--lx-input-radius) 0 0 var(--lx-input-radius); border-left: var(--lx-input-border); border-right: none; }