palace-ui 0.10.0 → 0.11.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.
- package/SPEC.md +12 -4
- package/catalog.html +5 -1
- package/package.json +5 -1
- package/palace.css +36 -7
package/SPEC.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- **Retro-technical.** Hard edges (border-radius: 0 everywhere), thick 2px borders, chunky offset box-shadows. Gradients on text, thin decorative stripes (≤3px), and narrow fixed bars (e.g. sticky CTAs) only — never on large surfaces or card backgrounds.
|
|
10
10
|
- **Three-color accent system.** Hot pink `#ff2d9b`, electric purple `#5b4cff`, cyan `#00e5ff`. These rotate across card lists and provide visual rhythm.
|
|
11
11
|
- **Snappy interactions.** All transitions are `0.1s`. Hovers lift elements up-left and cast a hard shadow down-right. Fast, mechanical feedback.
|
|
12
|
-
- **Uppercase everything.** All headings, labels
|
|
12
|
+
- **Uppercase everything.** All headings, labels and buttons are `text-transform: uppercase` with tracked letter-spacing. Body text and status messages, which are sentences, are the exception.
|
|
13
13
|
- **Dark on light.** `#0a0a0a` text on `#f0f0f0` background. Cards are white `#fff`. Code blocks invert to dark `#0a0a0a` backgrounds.
|
|
14
14
|
- **No border radius.** Ever. `border-radius: 0` is the rule, not the exception.
|
|
15
15
|
- **Content-width containers.** Max-width `640px` for main content, `420px` for auth/narrow forms.
|
|
@@ -53,7 +53,8 @@ Or if consuming via npm with a build tool:
|
|
|
53
53
|
| `--p-surface` | `#fff` | Card/container backgrounds |
|
|
54
54
|
| `--p-surface-inset` | `#f7f7f7` | Inset/recessed surfaces |
|
|
55
55
|
| `--p-dark` | `#0a0a0a` | Dark backgrounds (navbar, code, hover fills) |
|
|
56
|
-
| `--p-error` | `#ff4444` | Error states, danger zones |
|
|
56
|
+
| `--p-error` | `#ff4444` | Error states, danger zones: fills, borders, the error box |
|
|
57
|
+
| `--p-error-text` | `#c40000` | Red text (danger buttons, error text): 6.3:1 on white, where `#ff4444` is 3.4:1 |
|
|
57
58
|
| `--p-success` | `#00ff88` | Success states |
|
|
58
59
|
| `--p-warning` | `#ffcc00` | Warning states |
|
|
59
60
|
| `--p-info` | `var(--p-accent-3)` | Informational states (semantic alias for cyan) |
|
|
@@ -321,6 +322,13 @@ Size modifiers compose with any color variant:
|
|
|
321
322
|
</div>
|
|
322
323
|
```
|
|
323
324
|
|
|
325
|
+
A `<select>` is styled like the text inputs, with a drawn chevron:
|
|
326
|
+
|
|
327
|
+
```html
|
|
328
|
+
<label for="direction">Direction</label>
|
|
329
|
+
<select id="direction"><option>Anticlockwise</option><option>Clockwise</option></select>
|
|
330
|
+
```
|
|
331
|
+
|
|
324
332
|
Inline form (input + button side by side):
|
|
325
333
|
|
|
326
334
|
```html
|
|
@@ -697,12 +705,12 @@ Full container, no navbar. Hero section, then card list, then footer.
|
|
|
697
705
|
- **accent-3 (cyan):** Navbar user name, code highlights, key reveal borders, third card
|
|
698
706
|
- **Never mix** accent colors in a single element (except the gradient on h1 text)
|
|
699
707
|
- **The 3-color rotation** applies to any list of sibling cards: 1=pink, 2=purple, 3=cyan, 4=pink...
|
|
700
|
-
- **Error is always `#ff4444`**, success is always `#00ff88`, warning is `#ffcc00`, info is `#00e5ff`. Status colors are not accent colors.
|
|
708
|
+
- **Error is always `#ff4444`**, success is always `#00ff88`, warning is `#ffcc00`, info is `#00e5ff`. Status colors are not accent colors. Text on a status color is always dark `--p-text`; red text uses `--p-error-text`, never `#ff4444`.
|
|
701
709
|
|
|
702
710
|
## Do's and Don'ts
|
|
703
711
|
|
|
704
712
|
### Do
|
|
705
|
-
- Use uppercase for headings, labels, buttons
|
|
713
|
+
- Use uppercase for headings, labels, buttons and badges; status messages are sentences in sentence case
|
|
706
714
|
- Use the 3-color card rotation for any list of cards
|
|
707
715
|
- Keep `border-radius: 0` everywhere
|
|
708
716
|
- Use `2px solid` borders on cards, buttons, inputs
|
package/catalog.html
CHANGED
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
<div class="container">
|
|
425
425
|
<p class="eyebrow" style="color: var(--p-accent-1); margin-bottom: 8px;">Components</p>
|
|
426
426
|
<h2 id="forms">Forms</h2>
|
|
427
|
-
<p class="subtitle" style="margin-bottom: 24px;">Labels, text inputs, number input, textarea.</p>
|
|
427
|
+
<p class="subtitle" style="margin-bottom: 24px;">Labels, text inputs, select, number input, textarea.</p>
|
|
428
428
|
|
|
429
429
|
<div data-source class="card-static" style="margin-bottom: 16px;">
|
|
430
430
|
<div class="stack-md">
|
|
@@ -444,6 +444,10 @@
|
|
|
444
444
|
<label for="cat-search">Search</label>
|
|
445
445
|
<input type="search" id="cat-search" placeholder="Search...">
|
|
446
446
|
</div>
|
|
447
|
+
<div>
|
|
448
|
+
<label for="cat-direction">Direction</label>
|
|
449
|
+
<select id="cat-direction"><option>Anticlockwise</option><option>Clockwise</option></select>
|
|
450
|
+
</div>
|
|
447
451
|
<div>
|
|
448
452
|
<label for="cat-num">Quantity</label>
|
|
449
453
|
<input type="number" id="cat-num" value="5" min="0" max="99">
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "palace-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Retro-technical design system. Hard edges, vibrant gradients, chunky shadows.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/jostsg/palace-ui.git"
|
|
9
|
+
},
|
|
6
10
|
"type": "module",
|
|
7
11
|
"main": "palace.css",
|
|
8
12
|
"style": "palace.css",
|
package/palace.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! palace-ui v0.
|
|
1
|
+
/*! palace-ui v0.11.0 | MIT License | fonts: SIL OFL 1.1, see fonts/ */
|
|
2
2
|
|
|
3
3
|
/* ══════════════════════════════════════════
|
|
4
4
|
FONTS (self-hosted; no third-party requests)
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
|
|
42
42
|
/* ── Status ── */
|
|
43
43
|
--p-error: #ff4444;
|
|
44
|
+
--p-error-text: #c40000; /* red for text: 6.3:1 on white, where #ff4444 is 3.4:1 */
|
|
44
45
|
--p-success: #00ff88;
|
|
45
46
|
--p-warning: #ffcc00;
|
|
46
47
|
--p-info: var(--p-accent-3);
|
|
@@ -110,6 +111,9 @@
|
|
|
110
111
|
padding: 0;
|
|
111
112
|
}
|
|
112
113
|
|
|
114
|
+
/* The hidden attribute always hides, even on elements palace gives a display (buttons, .btn). */
|
|
115
|
+
[hidden] { display: none !important; }
|
|
116
|
+
|
|
113
117
|
body {
|
|
114
118
|
font-family: var(--p-font);
|
|
115
119
|
color: var(--p-text);
|
|
@@ -367,12 +371,12 @@ button, .btn {
|
|
|
367
371
|
|
|
368
372
|
.btn-danger {
|
|
369
373
|
background: transparent;
|
|
370
|
-
color: var(--p-error);
|
|
374
|
+
color: var(--p-error-text);
|
|
371
375
|
border-color: var(--p-error);
|
|
372
376
|
}
|
|
373
377
|
.btn-danger:hover {
|
|
374
378
|
background: var(--p-error);
|
|
375
|
-
color:
|
|
379
|
+
color: var(--p-text);
|
|
376
380
|
transform: var(--p-lift-sm);
|
|
377
381
|
box-shadow: var(--p-shadow-sm) var(--p-dark);
|
|
378
382
|
}
|
|
@@ -534,6 +538,32 @@ input[type="tel"]:focus {
|
|
|
534
538
|
transform: var(--p-lift-sm);
|
|
535
539
|
}
|
|
536
540
|
|
|
541
|
+
select {
|
|
542
|
+
width: 100%;
|
|
543
|
+
appearance: none;
|
|
544
|
+
padding: 12px 2.5rem 12px 12px;
|
|
545
|
+
border: var(--p-border-width) solid var(--p-text);
|
|
546
|
+
border-radius: var(--p-radius);
|
|
547
|
+
background-color: var(--p-surface);
|
|
548
|
+
/* A chevron drawn with two gradients: no image, no font. */
|
|
549
|
+
background-image: linear-gradient(45deg, transparent 50%, var(--p-text) 50%), linear-gradient(135deg, var(--p-text) 50%, transparent 50%);
|
|
550
|
+
background-position: calc(100% - 1.25rem) 50%, calc(100% - 0.9rem) 50%;
|
|
551
|
+
background-size: 0.35rem 0.35rem;
|
|
552
|
+
background-repeat: no-repeat;
|
|
553
|
+
font-family: var(--p-font);
|
|
554
|
+
font-size: 1rem;
|
|
555
|
+
color: var(--p-text);
|
|
556
|
+
outline: none;
|
|
557
|
+
transition: var(--p-transition);
|
|
558
|
+
}
|
|
559
|
+
select[multiple], select[size]:not([size="1"]) { padding-right: 12px; background-image: none; }
|
|
560
|
+
|
|
561
|
+
select:focus {
|
|
562
|
+
border-color: var(--p-accent-2);
|
|
563
|
+
box-shadow: var(--p-shadow-md) var(--p-accent-2);
|
|
564
|
+
transform: var(--p-lift-sm);
|
|
565
|
+
}
|
|
566
|
+
|
|
537
567
|
input::placeholder {
|
|
538
568
|
color: var(--p-border-dashed);
|
|
539
569
|
}
|
|
@@ -583,12 +613,11 @@ textarea:focus {
|
|
|
583
613
|
STATUS MESSAGES
|
|
584
614
|
══════════════════════════════════════════ */
|
|
585
615
|
|
|
616
|
+
/* A status message is a sentence, so it reads in sentence case, like body text. */
|
|
586
617
|
.status {
|
|
587
618
|
padding: 12px;
|
|
588
619
|
font-size: 13px;
|
|
589
620
|
font-weight: 600;
|
|
590
|
-
text-transform: uppercase;
|
|
591
|
-
letter-spacing: 0.5px;
|
|
592
621
|
border: var(--p-border-width) solid var(--p-text);
|
|
593
622
|
}
|
|
594
623
|
|
|
@@ -600,7 +629,7 @@ textarea:focus {
|
|
|
600
629
|
|
|
601
630
|
.status-error {
|
|
602
631
|
background: var(--p-error);
|
|
603
|
-
color: #
|
|
632
|
+
color: var(--p-text); /* 5.8:1 on #ff4444; white would be 3.4:1 */
|
|
604
633
|
border-color: var(--p-text);
|
|
605
634
|
}
|
|
606
635
|
|
|
@@ -878,7 +907,7 @@ pre {
|
|
|
878
907
|
DANGER ZONE
|
|
879
908
|
══════════════════════════════════════════ */
|
|
880
909
|
|
|
881
|
-
.danger-zone h2 { color: var(--p-error); }
|
|
910
|
+
.danger-zone h2 { color: var(--p-error-text); }
|
|
882
911
|
.danger-zone p {
|
|
883
912
|
color: var(--p-text-muted);
|
|
884
913
|
font-size: 13px;
|