@ceedcv-maya/shared-styles 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +54 -0
- package/index.css +652 -0
- package/package.json +45 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Maya-AQSS
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
[email protected]/shared-styles
|
|
2
|
+
|
|
3
|
+
CSS-only package bundling the design tokens, color palette, animations and base reset used by every `@ceedcv-maya/shared-*-react` component. Pulling it in is the simplest way to make the styled components (`Button`, `DataTable`, `Sidebar`, …) render correctly in a third-party app.
|
|
4
|
+
|
|
5
|
+
Built for **Tailwind CSS v4**. The file exports:
|
|
6
|
+
- `@theme` block with the Odoo/Maya color palette (`--color-odoo-purple`, `--color-ui-card`, `--color-text-primary`, …).
|
|
7
|
+
- Custom utilities (`bg-gradient-primary`, dark-mode helpers, etc.).
|
|
8
|
+
- Animations + base reset shared across the ecosystem.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @ceedcv-maya/shared-styles
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Usage with a `@ceedcv-maya` component package
|
|
17
|
+
|
|
18
|
+
```css
|
|
19
|
+
/* src/index.css (or wherever you bootstrap CSS) */
|
|
20
|
+
@import "tailwindcss";
|
|
21
|
+
|
|
22
|
+
/* Pulls in tokens + custom utilities + animations */
|
|
23
|
+
@import "@ceedcv-maya/shared-styles";
|
|
24
|
+
|
|
25
|
+
/* Tailwind v4 needs to scan each shared package whose classes you use,
|
|
26
|
+
so it can emit the utility classes into your bundle.
|
|
27
|
+
Adjust the list to the packages you actually consume. */
|
|
28
|
+
@source "../node_modules/@ceedcv-maya/shared-ui-react/src/**/*.{ts,tsx}";
|
|
29
|
+
@source "../node_modules/@ceedcv-maya/shared-layout-react/src/**/*.{ts,tsx}";
|
|
30
|
+
@source "../node_modules/@ceedcv-maya/shared-sidebar-react/src/**/*.{ts,tsx}";
|
|
31
|
+
@source "../node_modules/@ceedcv-maya/shared-profile-react/src/**/*.{ts,tsx}";
|
|
32
|
+
@source "../node_modules/@ceedcv-maya/shared-dashboard-react/src/**/*.{ts,tsx}";
|
|
33
|
+
@source "../node_modules/@ceedcv-maya/shared-auth-react/src/**/*.{ts,tsx}";
|
|
34
|
+
@source "../node_modules/@ceedcv-maya/shared-i18n-react/src/**/*.{ts,tsx}";
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then import that file once at app entry:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
// src/main.tsx
|
|
41
|
+
import "./index.css"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## What if I do not use Tailwind v4?
|
|
45
|
+
|
|
46
|
+
The tokens block uses the `@theme` directive from Tailwind v4. If your project does not use Tailwind, you can still get the CSS custom properties by importing the file directly — they will be available as plain `var(--color-…)` values — but the utility classes won't be generated; you'll need to write your own styles.
|
|
47
|
+
|
|
48
|
+
## License
|
|
49
|
+
|
|
50
|
+
MIT — see [LICENSE](LICENSE).
|
|
51
|
+
|
|
52
|
+
## Reporting issues
|
|
53
|
+
|
|
54
|
+
The canonical source lives in [Maya-AQSS/maya_platform](https://github.com/Maya-AQSS/maya_platform). File issues there.
|
package/index.css
ADDED
|
@@ -0,0 +1,652 @@
|
|
|
1
|
+
/* NOTA: cada app importa `tailwindcss` y las fuentes desde su propio
|
|
2
|
+
`src/shared/styles/index.css` antes de incluir este archivo. No
|
|
3
|
+
re-importar aquí o Vite no sabrá resolver `tailwindcss` desde
|
|
4
|
+
`/maya_infra/configs/styles/`. */
|
|
5
|
+
|
|
6
|
+
/* ─── Asegurar escaneo de paquetes compartidos ──────────── */
|
|
7
|
+
/* Rutas relativas a este archivo (`/maya_infra/configs/styles/index.css`).
|
|
8
|
+
Los paquetes shared viven en `/maya_infra/packages/` tanto en Docker como
|
|
9
|
+
en local (montados como volume). */
|
|
10
|
+
@source "../../packages/maya-shared-layout-react/src/**/*.{tsx,ts}";
|
|
11
|
+
@source "../../packages/maya-shared-sidebar-react/src/**/*.{tsx,ts}";
|
|
12
|
+
@source "../../packages/maya-shared-ui-react/src/**/*.{tsx,ts}";
|
|
13
|
+
@source "../../packages/maya-shared-dashboard-react/src/**/*.{tsx,ts}";
|
|
14
|
+
|
|
15
|
+
/* ─── Dark mode basado en clase .dark ───────────────────── */
|
|
16
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
17
|
+
|
|
18
|
+
/* ─── Tokens del ecosistema Maya / Odoo 19 ─────────────── */
|
|
19
|
+
@theme {
|
|
20
|
+
/* Paleta Odoo — Light */
|
|
21
|
+
--color-odoo-purple: #714B67;
|
|
22
|
+
--color-odoo-purple-d: #5A3A52;
|
|
23
|
+
--color-odoo-purple-l: #9B7B93;
|
|
24
|
+
--color-odoo-teal: #017E84;
|
|
25
|
+
--color-odoo-teal-d: #015F65;
|
|
26
|
+
|
|
27
|
+
/* Paleta Odoo — Dark */
|
|
28
|
+
--color-odoo-dark-purple: #9B7B93;
|
|
29
|
+
--color-odoo-dark-purple-d: #714B67;
|
|
30
|
+
--color-odoo-dark-purple-l: #5A3A52;
|
|
31
|
+
--color-odoo-dark-teal: #20A8AE;
|
|
32
|
+
--color-odoo-dark-teal-d: #017E84;
|
|
33
|
+
|
|
34
|
+
/* Grises de interfaz — Light */
|
|
35
|
+
--color-ui-sidebar: #2C2C2C;
|
|
36
|
+
--color-ui-sidebar-hover: #3D3D3D;
|
|
37
|
+
--color-ui-sidebar-active: #714B67;
|
|
38
|
+
--color-ui-topbar: #FFFFFF;
|
|
39
|
+
--color-ui-body: #F4F5F7;
|
|
40
|
+
--color-ui-card: #FFFFFF;
|
|
41
|
+
--color-ui-border: #D0D0D0;
|
|
42
|
+
--color-ui-border-l: #E9ECEF;
|
|
43
|
+
|
|
44
|
+
/* Grises de interfaz — Dark */
|
|
45
|
+
--color-ui-dark-bg: #1A1A1A;
|
|
46
|
+
--color-ui-dark-card: #2C2C2C;
|
|
47
|
+
--color-ui-dark-topbar: #212121;
|
|
48
|
+
--color-ui-dark-border: #404040;
|
|
49
|
+
--color-ui-dark-border-l: #343434;
|
|
50
|
+
|
|
51
|
+
/* Texto — Light
|
|
52
|
+
Tokens calibrados para WCAG AA (ratio ≥4.5:1) sobre superficies card
|
|
53
|
+
y card-glass. El antiguo `muted` (#ADB5BD) daba 1.7:1 sobre glass blanco
|
|
54
|
+
y era prácticamente ilegible — corregido a #5C636A (5.4:1).
|
|
55
|
+
`secondary` subido a gray-700 para márgen extra sobre los nuevos fondos
|
|
56
|
+
translúcidos. */
|
|
57
|
+
--color-text-primary: #212529;
|
|
58
|
+
--color-text-secondary: #495057;
|
|
59
|
+
--color-text-muted: #5C636A;
|
|
60
|
+
--color-text-inverse: #FFFFFF;
|
|
61
|
+
--color-text-link: #714B67;
|
|
62
|
+
|
|
63
|
+
/* Texto — Dark
|
|
64
|
+
Calibrado para fondo card-glass dark (rgba 44,44,44,0.66 sobre #1A1A1A).
|
|
65
|
+
El antiguo `dark-muted` (#6C757D) daba 3.1:1 — corregido a #8B95A0 (4.7:1).
|
|
66
|
+
`dark-link` subido a un tono purple más claro para asegurar 6:1. */
|
|
67
|
+
--color-text-dark-primary: #E9ECEF;
|
|
68
|
+
--color-text-dark-secondary: #ADB5BD;
|
|
69
|
+
--color-text-dark-muted: #8B95A0;
|
|
70
|
+
--color-text-dark-inverse: #212529;
|
|
71
|
+
--color-text-dark-link: #B89AAF;
|
|
72
|
+
|
|
73
|
+
/* Estados semánticos */
|
|
74
|
+
--color-success: #28A745;
|
|
75
|
+
--color-success-light: #D4EDDA;
|
|
76
|
+
--color-success-dark: #155724;
|
|
77
|
+
--color-info: #17A2B8;
|
|
78
|
+
--color-info-light: #D1ECF1;
|
|
79
|
+
--color-info-dark: #0C5460;
|
|
80
|
+
--color-warning: #FFC107;
|
|
81
|
+
--color-warning-light: #FFF3CD;
|
|
82
|
+
--color-warning-dark: #856404;
|
|
83
|
+
--color-danger: #DC3545;
|
|
84
|
+
--color-danger-light: #F8D7DA;
|
|
85
|
+
--color-danger-dark: #721C24;
|
|
86
|
+
|
|
87
|
+
/* Categóricos (badges decorativos para visibilidad/categorías).
|
|
88
|
+
Cada categoría tiene un par fondo+texto con suficiente contraste AA.
|
|
89
|
+
Modo claro: fondo pastel + texto oscuro saturado.
|
|
90
|
+
Modo oscuro: fondo oscuro saturado + texto pastel. */
|
|
91
|
+
--color-cat-global: #DBEAFE;
|
|
92
|
+
--color-cat-global-fg: #1E40AF;
|
|
93
|
+
--color-cat-study-type: #E0E7FF;
|
|
94
|
+
--color-cat-study-type-fg: #3730A3;
|
|
95
|
+
--color-cat-study: #EDE9FE;
|
|
96
|
+
--color-cat-study-fg: #5B21B6;
|
|
97
|
+
--color-cat-module: #F3E8FF;
|
|
98
|
+
--color-cat-module-fg: #6B21A8;
|
|
99
|
+
--color-cat-team: #CCFBF1;
|
|
100
|
+
--color-cat-team-fg: #115E59;
|
|
101
|
+
|
|
102
|
+
/* Categóricos — variantes dark (fondo saturado tenue + texto pastel) */
|
|
103
|
+
--color-cat-dark-global: #1E3A8A4D;
|
|
104
|
+
--color-cat-dark-global-fg: #93C5FD;
|
|
105
|
+
--color-cat-dark-study-type: #312E814D;
|
|
106
|
+
--color-cat-dark-study-type-fg: #A5B4FC;
|
|
107
|
+
--color-cat-dark-study: #4C1D954D;
|
|
108
|
+
--color-cat-dark-study-fg: #C4B5FD;
|
|
109
|
+
--color-cat-dark-module: #581C874D;
|
|
110
|
+
--color-cat-dark-module-fg: #D8B4FE;
|
|
111
|
+
--color-cat-dark-team: #134E4A4D;
|
|
112
|
+
--color-cat-dark-team-fg: #5EEAD4;
|
|
113
|
+
|
|
114
|
+
/* Tipografía
|
|
115
|
+
- sans (cuerpo): Lato — humanista, óptima para tablas y forms
|
|
116
|
+
- display (titulares): Manrope — geometric sans con personalidad */
|
|
117
|
+
--font-sans: 'Lato', 'Inter', ui-sans-serif, system-ui, sans-serif;
|
|
118
|
+
--font-display: 'Manrope', 'Lato', ui-sans-serif, system-ui, sans-serif;
|
|
119
|
+
|
|
120
|
+
/* Escala de fuente canónica (base 13px — Odoo).
|
|
121
|
+
Toda la app debe usar las clases `text-2xs/xs/sm/base/md/lg/xl/2xl/3xl`.
|
|
122
|
+
`text-2xs` (11px) reservado para micro-labels en badges, fechas absolutas,
|
|
123
|
+
contadores y descripciones secundarias compactas. No usar valores en
|
|
124
|
+
pixeles directos en componentes (`text-[Npx]`). */
|
|
125
|
+
--text-2xs: 11px;
|
|
126
|
+
--text-xs: 12px;
|
|
127
|
+
--text-sm: 13px;
|
|
128
|
+
--text-base: 14px;
|
|
129
|
+
--text-md: 16px;
|
|
130
|
+
--text-lg: 18px;
|
|
131
|
+
--text-xl: 20px;
|
|
132
|
+
--text-2xl: 22px;
|
|
133
|
+
--text-3xl: 24px;
|
|
134
|
+
|
|
135
|
+
/* Bordes */
|
|
136
|
+
--radius-sm: 3px;
|
|
137
|
+
--radius: 4px;
|
|
138
|
+
--radius-md: 6px;
|
|
139
|
+
--radius-lg: 8px;
|
|
140
|
+
--radius-xl: 12px;
|
|
141
|
+
--radius-2xl: 16px;
|
|
142
|
+
--radius-3xl: 24px;
|
|
143
|
+
--radius-full: 9999px;
|
|
144
|
+
|
|
145
|
+
/* Sombras */
|
|
146
|
+
--shadow-card: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06);
|
|
147
|
+
--shadow-card-md: 0 4px 6px rgba(0,0,0,0.07), 0 2px 4px rgba(0,0,0,0.06);
|
|
148
|
+
--shadow-card-glass: 0 24px 48px -16px rgba(15,23,42,0.18), 0 8px 16px -8px rgba(113,75,103,0.18);
|
|
149
|
+
--shadow-topbar: 0 1px 4px rgba(0,0,0,0.1);
|
|
150
|
+
--shadow-dropdown: 0 4px 16px rgba(0,0,0,0.12);
|
|
151
|
+
--shadow-input: 0 0 0 3px rgba(113,75,103,0.15);
|
|
152
|
+
|
|
153
|
+
/* Espaciado custom */
|
|
154
|
+
--spacing-13: 3.25rem;
|
|
155
|
+
--spacing-15: 3.75rem;
|
|
156
|
+
--spacing-18: 4.5rem;
|
|
157
|
+
--spacing-22: 5.5rem;
|
|
158
|
+
--spacing-68: 17rem;
|
|
159
|
+
--spacing-72: 18rem;
|
|
160
|
+
|
|
161
|
+
/* Z-index */
|
|
162
|
+
--z-index-sidebar: 100;
|
|
163
|
+
--z-index-topbar: 200;
|
|
164
|
+
--z-index-dropdown: 300;
|
|
165
|
+
--z-index-modal: 400;
|
|
166
|
+
--z-index-toast: 500;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* ─── Base global ───────────────────────────────────────── */
|
|
170
|
+
@layer base {
|
|
171
|
+
html,
|
|
172
|
+
body,
|
|
173
|
+
#root {
|
|
174
|
+
height: 100%;
|
|
175
|
+
}
|
|
176
|
+
html {
|
|
177
|
+
font-size: 13px;
|
|
178
|
+
-webkit-font-smoothing: antialiased;
|
|
179
|
+
}
|
|
180
|
+
body {
|
|
181
|
+
@apply bg-ui-body text-text-primary font-sans dark:bg-ui-dark-bg dark:text-text-dark-primary;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* Titulares: par tipográfico (Manrope display + Lato body).
|
|
185
|
+
Tracking apretado y pesos altos para presencia visual. */
|
|
186
|
+
h1, h2, h3 {
|
|
187
|
+
font-family: var(--font-display);
|
|
188
|
+
letter-spacing: -0.015em;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* ─── Reduced motion: respeto a prefers-reduced-motion ──── */
|
|
193
|
+
@media (prefers-reduced-motion: reduce) {
|
|
194
|
+
*, *::before, *::after {
|
|
195
|
+
animation-duration: 0.01ms !important;
|
|
196
|
+
animation-iteration-count: 1 !important;
|
|
197
|
+
transition-duration: 0.01ms !important;
|
|
198
|
+
scroll-behavior: auto !important;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* ─── Tipografía base global ─────────────────────────────── */
|
|
203
|
+
/* El body adopta `text-sm` (13px). Tailwind genera las utilidades
|
|
204
|
+
`.text-xs/.text-sm/.text-base/.text-md/.text-lg/.text-xl/.text-2xl/.text-3xl`
|
|
205
|
+
automáticamente desde los tokens `--text-*` definidos en `@theme`. */
|
|
206
|
+
body {
|
|
207
|
+
font-size: var(--text-sm);
|
|
208
|
+
line-height: 1.5;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* ─── Animaciones canónicas ──────────────────────────────── */
|
|
212
|
+
@layer utilities {
|
|
213
|
+
.animate-slide-up { animation: slide-up 0.25s ease-out both; }
|
|
214
|
+
.animate-slide-up-full { animation: slide-up-full 0.3s ease-out both; }
|
|
215
|
+
.animate-fade-in { animation: fade-in 0.18s ease-out both; }
|
|
216
|
+
.animate-fade-in-up { animation: fade-in-up 0.18s ease-out both; }
|
|
217
|
+
.animate-slide-in-right{ animation: slide-in-right 0.18s ease-out both; }
|
|
218
|
+
.animate-slide-in-left { animation: slide-in-left 0.18s ease-out both; }
|
|
219
|
+
|
|
220
|
+
/* Composición estilo tailwindcss-animate: `animate-in <fade-in|slide-in-*|zoom-in-*>`.
|
|
221
|
+
Aplicar `animate-in` junto con uno o varios modificadores; el último activa la
|
|
222
|
+
animación. Usado por ConfirmDialog (zoom-in-95) y wizards de DMS (slide-in-from-top-1). */
|
|
223
|
+
.animate-in {
|
|
224
|
+
animation-duration: 200ms;
|
|
225
|
+
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
226
|
+
animation-fill-mode: forwards;
|
|
227
|
+
}
|
|
228
|
+
.animate-in.fade-in, .animate-in .fade-in { animation-name: fade-in; }
|
|
229
|
+
.animate-in.zoom-in-95, .animate-in .zoom-in-95 { animation-name: zoom-in-95; }
|
|
230
|
+
.animate-in.slide-in-from-top-1, .animate-in .slide-in-from-top-1 { animation-name: slide-in-from-top-1; }
|
|
231
|
+
.animate-in.slide-in-from-top-2, .animate-in .slide-in-from-top-2 { animation-name: slide-in-from-top-2; }
|
|
232
|
+
|
|
233
|
+
/* Compatibilidad con uso individual (`animate-in fade-in` como dos clases hermanas). */
|
|
234
|
+
.fade-in { animation-name: fade-in; }
|
|
235
|
+
.zoom-in-95 { animation-name: zoom-in-95; }
|
|
236
|
+
.slide-in-from-top-1 { animation-name: slide-in-from-top-1; }
|
|
237
|
+
.slide-in-from-top-2 { animation-name: slide-in-from-top-2; }
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* ─── Maya/Tulsar — Gradientes y glass (rediseño 2026) ───── */
|
|
241
|
+
@layer utilities {
|
|
242
|
+
/* Texto con gradiente diagonal — para números/headlines protagonistas */
|
|
243
|
+
.text-gradient-primary {
|
|
244
|
+
background-image: linear-gradient(135deg, #714B67 0%, #5A3A52 55%, #017E84 100%);
|
|
245
|
+
-webkit-background-clip: text;
|
|
246
|
+
background-clip: text;
|
|
247
|
+
color: transparent;
|
|
248
|
+
}
|
|
249
|
+
.dark .text-gradient-primary {
|
|
250
|
+
background-image: linear-gradient(135deg, #C9A8C0 0%, #9B7B93 50%, #20A8AE 100%);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* Gradientes semánticos para números de KPI (estados positivos/neutros/críticos).
|
|
254
|
+
Estandariza widgets de dashboard que antes usaban `bg-gradient-to-br` inline. */
|
|
255
|
+
.text-gradient-info {
|
|
256
|
+
background-image: linear-gradient(135deg, #17A2B8 0%, #28A745 100%);
|
|
257
|
+
-webkit-background-clip: text;
|
|
258
|
+
background-clip: text;
|
|
259
|
+
color: transparent;
|
|
260
|
+
}
|
|
261
|
+
.dark .text-gradient-info {
|
|
262
|
+
background-image: linear-gradient(135deg, #5EEAD4 0%, #A7F3D0 100%);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.text-gradient-danger {
|
|
266
|
+
background-image: linear-gradient(135deg, #DC3545 0%, #856404 100%);
|
|
267
|
+
-webkit-background-clip: text;
|
|
268
|
+
background-clip: text;
|
|
269
|
+
color: transparent;
|
|
270
|
+
}
|
|
271
|
+
.dark .text-gradient-danger {
|
|
272
|
+
background-image: linear-gradient(135deg, #FCA5A5 0%, #FCD34D 100%);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.text-gradient-accent {
|
|
276
|
+
background-image: linear-gradient(135deg, #714B67 0%, #17A2B8 100%);
|
|
277
|
+
-webkit-background-clip: text;
|
|
278
|
+
background-clip: text;
|
|
279
|
+
color: transparent;
|
|
280
|
+
}
|
|
281
|
+
.dark .text-gradient-accent {
|
|
282
|
+
background-image: linear-gradient(135deg, #9B7B93 0%, #5EEAD4 100%);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* Fondo gradiente para CTAs primary y píldoras activas */
|
|
286
|
+
.bg-gradient-primary {
|
|
287
|
+
background-image: linear-gradient(135deg, #714B67 0%, #5A3A52 100%);
|
|
288
|
+
}
|
|
289
|
+
.dark .bg-gradient-primary {
|
|
290
|
+
background-image: linear-gradient(135deg, #9B7B93 0%, #714B67 100%);
|
|
291
|
+
}
|
|
292
|
+
.bg-gradient-primary-hover:hover {
|
|
293
|
+
background-image: linear-gradient(135deg, #5A3A52 0%, #3F2A39 100%);
|
|
294
|
+
}
|
|
295
|
+
.dark .bg-gradient-primary-hover:hover {
|
|
296
|
+
background-image: linear-gradient(135deg, #714B67 0%, #5A3A52 100%);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Cards glass (semi-transparente con blur) */
|
|
300
|
+
.bg-card-glass {
|
|
301
|
+
background-color: rgba(255,255,255,0.72);
|
|
302
|
+
backdrop-filter: blur(14px) saturate(160%);
|
|
303
|
+
-webkit-backdrop-filter: blur(14px) saturate(160%);
|
|
304
|
+
}
|
|
305
|
+
.dark .bg-card-glass {
|
|
306
|
+
background-color: rgba(44,44,44,0.66);
|
|
307
|
+
backdrop-filter: blur(14px) saturate(140%);
|
|
308
|
+
-webkit-backdrop-filter: blur(14px) saturate(140%);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* Card con gradiente sutil de iluminación superior */
|
|
312
|
+
.bg-card-tinted {
|
|
313
|
+
background-image: linear-gradient(180deg, rgba(255,255,255,0.96) 0%, rgba(255,255,255,0.88) 100%);
|
|
314
|
+
}
|
|
315
|
+
.dark .bg-card-tinted {
|
|
316
|
+
background-image: linear-gradient(180deg, rgba(60,60,60,0.92) 0%, rgba(40,40,40,0.88) 100%);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* Card con tinte de acento diagonal (purple en light, teal en dark).
|
|
320
|
+
Para widgets de dashboard que quieran resaltar sin usar glass. */
|
|
321
|
+
.bg-card-tinted-accent {
|
|
322
|
+
background-image: linear-gradient(135deg, rgba(113,75,103,0.15) 0%, rgba(113,75,103,0.05) 45%, transparent 100%);
|
|
323
|
+
}
|
|
324
|
+
.dark .bg-card-tinted-accent {
|
|
325
|
+
background-image: linear-gradient(135deg, rgba(32,168,174,0.25) 0%, rgba(32,168,174,0.10) 45%, transparent 100%);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* Fondo principal de la app con tinte degradado (Beluga/Tulsar) */
|
|
329
|
+
.bg-app-gradient {
|
|
330
|
+
background-color: var(--color-ui-body);
|
|
331
|
+
background-image:
|
|
332
|
+
radial-gradient(ellipse 1100px 650px at 85% -5%, rgba(113,75,103,0.22), transparent 58%),
|
|
333
|
+
radial-gradient(ellipse 900px 550px at -5% 105%, rgba(1,126,132,0.14), transparent 62%),
|
|
334
|
+
radial-gradient(ellipse 700px 400px at 50% 50%, rgba(155,123,147,0.06), transparent 70%),
|
|
335
|
+
linear-gradient(180deg, #FBF6F8 0%, #F0E9EF 55%, #E8DEE8 100%);
|
|
336
|
+
}
|
|
337
|
+
.dark .bg-app-gradient {
|
|
338
|
+
background-color: var(--color-ui-dark-bg);
|
|
339
|
+
background-image:
|
|
340
|
+
radial-gradient(ellipse 1100px 700px at 75% 0%, rgba(155,123,147,0.18), transparent 55%),
|
|
341
|
+
radial-gradient(ellipse 900px 600px at 0% 100%, rgba(32,168,174,0.10), transparent 60%),
|
|
342
|
+
linear-gradient(180deg, #1A1212 0%, #181618 55%, #141113 100%);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/* Sidebar con gradiente vertical sutil (acompaña al fondo) */
|
|
346
|
+
.bg-sidebar-gradient {
|
|
347
|
+
background-image: linear-gradient(180deg, #2C2A2C 0%, #262426 60%, #221F22 100%);
|
|
348
|
+
}
|
|
349
|
+
.dark .bg-sidebar-gradient {
|
|
350
|
+
background-image: linear-gradient(180deg, #1F1A1E 0%, #1A1517 60%, #15101D 100%);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* Borde gradiente diagonal (purple → teal) para tarjetas destacadas.
|
|
354
|
+
Técnica: doble background — gradient en `border-box` y fondo real en `padding-box`.
|
|
355
|
+
Aplicar sobre elemento con `border: 1px solid transparent`.
|
|
356
|
+
Uso: <Card class="border-glow-primary"> o <div class="border-glow-primary border"> */
|
|
357
|
+
.border-glow-primary {
|
|
358
|
+
border: 1px solid transparent;
|
|
359
|
+
background-image:
|
|
360
|
+
linear-gradient(var(--color-ui-card), var(--color-ui-card)),
|
|
361
|
+
linear-gradient(135deg, rgba(113,75,103,0.55) 0%, rgba(90,58,82,0.35) 45%, rgba(1,126,132,0.45) 100%);
|
|
362
|
+
background-origin: border-box;
|
|
363
|
+
background-clip: padding-box, border-box;
|
|
364
|
+
}
|
|
365
|
+
.dark .border-glow-primary {
|
|
366
|
+
background-image:
|
|
367
|
+
linear-gradient(var(--color-ui-dark-card), var(--color-ui-dark-card)),
|
|
368
|
+
linear-gradient(135deg, rgba(155,123,147,0.55) 0%, rgba(113,75,103,0.35) 45%, rgba(32,168,174,0.55) 100%);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/* Variante glass: borde gradiente + fondo semi-transparente con blur */
|
|
372
|
+
.border-glow-glass {
|
|
373
|
+
border: 1px solid transparent;
|
|
374
|
+
background-image:
|
|
375
|
+
linear-gradient(rgba(255,255,255,0.72), rgba(255,255,255,0.72)),
|
|
376
|
+
linear-gradient(135deg, rgba(113,75,103,0.65) 0%, rgba(1,126,132,0.55) 100%);
|
|
377
|
+
background-origin: border-box;
|
|
378
|
+
background-clip: padding-box, border-box;
|
|
379
|
+
backdrop-filter: blur(14px) saturate(160%);
|
|
380
|
+
-webkit-backdrop-filter: blur(14px) saturate(160%);
|
|
381
|
+
}
|
|
382
|
+
.dark .border-glow-glass {
|
|
383
|
+
background-image:
|
|
384
|
+
linear-gradient(rgba(44,44,44,0.66), rgba(44,44,44,0.66)),
|
|
385
|
+
linear-gradient(135deg, rgba(155,123,147,0.7) 0%, rgba(32,168,174,0.6) 100%);
|
|
386
|
+
backdrop-filter: blur(14px) saturate(140%);
|
|
387
|
+
-webkit-backdrop-filter: blur(14px) saturate(140%);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* Si el usuario prefiere transparencia reducida, fallback opaco */
|
|
392
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
393
|
+
.bg-card-glass {
|
|
394
|
+
background-color: var(--color-ui-card);
|
|
395
|
+
backdrop-filter: none;
|
|
396
|
+
-webkit-backdrop-filter: none;
|
|
397
|
+
}
|
|
398
|
+
.dark .bg-card-glass {
|
|
399
|
+
background-color: var(--color-ui-dark-card);
|
|
400
|
+
}
|
|
401
|
+
.border-glow-glass {
|
|
402
|
+
background-image:
|
|
403
|
+
linear-gradient(var(--color-ui-card), var(--color-ui-card)),
|
|
404
|
+
linear-gradient(135deg, rgba(113,75,103,0.65) 0%, rgba(1,126,132,0.55) 100%);
|
|
405
|
+
backdrop-filter: none;
|
|
406
|
+
-webkit-backdrop-filter: none;
|
|
407
|
+
}
|
|
408
|
+
.dark .border-glow-glass {
|
|
409
|
+
background-image:
|
|
410
|
+
linear-gradient(var(--color-ui-dark-card), var(--color-ui-dark-card)),
|
|
411
|
+
linear-gradient(135deg, rgba(155,123,147,0.7) 0%, rgba(32,168,174,0.6) 100%);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
@keyframes slide-up {
|
|
416
|
+
from { transform: translateY(12px); opacity: 0; }
|
|
417
|
+
to { transform: translateY(0); opacity: 1; }
|
|
418
|
+
}
|
|
419
|
+
@keyframes slide-up-full {
|
|
420
|
+
from { transform: translateY(100%); }
|
|
421
|
+
to { transform: translateY(0); }
|
|
422
|
+
}
|
|
423
|
+
@keyframes fade-in {
|
|
424
|
+
from { opacity: 0; }
|
|
425
|
+
to { opacity: 1; }
|
|
426
|
+
}
|
|
427
|
+
@keyframes fade-in-up {
|
|
428
|
+
from { opacity: 0; transform: translateY(4px); }
|
|
429
|
+
to { opacity: 1; transform: translateY(0); }
|
|
430
|
+
}
|
|
431
|
+
@keyframes slide-in-right {
|
|
432
|
+
from { opacity: 0; transform: translateX(16px); }
|
|
433
|
+
to { opacity: 1; transform: translateX(0); }
|
|
434
|
+
}
|
|
435
|
+
@keyframes slide-in-left {
|
|
436
|
+
from { opacity: 0; transform: translateX(-16px); }
|
|
437
|
+
to { opacity: 1; transform: translateX(0); }
|
|
438
|
+
}
|
|
439
|
+
@keyframes zoom-in-95 {
|
|
440
|
+
from { opacity: 0; transform: scale(0.95); }
|
|
441
|
+
to { opacity: 1; transform: scale(1); }
|
|
442
|
+
}
|
|
443
|
+
@keyframes slide-in-from-top-1 {
|
|
444
|
+
from { transform: translateY(-4px); }
|
|
445
|
+
to { transform: translateY(0); }
|
|
446
|
+
}
|
|
447
|
+
@keyframes slide-in-from-top-2 {
|
|
448
|
+
from { transform: translateY(-8px); }
|
|
449
|
+
to { transform: translateY(0); }
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* ─── WidgetGrid: items con decoraciones flotantes ───────────────────── */
|
|
453
|
+
/* Aplicado al wrapper externo del item cuando `allowOverflow:true` para que
|
|
454
|
+
las decoraciones (megáfono, badges) queden por encima de los vecinos. */
|
|
455
|
+
.maya-widget-item--overflow {
|
|
456
|
+
z-index: 5;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/* ─── PageTitle: imagen de cabecera ────────────────────────────────────── */
|
|
460
|
+
.maya-page-title-image {
|
|
461
|
+
display: block;
|
|
462
|
+
margin-left: auto;
|
|
463
|
+
margin-right: auto;
|
|
464
|
+
width: auto;
|
|
465
|
+
max-height: 150px;
|
|
466
|
+
object-fit: contain;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/* ─── UserAlertsWidget: lienzo "AVISO" ────────────────────────────────── */
|
|
470
|
+
/* Fondo principal del widget de avisos: gradiente diagonal purple→teal de
|
|
471
|
+
marca. Las decoraciones (blobs, puntos, ondas) viven en pseudo-elementos
|
|
472
|
+
o spans con clases dedicadas para mantener el JSX libre de estilos. */
|
|
473
|
+
.maya-alerts-canvas {
|
|
474
|
+
background: linear-gradient(135deg, #714B67 0%, #8E5C7E 38%, #5BB8A8 100%);
|
|
475
|
+
}
|
|
476
|
+
.maya-alerts-blob-tr {
|
|
477
|
+
background: radial-gradient(circle, #F2C7E0 0%, transparent 70%);
|
|
478
|
+
}
|
|
479
|
+
.maya-alerts-blob-bl {
|
|
480
|
+
background: radial-gradient(circle, #5BB8A8 0%, transparent 65%);
|
|
481
|
+
}
|
|
482
|
+
.maya-alerts-dots {
|
|
483
|
+
background-image: radial-gradient(circle, rgba(255, 255, 255, 0.9) 1.2px, transparent 1.5px);
|
|
484
|
+
background-size: 8px 8px;
|
|
485
|
+
}
|
|
486
|
+
/* Sombra cálida del megáfono (versión claro/crema). */
|
|
487
|
+
.maya-megaphone-shadow {
|
|
488
|
+
filter: drop-shadow(0 10px 20px rgba(245, 158, 11, 0.4));
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/* ─── DailyFichajesWidget ────────────────────────────────────────────── */
|
|
492
|
+
.maya-fichaje-card {
|
|
493
|
+
/* Gradiente sutil de marca para la card del widget de fichajes. */
|
|
494
|
+
background-image: linear-gradient(180deg, rgba(113, 75, 103, 0.04) 0%, rgba(91, 184, 168, 0.02) 100%);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/* Barra de progreso de la jornada — segmentos. Los componentes solo
|
|
498
|
+
inyectan las variables CSS `--seg-left` y `--seg-width`. */
|
|
499
|
+
.maya-day-segment {
|
|
500
|
+
position: absolute;
|
|
501
|
+
top: 0;
|
|
502
|
+
bottom: 0;
|
|
503
|
+
left: var(--seg-left, 0%);
|
|
504
|
+
width: var(--seg-width, 0%);
|
|
505
|
+
transition: left 200ms ease, width 200ms ease;
|
|
506
|
+
}
|
|
507
|
+
.maya-day-segment--closed {
|
|
508
|
+
background-image: linear-gradient(90deg, var(--color-success, #10B981), var(--color-success-dark, #047857));
|
|
509
|
+
}
|
|
510
|
+
.maya-day-segment--auto {
|
|
511
|
+
background-color: var(--color-warning, #F59E0B);
|
|
512
|
+
}
|
|
513
|
+
.maya-day-segment--open {
|
|
514
|
+
background-image: repeating-linear-gradient(
|
|
515
|
+
45deg,
|
|
516
|
+
var(--color-success, #10B981) 0 6px,
|
|
517
|
+
rgba(255, 255, 255, 0.35) 6px 10px
|
|
518
|
+
);
|
|
519
|
+
}
|
|
520
|
+
.maya-day-now-marker {
|
|
521
|
+
position: absolute;
|
|
522
|
+
top: 0;
|
|
523
|
+
bottom: 0;
|
|
524
|
+
width: 1px;
|
|
525
|
+
left: var(--now-left, 0%);
|
|
526
|
+
background-color: rgba(113, 75, 103, 0.8);
|
|
527
|
+
box-shadow: 0 0 4px var(--color-odoo-purple, #714B67);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/* Avatar con gradiente determinístico por hue. Solo `--avatar-hue` y
|
|
531
|
+
`--avatar-size` vienen como variables CSS — el resto es estático. */
|
|
532
|
+
.maya-profile-avatar {
|
|
533
|
+
width: var(--avatar-size, 40px);
|
|
534
|
+
height: var(--avatar-size, 40px);
|
|
535
|
+
font-size: calc(var(--avatar-size, 40px) * 0.4);
|
|
536
|
+
background: linear-gradient(
|
|
537
|
+
135deg,
|
|
538
|
+
hsl(var(--avatar-hue, 220) 65% 52%),
|
|
539
|
+
hsl(calc(var(--avatar-hue, 220) + 28) 60% 38%)
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
.maya-profile-avatar-img {
|
|
543
|
+
width: var(--avatar-size, 40px);
|
|
544
|
+
height: var(--avatar-size, 40px);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/* ─── BookingsWidget: rejilla de días opaca dentro del card tinted ───── */
|
|
548
|
+
/* El wrapper del widget usa `.bg-card-tinted` (mismo fondo que StatCard)
|
|
549
|
+
y `bleed: true` en el WidgetFrame para que el card vaya a sangre y no
|
|
550
|
+
aparezca un "borde blanco" del frame. La rejilla de días pinta opaca
|
|
551
|
+
por encima para destacar visualmente sobre el card tinted. */
|
|
552
|
+
.maya-bookings-canvas .rbc-month-view,
|
|
553
|
+
.maya-bookings-canvas .rbc-time-view,
|
|
554
|
+
.maya-bookings-canvas .rbc-agenda-view {
|
|
555
|
+
background-color: var(--color-ui-card, #FFFFFF);
|
|
556
|
+
border-radius: 0.5rem;
|
|
557
|
+
overflow: hidden;
|
|
558
|
+
}
|
|
559
|
+
.dark .maya-bookings-canvas .rbc-month-view,
|
|
560
|
+
.dark .maya-bookings-canvas .rbc-time-view,
|
|
561
|
+
.dark .maya-bookings-canvas .rbc-agenda-view {
|
|
562
|
+
background-color: var(--color-ui-dark-card, #1E293B);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/* ─── react-big-calendar: toolbar con botones glass + marca ────────────── */
|
|
566
|
+
/* Sobrescribe los estilos por defecto del paquete para integrarlos con la
|
|
567
|
+
identidad Maya: efecto glass (fondo translúcido + blur), acento purple en
|
|
568
|
+
hover y gradiente diagonal en estado activo. */
|
|
569
|
+
.rbc-toolbar {
|
|
570
|
+
margin-bottom: 0.75rem;
|
|
571
|
+
gap: 0.5rem;
|
|
572
|
+
flex-wrap: wrap;
|
|
573
|
+
padding: 0;
|
|
574
|
+
}
|
|
575
|
+
.rbc-btn-group {
|
|
576
|
+
display: inline-flex;
|
|
577
|
+
gap: 0.25rem;
|
|
578
|
+
}
|
|
579
|
+
.rbc-btn-group > button + button {
|
|
580
|
+
margin-left: 0;
|
|
581
|
+
}
|
|
582
|
+
.rbc-toolbar button {
|
|
583
|
+
background-color: rgba(255, 255, 255, 0.7);
|
|
584
|
+
backdrop-filter: blur(8px);
|
|
585
|
+
-webkit-backdrop-filter: blur(8px);
|
|
586
|
+
border: 1px solid rgba(113, 75, 103, 0.18);
|
|
587
|
+
color: var(--color-text-primary, #1F2937);
|
|
588
|
+
font-weight: 500;
|
|
589
|
+
border-radius: 0.5rem;
|
|
590
|
+
padding: 0.4rem 0.9rem;
|
|
591
|
+
transition: transform 150ms ease, box-shadow 150ms ease,
|
|
592
|
+
background-color 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
593
|
+
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);
|
|
594
|
+
}
|
|
595
|
+
.rbc-toolbar button:hover {
|
|
596
|
+
background-color: rgba(113, 75, 103, 0.08);
|
|
597
|
+
border-color: rgba(113, 75, 103, 0.4);
|
|
598
|
+
color: var(--color-odoo-purple, #714B67);
|
|
599
|
+
transform: translateY(-1px);
|
|
600
|
+
box-shadow: 0 4px 10px rgba(113, 75, 103, 0.18);
|
|
601
|
+
}
|
|
602
|
+
.rbc-toolbar button:focus-visible {
|
|
603
|
+
outline: none;
|
|
604
|
+
box-shadow: 0 0 0 2px rgba(113, 75, 103, 0.4);
|
|
605
|
+
}
|
|
606
|
+
/* Estado activo y todas sus combinaciones con :hover/:focus/:focus-visible —
|
|
607
|
+
react-big-calendar incluye reglas más específicas para `.rbc-active:focus`,
|
|
608
|
+
`.rbc-active:focus:hover`, etc. que devolvían el texto a negro al hacer
|
|
609
|
+
click. Listamos todas para ganarles en especificidad. */
|
|
610
|
+
.rbc-toolbar button.rbc-active,
|
|
611
|
+
.rbc-toolbar button.rbc-active:hover,
|
|
612
|
+
.rbc-toolbar button.rbc-active:focus,
|
|
613
|
+
.rbc-toolbar button.rbc-active:focus:hover,
|
|
614
|
+
.rbc-toolbar button.rbc-active:focus-visible,
|
|
615
|
+
.rbc-toolbar button.rbc-active:focus-visible:hover,
|
|
616
|
+
.rbc-toolbar button:active,
|
|
617
|
+
.rbc-toolbar button:active:hover,
|
|
618
|
+
.rbc-toolbar button:active:focus,
|
|
619
|
+
.rbc-toolbar button:active:focus:hover {
|
|
620
|
+
/* Igual que el botón 'Fichar entrada' / Button variant primary: gradiente
|
|
621
|
+
purple→purple-dark muy sutil que se lee como sólido de marca. */
|
|
622
|
+
background-image: linear-gradient(135deg, #714B67 0%, #5A3A52 100%);
|
|
623
|
+
background-color: #714B67;
|
|
624
|
+
color: #FFFFFF;
|
|
625
|
+
border-color: #5A3A52;
|
|
626
|
+
box-shadow: 0 2px 6px -2px rgba(113, 75, 103, 0.45);
|
|
627
|
+
transform: translateY(0);
|
|
628
|
+
}
|
|
629
|
+
.rbc-toolbar-label {
|
|
630
|
+
font-weight: 600;
|
|
631
|
+
color: var(--color-text-primary, #1F2937);
|
|
632
|
+
text-transform: capitalize;
|
|
633
|
+
}
|
|
634
|
+
/* Dark mode */
|
|
635
|
+
.dark .rbc-toolbar button {
|
|
636
|
+
background-color: rgba(30, 30, 30, 0.45);
|
|
637
|
+
border-color: rgba(255, 255, 255, 0.12);
|
|
638
|
+
color: var(--color-text-dark-primary, #E5E7EB);
|
|
639
|
+
}
|
|
640
|
+
.dark .rbc-toolbar button:hover {
|
|
641
|
+
background-color: rgba(155, 123, 147, 0.15);
|
|
642
|
+
border-color: rgba(155, 123, 147, 0.45);
|
|
643
|
+
color: var(--color-odoo-dark-purple, #9B7B93);
|
|
644
|
+
}
|
|
645
|
+
.dark .rbc-toolbar button.rbc-active,
|
|
646
|
+
.dark .rbc-toolbar button:active {
|
|
647
|
+
background-image: linear-gradient(135deg, #9B7B93, #6FCABE);
|
|
648
|
+
color: #FFFFFF;
|
|
649
|
+
}
|
|
650
|
+
.dark .rbc-toolbar-label {
|
|
651
|
+
color: var(--color-text-dark-primary, #E5E7EB);
|
|
652
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ceedcv-maya/shared-styles",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Shared Tailwind v4 design tokens, color palette (Odoo/Maya), animations and reset CSS for the @ceedcv-maya React component packages. CSS-only \u2014 import once at app entry.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "CEEDCV",
|
|
8
|
+
"email": "info@ceedcv.es",
|
|
9
|
+
"homepage": "https://ceedcv.es"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/Maya-AQSS/shared-styles#readme",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/Maya-AQSS/maya_platform.git",
|
|
15
|
+
"directory": "packages/js/shared-styles"
|
|
16
|
+
},
|
|
17
|
+
"bugs": {
|
|
18
|
+
"url": "https://github.com/Maya-AQSS/maya_platform/issues"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"tailwindcss",
|
|
22
|
+
"tailwind-v4",
|
|
23
|
+
"design-tokens",
|
|
24
|
+
"css",
|
|
25
|
+
"maya",
|
|
26
|
+
"ceedcv"
|
|
27
|
+
],
|
|
28
|
+
"main": "index.css",
|
|
29
|
+
"style": "index.css",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": "./index.css",
|
|
32
|
+
"./index.css": "./index.css"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"index.css",
|
|
36
|
+
"LICENSE",
|
|
37
|
+
"README.md"
|
|
38
|
+
],
|
|
39
|
+
"sideEffects": [
|
|
40
|
+
"*.css"
|
|
41
|
+
],
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
}
|
|
45
|
+
}
|