ply-css 1.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.
Files changed (75) hide show
  1. package/CLAUDE.md +176 -0
  2. package/LICENSE +22 -0
  3. package/PLY.md +646 -0
  4. package/README.md +170 -0
  5. package/dist/css/ply-core.css +6175 -0
  6. package/dist/css/ply-core.min.css +1 -0
  7. package/dist/css/ply-essentials.min.css +1 -0
  8. package/dist/css/ply-helpers.min.css +1 -0
  9. package/dist/css/ply.css +7429 -0
  10. package/dist/css/ply.min.css +1 -0
  11. package/dist/css/styles.css +7432 -0
  12. package/dist/css/styles.min.css +1 -0
  13. package/llms-full.txt +834 -0
  14. package/llms.txt +34 -0
  15. package/package.json +70 -0
  16. package/ply-classes.json +2625 -0
  17. package/snippets/accessible-drag-and-drop.html +122 -0
  18. package/snippets/card.html +58 -0
  19. package/snippets/contact-form.html +49 -0
  20. package/snippets/custom-theme.html +280 -0
  21. package/snippets/dashboard.html +77 -0
  22. package/snippets/data-table.html +64 -0
  23. package/snippets/login-page.html +45 -0
  24. package/snippets/navbar-page.html +39 -0
  25. package/snippets/notifications.html +63 -0
  26. package/snippets/pricing-cards.html +95 -0
  27. package/snippets/responsive-header.html +98 -0
  28. package/snippets/starter-page.html +782 -0
  29. package/snippets/two-column-layout.html +40 -0
  30. package/src/scss/_ply-core-components.scss +32 -0
  31. package/src/scss/_ply.scss +47 -0
  32. package/src/scss/components/_accordion.scss +73 -0
  33. package/src/scss/components/_alignments.scss +64 -0
  34. package/src/scss/components/_autocomplete.scss +28 -0
  35. package/src/scss/components/_blocks-responsive.scss +30 -0
  36. package/src/scss/components/_blocks.scss +39 -0
  37. package/src/scss/components/_buttons.scss +452 -0
  38. package/src/scss/components/_colors.scss +447 -0
  39. package/src/scss/components/_container-queries.scss +35 -0
  40. package/src/scss/components/_cursors.scss +24 -0
  41. package/src/scss/components/_dialog-patterns.scss +176 -0
  42. package/src/scss/components/_dropdown.scss +68 -0
  43. package/src/scss/components/_filterbox.scss +57 -0
  44. package/src/scss/components/_flexible-embed.scss +19 -0
  45. package/src/scss/components/_forms.scss +450 -0
  46. package/src/scss/components/_grid.scss +210 -0
  47. package/src/scss/components/_helpers-core.scss +357 -0
  48. package/src/scss/components/_helpers.scss +466 -0
  49. package/src/scss/components/_labels.scss +105 -0
  50. package/src/scss/components/_livesearch.scss +233 -0
  51. package/src/scss/components/_loader.scss +24 -0
  52. package/src/scss/components/_media-queries.scss +9 -0
  53. package/src/scss/components/_mixins.scss +387 -0
  54. package/src/scss/components/_modal.scss +73 -0
  55. package/src/scss/components/_multi-step-form.scss +190 -0
  56. package/src/scss/components/_navigation-responsive.scss +63 -0
  57. package/src/scss/components/_navigation.scss +592 -0
  58. package/src/scss/components/_notifications.scss +185 -0
  59. package/src/scss/components/_prettyprint.scss +86 -0
  60. package/src/scss/components/_print.scss +74 -0
  61. package/src/scss/components/_progress.scss +32 -0
  62. package/src/scss/components/_reset.scss +365 -0
  63. package/src/scss/components/_rtl.scss +213 -0
  64. package/src/scss/components/_table-interactive.scss +110 -0
  65. package/src/scss/components/_tables.scss +52 -0
  66. package/src/scss/components/_themes.scss +6 -0
  67. package/src/scss/components/_tooltip.scss +35 -0
  68. package/src/scss/components/_typography.scss +565 -0
  69. package/src/scss/components/_upload.scss +19 -0
  70. package/src/scss/components/_variables.scss +129 -0
  71. package/src/scss/ply-core.scss +1 -0
  72. package/src/scss/ply-essentials.scss +15 -0
  73. package/src/scss/ply-helpers.scss +11 -0
  74. package/src/scss/ply-iso.scss +1 -0
  75. package/src/scss/styles.scss +9 -0
@@ -0,0 +1,452 @@
1
+ @use "sass:color";
2
+ @use "colors";
3
+ @use "mixins";
4
+ @use "variables";
5
+
6
+ /* =Buttons
7
+ -----------------------------------------------------------------------------*/
8
+ .btn,
9
+ input[type="submit"].btn,
10
+ input[type="button"].btn,
11
+ input[type="reset"].btn,
12
+ button.btn {
13
+ transition: all 150ms ease-in-out, transform 50ms ease, background 150ms ease-in-out;
14
+
15
+ display: inline-block;
16
+ vertical-align: top;
17
+
18
+ font-family: var(--ply-font-body, #{variables.$font-family-controls});
19
+ font-size: 1em;
20
+ font-weight: 400;
21
+
22
+ line-height: variables.$base-line;
23
+
24
+ text-align: center;
25
+ text-decoration: none;
26
+ color: var(--ply-btn-secondary-color, var(--ply-color-text-inverse, #fff));
27
+
28
+ appearance: none;
29
+
30
+ outline: none;
31
+ margin: 0;
32
+ border: none;
33
+ border-radius: var(--ply-btn-border-radius, #{variables.$button-radius});
34
+ box-shadow: none;
35
+ cursor: pointer;
36
+ background: var(--ply-btn-secondary-bg, #393939);
37
+ padding: variables.$padding-btn;
38
+
39
+ &:hover,
40
+ &:active,
41
+ &:focus-visible {
42
+ color: var(--ply-btn-secondary-color, var(--ply-color-text-inverse, #fff));
43
+ background: var(--ply-btn-secondary-bg-hover, #303030);
44
+ }
45
+
46
+ &:active {
47
+ background: var(--ply-btn-secondary-bg-active, #2b2b2b);
48
+ }
49
+
50
+ &:hover {
51
+ transform: translateY(0) scale(1.05, 1.05);
52
+ }
53
+
54
+ &:focus-visible {
55
+ outline: 2px solid var(--ply-color-accent, #{colors.$color-blue});
56
+ outline-offset: 2px;
57
+ }
58
+
59
+ &:active {
60
+ transform: translateY(0) scale(.95, .95);
61
+ }
62
+
63
+ &[class*='unit-'] {
64
+ margin: auto variables.$grid-gutter-width;
65
+ }
66
+ }
67
+
68
+ .btn::-moz-focus-inner {
69
+ border: 0;
70
+ padding: 0;
71
+ }
72
+
73
+ .btn-lg,
74
+ input[type="submit"].btn-lg,
75
+ input[type="button"].btn-lg,
76
+ input[type="reset"].btn-lg,
77
+ button.btn-lg {
78
+ font-size: variables.$font-size-big;
79
+ padding: 0.875rem 2rem;
80
+ }
81
+
82
+ .btn-sm,
83
+ input[type="submit"].btn-sm,
84
+ input[type="button"].btn-sm,
85
+ input[type="reset"].btn-sm,
86
+ button.btn-sm {
87
+ font-size: variables.$font-size-small;
88
+ padding: 0.375rem 1rem;
89
+ }
90
+
91
+ .btn-xs,
92
+ input[type="submit"].btn-xs,
93
+ input[type="button"].btn-xs,
94
+ input[type="reset"].btn-xs,
95
+ button.btn-xs {
96
+ font-size: variables.$font-size-smaller;
97
+ padding: 0.25rem 0.75rem;
98
+ vertical-align: baseline;
99
+ }
100
+
101
+ // Primary — themed via --ply-btn-default-bg (blue by default)
102
+ .btn-primary,
103
+ input[type="submit"].btn-primary,
104
+ input[type="button"].btn-primary,
105
+ input[type="reset"].btn-primary,
106
+ button.btn-primary {
107
+ background: var(--ply-btn-default-bg);
108
+ color: var(--ply-btn-default-color, var(--ply-color-text-inverse, #fff));
109
+
110
+ &:hover,
111
+ &:active,
112
+ &:focus-visible {
113
+ color: var(--ply-btn-default-color, var(--ply-color-text-inverse, #fff));
114
+ }
115
+ &:hover { background: var(--ply-btn-default-bg-hover); }
116
+ &:active { background: var(--ply-btn-default-bg-active); }
117
+ }
118
+
119
+ // Secondary — themed via --ply-btn-secondary-bg (dark gray by default)
120
+ .btn-secondary,
121
+ input[type="submit"].btn-secondary,
122
+ input[type="button"].btn-secondary,
123
+ input[type="reset"].btn-secondary,
124
+ button.btn-secondary {
125
+ background: var(--ply-btn-secondary-bg, #393939);
126
+ color: var(--ply-btn-secondary-color, var(--ply-color-text-inverse, #fff));
127
+
128
+ &:hover,
129
+ &:active,
130
+ &:focus-visible {
131
+ color: var(--ply-btn-secondary-color, var(--ply-color-text-inverse, #fff));
132
+ }
133
+ &:hover { background: var(--ply-btn-secondary-bg-hover, #303030); }
134
+ &:active { background: var(--ply-btn-secondary-bg-active, #2b2b2b); }
135
+ }
136
+
137
+ .btn-outline,
138
+ input[type="submit"].btn-outline,
139
+ input[type="button"].btn-outline,
140
+ input[type="reset"].btn-outline,
141
+ button.btn-outline {
142
+ background: none;
143
+ padding: variables.$padding-btn-outline;
144
+ border: 1px solid var(--ply-color-body, colors.$color-black);
145
+ color: var(--ply-color-body, colors.$color-black);
146
+
147
+ &:hover,
148
+ &:active,
149
+ &:focus-visible {
150
+ background: var(--ply-color-body, colors.$color-black);
151
+ border-color: var(--ply-color-body, colors.$color-black);
152
+ color: var(--ply-color-text-inverse, #fff);
153
+ }
154
+
155
+ &:focus-visible {
156
+ outline: 2px solid var(--ply-color-accent, #{colors.$color-blue});
157
+ outline-offset: 2px;
158
+ }
159
+ }
160
+
161
+ .btn-outline.btn-active {
162
+ padding: variables.$padding-btn;
163
+ }
164
+
165
+ .btn-outline.bold {
166
+ border-width: 2px;
167
+ padding: variables.$padding-btn-outline-bold;
168
+ }
169
+
170
+ // Ghost — transparent, no border, subtle hover background
171
+ .btn-ghost,
172
+ input[type="submit"].btn-ghost,
173
+ input[type="button"].btn-ghost,
174
+ input[type="reset"].btn-ghost,
175
+ button.btn-ghost {
176
+ background: transparent;
177
+ color: var(--ply-btn-default-bg);
178
+ border: none;
179
+
180
+ &:hover,
181
+ &:active,
182
+ &:focus-visible {
183
+ background: var(--ply-bg-muted, rgba(128, 128, 128, 0.1));
184
+ color: var(--ply-btn-default-bg);
185
+ }
186
+
187
+ &:focus-visible {
188
+ outline: 2px solid var(--ply-color-accent, #{colors.$color-blue});
189
+ outline-offset: 2px;
190
+ }
191
+ }
192
+
193
+ // Primary outline — border + text from primary color, transparent bg
194
+ .btn-primary-outline,
195
+ input[type="submit"].btn-primary-outline,
196
+ input[type="button"].btn-primary-outline,
197
+ input[type="reset"].btn-primary-outline,
198
+ button.btn-primary-outline {
199
+ background: transparent;
200
+ padding: variables.$padding-btn-outline;
201
+ border: 1px solid var(--ply-btn-default-bg);
202
+ color: var(--ply-btn-default-bg);
203
+
204
+ &:hover,
205
+ &:active,
206
+ &:focus-visible {
207
+ background: var(--ply-btn-default-bg);
208
+ border-color: var(--ply-btn-default-bg);
209
+ color: var(--ply-btn-default-color, var(--ply-color-text-inverse, #fff));
210
+ }
211
+
212
+ &:focus-visible {
213
+ outline: 2px solid var(--ply-color-accent, #{colors.$color-blue});
214
+ outline-offset: 2px;
215
+ }
216
+ }
217
+
218
+ // Secondary outline — border + text from secondary color, transparent bg
219
+ .btn-secondary-outline,
220
+ input[type="submit"].btn-secondary-outline,
221
+ input[type="button"].btn-secondary-outline,
222
+ input[type="reset"].btn-secondary-outline,
223
+ button.btn-secondary-outline {
224
+ background: transparent;
225
+ padding: variables.$padding-btn-outline;
226
+ border: 1px solid var(--ply-color-muted, #767676);
227
+ color: var(--ply-color-muted, #767676);
228
+
229
+ &:hover,
230
+ &:active,
231
+ &:focus-visible {
232
+ background: var(--ply-btn-secondary-bg, #393939);
233
+ border-color: var(--ply-btn-secondary-bg, #393939);
234
+ color: var(--ply-btn-secondary-color, var(--ply-color-text-inverse, #fff));
235
+ }
236
+
237
+ &:focus-visible {
238
+ outline: 2px solid var(--ply-color-accent, #{colors.$color-blue});
239
+ outline-offset: 2px;
240
+ }
241
+ }
242
+
243
+ // Icon-only — equal padding, square aspect for buttons with just an icon
244
+ .btn-icon,
245
+ input[type="submit"].btn-icon,
246
+ input[type="button"].btn-icon,
247
+ input[type="reset"].btn-icon,
248
+ button.btn-icon {
249
+ padding: 0.375rem;
250
+ line-height: 1;
251
+ display: inline-flex;
252
+ align-items: center;
253
+ justify-content: center;
254
+ }
255
+
256
+ .btn-active,
257
+ .btn[disabled],
258
+ .btn-disabled {
259
+ background: var(--ply-bg-muted, colors.$color-gray-dark);
260
+ color: var(--ply-color-muted, #6f6f6f);
261
+ cursor: default;
262
+
263
+ &:hover {
264
+ color: var(--ply-color-muted, #6f6f6f);
265
+ background: var(--ply-bg-muted, colors.$color-gray-dark);
266
+ transform: none;
267
+ }
268
+ }
269
+
270
+ .btn-active {
271
+ box-shadow: 0 1px 3px rgba(0, 0, 0, .4) inset;
272
+ }
273
+
274
+ .btn-outline.btn[disabled],
275
+ .btn-outline.btn-disabled {
276
+ background: none;
277
+ box-shadow: none;
278
+ color: var(--ply-color-muted, #6f6f6f);
279
+ border: 1px solid var(--ply-border-color, #e0e0e0);
280
+ }
281
+
282
+ .btn-outline.btn-active {
283
+ background: none;
284
+ color: var(--ply-color-secondary, #525252);
285
+ border: none;
286
+ box-shadow: 0 1px 3px rgba(0, 0, 0, .2) inset;
287
+ }
288
+
289
+ .btn[disabled],
290
+ .btn-disabled {
291
+ cursor: default;
292
+ box-shadow: none;
293
+ }
294
+
295
+ .btn-straight,
296
+ .btn-square,
297
+ input[type="submit"].btn-straight,
298
+ input[type="button"].btn-straight,
299
+ input[type="reset"].btn-straight,
300
+ button.btn-straight,
301
+ input[type="submit"].btn-square,
302
+ input[type="button"].btn-square,
303
+ input[type="reset"].btn-square,
304
+ button.btn-square {
305
+ border-radius: 0;
306
+ }
307
+
308
+ // Static color buttons — hardcoded, immune to theming
309
+ .btn-blue,
310
+ input[type="submit"].btn-blue,
311
+ input[type="button"].btn-blue,
312
+ input[type="reset"].btn-blue,
313
+ button.btn-blue {
314
+ background: #0f62fe; color: #fff;
315
+ &:hover, &:active, &:focus-visible { color: #fff; }
316
+ &:hover { background: #0043ce; }
317
+ &:active { background: #002d9c; }
318
+ }
319
+
320
+ .btn-red,
321
+ input[type="submit"].btn-red,
322
+ input[type="button"].btn-red,
323
+ input[type="reset"].btn-red,
324
+ button.btn-red {
325
+ background: #da1e28; color: #fff;
326
+ &:hover, &:active, &:focus-visible { color: #fff; }
327
+ &:hover { background: #ba1b23; }
328
+ &:active { background: #750e13; }
329
+ }
330
+
331
+ .btn-green,
332
+ input[type="submit"].btn-green,
333
+ input[type="button"].btn-green,
334
+ input[type="reset"].btn-green,
335
+ button.btn-green {
336
+ background: #198038; color: #fff;
337
+ &:hover, &:active, &:focus-visible { color: #fff; }
338
+ &:hover { background: #0e6027; }
339
+ &:active { background: #044317; }
340
+ }
341
+
342
+ .btn-yellow,
343
+ input[type="submit"].btn-yellow,
344
+ input[type="button"].btn-yellow,
345
+ input[type="reset"].btn-yellow,
346
+ button.btn-yellow {
347
+ background: #f1c21b; color: #000;
348
+ &:hover, &:active, &:focus-visible { color: #000; }
349
+ &:hover { background: #d2a106; }
350
+ &:active { background: #b28600; }
351
+ }
352
+
353
+ // Static color buttons (don't change between themes)
354
+ .btn-black,
355
+ input[type="submit"].btn-black,
356
+ input[type="button"].btn-black,
357
+ input[type="reset"].btn-black,
358
+ button.btn-black {
359
+ @include mixins.create-button(colors.$color-black, colors.$color-black-light, #fff, .7);
360
+ }
361
+
362
+ .btn-white,
363
+ input[type="submit"].btn-white,
364
+ input[type="button"].btn-white,
365
+ input[type="reset"].btn-white,
366
+ button.btn-white {
367
+ @include mixins.create-button(colors.$color-white, color.adjust(#fff, $lightness: -7%), #000, 1);
368
+ }
369
+
370
+ .btn-white,
371
+ input[type="submit"].btn-white,
372
+ input[type="button"].btn-white,
373
+ input[type="reset"].btn-white,
374
+ button.btn-white {
375
+ &.btn-outline {
376
+ border: 1px solid var(--ply-color-body, colors.$color-black);
377
+ color: var(--ply-color-body, colors.$color-black);
378
+ }
379
+
380
+ &.btn-outline.btn-active {
381
+ box-shadow: none;
382
+ border: 1px solid rgba(0, 0, 0, .3);
383
+ padding: variables.$padding-btn-outline;
384
+ }
385
+ }
386
+
387
+ /*
388
+ Buttons Group
389
+ */
390
+ .btn-single,
391
+ .btn-group {
392
+ display: flex;
393
+ flex-flow: row wrap;
394
+ gap: variables.$grid-gutter-width;
395
+
396
+ &.align-right {
397
+ justify-content: flex-end;
398
+ }
399
+
400
+ &.align-left {
401
+ justify-content: flex-start;
402
+ }
403
+
404
+ &.align-center {
405
+ justify-content: center;
406
+ }
407
+
408
+ &.fill-width {
409
+ .btn {
410
+ flex: 1;
411
+ }
412
+ }
413
+
414
+ .btn.btn-outline {
415
+ &:not(:last-child) {
416
+ margin-right: -1px;
417
+ }
418
+ }
419
+
420
+ .btn,
421
+ input {
422
+ margin-left: 0;
423
+ margin-right: 1px;
424
+
425
+ &:last-child {
426
+ margin-right: 0;
427
+ }
428
+ }
429
+
430
+ .btn {
431
+ border-radius: 0;
432
+
433
+ &:first-child {
434
+ border-radius: (variables.$border-radius * 0.5) 0 0 (variables.$border-radius * 0.5);
435
+ }
436
+ &:last-child {
437
+ border-radius: 0 (variables.$border-radius * 0.5) (variables.$border-radius * 0.5) 0;
438
+ }
439
+ }
440
+
441
+ &.rounded {
442
+ .btn,
443
+ .input-search {
444
+ &:first-child {
445
+ border-radius: (variables.$border-radius * 2) 0 0 (variables.$border-radius * 2);
446
+ }
447
+ &:last-child {
448
+ border-radius: 0 (variables.$border-radius * 2) (variables.$border-radius * 2) 0;
449
+ }
450
+ }
451
+ }
452
+ }