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,45 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Login - Ply</title>
7
+ <link rel="stylesheet" href="../dist/css/ply.min.css">
8
+ <style>
9
+ body {
10
+ display: flex;
11
+ align-items: center;
12
+ min-height: 100vh;
13
+ }
14
+ .login-card {
15
+ border: 1px solid var(--ply-border-color, #e0e0e0);
16
+ border-radius: 4px;
17
+ padding: 2rem;
18
+ }
19
+ </style>
20
+ </head>
21
+ <body>
22
+ <div class="units-container">
23
+ <div class="units-row centered-content">
24
+ <div class="unit-33 tablet-unit-66 phone-unit-100">
25
+ <div class="login-card">
26
+ <h1>Sign In</h1>
27
+ <form class="form" action="#" method="post" aria-label="Login form">
28
+ <label for="login-email">
29
+ Email
30
+ <input type="email" id="login-email" name="email" placeholder="you@example.com" required aria-required="true" autocomplete="email">
31
+ </label>
32
+
33
+ <label for="login-password">
34
+ Password
35
+ <input type="password" id="login-password" name="password" placeholder="Enter your password" required aria-required="true" autocomplete="current-password">
36
+ </label>
37
+
38
+ <button type="submit" class="btn btn-blue" style="width: 100%;">Sign In</button>
39
+ </form>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </body>
45
+ </html>
@@ -0,0 +1,39 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Navbar Page - Ply</title>
7
+ <link rel="stylesheet" href="../dist/css/ply.min.css">
8
+ </head>
9
+ <body>
10
+ <a href="#main" class="skip-link">Skip to main content</a>
11
+ <nav class="navbar" aria-label="Main navigation">
12
+ <ul role="menubar">
13
+ <li class="active" role="none"><a href="#home" role="menuitem" aria-current="page">Home</a></li>
14
+ <li role="none"><a href="#about" role="menuitem">About</a></li>
15
+ <li role="none"><a href="#services" role="menuitem">Services</a></li>
16
+ <li role="none"><a href="#contact" role="menuitem">Contact</a></li>
17
+ </ul>
18
+ </nav>
19
+
20
+ <div class="units-container">
21
+ <main id="main">
22
+ <div class="units-row">
23
+ <div class="unit-100">
24
+ <h1>Navbar Page</h1>
25
+ <p>
26
+ The <code>.navbar</code> component provides a horizontal navigation bar
27
+ with a clean border-bottom accent. List items with the <code>.active</code>
28
+ class receive a bottom-border indicator showing the current page.
29
+ </p>
30
+ <p>
31
+ Pair the navbar with a <code>.units-container</code> below to constrain
32
+ your page content to the grid width.
33
+ </p>
34
+ </div>
35
+ </div>
36
+ </main>
37
+ </div>
38
+ </body>
39
+ </html>
@@ -0,0 +1,63 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Notifications - Ply</title>
7
+ <link rel="stylesheet" href="../dist/css/ply.min.css">
8
+ </head>
9
+ <body>
10
+ <div class="units-container">
11
+ <h1>Notification Alerts</h1>
12
+
13
+ <div role="alert" class="alert">
14
+ <div class="alert-content">
15
+ <strong>Default alert.</strong> This is a neutral notification with no color variant applied.
16
+ </div>
17
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
18
+ </div>
19
+
20
+ <div role="alert" class="alert alert-blue">
21
+ <div class="alert-content">
22
+ <strong>Informational.</strong> This blue alert is used for general information messages.
23
+ </div>
24
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
25
+ </div>
26
+
27
+ <div role="alert" class="alert alert-red">
28
+ <div class="alert-content">
29
+ <strong>Error.</strong> This red alert indicates a problem that needs attention.
30
+ </div>
31
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
32
+ </div>
33
+
34
+ <div role="alert" class="alert alert-green">
35
+ <div class="alert-content">
36
+ <strong>Success.</strong> This green alert confirms an action completed successfully.
37
+ </div>
38
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
39
+ </div>
40
+
41
+ <div role="alert" class="alert alert-yellow">
42
+ <div class="alert-content">
43
+ <strong>Warning.</strong> This yellow alert highlights something that may need review.
44
+ </div>
45
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
46
+ </div>
47
+
48
+ <div role="alert" class="alert alert-outline alert-blue">
49
+ <div class="alert-content">
50
+ <strong>Outline variant.</strong> An outlined alert with a full border and tinted background.
51
+ </div>
52
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
53
+ </div>
54
+
55
+ <div role="alert" class="alert alert-ghost alert-blue">
56
+ <div class="alert-content">
57
+ <strong>Ghost variant.</strong> A ghost alert with a transparent background and border only.
58
+ </div>
59
+ <button type="button" class="alert-dismiss" aria-label="Dismiss notification"></button>
60
+ </div>
61
+ </div>
62
+ </body>
63
+ </html>
@@ -0,0 +1,95 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Pricing Cards - Ply</title>
7
+ <link rel="stylesheet" href="../dist/css/ply.min.css">
8
+ <style>
9
+ .pricing-card {
10
+ border: 1px solid var(--ply-border-color, #e0e0e0);
11
+ border-radius: 4px;
12
+ padding: 2rem;
13
+ text-align: center;
14
+ }
15
+ .pricing-card .price {
16
+ font-size: 2.5rem;
17
+ font-weight: 700;
18
+ line-height: 1.2;
19
+ margin-bottom: 0.5rem;
20
+ }
21
+ .pricing-card .price span {
22
+ font-size: 1rem;
23
+ font-weight: 400;
24
+ color: var(--ply-color-muted, #6f6f6f);
25
+ }
26
+ .pricing-card ul {
27
+ list-style: none;
28
+ padding: 0;
29
+ margin: 1.5rem 0;
30
+ text-align: left;
31
+ }
32
+ .pricing-card ul li {
33
+ padding: 0.4rem 0;
34
+ border-bottom: 1px solid var(--ply-border-color, #e0e0e0);
35
+ }
36
+ .pricing-card ul li:last-child {
37
+ border-bottom: none;
38
+ }
39
+ </style>
40
+ </head>
41
+ <body>
42
+ <div class="units-container">
43
+ <div class="units-row" style="text-align: center; margin-bottom: 0;">
44
+ <div class="unit-100">
45
+ <h1>Choose Your Plan</h1>
46
+ <p>Simple, transparent pricing for teams of every size.</p>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="units-row">
51
+ <div class="unit-33 tablet-unit-100">
52
+ <article class="pricing-card" aria-labelledby="plan-starter">
53
+ <h3 id="plan-starter">Starter</h3>
54
+ <div class="price">$9 <span>/ month</span></div>
55
+ <ul>
56
+ <li>5 Projects</li>
57
+ <li>10 GB Storage</li>
58
+ <li>Email Support</li>
59
+ <li>Basic Analytics</li>
60
+ </ul>
61
+ <a href="#starter" class="btn btn-outline" role="button">Get Started</a>
62
+ </article>
63
+ </div>
64
+
65
+ <div class="unit-33 tablet-unit-100">
66
+ <article class="pricing-card" aria-labelledby="plan-pro">
67
+ <h3 id="plan-pro">Pro</h3>
68
+ <div class="price">$29 <span>/ month</span></div>
69
+ <ul>
70
+ <li>Unlimited Projects</li>
71
+ <li>100 GB Storage</li>
72
+ <li>Priority Support</li>
73
+ <li>Advanced Analytics</li>
74
+ </ul>
75
+ <a href="#pro" class="btn btn-blue" role="button">Get Started</a>
76
+ </article>
77
+ </div>
78
+
79
+ <div class="unit-33 tablet-unit-100">
80
+ <article class="pricing-card" aria-labelledby="plan-enterprise">
81
+ <h3 id="plan-enterprise">Enterprise</h3>
82
+ <div class="price">$99 <span>/ month</span></div>
83
+ <ul>
84
+ <li>Unlimited Everything</li>
85
+ <li>1 TB Storage</li>
86
+ <li>Dedicated Account Manager</li>
87
+ <li>Custom Integrations</li>
88
+ </ul>
89
+ <a href="#enterprise" class="btn btn-outline" role="button">Contact Sales</a>
90
+ </article>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </body>
95
+ </html>
@@ -0,0 +1,98 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Responsive Header — ply</title>
7
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ply-css@1/dist/css/ply.min.css">
8
+ <style>
9
+ /* Hamburger toggle — only needed for the <details> mobile menu */
10
+ nav.navbar details > ul {
11
+ position: absolute;
12
+ left: 0;
13
+ right: 0;
14
+ background: var(--ply-bg-surface);
15
+ border-bottom: 1px solid var(--ply-border-color);
16
+ padding: 0.5rem 0;
17
+ z-index: 99;
18
+ }
19
+ nav.navbar details > ul li {
20
+ display: block;
21
+ }
22
+ nav.navbar details > ul li a {
23
+ display: block;
24
+ padding: 0.5rem 1rem;
25
+ }
26
+ nav.navbar details summary {
27
+ cursor: pointer;
28
+ padding: 0.5rem 1rem;
29
+ list-style: none;
30
+ }
31
+ nav.navbar details summary::-webkit-details-marker { display: none; }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <!-- Skip link — first focusable element -->
36
+ <a href="#main" class="skip-link">Skip to main content</a>
37
+
38
+ <!-- Sticky responsive header -->
39
+ <header class="sticky" style="top: 0; z-index: 100;">
40
+ <nav class="navbar" aria-label="Main navigation" style="position: relative;">
41
+ <!-- Desktop nav — hidden on mobile -->
42
+ <ul class="phone-hide">
43
+ <li class="active"><a href="#" aria-current="page">Home</a></li>
44
+ <li><a href="#">About</a></li>
45
+ <li><a href="#">Services</a></li>
46
+ <li><a href="#">Pricing</a></li>
47
+ <li><a href="#">Contact</a></li>
48
+ </ul>
49
+ <!-- Mobile hamburger — hidden on tablet and desktop -->
50
+ <details class="tablet-hide desktop-hide">
51
+ <summary aria-label="Menu">&#9776; Menu</summary>
52
+ <ul>
53
+ <li class="active"><a href="#" aria-current="page">Home</a></li>
54
+ <li><a href="#">About</a></li>
55
+ <li><a href="#">Services</a></li>
56
+ <li><a href="#">Pricing</a></li>
57
+ <li><a href="#">Contact</a></li>
58
+ </ul>
59
+ </details>
60
+ </nav>
61
+ </header>
62
+
63
+ <!-- Main content -->
64
+ <main id="main">
65
+ <div class="units-container">
66
+ <h1>Responsive Header Demo</h1>
67
+ <p>Resize the browser to see the navbar collapse into a hamburger menu on small screens. The header stays sticky on scroll.</p>
68
+
69
+ <h2>How It Works</h2>
70
+ <ul>
71
+ <li><strong>Desktop (≥ 768px):</strong> Standard horizontal navbar with ply's default styling.</li>
72
+ <li><strong>Mobile (≤ 767px):</strong> A <code>&lt;details&gt;</code>/<code>&lt;summary&gt;</code> element acts as a CSS-only hamburger toggle. No JavaScript needed.</li>
73
+ <li><strong>Sticky:</strong> The <code>sticky</code> class with <code>top: 0</code> keeps the header pinned on scroll.</li>
74
+ <li><strong>Accessible:</strong> <code>&lt;details&gt;</code> is natively keyboard-accessible (Enter/Space toggles). Skip link is provided. <code>aria-current="page"</code> marks the active page.</li>
75
+ </ul>
76
+
77
+ <!-- Spacer content to demonstrate sticky behavior -->
78
+ <div class="units-row margin-top-extra">
79
+ <div class="unit-50 tablet-unit-100">
80
+ <div class="border border-radius padding">
81
+ <h3>Feature One</h3>
82
+ <p>Scroll down to see the sticky header in action. The navigation stays visible at the top of the viewport.</p>
83
+ </div>
84
+ </div>
85
+ <div class="unit-50 tablet-unit-100">
86
+ <div class="border border-radius padding">
87
+ <h3>Feature Two</h3>
88
+ <p>The mobile menu uses native HTML disclosure — no JavaScript framework required, works with ply out of the box.</p>
89
+ </div>
90
+ </div>
91
+ </div>
92
+
93
+ <div style="height: 120vh;"></div>
94
+ <p>End of page.</p>
95
+ </div>
96
+ </main>
97
+ </body>
98
+ </html>