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 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, buttons, and status text are `text-transform: uppercase` with tracked letter-spacing. Body text is the exception.
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, badges, and status messages
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.10.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.10.0 | MIT License | fonts: SIL OFL 1.1, see fonts/ */
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: #fff;
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: #fff;
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;