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,592 @@
1
+ @use "colors";
2
+ @use "mixins";
3
+ @use "variables";
4
+
5
+ /* =Navs
6
+ -----------------------------------------------------------------------------*/
7
+ // Nav element reset
8
+ nav {
9
+ ul {
10
+ list-style: none;
11
+ margin: 0;
12
+ }
13
+ }
14
+
15
+
16
+ /* NavBar */
17
+ .navbar {
18
+ background: var(--ply-nav-bg);
19
+ border-bottom: 1px solid var(--ply-border-color);
20
+ box-sizing: border-box;
21
+
22
+ > ul {
23
+ list-style: none;
24
+ margin: 0;
25
+ display: flex;
26
+ flex: 0 1 auto;
27
+ flex-flow: row nowrap;
28
+ align-items: stretch;
29
+ gap: 0;
30
+ }
31
+
32
+ a,
33
+ > span {
34
+ box-sizing: border-box;
35
+ color: var(--ply-nav-color);
36
+ display: block;
37
+ font-weight: variables.$font-weight-medium;
38
+ padding: 0.75rem 1.25rem;
39
+ text-decoration: none;
40
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
41
+ border-bottom: 2px solid transparent;
42
+ margin-bottom: -1px;
43
+ white-space: nowrap;
44
+
45
+ &:focus-visible {
46
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
47
+ outline-offset: -2px;
48
+ }
49
+ }
50
+
51
+ li {
52
+ box-sizing: border-box;
53
+
54
+ margin-right: 0;
55
+
56
+ &:hover {
57
+ a {
58
+ background: var(--ply-nav-hover);
59
+ color: var(--ply-nav-color);
60
+ text-decoration: none;
61
+ }
62
+ }
63
+
64
+ &.on a,
65
+ &.on span,
66
+ &.active a,
67
+ &.active span {
68
+ border-bottom-color: var(--ply-nav-border);
69
+ background: var(--ply-nav-active-bg, transparent);
70
+ text-decoration: none;
71
+ cursor: default;
72
+ color: var(--ply-nav-color);
73
+ }
74
+ }
75
+
76
+ &.navbar-centered {
77
+ > ul {
78
+ justify-content: center;
79
+ }
80
+ }
81
+
82
+ &.navbar-left {
83
+ > ul {
84
+ justify-content: flex-start;
85
+ }
86
+ }
87
+
88
+ &.navbar-right {
89
+ > ul {
90
+ justify-content: flex-end;
91
+ }
92
+ }
93
+
94
+ // Border variants
95
+ &.navbar-thick {
96
+ border-bottom-width: 2px;
97
+
98
+ a, > span {
99
+ margin-bottom: -2px;
100
+ }
101
+ }
102
+
103
+ &.navbar-borderless {
104
+ border-bottom: none;
105
+
106
+ a, > span {
107
+ margin-bottom: 0;
108
+ border-bottom: none;
109
+ }
110
+
111
+ li {
112
+ &.on a, &.on span,
113
+ &.active a, &.active span {
114
+ background: var(--ply-nav-hover);
115
+ border-bottom: none;
116
+ }
117
+ }
118
+ }
119
+
120
+ &.navbar-border-blue { border-bottom-color: var(--ply-color-link, #0f62fe); }
121
+ &.navbar-border-green { border-bottom-color: #198038; }
122
+ &.navbar-border-red { border-bottom-color: #da1e28; }
123
+ &.navbar-border-yellow { border-bottom-color: #f1c21b; }
124
+
125
+ // Vertical variant
126
+ &.navbar-vertical {
127
+ border-bottom: none;
128
+ border-left: 1px solid var(--ply-border-color);
129
+
130
+ > ul {
131
+ display: flex;
132
+ flex-direction: column;
133
+ flex-wrap: nowrap;
134
+ width: 100%;
135
+ }
136
+
137
+ a, > span {
138
+ border-bottom: none;
139
+ margin-bottom: 0;
140
+ border-left: 2px solid transparent;
141
+ margin-left: -1px;
142
+ }
143
+
144
+ li {
145
+ margin-right: 0;
146
+
147
+ &.on a, &.active a,
148
+ &.on span, &.active span {
149
+ background: var(--ply-nav-hover);
150
+ border-bottom: none;
151
+ border-left-color: var(--ply-nav-border);
152
+ text-decoration: none;
153
+ cursor: default;
154
+ }
155
+ }
156
+
157
+ &.navbar-thick {
158
+ border-left-width: 2px;
159
+
160
+ a, > span {
161
+ margin-left: -2px;
162
+ }
163
+ }
164
+ }
165
+ }
166
+
167
+ .navigation-toggle {
168
+ box-sizing: border-box;
169
+
170
+ background-color: var(--ply-nav-bg);
171
+ border: 1px solid var(--ply-border-color);
172
+ color: var(--ply-nav-color);
173
+ display: inline-block;
174
+ text-transform: uppercase;
175
+ letter-spacing: 0.08em;
176
+ font-size: variables.$font-size-sm;
177
+ position: relative;
178
+ transition: background 0.15s ease;
179
+
180
+ &:hover {
181
+ background-color: var(--ply-nav-hover);
182
+ }
183
+
184
+ &:after {
185
+ position: absolute;
186
+ z-index: 1;
187
+ top: 50%;
188
+ margin-top: -12px;
189
+ left: 10px;
190
+ content: "\2630";
191
+ font-size: 24px;
192
+ line-height: 1;
193
+ }
194
+
195
+ // Border variants — match navbar
196
+ &.navbar-thick {
197
+ border-width: 2px;
198
+ }
199
+
200
+ &.navbar-borderless {
201
+ border: none;
202
+ }
203
+
204
+ &.navbar-border-blue { border-color: var(--ply-color-link, #0f62fe); }
205
+ &.navbar-border-green { border-color: #198038; }
206
+ &.navbar-border-red { border-color: #da1e28; }
207
+ &.navbar-border-yellow { border-color: #f1c21b; }
208
+
209
+ &.navigation-toggle-solid {
210
+ background-color: var(--ply-nav-border);
211
+ border: 1px solid var(--ply-nav-border);
212
+ color: var(--ply-nav-bg);
213
+
214
+ &:hover {
215
+ opacity: 0.85;
216
+ }
217
+ }
218
+
219
+ &.navigation-toggle-show {
220
+ margin-bottom: 0;
221
+ }
222
+
223
+ & span {
224
+ position: relative;
225
+ z-index: 2;
226
+ cursor: pointer;
227
+ display: block;
228
+ padding: 10px 20px 10px 40px;
229
+ }
230
+ }
231
+
232
+ .navigation-fixed {
233
+ position: fixed;
234
+ top: 0;
235
+ left: 0;
236
+ z-index: 101;
237
+ }
238
+
239
+ /* Pills — Swiss/Modernist */
240
+ .navbar-pills {
241
+ ul {
242
+ display: flex;
243
+ flex-flow: row wrap;
244
+ list-style: none;
245
+ margin: 0;
246
+ gap: 2px;
247
+ }
248
+
249
+ a,
250
+ span {
251
+ display: block;
252
+ padding: 0.625rem 1rem;
253
+ text-decoration: none;
254
+ font-size: variables.$font-size-sm;
255
+ color: var(--ply-nav-color);
256
+ transition: background 0.15s ease;
257
+ }
258
+
259
+ a:hover {
260
+ color: var(--ply-nav-color);
261
+ background: var(--ply-nav-hover);
262
+ }
263
+
264
+ a:focus-visible {
265
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
266
+ outline-offset: 2px;
267
+ }
268
+
269
+ li.active a,
270
+ li.active span {
271
+ text-decoration: none;
272
+ cursor: default;
273
+ color: var(--ply-nav-active-color);
274
+ background: var(--ply-bg-muted);
275
+ }
276
+ }
277
+
278
+ /* Stacked — Swiss/Modernist */
279
+ .nav-stacked {
280
+ ul {
281
+ list-style: none;
282
+ margin: 0;
283
+ }
284
+
285
+ li {
286
+ margin-bottom: 0;
287
+ }
288
+
289
+ a,
290
+ span {
291
+ display: block;
292
+ padding: 0.25rem 0.75rem;
293
+ font-size: variables.$font-size-sm;
294
+ border-radius: var(--ply-nav-stacked-radius, 0.25rem);
295
+ }
296
+
297
+ & a {
298
+ color: var(--ply-nav-color);
299
+ text-decoration: none;
300
+ transition: background 0.15s ease, color 0.15s ease;
301
+
302
+ &:hover {
303
+ color: var(--ply-nav-color);
304
+ background: var(--ply-bg-muted);
305
+ }
306
+
307
+ &:focus-visible {
308
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
309
+ outline-offset: 2px;
310
+ }
311
+ }
312
+
313
+ li.active a,
314
+ li.active span {
315
+ border-left: 2px solid var(--ply-btn-default-bg, #0353e9);
316
+ padding-left: calc(0.75rem - 2px);
317
+ text-decoration: none;
318
+ color: var(--ply-nav-active-color);
319
+ }
320
+ }
321
+
322
+ /* Stacked blocked — background fills with bottom borders */
323
+ .nav-stacked-blocked {
324
+ & a,
325
+ & span {
326
+ padding: 0.6rem 0.75rem;
327
+ }
328
+
329
+ & a {
330
+ background: var(--ply-bg-surface-alt);
331
+ border-bottom: 1px solid var(--ply-border-color);
332
+ }
333
+
334
+ li.active a,
335
+ li.active span {
336
+ background: var(--ply-bg-surface);
337
+ border-left: none;
338
+ padding-left: 0.75rem;
339
+ }
340
+ }
341
+
342
+ /* Stats */
343
+ .nav-stats {
344
+ li {
345
+ position: relative;
346
+ }
347
+
348
+ a,
349
+ span {
350
+ padding-right: 50px;
351
+ }
352
+
353
+ sup,
354
+ .badge {
355
+ position: absolute;
356
+ top: 50%;
357
+ right: 0;
358
+ }
359
+
360
+ sup {
361
+ color: var(--ply-color-muted);
362
+ }
363
+
364
+ .badge {
365
+ margin-top: -8px;
366
+ }
367
+ }
368
+
369
+ /* =Tabs — Swiss/Modernist
370
+ -----------------------------------------------------------------------------*/
371
+ .nav-tabs {
372
+ border-bottom: 2px solid var(--ply-nav-border);
373
+ margin-bottom: variables.$base-line;
374
+ @include mixins.clearfix;
375
+
376
+ & ul {
377
+ list-style: none;
378
+ margin: 0;
379
+ }
380
+
381
+ & li {
382
+ float: left;
383
+ margin-right: 0;
384
+ }
385
+
386
+ & a,
387
+ & span {
388
+ display: block;
389
+ line-height: 1;
390
+ padding: variables.$base-line * 0.5 variables.$base-line;
391
+ font-size: variables.$font-size-sm;
392
+ border: none;
393
+ }
394
+
395
+ & a {
396
+ color: var(--ply-color-muted);
397
+ text-decoration: none;
398
+ transition: background 0.15s ease, color 0.15s ease;
399
+
400
+ &:focus,
401
+ &:hover {
402
+ color: var(--ply-nav-color);
403
+ text-decoration: none;
404
+ background-color: var(--ply-nav-hover);
405
+ }
406
+
407
+ &:focus-visible {
408
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
409
+ outline-offset: 2px;
410
+ }
411
+ }
412
+
413
+ & li.active a,
414
+ & span {
415
+ color: var(--ply-nav-color);
416
+ background: var(--ply-bg-surface);
417
+ position: relative;
418
+ border-bottom: 2px solid var(--ply-nav-border);
419
+ bottom: -2px;
420
+ cursor: default;
421
+ text-decoration: none;
422
+ }
423
+ }
424
+
425
+
426
+ /* =Breadcrumbs — Swiss/Modernist
427
+ -----------------------------------------------------------------------------*/
428
+ .breadcrumbs {
429
+ margin-bottom: variables.$base-line;
430
+ @include mixins.clearfix;
431
+
432
+ & ul {
433
+ font-size: variables.$font-size-sm;
434
+ color: var(--ply-color-muted);
435
+ list-style: none;
436
+ margin: 0;
437
+ @include mixins.clearfix;
438
+ }
439
+
440
+ & li {
441
+ float: left;
442
+ margin-right: 5px;
443
+ }
444
+
445
+ & li + li:before {
446
+ content: "/";
447
+ color: var(--ply-color-muted);
448
+ font-size: 12px;
449
+ margin: 0 7px 0 5px;
450
+ position: relative;
451
+ top: -1px;
452
+ }
453
+
454
+ &.breadcrumbs-path li + li:before {
455
+ content: " / ";
456
+ top: 0;
457
+ }
458
+
459
+ & a {
460
+ color: var(--ply-nav-color);
461
+ text-decoration: none;
462
+
463
+ &:hover {
464
+ color: var(--ply-nav-color);
465
+ text-decoration: underline;
466
+ }
467
+
468
+ &:focus-visible {
469
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
470
+ outline-offset: 2px;
471
+ }
472
+ }
473
+
474
+ & li.active a,
475
+ & span,
476
+ & li.active a:hover {
477
+ text-decoration: none;
478
+ cursor: default;
479
+ color: var(--ply-color-muted);
480
+ }
481
+ }
482
+
483
+
484
+
485
+ /* =Pagination — Outlined (default) with solid variant
486
+ -----------------------------------------------------------------------------*/
487
+ .pagination {
488
+ display: flex;
489
+ align-items: center;
490
+ gap: variables.$grid-gutter-width * 0.5;
491
+ margin: 0;
492
+ padding: 0;
493
+ list-style: none;
494
+
495
+ & li {
496
+ margin: 0;
497
+ }
498
+
499
+ & a,
500
+ & span {
501
+ display: inline-flex;
502
+ align-items: center;
503
+ justify-content: center;
504
+ min-width: variables.$base-line * 1.5;
505
+ height: variables.$base-line * 1.5;
506
+ padding: variables.$grid-gutter-width * 0.5 variables.$padding;
507
+ border: 1px solid var(--ply-border-color);
508
+ border-radius: variables.$border-radius;
509
+ background: var(--ply-bg-surface, #fff);
510
+ color: var(--ply-color-body);
511
+ text-decoration: none;
512
+ font-size: variables.$font-size-sm;
513
+ line-height: 1;
514
+ letter-spacing: 0.03em;
515
+ cursor: pointer;
516
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
517
+ }
518
+
519
+ & a:hover {
520
+ background-color: var(--ply-bg-surface-alt);
521
+ border-color: var(--ply-color-secondary);
522
+ text-decoration: none;
523
+ }
524
+
525
+ & a:focus-visible {
526
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
527
+ outline-offset: 2px;
528
+ }
529
+
530
+ & li.active a,
531
+ & li.active a:hover,
532
+ & li.active span {
533
+ background-color: var(--ply-nav-color);
534
+ border-color: var(--ply-nav-color);
535
+ color: var(--ply-bg-surface);
536
+ cursor: default;
537
+ }
538
+
539
+ & li.disabled a,
540
+ & li.disabled span {
541
+ opacity: 0.4;
542
+ cursor: not-allowed;
543
+ pointer-events: none;
544
+ }
545
+
546
+ // Prev/next arrows — ghost by default, fill on hover
547
+ & li:first-child a,
548
+ & li:first-child span,
549
+ & li:last-child a,
550
+ & li:last-child span {
551
+ border-color: transparent;
552
+ background: transparent;
553
+ }
554
+
555
+ & li:first-child a:hover,
556
+ & li:last-child a:hover {
557
+ background-color: var(--ply-bg-surface-alt);
558
+ border-color: transparent;
559
+ }
560
+
561
+ // Disabled arrow — muted color
562
+ & li.disabled:first-child span,
563
+ & li.disabled:last-child span,
564
+ & li.disabled:first-child a,
565
+ & li.disabled:last-child a {
566
+ color: var(--ply-color-muted);
567
+ opacity: 1;
568
+ }
569
+ }
570
+
571
+ /* Solid variant — filled background like the original Swiss style */
572
+ .pagination-solid {
573
+ & a,
574
+ & span {
575
+ border-color: transparent;
576
+ background: transparent;
577
+ }
578
+
579
+ & a:hover {
580
+ background-color: var(--ply-nav-color);
581
+ border-color: transparent;
582
+ color: var(--ply-bg-surface);
583
+ }
584
+
585
+ & li.active a,
586
+ & li.active a:hover,
587
+ & li.active span {
588
+ background-color: var(--ply-nav-color);
589
+ border-color: transparent;
590
+ color: var(--ply-bg-surface);
591
+ }
592
+ }