@pineui/react 0.1.3 → 0.1.5

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/dist/style.css CHANGED
@@ -1 +1,820 @@
1
- :root{--md-sys-color-primary: #6750a4;--md-sys-color-onPrimary: #ffffff;--md-sys-color-secondary: #625b71;--md-sys-color-onSecondary: #ffffff;--md-sys-color-error: #ba1a1a;--md-sys-color-onError: #ffffff;--md-sys-color-success: #198754;--md-sys-color-surface: #ffffff;--md-sys-color-onSurface: #1c1b1f;--md-sys-color-surfaceVariant: #e7e0ec;--md-sys-color-onSurfaceVariant: #49454f;--md-sys-color-outline: #79747e;--md-sys-color-background: #fffbfe;--md-sys-color-onBackground: #1c1b1f}*{box-sizing:border-box}.pineui-root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;color:var(--md-sys-color-onBackground);background:var(--md-sys-color-background);width:100%;height:100%;overflow:hidden;line-height:1.5;font-size:16px}.pineui-root *{margin:0;padding:0;box-sizing:border-box}.pineui-text{margin:0;line-height:1.5}.pineui-text--titleLarge{font-size:22px;font-weight:500;line-height:28px}.pineui-text--titleMedium{font-size:16px;font-weight:500;line-height:24px}.pineui-text--titleSmall{font-size:14px;font-weight:500;line-height:20px}.pineui-text--bodyLarge{font-size:16px;font-weight:400;line-height:24px}.pineui-text--bodyMedium{font-size:14px;font-weight:400;line-height:20px}.pineui-text--bodySmall{font-size:12px;font-weight:400;line-height:16px}.pineui-text--headlineSmall{font-size:24px;font-weight:400;line-height:32px}.pineui-text--headlineMedium{font-size:28px;font-weight:400;line-height:36px}.pineui-text--headlineLarge{font-size:32px;font-weight:400;line-height:40px}.pineui-text--labelLarge{font-size:14px;font-weight:500;line-height:20px}.pineui-text--labelMedium{font-size:12px;font-weight:500;line-height:16px}.pineui-text--labelSmall{font-size:11px;font-weight:500;line-height:16px}.pineui-text--bold{font-weight:700}.pineui-layout{display:flex}.pineui-layout--column{flex-direction:column}.pineui-layout--row{flex-direction:row}.pineui-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:20px;font-family:inherit;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;padding:10px 24px}.pineui-button--filled{background:var(--md-sys-color-primary);color:var(--md-sys-color-onPrimary)}.pineui-button--filled:hover:not(:disabled){opacity:.9;box-shadow:0 1px 3px #0003}.pineui-button--text{background:transparent;color:var(--md-sys-color-primary);padding:10px 12px}.pineui-button--text:hover:not(:disabled){background:#6750a414}.pineui-button--outlined{background:transparent;color:var(--md-sys-color-primary);border:1px solid var(--md-sys-color-outline);padding:10px 24px}.pineui-button--outlined:hover:not(:disabled){background:#6750a414}.pineui-button--icon{background:transparent;color:var(--md-sys-color-onSurfaceVariant);padding:8px;border-radius:8px;min-width:40px;min-height:40px}.pineui-button--icon:hover:not(:disabled){background:#0000000d}.pineui-button--fab{background:var(--md-sys-color-primary);color:var(--md-sys-color-onPrimary);border-radius:16px;padding:16px;box-shadow:0 2px 4px #0003}.pineui-button--disabled{opacity:.38;cursor:not-allowed}.pineui-button--small{font-size:12px;padding:6px 16px}.pineui-button--icon.pineui-button--small{padding:4px;min-width:20px;min-height:20px;font-size:14px;line-height:1}.pineui-card{background:var(--md-sys-color-surface);border-radius:12px;transition:box-shadow .2s}.pineui-card--elevation-0{box-shadow:none}.pineui-card--elevation-1{box-shadow:0 1px 2px #0000001a}.pineui-card--clickable{cursor:pointer}.pineui-card--clickable:hover{box-shadow:0 2px 8px #00000026}.pineui-image{display:block;max-width:100%;height:auto}.pineui-avatar{display:block;border:2px solid var(--md-sys-color-surface)}.pineui-icon{display:inline-flex;align-items:center;justify-content:center}.pineui-scaffold{display:flex;flex-direction:column;height:100%;background:var(--md-sys-color-background)}.pineui-scaffold__appbar{background:var(--md-sys-color-surface);box-shadow:0 1px 3px #0000001a;padding:16px;z-index:10}.pineui-scaffold__body{flex:1;overflow-y:auto}.pineui-scaffold__fab{position:fixed;bottom:80px;right:16px;z-index:20}.pineui-scaffold__bottomnav{background:var(--md-sys-color-surface);box-shadow:0 -1px 3px #0000001a;padding:8px 0;z-index:10}.pineui-collection{width:100%}.pineui-collection__list{display:flex;flex-direction:column}.pineui-collection__list .pineui-collection__item{border-bottom:1px solid var(--md-sys-color-surfaceVariant)}.pineui-collection__list .pineui-collection__item:last-child{border-bottom:none}.pineui-loading,.pineui-error{display:flex;align-items:center;justify-content:center;min-height:200px;padding:32px;text-align:center;color:var(--md-sys-color-onSurfaceVariant)}.pineui-error{color:var(--md-sys-color-error)}.pineui-snackbar-container{position:fixed;bottom:16px;left:50%;transform:translate(-50%);z-index:1000;display:flex;flex-direction:column;gap:8px;pointer-events:none}.pineui-snackbar{background:var(--md-sys-color-onSurface);color:var(--md-sys-color-surface);padding:14px 16px;border-radius:4px;box-shadow:0 4px 8px #0000004d;display:flex;align-items:center;gap:16px;min-width:300px;max-width:500px;pointer-events:auto;opacity:0;transform:translateY(20px);transition:all .3s cubic-bezier(.4,0,.2,1)}.pineui-snackbar--visible{opacity:1;transform:translateY(0)}.pineui-snackbar__message{flex:1;font-size:14px;line-height:20px}.pineui-snackbar__action{background:transparent;border:none;color:var(--md-sys-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 12px;border-radius:4px;text-transform:uppercase;letter-spacing:.5px}.pineui-snackbar__action:hover{background:#6750a41f}.pineui-appbar{display:flex;align-items:center;padding:12px 16px;gap:16px;background:var(--md-sys-color-surface);box-shadow:0 1px 3px #0000001a}.pineui-appbar__leading{display:flex;align-items:center}.pineui-appbar__title{flex:1}.pineui-appbar__actions{display:flex;align-items:center;gap:8px}.pineui-bottomnav{display:flex;justify-content:space-around;align-items:center;background:var(--md-sys-color-surface);box-shadow:0 -1px 3px #0000001a;padding:8px 0;min-height:64px}.pineui-bottomnav__item{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;background:transparent;border:none;cursor:pointer;padding:8px;color:var(--md-sys-color-onSurfaceVariant);transition:all .2s;position:relative;gap:4px}.pineui-bottomnav__item:hover{background:#0000000d}.pineui-bottomnav__item--active{color:var(--md-sys-color-primary)}.pineui-bottomnav__icon-container{position:relative;font-size:24px}.pineui-bottomnav__badge{position:absolute;top:-8px;right:-8px;background:var(--md-sys-color-error);color:var(--md-sys-color-onError);font-size:10px;font-weight:600;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center}.pineui-bottomnav__label{font-size:12px;font-weight:500}.pineui-input{width:100%;padding:12px 16px;border:1px solid var(--md-sys-color-outline);border-radius:4px;font-family:inherit;font-size:16px;line-height:24px;color:var(--md-sys-color-onSurface);background:var(--md-sys-color-surface);transition:all .2s}.pineui-input:focus{outline:none;border-color:var(--md-sys-color-primary);box-shadow:0 0 0 1px var(--md-sys-color-primary)}.pineui-input::placeholder{color:var(--md-sys-color-onSurfaceVariant);opacity:.6}textarea.pineui-input{resize:vertical;min-height:80px}.pineui-divider{width:100%;margin:0}.pineui-modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:999;animation:fadeIn .2s ease-out;pointer-events:auto}.pineui-modal-backdrop--bottomSheet{align-items:flex-end;justify-content:stretch}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.pineui-modal{background:var(--md-sys-color-surface);border-radius:16px;box-shadow:0 8px 32px #0000004d;max-width:90vw;max-height:90vh;overflow:auto;animation:slideUp .3s cubic-bezier(.4,0,.2,1)}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.pineui-modal--bottomSheet{width:100%;max-width:100vw;max-height:80vh;border-radius:16px 16px 0 0;margin:0;animation:slideUpFromBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideUpFromBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.pineui-modal--modal{width:500px;max-width:90vw}.pineui-modal--fullscreen{width:95vw;height:95vh;max-width:95vw;max-height:95vh;border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.pineui-modal--dialog{width:400px;max-width:90vw;padding:24px}.pineui-tabs{display:flex;flex-direction:column;width:100%}.pineui-tabs__header{display:flex;gap:8px;border-bottom:1px solid var(--md-sys-color-outline);overflow-x:auto;scrollbar-width:thin}.pineui-tabs__tab{display:flex;align-items:center;gap:8px;padding:12px 16px;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--md-sys-color-onSurfaceVariant);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}.pineui-tabs__tab:hover{background:#0000000d}.pineui-tabs__tab--active{color:var(--md-sys-color-primary);border-bottom-color:var(--md-sys-color-primary)}.pineui-tabs__badge{background:var(--md-sys-color-surfaceVariant);color:var(--md-sys-color-onSurfaceVariant);padding:2px 8px;border-radius:12px;font-size:12px;font-weight:600}.pineui-tabs__content{padding:16px 0}.pineui-badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:12px;font-size:12px;font-weight:600;white-space:nowrap}.pineui-badge--default{background:var(--md-sys-color-surfaceVariant);color:var(--md-sys-color-onSurfaceVariant)}.pineui-badge--success{background:#1987541a;color:var(--md-sys-color-success);border:1px solid var(--md-sys-color-success)}.pineui-badge--warning{background:#ffc1071a;color:#ff9800;border:1px solid #ff9800}.pineui-badge--error{background:#ba1a1a1a;color:var(--md-sys-color-error);border:1px solid var(--md-sys-color-error)}.pineui-badge--info{background:#6750a41a;color:var(--md-sys-color-primary);border:1px solid var(--md-sys-color-primary)}.pineui-badge--small{padding:2px 6px;font-size:10px}.pineui-badge--large{padding:6px 12px;font-size:14px}.pineui-chip{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline);border-radius:8px;font-size:14px;font-weight:500;color:var(--md-sys-color-onSurface);cursor:pointer;transition:all .2s}.pineui-chip:hover{background:var(--md-sys-color-surfaceVariant)}.pineui-chip--selected{background:var(--md-sys-color-primary);color:var(--md-sys-color-onPrimary);border-color:var(--md-sys-color-primary)}.pineui-grid,.pineui-progress{width:100%}.pineui-progress__header{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.pineui-progress__label{color:var(--md-sys-color-onSurface);font-weight:500}.pineui-progress__percentage{color:var(--md-sys-color-onSurfaceVariant)}.pineui-progress__track{width:100%;height:8px;background:var(--md-sys-color-surfaceVariant);border-radius:4px;overflow:hidden}.pineui-progress__fill{height:100%;transition:width .3s ease;border-radius:4px}.pineui-progress__fill--primary{background:var(--md-sys-color-primary)}.pineui-progress__fill--success{background:var(--md-sys-color-success)}.pineui-progress__fill--error{background:var(--md-sys-color-error)}.pineui-table{width:100%;overflow-x:auto}.pineui-table table{width:100%;border-collapse:collapse}.pineui-table__header{text-align:left;padding:12px 16px;font-size:12px;font-weight:600;color:var(--md-sys-color-onSurfaceVariant);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--md-sys-color-outline)}.pineui-table__row{border-bottom:1px solid var(--md-sys-color-surfaceVariant);transition:background .2s}.pineui-table__row:hover{background:#00000005}.pineui-table__cell{padding:16px;vertical-align:middle}
1
+ /* PineUI Base Styles - Material Design 3 inspired */
2
+
3
+ :root {
4
+ /* Material Design 3 Colors - Light Theme */
5
+ --md-sys-color-primary: #6750a4;
6
+ --md-sys-color-onPrimary: #ffffff;
7
+ --md-sys-color-secondary: #625b71;
8
+ --md-sys-color-onSecondary: #ffffff;
9
+ --md-sys-color-error: #ba1a1a;
10
+ --md-sys-color-onError: #ffffff;
11
+ --md-sys-color-success: #198754;
12
+ --md-sys-color-surface: #ffffff;
13
+ --md-sys-color-onSurface: #1c1b1f;
14
+ --md-sys-color-surfaceVariant: #e7e0ec;
15
+ --md-sys-color-onSurfaceVariant: #49454f;
16
+ --md-sys-color-outline: #79747e;
17
+ --md-sys-color-background: #fffbfe;
18
+ --md-sys-color-onBackground: #1c1b1f;
19
+ }
20
+
21
+ * {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ .pineui-root {
26
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
27
+ color: var(--md-sys-color-onBackground);
28
+ background: var(--md-sys-color-background);
29
+ width: 100%;
30
+ height: 100%;
31
+ overflow: hidden;
32
+ line-height: 1.5;
33
+ font-size: 16px;
34
+ }
35
+
36
+ /* Isolate PineUI - only affect elements inside .pineui-root */
37
+ .pineui-root * {
38
+ margin: 0;
39
+ padding: 0;
40
+ box-sizing: border-box;
41
+ }
42
+
43
+ /* Typography */
44
+ .pineui-text {
45
+ margin: 0;
46
+ line-height: 1.5;
47
+ }
48
+
49
+ .pineui-text--titleLarge {
50
+ font-size: 22px;
51
+ font-weight: 500;
52
+ line-height: 28px;
53
+ }
54
+
55
+ .pineui-text--titleMedium {
56
+ font-size: 16px;
57
+ font-weight: 500;
58
+ line-height: 24px;
59
+ }
60
+
61
+ .pineui-text--titleSmall {
62
+ font-size: 14px;
63
+ font-weight: 500;
64
+ line-height: 20px;
65
+ }
66
+
67
+ .pineui-text--bodyLarge {
68
+ font-size: 16px;
69
+ font-weight: 400;
70
+ line-height: 24px;
71
+ }
72
+
73
+ .pineui-text--bodyMedium {
74
+ font-size: 14px;
75
+ font-weight: 400;
76
+ line-height: 20px;
77
+ }
78
+
79
+ .pineui-text--bodySmall {
80
+ font-size: 12px;
81
+ font-weight: 400;
82
+ line-height: 16px;
83
+ }
84
+
85
+ .pineui-text--headlineSmall {
86
+ font-size: 24px;
87
+ font-weight: 400;
88
+ line-height: 32px;
89
+ }
90
+
91
+ .pineui-text--headlineMedium {
92
+ font-size: 28px;
93
+ font-weight: 400;
94
+ line-height: 36px;
95
+ }
96
+
97
+ .pineui-text--headlineLarge {
98
+ font-size: 32px;
99
+ font-weight: 400;
100
+ line-height: 40px;
101
+ }
102
+
103
+ .pineui-text--labelLarge {
104
+ font-size: 14px;
105
+ font-weight: 500;
106
+ line-height: 20px;
107
+ }
108
+
109
+ .pineui-text--labelMedium {
110
+ font-size: 12px;
111
+ font-weight: 500;
112
+ line-height: 16px;
113
+ }
114
+
115
+ .pineui-text--labelSmall {
116
+ font-size: 11px;
117
+ font-weight: 500;
118
+ line-height: 16px;
119
+ }
120
+
121
+ .pineui-text--bold {
122
+ font-weight: 700;
123
+ }
124
+
125
+ /* Layout */
126
+ .pineui-layout {
127
+ display: flex;
128
+ }
129
+
130
+ .pineui-layout--column {
131
+ flex-direction: column;
132
+ }
133
+
134
+ .pineui-layout--row {
135
+ flex-direction: row;
136
+ }
137
+
138
+ /* Button */
139
+ .pineui-button {
140
+ display: inline-flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ gap: 8px;
144
+ border: none;
145
+ border-radius: 20px;
146
+ font-family: inherit;
147
+ font-size: 14px;
148
+ font-weight: 500;
149
+ cursor: pointer;
150
+ transition: all 0.2s;
151
+ padding: 10px 24px;
152
+ }
153
+
154
+ .pineui-button--filled {
155
+ background: var(--md-sys-color-primary);
156
+ color: var(--md-sys-color-onPrimary);
157
+ }
158
+
159
+ .pineui-button--filled:hover:not(:disabled) {
160
+ opacity: 0.9;
161
+ box-shadow: 0 1px 3px rgba(0,0,0,0.2);
162
+ }
163
+
164
+ .pineui-button--text {
165
+ background: transparent;
166
+ color: var(--md-sys-color-primary);
167
+ padding: 10px 12px;
168
+ }
169
+
170
+ .pineui-button--text:hover:not(:disabled) {
171
+ background: rgba(103, 80, 164, 0.08);
172
+ }
173
+
174
+ .pineui-button--outlined {
175
+ background: transparent;
176
+ color: var(--md-sys-color-primary);
177
+ border: 1px solid var(--md-sys-color-outline);
178
+ padding: 10px 24px;
179
+ }
180
+
181
+ .pineui-button--outlined:hover:not(:disabled) {
182
+ background: rgba(103, 80, 164, 0.08);
183
+ }
184
+
185
+ .pineui-button--icon {
186
+ background: transparent;
187
+ color: var(--md-sys-color-onSurfaceVariant);
188
+ padding: 8px;
189
+ border-radius: 8px;
190
+ min-width: 40px;
191
+ min-height: 40px;
192
+ }
193
+
194
+ .pineui-button--icon:hover:not(:disabled) {
195
+ background: rgba(0, 0, 0, 0.05);
196
+ }
197
+
198
+ .pineui-button--fab {
199
+ background: var(--md-sys-color-primary);
200
+ color: var(--md-sys-color-onPrimary);
201
+ border-radius: 16px;
202
+ padding: 16px;
203
+ box-shadow: 0 2px 4px rgba(0,0,0,0.2);
204
+ }
205
+
206
+ .pineui-button--disabled {
207
+ opacity: 0.38;
208
+ cursor: not-allowed;
209
+ }
210
+
211
+ .pineui-button--small {
212
+ font-size: 12px;
213
+ padding: 6px 16px;
214
+ }
215
+
216
+ /* Small icon buttons need specific sizing */
217
+ .pineui-button--icon.pineui-button--small {
218
+ padding: 4px;
219
+ min-width: 20px;
220
+ min-height: 20px;
221
+ font-size: 14px;
222
+ line-height: 1;
223
+ }
224
+
225
+ /* Card */
226
+ .pineui-card {
227
+ background: var(--md-sys-color-surface);
228
+ border-radius: 12px;
229
+ transition: box-shadow 0.2s;
230
+ }
231
+
232
+ .pineui-card--elevation-0 {
233
+ box-shadow: none;
234
+ }
235
+
236
+ .pineui-card--elevation-1 {
237
+ box-shadow: 0 1px 2px rgba(0,0,0,0.1);
238
+ }
239
+
240
+ .pineui-card--clickable {
241
+ cursor: pointer;
242
+ }
243
+
244
+ .pineui-card--clickable:hover {
245
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
246
+ }
247
+
248
+ /* Image */
249
+ .pineui-image {
250
+ display: block;
251
+ max-width: 100%;
252
+ height: auto;
253
+ }
254
+
255
+ /* Avatar */
256
+ .pineui-avatar {
257
+ display: block;
258
+ border: 2px solid var(--md-sys-color-surface);
259
+ }
260
+
261
+ /* Icon */
262
+ .pineui-icon {
263
+ display: inline-flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ }
267
+
268
+ /* Scaffold */
269
+ .pineui-scaffold {
270
+ display: flex;
271
+ flex-direction: column;
272
+ height: 100%;
273
+ background: var(--md-sys-color-background);
274
+ }
275
+
276
+ .pineui-scaffold__appbar {
277
+ background: var(--md-sys-color-surface);
278
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
279
+ padding: 16px;
280
+ z-index: 10;
281
+ }
282
+
283
+ .pineui-scaffold__body {
284
+ flex: 1;
285
+ overflow-y: auto;
286
+ }
287
+
288
+ .pineui-scaffold__fab {
289
+ position: fixed;
290
+ bottom: 80px;
291
+ right: 16px;
292
+ z-index: 20;
293
+ }
294
+
295
+ .pineui-scaffold__bottomnav {
296
+ background: var(--md-sys-color-surface);
297
+ box-shadow: 0 -1px 3px rgba(0,0,0,0.1);
298
+ padding: 8px 0;
299
+ z-index: 10;
300
+ }
301
+
302
+ /* Collection */
303
+ .pineui-collection {
304
+ width: 100%;
305
+ }
306
+
307
+ .pineui-collection__list {
308
+ display: flex;
309
+ flex-direction: column;
310
+ }
311
+
312
+ .pineui-collection__list .pineui-collection__item {
313
+ border-bottom: 1px solid var(--md-sys-color-surfaceVariant);
314
+ }
315
+
316
+ .pineui-collection__list .pineui-collection__item:last-child {
317
+ border-bottom: none;
318
+ }
319
+
320
+ /* Loading & Error */
321
+ .pineui-loading,
322
+ .pineui-error {
323
+ display: flex;
324
+ align-items: center;
325
+ justify-content: center;
326
+ min-height: 200px;
327
+ padding: 32px;
328
+ text-align: center;
329
+ color: var(--md-sys-color-onSurfaceVariant);
330
+ }
331
+
332
+ .pineui-error {
333
+ color: var(--md-sys-color-error);
334
+ }
335
+
336
+ /* Snackbar */
337
+ .pineui-snackbar-container {
338
+ position: fixed;
339
+ bottom: 16px;
340
+ left: 50%;
341
+ transform: translateX(-50%);
342
+ z-index: 1000;
343
+ display: flex;
344
+ flex-direction: column;
345
+ gap: 8px;
346
+ pointer-events: none;
347
+ }
348
+
349
+ .pineui-snackbar {
350
+ background: var(--md-sys-color-onSurface);
351
+ color: var(--md-sys-color-surface);
352
+ padding: 14px 16px;
353
+ border-radius: 4px;
354
+ box-shadow: 0 4px 8px rgba(0,0,0,0.3);
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 16px;
358
+ min-width: 300px;
359
+ max-width: 500px;
360
+ pointer-events: auto;
361
+ opacity: 0;
362
+ transform: translateY(20px);
363
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
364
+ }
365
+
366
+ .pineui-snackbar--visible {
367
+ opacity: 1;
368
+ transform: translateY(0);
369
+ }
370
+
371
+ .pineui-snackbar__message {
372
+ flex: 1;
373
+ font-size: 14px;
374
+ line-height: 20px;
375
+ }
376
+
377
+ .pineui-snackbar__action {
378
+ background: transparent;
379
+ border: none;
380
+ color: var(--md-sys-color-primary);
381
+ font-size: 14px;
382
+ font-weight: 500;
383
+ cursor: pointer;
384
+ padding: 8px 12px;
385
+ border-radius: 4px;
386
+ text-transform: uppercase;
387
+ letter-spacing: 0.5px;
388
+ }
389
+
390
+ .pineui-snackbar__action:hover {
391
+ background: rgba(103, 80, 164, 0.12);
392
+ }
393
+
394
+ /* AppBar */
395
+ .pineui-appbar {
396
+ display: flex;
397
+ align-items: center;
398
+ padding: 12px 16px;
399
+ gap: 16px;
400
+ background: var(--md-sys-color-surface);
401
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
402
+ }
403
+
404
+ .pineui-appbar__leading {
405
+ display: flex;
406
+ align-items: center;
407
+ }
408
+
409
+ .pineui-appbar__title {
410
+ flex: 1;
411
+ }
412
+
413
+ .pineui-appbar__actions {
414
+ display: flex;
415
+ align-items: center;
416
+ gap: 8px;
417
+ }
418
+
419
+ /* Bottom Navigation */
420
+ .pineui-bottomnav {
421
+ display: flex;
422
+ justify-content: space-around;
423
+ align-items: center;
424
+ background: var(--md-sys-color-surface);
425
+ box-shadow: 0 -1px 3px rgba(0,0,0,0.1);
426
+ padding: 8px 0;
427
+ min-height: 64px;
428
+ }
429
+
430
+ .pineui-bottomnav__item {
431
+ display: flex;
432
+ flex-direction: column;
433
+ align-items: center;
434
+ justify-content: center;
435
+ flex: 1;
436
+ background: transparent;
437
+ border: none;
438
+ cursor: pointer;
439
+ padding: 8px;
440
+ color: var(--md-sys-color-onSurfaceVariant);
441
+ transition: all 0.2s;
442
+ position: relative;
443
+ gap: 4px;
444
+ }
445
+
446
+ .pineui-bottomnav__item:hover {
447
+ background: rgba(0, 0, 0, 0.05);
448
+ }
449
+
450
+ .pineui-bottomnav__item--active {
451
+ color: var(--md-sys-color-primary);
452
+ }
453
+
454
+ .pineui-bottomnav__icon-container {
455
+ position: relative;
456
+ font-size: 24px;
457
+ }
458
+
459
+ .pineui-bottomnav__badge {
460
+ position: absolute;
461
+ top: -8px;
462
+ right: -8px;
463
+ background: var(--md-sys-color-error);
464
+ color: var(--md-sys-color-onError);
465
+ font-size: 10px;
466
+ font-weight: 600;
467
+ padding: 2px 6px;
468
+ border-radius: 10px;
469
+ min-width: 18px;
470
+ text-align: center;
471
+ }
472
+
473
+ .pineui-bottomnav__label {
474
+ font-size: 12px;
475
+ font-weight: 500;
476
+ }
477
+
478
+ /* Input */
479
+ .pineui-input {
480
+ width: 100%;
481
+ padding: 12px 16px;
482
+ border: 1px solid var(--md-sys-color-outline);
483
+ border-radius: 4px;
484
+ font-family: inherit;
485
+ font-size: 16px;
486
+ line-height: 24px;
487
+ color: var(--md-sys-color-onSurface);
488
+ background: var(--md-sys-color-surface);
489
+ transition: all 0.2s;
490
+ }
491
+
492
+ .pineui-input:focus {
493
+ outline: none;
494
+ border-color: var(--md-sys-color-primary);
495
+ box-shadow: 0 0 0 1px var(--md-sys-color-primary);
496
+ }
497
+
498
+ .pineui-input::placeholder {
499
+ color: var(--md-sys-color-onSurfaceVariant);
500
+ opacity: 0.6;
501
+ }
502
+
503
+ textarea.pineui-input {
504
+ resize: vertical;
505
+ min-height: 80px;
506
+ }
507
+
508
+ /* Divider */
509
+ .pineui-divider {
510
+ width: 100%;
511
+ margin: 0;
512
+ }
513
+
514
+ /* Modal */
515
+ .pineui-modal-backdrop {
516
+ position: fixed;
517
+ top: 0;
518
+ left: 0;
519
+ right: 0;
520
+ bottom: 0;
521
+ background: rgba(0, 0, 0, 0.5);
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: center;
525
+ z-index: 999;
526
+ animation: fadeIn 0.2s ease-out;
527
+ pointer-events: auto;
528
+ }
529
+
530
+ .pineui-modal-backdrop--bottomSheet {
531
+ align-items: flex-end;
532
+ justify-content: stretch;
533
+ }
534
+
535
+ @keyframes fadeIn {
536
+ from {
537
+ opacity: 0;
538
+ }
539
+ to {
540
+ opacity: 1;
541
+ }
542
+ }
543
+
544
+ .pineui-modal {
545
+ background: var(--md-sys-color-surface);
546
+ border-radius: 16px;
547
+ box-shadow: 0 8px 32px rgba(0,0,0,0.3);
548
+ max-width: 90vw;
549
+ max-height: 90vh;
550
+ overflow: auto;
551
+ animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
552
+ }
553
+
554
+ @keyframes slideUp {
555
+ from {
556
+ opacity: 0;
557
+ transform: translateY(20px);
558
+ }
559
+ to {
560
+ opacity: 1;
561
+ transform: translateY(0);
562
+ }
563
+ }
564
+
565
+ .pineui-modal--bottomSheet {
566
+ width: 100%;
567
+ max-width: 100vw;
568
+ max-height: 80vh;
569
+ border-radius: 16px 16px 0 0;
570
+ margin: 0;
571
+ animation: slideUpFromBottom 0.3s cubic-bezier(0.4, 0, 0.2, 1);
572
+ }
573
+
574
+ @keyframes slideUpFromBottom {
575
+ from {
576
+ transform: translateY(100%);
577
+ }
578
+ to {
579
+ transform: translateY(0);
580
+ }
581
+ }
582
+
583
+ .pineui-modal--modal {
584
+ width: 500px;
585
+ max-width: 90vw;
586
+ }
587
+
588
+ .pineui-modal--fullscreen {
589
+ width: 95vw;
590
+ height: 95vh;
591
+ max-width: 95vw;
592
+ max-height: 95vh;
593
+ border-radius: 12px;
594
+ overflow: hidden;
595
+ display: flex;
596
+ flex-direction: column;
597
+ }
598
+
599
+ .pineui-modal--dialog {
600
+ width: 400px;
601
+ max-width: 90vw;
602
+ padding: 24px;
603
+ }
604
+
605
+ /* Tabs */
606
+ .pineui-tabs {
607
+ display: flex;
608
+ flex-direction: column;
609
+ width: 100%;
610
+ }
611
+
612
+ .pineui-tabs__header {
613
+ display: flex;
614
+ gap: 8px;
615
+ border-bottom: 1px solid var(--md-sys-color-outline);
616
+ overflow-x: auto;
617
+ scrollbar-width: thin;
618
+ }
619
+
620
+ .pineui-tabs__tab {
621
+ display: flex;
622
+ align-items: center;
623
+ gap: 8px;
624
+ padding: 12px 16px;
625
+ background: transparent;
626
+ border: none;
627
+ border-bottom: 2px solid transparent;
628
+ color: var(--md-sys-color-onSurfaceVariant);
629
+ font-size: 14px;
630
+ font-weight: 500;
631
+ cursor: pointer;
632
+ transition: all 0.2s;
633
+ white-space: nowrap;
634
+ }
635
+
636
+ .pineui-tabs__tab:hover {
637
+ background: rgba(0, 0, 0, 0.05);
638
+ }
639
+
640
+ .pineui-tabs__tab--active {
641
+ color: var(--md-sys-color-primary);
642
+ border-bottom-color: var(--md-sys-color-primary);
643
+ }
644
+
645
+ .pineui-tabs__badge {
646
+ background: var(--md-sys-color-surfaceVariant);
647
+ color: var(--md-sys-color-onSurfaceVariant);
648
+ padding: 2px 8px;
649
+ border-radius: 12px;
650
+ font-size: 12px;
651
+ font-weight: 600;
652
+ }
653
+
654
+ .pineui-tabs__content {
655
+ padding: 16px 0;
656
+ }
657
+
658
+ /* Badge */
659
+ .pineui-badge {
660
+ display: inline-flex;
661
+ align-items: center;
662
+ padding: 4px 8px;
663
+ border-radius: 12px;
664
+ font-size: 12px;
665
+ font-weight: 600;
666
+ white-space: nowrap;
667
+ }
668
+
669
+ .pineui-badge--default {
670
+ background: var(--md-sys-color-surfaceVariant);
671
+ color: var(--md-sys-color-onSurfaceVariant);
672
+ }
673
+
674
+ .pineui-badge--success {
675
+ background: rgba(25, 135, 84, 0.1);
676
+ color: var(--md-sys-color-success);
677
+ border: 1px solid var(--md-sys-color-success);
678
+ }
679
+
680
+ .pineui-badge--warning {
681
+ background: rgba(255, 193, 7, 0.1);
682
+ color: #ff9800;
683
+ border: 1px solid #ff9800;
684
+ }
685
+
686
+ .pineui-badge--error {
687
+ background: rgba(186, 26, 26, 0.1);
688
+ color: var(--md-sys-color-error);
689
+ border: 1px solid var(--md-sys-color-error);
690
+ }
691
+
692
+ .pineui-badge--info {
693
+ background: rgba(103, 80, 164, 0.1);
694
+ color: var(--md-sys-color-primary);
695
+ border: 1px solid var(--md-sys-color-primary);
696
+ }
697
+
698
+ .pineui-badge--small {
699
+ padding: 2px 6px;
700
+ font-size: 10px;
701
+ }
702
+
703
+ .pineui-badge--large {
704
+ padding: 6px 12px;
705
+ font-size: 14px;
706
+ }
707
+
708
+ /* Chip */
709
+ .pineui-chip {
710
+ display: inline-flex;
711
+ align-items: center;
712
+ gap: 6px;
713
+ padding: 8px 12px;
714
+ background: var(--md-sys-color-surface);
715
+ border: 1px solid var(--md-sys-color-outline);
716
+ border-radius: 8px;
717
+ font-size: 14px;
718
+ font-weight: 500;
719
+ color: var(--md-sys-color-onSurface);
720
+ cursor: pointer;
721
+ transition: all 0.2s;
722
+ }
723
+
724
+ .pineui-chip:hover {
725
+ background: var(--md-sys-color-surfaceVariant);
726
+ }
727
+
728
+ .pineui-chip--selected {
729
+ background: var(--md-sys-color-primary);
730
+ color: var(--md-sys-color-onPrimary);
731
+ border-color: var(--md-sys-color-primary);
732
+ }
733
+
734
+ /* Grid */
735
+ .pineui-grid {
736
+ width: 100%;
737
+ }
738
+
739
+ /* Progress */
740
+ .pineui-progress {
741
+ width: 100%;
742
+ }
743
+
744
+ .pineui-progress__header {
745
+ display: flex;
746
+ justify-content: space-between;
747
+ margin-bottom: 8px;
748
+ font-size: 14px;
749
+ }
750
+
751
+ .pineui-progress__label {
752
+ color: var(--md-sys-color-onSurface);
753
+ font-weight: 500;
754
+ }
755
+
756
+ .pineui-progress__percentage {
757
+ color: var(--md-sys-color-onSurfaceVariant);
758
+ }
759
+
760
+ .pineui-progress__track {
761
+ width: 100%;
762
+ height: 8px;
763
+ background: var(--md-sys-color-surfaceVariant);
764
+ border-radius: 4px;
765
+ overflow: hidden;
766
+ }
767
+
768
+ .pineui-progress__fill {
769
+ height: 100%;
770
+ transition: width 0.3s ease;
771
+ border-radius: 4px;
772
+ }
773
+
774
+ .pineui-progress__fill--primary {
775
+ background: var(--md-sys-color-primary);
776
+ }
777
+
778
+ .pineui-progress__fill--success {
779
+ background: var(--md-sys-color-success);
780
+ }
781
+
782
+ .pineui-progress__fill--error {
783
+ background: var(--md-sys-color-error);
784
+ }
785
+
786
+ /* Table */
787
+ .pineui-table {
788
+ width: 100%;
789
+ overflow-x: auto;
790
+ }
791
+
792
+ .pineui-table table {
793
+ width: 100%;
794
+ border-collapse: collapse;
795
+ }
796
+
797
+ .pineui-table__header {
798
+ text-align: left;
799
+ padding: 12px 16px;
800
+ font-size: 12px;
801
+ font-weight: 600;
802
+ color: var(--md-sys-color-onSurfaceVariant);
803
+ text-transform: uppercase;
804
+ letter-spacing: 0.5px;
805
+ border-bottom: 1px solid var(--md-sys-color-outline);
806
+ }
807
+
808
+ .pineui-table__row {
809
+ border-bottom: 1px solid var(--md-sys-color-surfaceVariant);
810
+ transition: background 0.2s;
811
+ }
812
+
813
+ .pineui-table__row:hover {
814
+ background: rgba(0, 0, 0, 0.02);
815
+ }
816
+
817
+ .pineui-table__cell {
818
+ padding: 16px;
819
+ vertical-align: middle;
820
+ }