@lepid-labs/styles 1.0.1 → 1.0.2
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/luminous-precision/base.css +6 -2
- package/luminous-precision/components/icon-button.css +71 -0
- package/luminous-precision/components/layout.css +348 -0
- package/luminous-precision/components/page.css +85 -0
- package/luminous-precision/components/pre.css +75 -0
- package/luminous-precision/components/shell.css +165 -0
- package/luminous-precision/components/table.css +20 -0
- package/luminous-precision/design.md +31 -2
- package/luminous-precision/index.css +4 -0
- package/neon-butterfly/base.css +6 -2
- package/neon-butterfly/components/icon-button.css +66 -0
- package/neon-butterfly/components/layout.css +348 -0
- package/neon-butterfly/components/page.css +85 -0
- package/neon-butterfly/components/pre.css +75 -0
- package/neon-butterfly/components/shell.css +196 -0
- package/neon-butterfly/components/table.css +20 -0
- package/neon-butterfly/design.md +28 -2
- package/neon-butterfly/index.css +4 -0
- package/package.json +1 -1
- package/summer-cloud/base.css +6 -2
- package/summer-cloud/components/icon-button.css +76 -0
- package/summer-cloud/components/layout.css +348 -0
- package/summer-cloud/components/page.css +85 -0
- package/summer-cloud/components/pre.css +74 -0
- package/summer-cloud/components/shell.css +197 -0
- package/summer-cloud/components/table.css +20 -0
- package/summer-cloud/design.md +29 -1
- package/summer-cloud/index.css +4 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/* neon-butterfly — shell chrome: unfilled bars (hairlines over the circuit
|
|
2
|
+
* background), uppercase mono labels under lime "//" headings, the current page in lilac with a pulsing glow border and a
|
|
3
|
+
* neon-lime chevron. Structure is in layout.css. */
|
|
4
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__skip {
|
|
5
|
+
padding: var(--ld-space-2) var(--ld-space-3);
|
|
6
|
+
background: var(--ld-surface);
|
|
7
|
+
border: 1px solid var(--ld-primary-border);
|
|
8
|
+
border-radius: var(--ld-radius);
|
|
9
|
+
color: var(--ld-primary);
|
|
10
|
+
font-size: var(--ld-text-sm);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__header {
|
|
14
|
+
/* no fill: the shell background runs under the bar; the blur keeps
|
|
15
|
+
* content scrolling beneath it legible */
|
|
16
|
+
background: transparent;
|
|
17
|
+
border-bottom: 1px solid var(--ld-border);
|
|
18
|
+
backdrop-filter: blur(var(--ld-blur));
|
|
19
|
+
}
|
|
20
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__toggle {
|
|
21
|
+
background: none;
|
|
22
|
+
border: 1px solid var(--ld-border);
|
|
23
|
+
border-radius: var(--ld-radius);
|
|
24
|
+
color: var(--ld-faint);
|
|
25
|
+
transition: color var(--ld-transition), border-color var(--ld-transition);
|
|
26
|
+
}
|
|
27
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__toggle:hover,
|
|
28
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__toggle:focus-visible {
|
|
29
|
+
color: var(--ld-accent);
|
|
30
|
+
border-color: var(--ld-accent);
|
|
31
|
+
box-shadow: 0 0 8px var(--ld-accent-glow);
|
|
32
|
+
outline: none;
|
|
33
|
+
}
|
|
34
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__brand {
|
|
35
|
+
color: var(--ld-primary);
|
|
36
|
+
font-weight: var(--ld-font-weight-bold);
|
|
37
|
+
text-transform: uppercase;
|
|
38
|
+
letter-spacing: var(--ld-tracking-wide);
|
|
39
|
+
text-shadow: 0 0 10px var(--ld-primary-glow);
|
|
40
|
+
}
|
|
41
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__brand svg,
|
|
42
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__brand img {
|
|
43
|
+
filter: drop-shadow(0 0 6px var(--ld-primary-glow));
|
|
44
|
+
}
|
|
45
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-topnav__item {
|
|
46
|
+
padding: var(--ld-space-2) var(--ld-space-3);
|
|
47
|
+
border: 1px solid transparent;
|
|
48
|
+
border-radius: var(--ld-radius);
|
|
49
|
+
color: var(--ld-faint);
|
|
50
|
+
font-size: 12px;
|
|
51
|
+
font-weight: var(--ld-font-weight-bold);
|
|
52
|
+
text-transform: uppercase;
|
|
53
|
+
letter-spacing: var(--ld-tracking-wide);
|
|
54
|
+
transition: color var(--ld-transition), border-color var(--ld-transition);
|
|
55
|
+
}
|
|
56
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-topnav__item:hover,
|
|
57
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-topnav__item:focus-visible {
|
|
58
|
+
color: var(--ld-on-surface);
|
|
59
|
+
border-color: var(--ld-border);
|
|
60
|
+
outline: none;
|
|
61
|
+
}
|
|
62
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-topnav__item--active,
|
|
63
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-topnav__item[aria-current="page"] {
|
|
64
|
+
color: var(--ld-primary);
|
|
65
|
+
border-color: var(--ld-primary-border);
|
|
66
|
+
text-shadow: 0 0 8px var(--ld-primary-glow);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__nav {
|
|
70
|
+
background: transparent; /* the shell background shows through; a hairline divides */
|
|
71
|
+
border-right: 1px solid var(--ld-border);
|
|
72
|
+
}
|
|
73
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__scrim {
|
|
74
|
+
background: rgba(11, 19, 38, 0.6);
|
|
75
|
+
backdrop-filter: blur(2px);
|
|
76
|
+
}
|
|
77
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__heading {
|
|
78
|
+
color: var(--ld-faint);
|
|
79
|
+
font-size: 11px;
|
|
80
|
+
font-weight: var(--ld-font-weight-bold);
|
|
81
|
+
text-transform: uppercase;
|
|
82
|
+
letter-spacing: var(--ld-tracking-wide);
|
|
83
|
+
}
|
|
84
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__heading::before {
|
|
85
|
+
content: "// ";
|
|
86
|
+
color: var(--ld-accent);
|
|
87
|
+
}
|
|
88
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item {
|
|
89
|
+
border: 1px solid transparent;
|
|
90
|
+
border-radius: var(--ld-radius);
|
|
91
|
+
color: var(--ld-on-surface);
|
|
92
|
+
font-size: 13px;
|
|
93
|
+
font-weight: var(--ld-font-weight-bold);
|
|
94
|
+
text-transform: uppercase;
|
|
95
|
+
letter-spacing: 0.06em;
|
|
96
|
+
transition: color var(--ld-transition), border-color var(--ld-transition), transform var(--ld-transition);
|
|
97
|
+
}
|
|
98
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__icon {
|
|
99
|
+
color: var(--ld-faint);
|
|
100
|
+
transition: color var(--ld-transition);
|
|
101
|
+
}
|
|
102
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item:hover,
|
|
103
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item:focus-visible {
|
|
104
|
+
border-color: var(--ld-primary-border);
|
|
105
|
+
color: var(--ld-primary);
|
|
106
|
+
transform: translateX(3px);
|
|
107
|
+
outline: none;
|
|
108
|
+
}
|
|
109
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item:hover .ld-sidenav__icon,
|
|
110
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item:focus-visible .ld-sidenav__icon {
|
|
111
|
+
color: var(--ld-accent);
|
|
112
|
+
filter: drop-shadow(0 0 4px var(--ld-accent-glow));
|
|
113
|
+
}
|
|
114
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item--active,
|
|
115
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item[aria-current="page"] {
|
|
116
|
+
background: var(--ld-surface);
|
|
117
|
+
border-color: var(--ld-primary-border);
|
|
118
|
+
color: var(--ld-primary);
|
|
119
|
+
animation: ld-nb-shell-glow 2.4s infinite;
|
|
120
|
+
}
|
|
121
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item--active .ld-sidenav__icon,
|
|
122
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item[aria-current="page"] .ld-sidenav__icon {
|
|
123
|
+
color: var(--ld-accent);
|
|
124
|
+
filter: drop-shadow(0 0 4px var(--ld-accent-glow));
|
|
125
|
+
}
|
|
126
|
+
@keyframes ld-nb-shell-glow {
|
|
127
|
+
0%, 100% { box-shadow: 0 0 4px rgba(210, 187, 255, 0.15); }
|
|
128
|
+
50% { box-shadow: 0 0 14px var(--ld-primary-glow); }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__footer {
|
|
132
|
+
border-top: 1px solid var(--ld-border);
|
|
133
|
+
color: var(--ld-faint);
|
|
134
|
+
font-size: 12px;
|
|
135
|
+
text-transform: uppercase;
|
|
136
|
+
letter-spacing: var(--ld-tracking-wide);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-page__eyebrow {
|
|
140
|
+
color: var(--ld-accent);
|
|
141
|
+
font-size: 12px;
|
|
142
|
+
font-weight: var(--ld-font-weight-bold);
|
|
143
|
+
text-transform: uppercase;
|
|
144
|
+
letter-spacing: var(--ld-tracking-wide);
|
|
145
|
+
text-shadow: 0 0 6px var(--ld-accent-glow);
|
|
146
|
+
}
|
|
147
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-page__title {
|
|
148
|
+
font-size: clamp(1.25rem, 1rem + 1vw, 1.75rem);
|
|
149
|
+
font-weight: var(--ld-font-weight-bold);
|
|
150
|
+
text-transform: uppercase;
|
|
151
|
+
letter-spacing: var(--ld-tracking-wide);
|
|
152
|
+
}
|
|
153
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-page__subtitle {
|
|
154
|
+
color: var(--ld-faint);
|
|
155
|
+
font-size: var(--ld-text-sm);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@media (width <= 48rem) {
|
|
159
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__nav {
|
|
160
|
+
background: color-mix(in srgb, var(--ld-bg) 94%, transparent);
|
|
161
|
+
box-shadow: 12px 0 40px rgba(0, 0, 0, 0.5);
|
|
162
|
+
}
|
|
163
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell--tabbar .ld-shell__nav {
|
|
164
|
+
border-right: none;
|
|
165
|
+
border-top: 1px solid var(--ld-border);
|
|
166
|
+
box-shadow: 0 -8px 30px rgba(0, 0, 0, 0.45);
|
|
167
|
+
}
|
|
168
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell--tabbar .ld-sidenav__item {
|
|
169
|
+
transform: none;
|
|
170
|
+
font-size: 10px;
|
|
171
|
+
}
|
|
172
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell--tabbar .ld-sidenav__item--active,
|
|
173
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell--tabbar .ld-sidenav__item[aria-current="page"] {
|
|
174
|
+
background: none;
|
|
175
|
+
border-color: transparent;
|
|
176
|
+
animation: none;
|
|
177
|
+
text-shadow: 0 0 8px var(--ld-primary-glow);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@media (prefers-reduced-motion: reduce) {
|
|
182
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-shell__toggle,
|
|
183
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-topnav__item,
|
|
184
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item {
|
|
185
|
+
transition: none;
|
|
186
|
+
}
|
|
187
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item:hover,
|
|
188
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item:focus-visible {
|
|
189
|
+
transform: none;
|
|
190
|
+
}
|
|
191
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item--active,
|
|
192
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-sidenav__item[aria-current="page"] {
|
|
193
|
+
animation: none;
|
|
194
|
+
box-shadow: 0 0 10px var(--ld-primary-glow);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -25,3 +25,23 @@
|
|
|
25
25
|
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-table tbody tr:hover {
|
|
26
26
|
background: var(--ld-surface-glass);
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
/* Interactive rows (.ld-table--interactive): the cursor is the affordance —
|
|
30
|
+
* plain tables hover too. Focus is an outline so it
|
|
31
|
+
* composes with the selected state (aria-selected="true"), which sits last
|
|
32
|
+
* so it outranks hover. */
|
|
33
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-table--interactive tbody tr {
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
}
|
|
36
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-table--interactive tbody tr:focus-visible {
|
|
37
|
+
outline: 1px solid var(--ld-primary-border);
|
|
38
|
+
outline-offset: -1px;
|
|
39
|
+
background: var(--ld-surface-glass);
|
|
40
|
+
}
|
|
41
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-table--interactive tbody tr:active {
|
|
42
|
+
background: rgba(210, 187, 255, 0.08);
|
|
43
|
+
}
|
|
44
|
+
:where([data-ld-style="neon-butterfly"], [data-ld-style="neon-butterfly"] *).ld-table--interactive tbody tr[aria-selected="true"] {
|
|
45
|
+
background: rgba(210, 187, 255, 0.12);
|
|
46
|
+
box-shadow: inset 2px 0 0 0 var(--ld-primary), inset 0 0 10px rgba(210, 187, 255, 0.25);
|
|
47
|
+
}
|
package/neon-butterfly/design.md
CHANGED
|
@@ -75,6 +75,11 @@ Class prefix `ld-`. Variants use BEM-ish modifiers (`ld-btn--accent`).
|
|
|
75
75
|
(`--ld-slide-lead` / `--ld-slide-trail`, direction from `data-ld-dir`).
|
|
76
76
|
Variants tint the label only; `--block` fills the row with equal-width
|
|
77
77
|
segments. Use `role="group"` + `aria-label`.
|
|
78
|
+
- **Icon button** `.ld-icon-btn` (+ `--active`, `--danger`) — chromeless
|
|
79
|
+
2rem square for icon-only actions (`<button>` or `<a>`; always
|
|
80
|
+
`aria-label`). Faint glyph that turns lilac on hover; active
|
|
81
|
+
(`--active`, `aria-pressed="true"`, `aria-current="page"`) is lilac with a
|
|
82
|
+
soft glow. `--danger` turns the glyph red on hover. Child `svg` 1.25em.
|
|
78
83
|
- **Form** `.ld-input`, `.ld-textarea`, `.ld-select`, `.ld-label`, `.ld-field`,
|
|
79
84
|
`.ld-checkbox`, `.ld-radio`, `.ld-switch`, `.ld-choice` — checked states glow lime.
|
|
80
85
|
- **Badge** `.ld-badge` + semantic modifiers; `--sm` is the 9px dashboard
|
|
@@ -82,8 +87,22 @@ Class prefix `ld-`. Variants use BEM-ish modifiers (`ld-btn--accent`).
|
|
|
82
87
|
- **Alert** `.ld-alert` — left accent bar carries the semantic color.
|
|
83
88
|
- **Dialog** `.ld-dialog` — native `<dialog>`, lilac border + glow, blurred backdrop.
|
|
84
89
|
- **Tabs** `.ld-tabs`/`.ld-tab`/`.ld-tabpanel` — active tab underlined in lilac with text glow; the underline is one lit bar that stretches to the new tab and snaps back (same slide tokens).
|
|
85
|
-
- **Table** `.ld-table` — lilac header rule, glass row hover.
|
|
90
|
+
- **Table** `.ld-table` — lilac header rule, glass row hover. `.ld-table--interactive` adds the pointer, a lilac focus outline, and a selected row (`aria-selected`) with a lilac left bar and inner glow.
|
|
86
91
|
- **Progress** `.ld-progress`, **Spinner** `.ld-spinner` — glowing lilac indicators.
|
|
92
|
+
- **App shell** `.ld-shell` (+ `__skip`, `__header`, `__toggle`, `__brand`,
|
|
93
|
+
`__actions`, `__nav`, `__scrim`, `__main`, `__footer`; `.ld-topnav`/`__item`;
|
|
94
|
+
`.ld-sidenav` + `__section`, `__heading`, `__item`, `__icon`, `__label`,
|
|
95
|
+
`__badge`, `__footer`) — brand uppercase lilac with a glow text-shadow; section headings prefixed with a lime `//`. Items are uppercase mono; hover nudges right with a lilac border and lights the icon lime; the current page is a lilac-bordered pane with a slow pulsing glow and a lime icon. The header and nav are unfilled — hairline
|
|
96
|
+
borders over the page background (`.ld-bg`), which the shell paints; the
|
|
97
|
+
header blurs what scrolls under it. The drawer and tab bar take a fill. Structure (`components/layout.css`) is shared by every theme:
|
|
98
|
+
collapsed rail on `data-ld-nav-collapsed`, drawer on `data-ld-nav-open`
|
|
99
|
+
below 48rem, `--tabbar` docks the nav at the bottom. The header
|
|
100
|
+
always spans the full width above the nav.
|
|
101
|
+
- **Page layouts** `.ld-page` (`--narrow`/`--wide`/`--full`, `__header`,
|
|
102
|
+
`__eyebrow`, `__title`, `__subtitle`, `__actions`), `.ld-grid`,
|
|
103
|
+
`.ld-split`, `.ld-aside-layout`, `.ld-center` — structure only
|
|
104
|
+
(`components/page.css`, shared by every theme); the page
|
|
105
|
+
title uses the display face.
|
|
87
106
|
- **Stepper** `.ld-stepper` (+ `__step`, `__node`, `__label`) — milestone
|
|
88
107
|
rail: glowing lilac fill on a surface track, 2rem nodes, uppercase mono
|
|
89
108
|
labels. `__step--complete` is a solid lilac node; `--current` is the
|
|
@@ -95,7 +114,14 @@ Class prefix `ld-`. Variants use BEM-ish modifiers (`ld-btn--accent`).
|
|
|
95
114
|
`color: var(--ld-faint)` only, no italic — this theme's mono/uppercase
|
|
96
115
|
terminal voice never reaches for a literary flourish.
|
|
97
116
|
- **Pre / log block** `.ld-pre` — command/log `<pre>`; sunken background,
|
|
98
|
-
hairline border, radius, small mono, horizontal scroll.
|
|
117
|
+
hairline border, radius, small mono, horizontal scroll. `.ld-pre--log`
|
|
118
|
+
bounds it (`--ld-log-max-height`, 420px), scrolls both ways, wraps long
|
|
119
|
+
lines, and adds faint 4px scanlines.
|
|
120
|
+
- **Copy control** `.ld-pre-copy` — an `.ld-icon-btn` pinned top-right in
|
|
121
|
+
a `.ld-pre-wrap`; fades in on hover/focus-within, always shown on touch
|
|
122
|
+
(`hover: none`). `data-ld-copy="copied"` swaps the copy glyph for a
|
|
123
|
+
success-tinted check; `"failed"` tints it danger. Status goes to a
|
|
124
|
+
visually hidden `aria-live` `.ld-pre-copy-status`.
|
|
99
125
|
|
|
100
126
|
## Code syntax
|
|
101
127
|
|
package/neon-butterfly/index.css
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/* neon-butterfly — full theme entry point */
|
|
2
2
|
@import "./tokens.css";
|
|
3
3
|
@import "./base.css";
|
|
4
|
+
@import "./components/layout.css";
|
|
5
|
+
@import "./components/shell.css";
|
|
6
|
+
@import "./components/page.css";
|
|
4
7
|
@import "./components/card.css";
|
|
5
8
|
@import "./components/status-card.css";
|
|
6
9
|
@import "./components/link.css";
|
|
7
10
|
@import "./components/button.css";
|
|
8
11
|
@import "./components/button-hold.css";
|
|
9
12
|
@import "./components/button-group.css";
|
|
13
|
+
@import "./components/icon-button.css";
|
|
10
14
|
@import "./components/form.css";
|
|
11
15
|
@import "./components/badge.css";
|
|
12
16
|
@import "./components/alert.css";
|
package/package.json
CHANGED
package/summer-cloud/base.css
CHANGED
|
@@ -35,8 +35,12 @@
|
|
|
35
35
|
|
|
36
36
|
/* Opt-in page background: the sky gradient. Flat --ld-bg is also correct, but
|
|
37
37
|
* the gradient is the signature — the theme reads as "airy" only against it.
|
|
38
|
-
* Apply to <body>, or to the attributed container itself.
|
|
39
|
-
|
|
38
|
+
* Apply to <body>, or to the attributed container itself. An app shell
|
|
39
|
+
* (.ld-shell) always paints it, and so does the <body> around one, so the
|
|
40
|
+
* page stays covered past the shell (overscroll, short pages). */
|
|
41
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-bg,
|
|
42
|
+
:where(html[data-ld-style="summer-cloud"]) body:has(.ld-shell),
|
|
43
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell {
|
|
40
44
|
background: linear-gradient(135deg, var(--ld-sky-start) 0%, var(--ld-sky-end) 100%);
|
|
41
45
|
background-attachment: fixed;
|
|
42
46
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/* summer-cloud — icon button: round chromeless pill that fills sky-white and bounces on hover.
|
|
2
|
+
* Icon-only control (<button> or <a>): give it an accessible name (aria-label).
|
|
3
|
+
* Active/current: .ld-icon-btn--active, [aria-pressed="true"], [aria-current="page"]. */
|
|
4
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
flex: none;
|
|
9
|
+
width: 2rem;
|
|
10
|
+
height: 2rem;
|
|
11
|
+
padding: 0;
|
|
12
|
+
background: none;
|
|
13
|
+
border: none;
|
|
14
|
+
border-radius: var(--ld-radius-pill);
|
|
15
|
+
color: var(--ld-faint);
|
|
16
|
+
font: inherit;
|
|
17
|
+
line-height: 1;
|
|
18
|
+
text-decoration: none;
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
transition: background var(--ld-transition), color var(--ld-transition), box-shadow 0.2s ease, transform 0.2s var(--ld-ease-bounce);
|
|
21
|
+
}
|
|
22
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn > svg {
|
|
23
|
+
width: 1.25em;
|
|
24
|
+
height: 1.25em;
|
|
25
|
+
flex: none;
|
|
26
|
+
}
|
|
27
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:hover,
|
|
28
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:focus-visible {
|
|
29
|
+
background: var(--ld-sky-tint);
|
|
30
|
+
color: var(--ld-primary);
|
|
31
|
+
transform: scale(1.06);
|
|
32
|
+
outline: none;
|
|
33
|
+
}
|
|
34
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:focus-visible {
|
|
35
|
+
box-shadow: 0 0 0 4px var(--ld-accent-glow);
|
|
36
|
+
}
|
|
37
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:active:not(:disabled) {
|
|
38
|
+
transform: scale(0.92);
|
|
39
|
+
}
|
|
40
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn--active,
|
|
41
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn[aria-pressed="true"],
|
|
42
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn[aria-current="page"] {
|
|
43
|
+
background: var(--ld-sky-tint);
|
|
44
|
+
color: var(--ld-primary);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* danger: destructive action (delete, remove) — faint at rest, red on hover */
|
|
48
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn--danger:hover,
|
|
49
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn--danger:focus-visible {
|
|
50
|
+
color: var(--ld-danger-deep);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* disabled: dimmed and inert — hover never lights it; [aria-disabled] covers <a> */
|
|
54
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:disabled,
|
|
55
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn[aria-disabled="true"] {
|
|
56
|
+
opacity: 0.4;
|
|
57
|
+
color: var(--ld-faint);
|
|
58
|
+
background: none;
|
|
59
|
+
box-shadow: none;
|
|
60
|
+
transform: none;
|
|
61
|
+
cursor: not-allowed;
|
|
62
|
+
}
|
|
63
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn[aria-disabled="true"] {
|
|
64
|
+
pointer-events: none;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@media (prefers-reduced-motion: reduce) {
|
|
68
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn {
|
|
69
|
+
transition: none;
|
|
70
|
+
}
|
|
71
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:hover,
|
|
72
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:focus-visible,
|
|
73
|
+
:where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-icon-btn:active:not(:disabled) {
|
|
74
|
+
transform: none;
|
|
75
|
+
}
|
|
76
|
+
}
|