@lemmo-lab/tokens 1.0.0 → 1.0.1

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/README.md CHANGED
@@ -107,3 +107,11 @@ To build output tokens:
107
107
  ```bash
108
108
  pnpm build
109
109
  ```
110
+
111
+ ---
112
+
113
+ ## 📊 System Design Synchronization & Audit
114
+
115
+ `@lemmo-lab/tokens` is verified to be in **100% complete synchronization** with `System_design`. All 361 CSS variables, 4 brand fonts, status colors, and responsive scales match with zero discrepancies.
116
+
117
+ See full report: [docs/audit-system-design-sync.md](docs/audit-system-design-sync.md).
@@ -0,0 +1,19 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* System breakpoints (rem) */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-bp-base: 20rem; /* 320 px mobile floor */
6
+ --lemmo-bp-sm: 40rem; /* 640 px */
7
+ --lemmo-bp-md: 48rem; /* 768 px tablet / 2-col grid */
8
+ --lemmo-bp-lg: 64rem; /* 1024 px */
9
+ --lemmo-bp-xl: 80rem; /* 1280 px desktop / 3-col grid */
10
+ --lemmo-bp-2xl: 120rem; /* 1920 px */
11
+ --lemmo-bp-3xl: 158rem; /* 2528 px */
12
+
13
+ /* ------------------------------------------------------------------ */
14
+ /* Semantic aliases */
15
+ /* ------------------------------------------------------------------ */
16
+ --lemmo-bp-tablet: var(--lemmo-bp-md);
17
+ --lemmo-bp-desktop: var(--lemmo-bp-xl);
18
+ --lemmo-bp-wide: var(--lemmo-bp-2xl);
19
+ }
@@ -0,0 +1,196 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Page & app backgrounds */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-color-page-primary: #131517; /* standard page background */
6
+ --lemmo-color-app-background: #131416; /* app shell background */
7
+ --lemmo-color-surface-tertiary: #0f1113; /* deepest surface (pricing page bg) */
8
+ --lemmo-color-surface-primary: #1c1e20; /* card / panel surface */
9
+ --lemmo-color-surface-secondary: #23262a; /* raised surface */
10
+ --lemmo-color-surface-elevated: #18191c; /* gradient base (elevated-end) */
11
+ --lemmo-color-surface-glass: rgba(15, 17, 19, 0.88); /* glass card */
12
+
13
+ /* ------------------------------------------------------------------ */
14
+ /* Brand surfaces (semantic roles, not page names) */
15
+ /* ------------------------------------------------------------------ */
16
+ --lemmo-color-surface-brand: #d1fe17; /* primary action (lime) */
17
+ --lemmo-color-surface-brand-hover: #c4ee0b; /* primary action hover */
18
+ --lemmo-color-surface-brand-edge: #829b19; /* primary action inset */
19
+ --lemmo-color-surface-brand-secondary: #ff005b;/* secondary accent (pink)*/
20
+
21
+ /* ------------------------------------------------------------------ */
22
+ /* Font / text colors */
23
+ /* ------------------------------------------------------------------ */
24
+ --lemmo-color-font-primary: #e1e1e3;
25
+ --lemmo-color-font-secondary: #a1a1a5;
26
+ --lemmo-color-font-muted: #898a8b;
27
+ --lemmo-color-font-faint: #737475;
28
+ --lemmo-color-font-on-brand: #131517; /* dark text on lime */
29
+ --lemmo-color-font-reverted: #060515; /* near-black reverted */
30
+ --lemmo-color-font-reverted-80: rgba(6, 5, 21, 0.8);
31
+ --lemmo-color-font-reverted-50: rgba(6, 5, 21, 0.5);
32
+ --lemmo-color-font-reverted-30: rgba(6, 5, 21, 0.3);
33
+
34
+ /* ------------------------------------------------------------------ */
35
+ /* Brand accent palette */
36
+ /* ------------------------------------------------------------------ */
37
+ --lemmo-color-brand-lime: #d1fe17;
38
+ --lemmo-color-brand-lime-hover: #c4ee0b;
39
+ --lemmo-color-brand-lime-edge: #829b19;
40
+ --lemmo-color-brand-pink: #ff005b;
41
+ --lemmo-color-brand-pink-light: #fb398c;
42
+ --lemmo-color-brand-pink-deep: #ed1572;
43
+ --lemmo-color-brand-pink-maroon: #d1004e;
44
+ --lemmo-color-brand-pink-base: #8b006a;
45
+ --lemmo-color-brand-blue: #0256fe;
46
+ --lemmo-color-brand-blue-light: #245ef1;
47
+ --lemmo-color-brand-blue-deep: #1544ed;
48
+ --lemmo-color-brand-blue-overlay-a: #1d63ef;
49
+ --lemmo-color-brand-blue-overlay-b: #5150d0;
50
+ --lemmo-color-brand-cyan: #3c8cff;
51
+ --lemmo-color-brand-cyan-soft: #9ce6f3;
52
+ --lemmo-color-brand-cyan-glow: #3cd8ff;
53
+ --lemmo-color-brand-violet: #853cb0;
54
+ --lemmo-color-brand-violet-deep: #b02df2;
55
+
56
+ /* ------------------------------------------------------------------ */
57
+ /* Border / separator colors */
58
+ /* ------------------------------------------------------------------ */
59
+ --lemmo-color-separator-card: rgba(217, 217, 217, 0.04);
60
+ --lemmo-color-separator-strong: rgba(255, 255, 255, 0.1);
61
+ --lemmo-color-border-soft: rgba(255, 255, 255, 0.04);
62
+ --lemmo-color-border-mid: rgba(255, 255, 255, 0.05);
63
+ --lemmo-color-border-strong: rgba(255, 255, 255, 0.1);
64
+ --lemmo-color-border-ghost-light: rgba(6, 5, 21, 0.04);
65
+
66
+ /* ------------------------------------------------------------------ */
67
+ /* Alpha overlays (white / black steps) */
68
+ /* ------------------------------------------------------------------ */
69
+ --lemmo-color-white-alpha-4: rgba(255, 255, 255, 0.04);
70
+ --lemmo-color-white-alpha-5: rgba(255, 255, 255, 0.05);
71
+ --lemmo-color-white-alpha-8: rgba(255, 255, 255, 0.08);
72
+ --lemmo-color-white-alpha-10: rgba(255, 255, 255, 0.1);
73
+ --lemmo-color-white-alpha-15: rgba(255, 255, 255, 0.15);
74
+ --lemmo-color-white-alpha-20: rgba(255, 255, 255, 0.2);
75
+ --lemmo-color-white-alpha-30: rgba(255, 255, 255, 0.3);
76
+ --lemmo-color-white-alpha-50: rgba(255, 255, 255, 0.5);
77
+ --lemmo-color-white-alpha-70: rgba(255, 255, 255, 0.7);
78
+ --lemmo-color-black-alpha-4: rgba(0, 0, 0, 0.04);
79
+ --lemmo-color-black-alpha-7: rgba(0, 0, 0, 0.07);
80
+ --lemmo-color-black-alpha-20: rgba(0, 0, 0, 0.2);
81
+ --lemmo-color-black-alpha-24: rgba(0, 0, 0, 0.24);
82
+
83
+ /* ------------------------------------------------------------------ */
84
+ /* Status palette (success / warning / danger / info) */
85
+ /* Sourced from frontend ADR-003 & reference product audit */
86
+ /* ------------------------------------------------------------------ */
87
+ --lemmo-color-status-danger: #fa0019;
88
+ --lemmo-color-status-danger-soft: #ff5462;
89
+ --lemmo-color-status-danger-bg: #5c000f;
90
+ --lemmo-color-status-danger-glow: #ff1f2e;
91
+ --lemmo-color-status-warning: #dfab01;
92
+ --lemmo-color-status-warning-soft: #ffef33;
93
+ --lemmo-color-status-warning-bg: #523f00;
94
+ --lemmo-color-status-warning-glow: #fff05a;
95
+ --lemmo-color-status-success: #2eb844;
96
+ --lemmo-color-status-success-soft: #4ee466;
97
+ --lemmo-color-status-success-bg: #0d4a17;
98
+ --lemmo-color-status-success-glow: #00e62e;
99
+ --lemmo-color-status-info: #0256fe;
100
+ --lemmo-color-status-info-soft: #5b91fe;
101
+ --lemmo-color-status-info-bg: #000d26;
102
+ --lemmo-color-status-info-glow: #3cd8ff;
103
+
104
+ /* ------------------------------------------------------------------ */
105
+ /* Semantic roles — aliases of the raw tokens above */
106
+ /* ------------------------------------------------------------------ */
107
+ --lemmo-text-primary: var(--lemmo-color-font-primary);
108
+ --lemmo-text-secondary: var(--lemmo-color-font-secondary);
109
+ --lemmo-text-muted: var(--lemmo-color-font-muted);
110
+ --lemmo-text-faint: var(--lemmo-color-font-faint);
111
+ --lemmo-text-on-brand: var(--lemmo-color-font-on-brand);
112
+ --lemmo-text-reverted: var(--lemmo-color-font-reverted);
113
+ --lemmo-text-danger: var(--lemmo-color-status-danger-soft);
114
+ --lemmo-text-warning: var(--lemmo-color-status-warning);
115
+ --lemmo-text-success: var(--lemmo-color-status-success-soft);
116
+ --lemmo-text-info: var(--lemmo-color-status-info-soft);
117
+ --lemmo-surface-primary: var(--lemmo-color-surface-primary);
118
+ --lemmo-surface-secondary: var(--lemmo-color-surface-secondary);
119
+ --lemmo-surface-tertiary: var(--lemmo-color-surface-tertiary);
120
+ --lemmo-surface-elevated: var(--lemmo-color-surface-elevated);
121
+ --lemmo-surface-glass: var(--lemmo-color-surface-glass);
122
+ --lemmo-status-danger-bg: var(--lemmo-color-status-danger-bg);
123
+ --lemmo-status-warning-bg: var(--lemmo-color-status-warning-bg);
124
+ --lemmo-status-success-bg: var(--lemmo-color-status-success-bg);
125
+ --lemmo-status-info-bg: var(--lemmo-color-status-info-bg);
126
+ --lemmo-border-default: var(--lemmo-color-border-strong);
127
+ --lemmo-border-subtle: var(--lemmo-color-border-soft);
128
+ --lemmo-border-danger: var(--lemmo-color-status-danger);
129
+ --lemmo-border-warning: var(--lemmo-color-status-warning);
130
+ --lemmo-border-success: var(--lemmo-color-status-success);
131
+ --lemmo-border-info: var(--lemmo-color-status-info);
132
+ --lemmo-interactive-primary: var(--lemmo-color-surface-brand);
133
+ --lemmo-interactive-primary-hover: var(--lemmo-color-surface-brand-hover);
134
+ --lemmo-interactive-secondary: var(--lemmo-color-brand-blue);
135
+
136
+ /* ------------------------------------------------------------------ */
137
+ /* Frontend namespace aliases (--lemu-* == --lemmo-*) */
138
+ /* ------------------------------------------------------------------ */
139
+ --lemu-color-page-primary: var(--lemmo-color-page-primary);
140
+ --lemu-color-app-background: var(--lemmo-color-app-background);
141
+ --lemu-color-surface-tertiary: var(--lemmo-color-surface-tertiary);
142
+ --lemu-color-surface-primary: var(--lemmo-color-surface-primary);
143
+ --lemu-color-surface-secondary: var(--lemmo-color-surface-secondary);
144
+ --lemu-color-surface-elevated: var(--lemmo-color-surface-elevated);
145
+ --lemu-color-surface-glass: var(--lemmo-color-surface-glass);
146
+ --lemu-color-surface-brand: var(--lemmo-color-surface-brand);
147
+ --lemu-color-surface-brand-hover: var(--lemmo-color-surface-brand-hover);
148
+ --lemu-color-surface-brand-edge: var(--lemmo-color-surface-brand-edge);
149
+ --lemu-color-surface-brand-secondary: var(--lemmo-color-surface-brand-secondary);
150
+ --lemu-color-font-primary: var(--lemmo-color-font-primary);
151
+ --lemu-color-font-secondary: var(--lemmo-color-font-secondary);
152
+ --lemu-color-font-muted: var(--lemmo-color-font-muted);
153
+ --lemu-color-font-faint: var(--lemmo-color-font-faint);
154
+ --lemu-color-font-on-brand: var(--lemmo-color-font-on-brand);
155
+ --lemu-color-font-reverted: var(--lemmo-color-font-reverted);
156
+ --lemu-color-status-danger: var(--lemmo-color-status-danger);
157
+ --lemu-color-status-danger-soft: var(--lemmo-color-status-danger-soft);
158
+ --lemu-color-status-danger-bg: var(--lemmo-color-status-danger-bg);
159
+ --lemu-color-status-danger-glow: var(--lemmo-color-status-danger-glow);
160
+ --lemu-color-status-warning: var(--lemmo-color-status-warning);
161
+ --lemu-color-status-warning-soft: var(--lemmo-color-status-warning-soft);
162
+ --lemu-color-status-warning-bg: var(--lemmo-color-status-warning-bg);
163
+ --lemu-color-status-warning-glow: var(--lemmo-color-status-warning-glow);
164
+ --lemu-color-status-success: var(--lemmo-color-status-success);
165
+ --lemu-color-status-success-soft: var(--lemmo-color-status-success-soft);
166
+ --lemu-color-status-success-bg: var(--lemmo-color-status-success-bg);
167
+ --lemu-color-status-success-glow: var(--lemmo-color-status-success-glow);
168
+ --lemu-color-status-info: var(--lemmo-color-status-info);
169
+ --lemu-color-status-info-soft: var(--lemmo-color-status-info-soft);
170
+ --lemu-color-status-info-bg: var(--lemmo-color-status-info-bg);
171
+ --lemu-color-status-info-glow: var(--lemmo-color-status-info-glow);
172
+ --lemu-text-primary: var(--lemmo-text-primary);
173
+ --lemu-text-secondary: var(--lemmo-text-secondary);
174
+ --lemu-text-muted: var(--lemmo-text-muted);
175
+ --lemu-text-faint: var(--lemmo-text-faint);
176
+ --lemu-text-on-brand: var(--lemmo-text-on-brand);
177
+ --lemu-text-reverted: var(--lemmo-text-reverted);
178
+ --lemu-text-danger: var(--lemmo-text-danger);
179
+ --lemu-text-warning: var(--lemmo-text-warning);
180
+ --lemu-text-success: var(--lemmo-text-success);
181
+ --lemu-text-info: var(--lemmo-text-info);
182
+ --lemu-surface-primary: var(--lemmo-surface-primary);
183
+ --lemu-surface-secondary: var(--lemmo-surface-secondary);
184
+ --lemu-surface-tertiary: var(--lemmo-surface-tertiary);
185
+ --lemu-surface-elevated: var(--lemmo-surface-elevated);
186
+ --lemu-surface-glass: var(--lemmo-surface-glass);
187
+ --lemu-border-default: var(--lemmo-border-default);
188
+ --lemu-border-subtle: var(--lemmo-border-subtle);
189
+ --lemu-border-danger: var(--lemmo-border-danger);
190
+ --lemu-border-warning: var(--lemmo-border-warning);
191
+ --lemu-border-success: var(--lemmo-border-success);
192
+ --lemu-border-info: var(--lemmo-border-info);
193
+ --lemu-interactive-primary: var(--lemmo-interactive-primary);
194
+ --lemu-interactive-primary-hover: var(--lemmo-interactive-primary-hover);
195
+ --lemu-interactive-secondary: var(--lemmo-interactive-secondary);
196
+ }
@@ -0,0 +1,23 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Card elevation */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-shadow-card-featured: 0 1.5rem 4rem rgba(0,0,0,0.24); /* highlighted card */
6
+ --lemmo-shadow-card-base: 10px 34px 24px 0 rgba(0,0,0,0.15); /* ambient drop */
7
+
8
+ /* ------------------------------------------------------------------ */
9
+ /* Brand CTA gloss (lime buttons) — exact inset stack */
10
+ /* ------------------------------------------------------------------ */
11
+ --lemmo-shadow-button-brand-inset: inset 0 0.8px 0 0 #d1fe17, inset 0 -1.6px 0 0 #829b19, inset 0 -2.4px 0 0 #829b19;
12
+ --lemmo-shadow-button-brand: var(--lemmo-shadow-button-brand-inset), 10px 34px 24px 0px rgba(0,0,0,0.15);
13
+
14
+ /* ------------------------------------------------------------------ */
15
+ /* Inner gloss (pills, offer cards) */
16
+ /* ------------------------------------------------------------------ */
17
+ --lemmo-shadow-gloss-inset: inset 0 -2px 2px 0 rgba(255,255,255,0.4), inset 0 2px 2px 0 rgba(255,255,255,0.4);
18
+
19
+ /* ------------------------------------------------------------------ */
20
+ /* Brand glow */
21
+ /* ------------------------------------------------------------------ */
22
+ --lemmo-glow-brand-breathe: 0 0 0.4rem color-mix(in srgb, var(--lemmo-color-surface-brand) 56%, transparent);
23
+ }
@@ -0,0 +1,62 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Card surfaces — current (featured) */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-gradient-surface-featured: linear-gradient(225deg, rgba(209, 254, 23, 0.16) 0%, rgba(209, 254, 23, 0.08) 28%, rgba(209, 254, 23, 0) 62%), var(--lemmo-color-surface-elevated, #18191C);
6
+ --lemmo-gradient-surface-pink-haze: radial-gradient(145% 54% at 100% 0%, color-mix(in srgb, var(--lemmo-color-surface-brand-secondary) 32%, transparent) 0%, color-mix(in srgb, var(--lemmo-color-surface-brand-secondary) 15%, transparent) 42%, transparent 78%), linear-gradient(180deg, color-mix(in srgb, var(--lemmo-color-surface-brand-secondary) 13%, transparent) 0%, color-mix(in srgb, var(--lemmo-color-surface-brand-secondary) 7%, transparent) 36%, transparent 72%), #18191C;
7
+ --lemmo-gradient-surface-olive: linear-gradient(180deg, #1F2022 0%, #222420 55%, #272A20 100%);
8
+ --lemmo-gradient-surface-ocean: linear-gradient(180deg, #121D23 0%, #152026 45%, #1D282E 75%, #273238 100%);
9
+ --lemmo-gradient-surface-steel: linear-gradient(180deg, #1F2024 0%, #232428 40%, #343539 75%, #48494D 100%);
10
+
11
+ /* ------------------------------------------------------------------ */
12
+ /* Card surfaces — legacy */
13
+ /* ------------------------------------------------------------------ */
14
+ --lemmo-gradient-surface-base: linear-gradient(180deg, #1D1F20 0%, #17191B 100%);
15
+ --lemmo-gradient-surface-soft: radial-gradient(58% 220% at 3% 42%, rgba(255,255,255,0.095) 0%, rgba(255,255,255,0.035) 42%, rgba(255,255,255,0.012) 100%), linear-gradient(180deg, #1D1F20 0%, #17191B 100%);
16
+ --lemmo-gradient-surface-lime-wash: radial-gradient(56.49% 230.73% at 2.37% 40.91%, rgba(187,251,12,0.07) 0%, rgba(12,251,32,0.01) 100%), radial-gradient(41.8% 183.68% at 10.4% 53.71%, rgba(197,197,197,0.08) 0%, rgba(197,197,197,0.01) 100%), linear-gradient(180deg, #1D1F20 0%, #17191B 100%);
17
+ --lemmo-gradient-surface-pink-wash: radial-gradient(56.49% 230.73% at 2.37% 40.91%, rgba(237,21,114,0.10) 0%, rgba(237,21,114,0.01) 100%), linear-gradient(180deg, #1D1F20 0%, #17191B 100%);
18
+ --lemmo-gradient-surface-blue-wash: radial-gradient(56.49% 230.73% at 2.37% 40.91%, rgba(21,68,237,0.10) 0%, rgba(21,68,237,0.01) 100%), linear-gradient(180deg, #1D1F20 0%, #17191B 100%);
19
+ --lemmo-gradient-surface-steel-flat: linear-gradient(180deg, rgba(110,145,188,0.02) 0%, rgba(110,145,188,0.20) 100%), #1C1E20;
20
+ --lemmo-gradient-surface-plain: linear-gradient(180deg, rgb(29,31,32) 0%, rgb(23,25,27) 100%);
21
+
22
+ /* ------------------------------------------------------------------ */
23
+ /* 1px mask gradient rims */
24
+ /* ------------------------------------------------------------------ */
25
+ --lemmo-gradient-rim-vertical: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0.09) 18%, rgba(255,255,255,0.03) 38%, rgba(255,255,255,0) 72%);
26
+ --lemmo-gradient-rim-diagonal: linear-gradient(225deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0.10) 18%, rgba(255,255,255,0.04) 42%, rgba(255,255,255,0) 76%);
27
+
28
+ /* ------------------------------------------------------------------ */
29
+ /* Highlight gradient borders (legacy highlighted cards) */
30
+ /* Apply via 2px-padding trick (outer wrapper gradient + inner pane). */
31
+ /* ------------------------------------------------------------------ */
32
+ --lemmo-gradient-border-pink: radial-gradient(86.59% 115.91% at 50% 45.45%, #FB398C 0%, #ED1572 100%);
33
+ --lemmo-gradient-border-blue: radial-gradient(86.59% 115.91% at 50% 45.45%, #245EF1 0%, #1544ED 100%);
34
+
35
+ /* ------------------------------------------------------------------ */
36
+ /* Badge pill gradients (3-stop right-side gloss pattern) */
37
+ /* `73% 50%` / `85% 37%` / `12% 76%` — pills only, never card surfaces */
38
+ /* ------------------------------------------------------------------ */
39
+ --lemmo-gradient-pill-lime: radial-gradient(ellipse 55% 95% at 73% 50%, rgba(117,239,29,0.6) 0%, rgba(194,237,21,0) 100%), radial-gradient(ellipse 25% 42% at 85% 37%, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0) 100%), radial-gradient(ellipse 33% 70% at 12% 76%, rgba(200,239,29,0.6) 0%, rgba(194,237,21,0) 100%), linear-gradient(90deg, rgb(209,254,23) 0%, rgb(209,254,23) 100%);
40
+ --lemmo-gradient-pill-blue: radial-gradient(ellipse 75% 300% at 73% 50%, #1d63ef 0%, #5150d0 45%, rgba(237,21,114,0) 100%), radial-gradient(ellipse 30% 120% at 85% 37%, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0) 100%), #0256fe;
41
+ --lemmo-gradient-pill-ultraviolet: radial-gradient(ellipse 55% 95% at 73% 50%, rgba(29,99,239,0.6) 0%, rgba(81,80,208,0.45) 25%, rgba(133,60,176,0.3) 50%, rgba(237,21,114,0) 100%), radial-gradient(ellipse 25% 42% at 85% 37%, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0) 100%), radial-gradient(ellipse 33% 70% at 12% 76%, rgba(29,99,239,0.6) 0%, rgba(133,60,176,0.3) 50%, rgba(237,21,114,0) 100%), linear-gradient(90deg, rgb(2,86,254) 0%, rgb(2,86,254) 100%);
42
+ --lemmo-gradient-pill-pink: radial-gradient(ellipse 55% 95% at 73% 50%, rgba(239,29,186,0.6) 0%, rgba(237,21,114,0) 100%), radial-gradient(ellipse 25% 42% at 85% 37%, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0) 100%), radial-gradient(ellipse 33% 70% at 12% 76%, rgba(176,29,239,0.6) 0%, rgba(206,25,176,0.3) 50%, rgba(237,21,114,0) 100%), linear-gradient(90deg, rgb(255,0,91) 0%, rgb(255,0,91) 100%);
43
+
44
+ /* ------------------------------------------------------------------ */
45
+ /* Offer / campaign */
46
+ /* ------------------------------------------------------------------ */
47
+ --lemmo-gradient-offer-base: radial-gradient(120% 90% at 50% 0%, #55142c 0%, #35101d 38%, #1e0c14 70%, #140a0f 100%);
48
+ --lemmo-gradient-offer-flash: linear-gradient(0deg, rgba(255,0,91,0.32) 0%, rgba(255,0,91,0.016) 100%), linear-gradient(90deg, #0f1113 0%, #0f1113 100%);
49
+ --lemmo-gradient-offer-dots: radial-gradient(circle at 1px 1px, rgba(255,255,255,0.08) 1px, transparent 0);
50
+ --lemmo-gradient-offer-combo: linear-gradient(135deg, #ff005b 0%, #d1004e 40%, #8b006a 100%);
51
+
52
+ /* ------------------------------------------------------------------ */
53
+ /* Comparison table background */
54
+ /* ------------------------------------------------------------------ */
55
+ --lemmo-gradient-table-cyan: radial-gradient(211% 211% at 50.16% 100%, rgba(60,140,255,0.20) 0%, rgba(60,140,255,0) 100%), radial-gradient(64.4% 64.4% at 50.16% 100%, rgba(60,216,255,0.20) 0%, rgba(60,216,255,0) 100%), rgba(255,255,255,0.05);
56
+
57
+ /* ------------------------------------------------------------------ */
58
+ /* Overlays */
59
+ /* Monthly billing: prepend to the card surface gradient. */
60
+ /* ------------------------------------------------------------------ */
61
+ --lemmo-gradient-overlay-darken: linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.2));
62
+ }
@@ -0,0 +1,28 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Durations */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-duration-fast: 100ms; /* progress fill, micro-ticks */
6
+ --lemmo-duration-normal: 200ms; /* toggle thumb, hover states */
7
+ --lemmo-duration-slow: 300ms; /* card border/color transitions */
8
+ --lemmo-duration-slower: 500ms; /* legacy card transitions */
9
+ --lemmo-duration-slider: 150ms; /* credit slider (width/left) */
10
+ --lemmo-duration-plan-swap: 420ms; /* plan swap enter/exit */
11
+ --lemmo-duration-breathe: 1.8s; /* slider-tick breathe (infinite) */
12
+
13
+ /* ------------------------------------------------------------------ */
14
+ /* Eases — verified against the reference */
15
+ /* ------------------------------------------------------------------ */
16
+ --lemmo-ease-out: ease-out; /* cards (300/500ms) */
17
+ --lemmo-ease-in-out: ease-in-out; /* breathe (1.8s) */
18
+ --lemmo-ease-snap: cubic-bezier(0.77, 0, 0.175, 1); /* plan swap (0.42s) */
19
+
20
+ /* ------------------------------------------------------------------ */
21
+ /* Eases — named in the scale; curve is an estimate (verified names) */
22
+ /* ------------------------------------------------------------------ */
23
+ --lemmo-ease-spring: cubic-bezier(0.68, -0.55, 0.265, 1.55);
24
+ --lemmo-ease-swift: cubic-bezier(0.55, 0, 0.1, 1);
25
+ --lemmo-ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
26
+ --lemmo-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
27
+ --lemmo-ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
28
+ }
@@ -0,0 +1,27 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Radius ladder (same quarter-rem basis as spacing) */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-radius-0: 0;
6
+ --lemmo-radius-050: .125rem; /* 2 px */
7
+ --lemmo-radius-100: .25rem; /* 4 px */
8
+ --lemmo-radius-150: .375rem; /* 6 px */
9
+ --lemmo-radius-200: .5rem; /* 8 px */
10
+ --lemmo-radius-250: .625rem; /* 10 px */
11
+ --lemmo-radius-300: .75rem; /* 12 px */
12
+ --lemmo-radius-400: 1rem; /* 16 px */
13
+ --lemmo-radius-500: 1.25rem; /* 20 px */
14
+ --lemmo-radius-600: 1.5rem; /* 24 px */
15
+ --lemmo-radius-full: 9999px; /* pill */
16
+
17
+ /* ------------------------------------------------------------------ */
18
+ /* Semantic radius */
19
+ /* ------------------------------------------------------------------ */
20
+ --lemmo-radius-control: var(--lemmo-radius-200); /* 8 px buttons, inputs */
21
+ --lemmo-radius-card: var(--lemmo-radius-300); /* 12 px cards, tables, CTA */
22
+ --lemmo-radius-badge: var(--lemmo-radius-150); /* 6 px status badges */
23
+ --lemmo-radius-featured-card: var(--lemmo-radius-500); /* 20 px featured surfaces */
24
+ --lemmo-radius-media: var(--lemmo-radius-400); /* 16 px media containers */
25
+ --lemmo-radius-media-lg: var(--lemmo-radius-600); /* 24 px large media */
26
+ --lemmo-radius-pill: var(--lemmo-radius-full); /* full round */
27
+ }
@@ -0,0 +1,54 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Controls */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-size-control-xs: 2rem; /* 32 px */
6
+ --lemmo-size-control-sm: 2.25rem; /* 36 px */
7
+ --lemmo-size-control-md: 2.5rem; /* 40 px */
8
+ --lemmo-size-control-lg: 2.75rem; /* 44 px — primary CTA */
9
+ --lemmo-size-control-xl: 3rem; /* 48 px */
10
+
11
+ /* ------------------------------------------------------------------ */
12
+ /* Icons */
13
+ /* ------------------------------------------------------------------ */
14
+ --lemmo-size-icon-xs: .75rem; /* 12 px */
15
+ --lemmo-size-icon-sm: 1rem; /* 16 px — feature checks, row icons */
16
+ --lemmo-size-icon-md: 1.25rem; /* 20 px */
17
+ --lemmo-size-icon-lg: 1.5rem; /* 24 px */
18
+ --lemmo-size-icon-xl: 1.75rem; /* 28 px — carousel arrows */
19
+
20
+ /* ------------------------------------------------------------------ */
21
+ /* Header */
22
+ /* ------------------------------------------------------------------ */
23
+ --lemmo-size-header: 3.25rem; /* 52 px */
24
+ --lemmo-size-header-compact: 2.25rem; /* 36 px */
25
+
26
+ /* ------------------------------------------------------------------ */
27
+ /* Containers (max-widths) */
28
+ /* ------------------------------------------------------------------ */
29
+ --lemmo-size-gutter: 1rem; /* mobile container gutters */
30
+ --lemmo-size-container-base: 100%; /* base width */
31
+ --lemmo-size-container-sm: 40rem; /* 640 px */
32
+ --lemmo-size-container-md: 48rem; /* 768 px */
33
+ --lemmo-size-container-lg: 64rem; /* 1024 px */
34
+ --lemmo-size-container-xl: 80rem; /* 1280 px */
35
+ --lemmo-size-container-2xl: 120rem; /* 1920 px */
36
+ --lemmo-size-container-3xl: 158rem; /* 2528 px */
37
+ --lemmo-size-container-media: calc(100vw - 2rem); /* media strips */
38
+
39
+ /* Content caps */
40
+ --lemmo-size-container-copy: 80rem; /* max-w-7xl */
41
+ --lemmo-size-container-content: 56rem; /* max-w-4xl */
42
+ --lemmo-size-container-wide: 96rem; /* max-w-8xl */
43
+
44
+ /* ------------------------------------------------------------------ */
45
+ /* Pricing column (Optional — conversion) */
46
+ /* ------------------------------------------------------------------ */
47
+ --lemmo-size-column-sm: 66.5rem; /* 1064 px standard column */
48
+ --lemmo-size-column-lg: 89rem; /* 1424 px wide variant */
49
+ --lemmo-size-max-default: 90rem; /* 1440 px outer shell */
50
+ --lemmo-size-max-wide: 92rem; /* 1472 px wide shell */
51
+ --lemmo-size-pricing-pad-x: 1rem; /* mobile gutters */
52
+ --lemmo-size-pricing-pad-x-lg: 3.75rem; /* ≥768px gutters */
53
+ --lemmo-size-pricing-pad-y: 2rem; /* vertical rhythm */
54
+ }
@@ -0,0 +1,42 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* 4 px ladder — base unit 4px, each token a quarter-rem step */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-space-0: 0;
6
+ --lemmo-space-050: .125rem; /* 2 px */
7
+ --lemmo-space-100: .25rem; /* 4 px */
8
+ --lemmo-space-150: .375rem; /* 6 px */
9
+ --lemmo-space-200: .5rem; /* 8 px */
10
+ --lemmo-space-250: .625rem; /* 10 px */
11
+ --lemmo-space-300: .75rem; /* 12 px */
12
+ --lemmo-space-400: 1rem; /* 16 px */
13
+ --lemmo-space-500: 1.25rem; /* 20 px */
14
+ --lemmo-space-600: 1.5rem; /* 24 px */
15
+ --lemmo-space-700: 1.75rem; /* 28 px */
16
+ --lemmo-space-800: 2rem; /* 32 px */
17
+ --lemmo-space-1000: 2.5rem; /* 40 px */
18
+ --lemmo-space-1200: 3rem; /* 48 px */
19
+ --lemmo-space-1400: 3.5rem; /* 56 px */
20
+ --lemmo-space-1600: 4rem; /* 64 px */
21
+ --lemmo-space-2000: 5rem; /* 80 px */
22
+ --lemmo-space-2400: 6rem; /* 96 px */
23
+
24
+ /* ------------------------------------------------------------------ */
25
+ /* Gaps (between elements) */
26
+ /* ------------------------------------------------------------------ */
27
+ --lemmo-gap-0-5: var(--lemmo-space-050); /* 2 px (toggle thumb offset, badge micro-gap) */
28
+ --lemmo-gap-1: var(--lemmo-space-100); /* 4 px (inline icon+label) */
29
+ --lemmo-gap-1-5: var(--lemmo-space-150); /* 6 px (table rows, feature rows) */
30
+ --lemmo-gap-2: var(--lemmo-space-200); /* 8 px (card grid default) */
31
+ --lemmo-gap-2-5: var(--lemmo-space-250); /* 10 px */
32
+ --lemmo-gap-3: var(--lemmo-space-300); /* 12 px (billing toggle, header stacks) */
33
+ --lemmo-gap-4: var(--lemmo-space-400); /* 16 px (card grid ≥1280px) */
34
+
35
+ /* ------------------------------------------------------------------ */
36
+ /* Semantic rhythm (structural) */
37
+ /* ------------------------------------------------------------------ */
38
+ --lemmo-gap-card-grid: var(--lemmo-space-200); /* 8 px, 16 px at desktop */
39
+ --lemmo-gap-card-inner: var(--lemmo-space-200); /* 8 px between card body rows */
40
+ --lemmo-gap-section-sm: var(--lemmo-space-1000); /* 40 px section rhythm (py-10) */
41
+ --lemmo-gap-section-lg: var(--lemmo-space-2000); /* 80 px section rhythm (py-20) */
42
+ }
@@ -0,0 +1,18 @@
1
+ :root {
2
+ /* ------------------------------------------------------------------ */
3
+ /* Stroke (border) widths */
4
+ /* ------------------------------------------------------------------ */
5
+ --lemmo-stroke-none: 0;
6
+ --lemmo-stroke-hairline: .5px;
7
+ --lemmo-stroke-thin: 1px;
8
+ --lemmo-stroke-medium: 1.5px;
9
+ --lemmo-stroke-thick: 2px;
10
+
11
+ /* ------------------------------------------------------------------ */
12
+ /* Semantic strokes */
13
+ /* ------------------------------------------------------------------ */
14
+ --lemmo-stroke-rim: var(--lemmo-stroke-thin); /* 1px mask-gradient rim (cards) */
15
+ --lemmo-stroke-border: var(--lemmo-stroke-thin); /* 1px hairline borders */
16
+ --lemmo-stroke-border-gradient: var(--lemmo-stroke-thick); /* 2px pad trick, highlighted cards */
17
+ --lemmo-stroke-divider: var(--lemmo-stroke-hairline); /* table separators */
18
+ }
@@ -0,0 +1,14 @@
1
+ /* lemmo design tokens — combined entry point.
2
+ Import in dependency order (each item only references earlier items).
3
+ All tokens are CSS custom properties on :root. */
4
+
5
+ @import "lemmo.colors.css";
6
+ @import "lemmo.gradients.css";
7
+ @import "lemmo.spacing.css";
8
+ @import "lemmo.typography.css";
9
+ @import "lemmo.radius.css";
10
+ @import "lemmo.strokes.css";
11
+ @import "lemmo.sizes.css";
12
+ @import "lemmo.breakpoints.css";
13
+ @import "lemmo.motion.css";
14
+ @import "lemmo.elevation.css";
@@ -0,0 +1,120 @@
1
+ /* ------------------------------------------------------------------ */
2
+ /* Import webfont declarations and typography base rules */
3
+ /* ------------------------------------------------------------------ */
4
+ @import "../fonts/fonts.css";
5
+
6
+ :root {
7
+ /* ------------------------------------------------------------------ */
8
+ /* Families (Bilingual Brand Typography) */
9
+ /* English default: Satoshi for body/numerals, Oddval for headings */
10
+ /* Persian: IRANSans for body, Morabba for headings */
11
+ /* Numbers always render in Satoshi via tabular-nums / [data-numeric] */
12
+ /* ------------------------------------------------------------------ */
13
+ --lemmo-font-body: 'Satoshi', sans-serif;
14
+ --lemmo-font-heading: 'Oddval', 'Satoshi', sans-serif;
15
+ --lemmo-font-display: 'Oddval', 'Satoshi', sans-serif;
16
+ --lemmo-font-numeric: 'Satoshi', sans-serif;
17
+ --lemmo-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
18
+
19
+ /* Explicit per-language font tokens */
20
+ --lemmo-font-body-en: 'Satoshi', sans-serif;
21
+ --lemmo-font-heading-en: 'Oddval', 'Satoshi', sans-serif;
22
+ --lemmo-font-body-fa: 'IRANSans', sans-serif;
23
+ --lemmo-font-heading-fa: 'Morabba', sans-serif;
24
+
25
+ /* Line-height corrective factor (Persian fonts need ~10-15% more leading) */
26
+ --lemmo-leading-factor: 1;
27
+
28
+ /* Generic aliases matching frontend design-system */
29
+ --font-heading: var(--lemmo-font-heading);
30
+ --font-body: var(--lemmo-font-body);
31
+ --font-numeric: var(--lemmo-font-numeric);
32
+ --leading-factor: var(--lemmo-leading-factor);
33
+
34
+ /* ------------------------------------------------------------------ */
35
+ /* Weights */
36
+ /* ------------------------------------------------------------------ */
37
+ --lemmo-font-weight-regular: 400;
38
+ --lemmo-font-weight-medium: 500;
39
+ --lemmo-font-weight-semi-bold: 600;
40
+ --lemmo-font-weight-bold: 700;
41
+ --lemmo-font-weight-black: 900;
42
+ --lemmo-font-weight-cta: 510; /* Medium -> SemiBold CTA buttons */
43
+
44
+ /* ------------------------------------------------------------------ */
45
+ /* Type size ladder (rem) */
46
+ /* ------------------------------------------------------------------ */
47
+ --lemmo-type-size-050: .625rem; /* 10 px */
48
+ --lemmo-type-size-100: .75rem; /* 12 px */
49
+ --lemmo-type-size-200: .875rem; /* 14 px — body default */
50
+ --lemmo-type-size-300: 1rem; /* 16 px */
51
+ --lemmo-type-size-400: 1.125rem; /* 18 px */
52
+ --lemmo-type-size-500: 1.25rem; /* 20 px */
53
+ --lemmo-type-size-600: 1.5rem; /* 24 px */
54
+ --lemmo-type-size-700: 1.75rem; /* 28 px */
55
+ --lemmo-type-size-800: 2rem; /* 32 px */
56
+ --lemmo-type-size-900: 2.25rem; /* 36 px */
57
+ --lemmo-type-size-1000: 2.5rem; /* 40 px */
58
+ --lemmo-type-size-1100: 3rem; /* 48 px */
59
+ --lemmo-type-size-1200: 3.5rem; /* 56 px */
60
+ --lemmo-type-size-1300: 4rem; /* 64 px — hero h-xl */
61
+ --lemmo-type-size-1400: 4.5rem; /* 72 px */
62
+
63
+ /* ------------------------------------------------------------------ */
64
+ /* Line heights (absolute rem, not unitless) */
65
+ /* ------------------------------------------------------------------ */
66
+ --lemmo-type-leading-300: 1rem; /* 16 px */
67
+ --lemmo-type-leading-400: 1.125rem; /* 18 px */
68
+ --lemmo-type-leading-500: 1.25rem; /* 20 px — body default */
69
+ --lemmo-type-leading-600: 1.5rem; /* 24 px */
70
+ --lemmo-type-leading-700: 1.75rem; /* 28 px */
71
+ --lemmo-type-leading-800: 2rem; /* 32 px */
72
+ --lemmo-type-leading-900: 2.25rem; /* 36 px */
73
+ --lemmo-type-leading-1000: 2.5rem; /* 40 px */
74
+ --lemmo-type-leading-1100: 2.75rem; /* 44 px — derived */
75
+ --lemmo-type-leading-1200: 3rem; /* 48 px — derived */
76
+ --lemmo-type-leading-1300: 4rem; /* 64 px — derived */
77
+ --lemmo-type-leading-1400: 4.5rem; /* 72 px — derived */
78
+
79
+ /* ------------------------------------------------------------------ */
80
+ /* Letter spacing */
81
+ /* ------------------------------------------------------------------ */
82
+ --lemmo-type-track-none: 0;
83
+ --lemmo-type-track-slight: -0.025rem; /* fine label compression */
84
+ --lemmo-type-track-tight: -0.075rem; /* tight captions */
85
+ --lemmo-type-track-loose: 0.00625rem; /* body default drift */
86
+ --lemmo-type-track-wide: 0.0125rem; /* wide-set labels */
87
+ --lemmo-type-track-xxs: -0.3px; /* 10px badge/semibold */
88
+ --lemmo-type-track-5xl: -1.2px; /* 48px display */
89
+ --lemmo-type-track-heading: -2%; /* h-xl hero */
90
+ --lemmo-type-track-caps: -4%; /* caps-bold */
91
+ --lemmo-type-track-label: 0.2px; /* gloss badge text */
92
+ --lemmo-type-track-caption: 0.08rem; /* uppercase savings banner */
93
+ --lemmo-type-track-table-head: -0.56px; /* table header bold */
94
+ }
95
+
96
+ /* ------------------------------------------------------------------ */
97
+ /* Language rule — automatic font switching via [lang='fa'] */
98
+ /* ------------------------------------------------------------------ */
99
+ :root[lang='fa'],
100
+ [lang='fa'] {
101
+ --lemmo-font-body: var(--lemmo-font-body-fa);
102
+ --lemmo-font-heading: var(--lemmo-font-heading-fa);
103
+ --lemmo-font-display: var(--lemmo-font-heading-fa);
104
+ --lemmo-leading-factor: 1.15;
105
+
106
+ --font-heading: var(--lemmo-font-heading-fa);
107
+ --font-body: var(--lemmo-font-body-fa);
108
+ --leading-factor: 1.15;
109
+ }
110
+
111
+ /* ------------------------------------------------------------------ */
112
+ /* Numerals rule — numbers always render in Satoshi (LTR + isolated) */
113
+ /* ------------------------------------------------------------------ */
114
+ .tabular-nums,
115
+ [data-numeric] {
116
+ font-family: var(--lemmo-font-numeric);
117
+ font-feature-settings: 'tnum' 1;
118
+ direction: ltr;
119
+ unicode-bidi: isolate;
120
+ }