@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.
@@ -0,0 +1,197 @@
1
+ /* summer-cloud — shell chrome: unfilled bars with lit hairlines on the sky,
2
+ * Plus Jakarta labels, the current page a solid violet pill with the raised
3
+ * violet shadow; hover fills with sky tint. Structure is in layout.css. */
4
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__skip {
5
+ padding: var(--ld-space-2) var(--ld-space-3);
6
+ background: var(--ld-primary);
7
+ border-radius: var(--ld-radius-pill);
8
+ color: var(--ld-on-primary);
9
+ font-family: var(--ld-font-display);
10
+ font-weight: var(--ld-font-weight-medium);
11
+ font-size: var(--ld-text-sm);
12
+ }
13
+
14
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__header {
15
+ /* no fill: the shell background runs under the bar; the blur keeps
16
+ * content scrolling beneath it legible */
17
+ background: transparent;
18
+ border-bottom: 1px solid var(--ld-border-lit);
19
+ backdrop-filter: blur(var(--ld-blur-high));
20
+ }
21
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__toggle {
22
+ background: none;
23
+ border: none;
24
+ border-radius: var(--ld-radius-pill);
25
+ color: var(--ld-faint);
26
+ transition: background var(--ld-transition), color var(--ld-transition), transform var(--ld-transition) var(--ld-ease-bounce);
27
+ }
28
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__toggle:hover,
29
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__toggle:focus-visible {
30
+ background: var(--ld-sky-tint);
31
+ color: var(--ld-primary);
32
+ outline: none;
33
+ }
34
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__toggle: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-shell__toggle:active {
38
+ transform: scale(0.92);
39
+ }
40
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__brand {
41
+ color: var(--ld-primary);
42
+ font-family: var(--ld-font-display);
43
+ font-weight: 800;
44
+ font-size: 1.15rem;
45
+ letter-spacing: var(--ld-tracking-tight);
46
+ }
47
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-topnav__item {
48
+ padding: var(--ld-space-2) var(--ld-space-3);
49
+ border-radius: var(--ld-radius-pill);
50
+ color: var(--ld-faint);
51
+ font-family: var(--ld-font-display);
52
+ font-weight: var(--ld-font-weight-medium);
53
+ font-size: var(--ld-text-sm);
54
+ transition: background var(--ld-transition), color var(--ld-transition);
55
+ }
56
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-topnav__item:hover,
57
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-topnav__item:focus-visible {
58
+ background: var(--ld-sky-tint);
59
+ color: var(--ld-primary);
60
+ outline: none;
61
+ }
62
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-topnav__item--active,
63
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-topnav__item[aria-current="page"] {
64
+ color: var(--ld-primary);
65
+ font-weight: var(--ld-font-weight-bold);
66
+ box-shadow: inset 0 -2px 0 var(--ld-primary);
67
+ border-radius: 0;
68
+ }
69
+
70
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__nav {
71
+ background: transparent; /* the shell background shows through; a hairline divides */
72
+ border-right: 1px solid var(--ld-border-lit);
73
+ }
74
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__scrim {
75
+ background: rgba(23, 28, 31, 0.25);
76
+ backdrop-filter: blur(3px);
77
+ }
78
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav {
79
+ padding-inline: var(--ld-space-3);
80
+ }
81
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__heading {
82
+ color: var(--ld-faint);
83
+ font-family: var(--ld-font-display);
84
+ font-size: 11px;
85
+ font-weight: var(--ld-font-weight-bold);
86
+ text-transform: uppercase;
87
+ letter-spacing: 0.08em;
88
+ opacity: 0.75;
89
+ }
90
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item {
91
+ border-radius: var(--ld-radius-pill);
92
+ color: var(--ld-on-surface);
93
+ font-family: var(--ld-font-display);
94
+ font-size: var(--ld-text-sm);
95
+ font-weight: var(--ld-font-weight-medium);
96
+ transition: background var(--ld-transition), color var(--ld-transition), transform var(--ld-transition) var(--ld-ease-bounce), box-shadow var(--ld-transition);
97
+ }
98
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__icon {
99
+ color: var(--ld-faint);
100
+ }
101
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:hover,
102
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:focus-visible {
103
+ background: var(--ld-sky-tint);
104
+ color: var(--ld-primary);
105
+ outline: none;
106
+ }
107
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:hover .ld-sidenav__icon,
108
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:focus-visible .ld-sidenav__icon {
109
+ color: var(--ld-primary);
110
+ }
111
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:focus-visible {
112
+ box-shadow: 0 0 0 4px var(--ld-accent-glow);
113
+ }
114
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:active {
115
+ transform: scale(0.97);
116
+ }
117
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item--active,
118
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item[aria-current="page"] {
119
+ background: var(--ld-primary);
120
+ color: var(--ld-on-primary);
121
+ box-shadow: var(--ld-shadow-raised);
122
+ }
123
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item--active .ld-sidenav__icon,
124
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item[aria-current="page"] .ld-sidenav__icon,
125
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item--active:hover,
126
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item[aria-current="page"]:hover {
127
+ color: var(--ld-on-primary);
128
+ }
129
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item--active:hover,
130
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item[aria-current="page"]:hover {
131
+ background: var(--ld-primary-bright);
132
+ box-shadow: var(--ld-shadow-raised-hover);
133
+ }
134
+
135
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__footer {
136
+ border-top: 1px solid var(--ld-border);
137
+ color: var(--ld-faint);
138
+ font-size: 13px;
139
+ }
140
+
141
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-page__eyebrow {
142
+ color: var(--ld-accent-deep);
143
+ font-family: var(--ld-font-display);
144
+ font-size: 12px;
145
+ font-weight: var(--ld-font-weight-bold);
146
+ text-transform: uppercase;
147
+ letter-spacing: 0.08em;
148
+ }
149
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-page__title {
150
+ font-family: var(--ld-font-display);
151
+ font-size: clamp(1.625rem, 1.3rem + 1.2vw, 2.25rem);
152
+ font-weight: 800;
153
+ letter-spacing: var(--ld-tracking-tight);
154
+ }
155
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-page__subtitle {
156
+ color: var(--ld-faint);
157
+ }
158
+
159
+ @media (width <= 48rem) {
160
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__nav {
161
+ background: var(--ld-surface-glass-high);
162
+ backdrop-filter: blur(var(--ld-blur-high));
163
+ box-shadow: var(--ld-shadow);
164
+ }
165
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-shell__nav {
166
+ border-right: none;
167
+ border-top: 1px solid var(--ld-border-lit);
168
+ }
169
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-sidenav {
170
+ padding-inline: var(--ld-space-2);
171
+ }
172
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-sidenav__item {
173
+ border-radius: var(--ld-radius);
174
+ }
175
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-sidenav__item--active,
176
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-sidenav__item[aria-current="page"] {
177
+ background: var(--ld-sky-tint);
178
+ color: var(--ld-primary);
179
+ box-shadow: none;
180
+ }
181
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-sidenav__item--active .ld-sidenav__icon,
182
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell--tabbar .ld-sidenav__item[aria-current="page"] .ld-sidenav__icon {
183
+ color: var(--ld-primary);
184
+ }
185
+ }
186
+
187
+ @media (prefers-reduced-motion: reduce) {
188
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__toggle,
189
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-topnav__item,
190
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item {
191
+ transition: none;
192
+ }
193
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-shell__toggle:active,
194
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-sidenav__item:active {
195
+ transform: none;
196
+ }
197
+ }
@@ -32,3 +32,23 @@
32
32
  font-family: var(--ld-font-mono);
33
33
  text-align: right;
34
34
  }
35
+
36
+ /* Interactive rows (.ld-table--interactive): the cursor is the affordance —
37
+ * plain tables hover too. Focus is an outline so it
38
+ * composes with the selected state (aria-selected="true"), which sits last
39
+ * so it outranks hover. */
40
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-table--interactive tbody tr {
41
+ cursor: pointer;
42
+ }
43
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-table--interactive tbody tr:focus-visible {
44
+ outline: 2px solid var(--ld-accent);
45
+ outline-offset: -2px;
46
+ background: var(--ld-sky-tint);
47
+ }
48
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-table--interactive tbody tr:active {
49
+ background: rgba(12, 179, 255, 0.08);
50
+ }
51
+ :where([data-ld-style="summer-cloud"], [data-ld-style="summer-cloud"] *).ld-table--interactive tbody tr[aria-selected="true"] {
52
+ background: rgba(93, 43, 255, 0.07);
53
+ box-shadow: inset 3px 0 0 0 var(--ld-primary);
54
+ }
@@ -110,6 +110,12 @@ theme-agnostic). Variants use BEM-ish modifiers (`ld-btn--primary`).
110
110
  (`--ld-slide-lead` / `--ld-slide-trail`, direction from `data-ld-dir`).
111
111
  Variants tint the label only; `--block` fills the row with equal-width
112
112
  segments. Use `role="group"` + `aria-label`.
113
+ - **Icon button** `.ld-icon-btn` (+ `--active`, `--danger`) — chromeless
114
+ round 2rem pill for icon-only actions (`<button>` or `<a>`; always
115
+ `aria-label`). Faint glyph; hover fills sky-white, turns violet and
116
+ bounces up; press squishes. Active (`--active`, `aria-pressed="true"`,
117
+ `aria-current="page"`) keeps the sky-white fill and violet glyph.
118
+ `--danger` turns the glyph deep red on hover. Child `svg` 1.25em.
113
119
  - **Form** `.ld-input`, `.ld-textarea`, `.ld-select`, `.ld-label`, `.ld-field`,
114
120
  `.ld-checkbox`, `.ld-radio`, `.ld-switch`, `.ld-choice` — sunken fields, no
115
121
  resting border, sky-blue ring on focus. The switch is the oversized
@@ -123,7 +129,23 @@ theme-agnostic). Variants use BEM-ish modifiers (`ld-btn--primary`).
123
129
  - **Tabs** `.ld-tabs`/`.ld-tab`/`.ld-tabpanel` — violet underline when active; it stretches to the new tab and bounces back to width (same slide tokens).
124
130
  - **Table** `.ld-table` — mono uppercase headers, sky-tint row hover; add
125
131
  `.ld-num` to numeric cells for the mono/right-aligned treatment.
132
+ `.ld-table--interactive` adds the pointer, a sky focus outline, and a
133
+ selected row (`aria-selected`) with a violet wash and left bar.
126
134
  - **Progress** `.ld-progress`, **Spinner** `.ld-spinner` — glowing violet.
135
+ - **App shell** `.ld-shell` (+ `__skip`, `__header`, `__toggle`, `__brand`,
136
+ `__actions`, `__nav`, `__scrim`, `__main`, `__footer`; `.ld-topnav`/`__item`;
137
+ `.ld-sidenav` + `__section`, `__heading`, `__item`, `__icon`, `__label`,
138
+ `__badge`, `__footer`) — brand in Plus Jakarta 800 violet. Items are pills that fill with sky tint on hover and press in on click; the current page is the solid violet pill with the raised violet shadow (sky-tinted in the tab bar); top-nav current page takes the violet underline. The header and nav are unfilled — hairline
139
+ borders over the page background (`.ld-bg`), which the shell paints; the
140
+ header blurs what scrolls under it. The drawer and tab bar take a fill. Structure (`components/layout.css`) is shared by every theme:
141
+ collapsed rail on `data-ld-nav-collapsed`, drawer on `data-ld-nav-open`
142
+ below 48rem, `--tabbar` docks the nav at the bottom. The header
143
+ always spans the full width above the nav.
144
+ - **Page layouts** `.ld-page` (`--narrow`/`--wide`/`--full`, `__header`,
145
+ `__eyebrow`, `__title`, `__subtitle`, `__actions`), `.ld-grid`,
146
+ `.ld-split`, `.ld-aside-layout`, `.ld-center` — structure only
147
+ (`components/page.css`, shared by every theme); the page
148
+ title uses the display face.
127
149
  - **Stepper** `.ld-stepper` (+ `__step`, `__node`, `__label`) — milestone
128
150
  rail from the Retail Dashboard "Active Delivery" box: glowing violet fill on
129
151
  a blend track, 2rem nodes. `__step--complete` is a solid violet node with a
@@ -138,7 +160,13 @@ theme-agnostic). Variants use BEM-ish modifiers (`ld-btn--primary`).
138
160
  - **Pre / log block** `.ld-pre` — command/log `<pre>`; sunken background,
139
161
  `--ld-outline` hairline (not `--ld-border`, which is the glass-only token
140
162
  and would be invisible on this opaque surface), radius, small mono,
141
- horizontal scroll.
163
+ horizontal scroll. `.ld-pre--log` bounds it (`--ld-log-max-height`,
164
+ 420px), scrolls both ways, and wraps long lines — flat, no scanlines.
165
+ - **Copy control** `.ld-pre-copy` — an `.ld-icon-btn` pinned top-right in
166
+ a `.ld-pre-wrap`; fades in on hover/focus-within, always shown on touch
167
+ (`hover: none`). `data-ld-copy="copied"` swaps the copy glyph for a
168
+ success-tinted check; `"failed"` tints it danger. Status goes to a
169
+ visually hidden `aria-live` `.ld-pre-copy-status`.
142
170
 
143
171
  ## Deviations from the Stitch source
144
172
 
@@ -1,12 +1,16 @@
1
1
  /* summer-cloud — 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";