@phantompixeldev/retrocss 2.8.0 → 3.0.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/MIGRATION.md CHANGED
@@ -1,3 +1,163 @@
1
+ # Migrating to RetroCSS 3.0
2
+
3
+ 3.0 is a visual release. Nothing was renamed and no class was removed, but two
4
+ changes are visible on every page that consumes the framework, so they are
5
+ called out first.
6
+
7
+ ## 1. Body text is 16px
8
+
9
+ `--retro-font-size` moves from `0.875rem` (14px) to `1rem` (16px). The rest of
10
+ the scale is expressed in `rem` against the root, so headings, buttons, badges
11
+ and inputs all move with it.
12
+
13
+ 14px is the authentic Win9x metric and 16px is not. The trade was made
14
+ deliberately: the framework is used to build things people read, and 14px is
15
+ below the size at which most people read comfortably. One line puts it back:
16
+
17
+ ```css
18
+ :root { --retro-font-size: 0.875rem; }
19
+ ```
20
+
21
+ Expect layouts that were tuned to the pixel at 14px to need a little room. If
22
+ you pinned a width in `px` to fit a specific string, it will now clip.
23
+
24
+ ## 2. `border-radius: 0` is no longer `!important`
25
+
26
+ The reset was `* { border-radius: 0 !important }`, which meant nothing in a
27
+ consuming application could round a corner — including `.retro-rounded`, which
28
+ had to fight the reset, and `_modal.scss`, which needed its own `!important` to
29
+ get 4px back. The default is still square:
30
+
31
+ ```css
32
+ * { border-radius: 0; }
33
+ ```
34
+
35
+ If you were relying on the reset to flatten a third-party widget's corners,
36
+ that widget's own radius now wins, and you will need to zero it yourself.
37
+
38
+ ## 3. On-fill text follows the theme
39
+
40
+ If you built a component that pairs a RetroCSS hue fill with white text:
41
+
42
+ ```css
43
+ /* before */
44
+ .my-chip { background: var(--retro-primary); color: var(--retro-white); }
45
+ ```
46
+
47
+ ...that pair breaks in dark mode. `--retro-white` inverts to `#3a3a3a` while
48
+ the fill *lightens* to `#4a90e2`, so both move and the contrast collapses —
49
+ this was measuring 3.45:1 on the framework's own active nav items. Use the
50
+ `-fg` token, which is defined as "text on this fill" and is contrast-gated in
51
+ both themes:
52
+
53
+ ```css
54
+ /* after */
55
+ .my-chip { background: var(--retro-primary); color: var(--retro-primary-fg); }
56
+ ```
57
+
58
+ The `--retro-black` / `--retro-white` pair is still fine *together* — both
59
+ invert, so a black chip with white text simply becomes a white chip with dark
60
+ text.
61
+
62
+ ## 4. Tooltips are instant
63
+
64
+ `.retro-tooltip` toggles `display` rather than `opacity` + `visibility`, so the
65
+ 0.2s fade is gone. This was not a style choice: a hidden tooltip kept its box in
66
+ the page's scrollable overflow region, so a `.retro-tooltip-right` on a trigger
67
+ near the viewport edge widened the whole page while invisible. Instant tooltips
68
+ are period-correct anyway.
69
+
70
+ If you were animating `.retro-tooltip` yourself, animate a child instead.
71
+
72
+ ## Smaller changes
73
+
74
+ - **Nav variants and breadcrumbs wrap.** `.retro-nav-tabbed`,
75
+ `.retro-nav-underlined`, `.retro-nav-buttons` and `.retro-breadcrumbs` were
76
+ single unwrapped flex rows, so a long set of labels pushed the page sideways
77
+ on narrow viewports. They wrap onto a second line now.
78
+ - **`.retro-nav-vertical`** is capped at `max-width: 100%`; it was sized to its
79
+ longest label with `width: max-content`.
80
+ - **`.retro-alert-close`** inherits the alert's own text colour and no longer
81
+ renders at `opacity: 0.7`.
82
+ - **Unfilled `.retro-rating-star`** uses `--retro-text-muted` instead of
83
+ `--retro-border-dark`, which was invisible on the dark chassis.
84
+ - **`.retro-heading-variant`** drops its `letter-spacing`. Uppercase plus
85
+ monospace already carries the emphasis.
86
+
87
+ ## Removed
88
+
89
+ Everything here was already dead: unreachable, uninitialised, or compiling to
90
+ nothing. If you were using any of it, it was not doing what its name implied.
91
+
92
+ - **`window.RetroSidebar` / `src/js/sidebar.js`** — 234 lines that were bundled
93
+ but never initialised. Wiring it in would have injected a toggle button and a
94
+ full-screen overlay into every consuming page, hijacked every sidebar link
95
+ with smooth scrolling and `history.pushState`, overwritten whichever link the
96
+ author had marked `.active`, and bound an unthrottled `scroll` listener that
97
+ re-queried `section[id], div[id]` across the whole document on every event.
98
+ That is application logic, not framework logic. The CSS stays —
99
+ `.retro-sidebar`, `.retro-sidebar-toggle` and `.retro-sidebar-overlay` are all
100
+ still styled, so the same UI is a few lines of your own JS.
101
+ - **Eleven `@container` blocks** in `utilities/_container-queries.scss`:
102
+ `.retro-cq-sm`, `-md`, `-lg`, `-xl`, `-wide`, `-tall`, `-landscape`,
103
+ `-portrait`, `-size-sm`, `-size-md`, `-size-lg`. Every one had a comment for a
104
+ body and compiled to nothing. The blocks with real declarations
105
+ (`.retro-cq-hide`, `-show`, `-text-lg`, `-text-xl`, `-flex-row`, `-flex-col`,
106
+ `-p-4`, `-p-6`, `-grid-2`, `-grid-3`) are untouched.
107
+ - **Five Sass mixins**: `retro-border`, `retro-hover`, `retro-active`,
108
+ `retro-transition`, `retro-z-index`. None was called from anywhere in the
109
+ framework. Their values are all reachable directly as custom properties —
110
+ `--retro-border-dark`, `--retro-border-sunken`, `--retro-z-index-modal` and so
111
+ on — which is what the components use. `retro-box-shadow`, `retro-focus`,
112
+ `retro-focus-ring` and `retro-breakpoint` are still here.
113
+ - **Five devDependencies**: `concat-cli`, `copyfiles`, `mkdirp`, `onchange`,
114
+ `uglify-js`. No script, workflow or config invoked any of them.
115
+
116
+ ## New
117
+
118
+ - **Sortable tables actually work.** `.retro-table-sortable` had working JS and
119
+ no styles, no markup anywhere in the repo, and no way to reach it from the
120
+ keyboard. Headers are now focusable and respond to Enter and Space, carry
121
+ `aria-sort`, and show a direction indicator. Columns are sniffed as numeric or
122
+ text, or declared:
123
+
124
+ ```html
125
+ <table class="retro-table retro-table-sortable">
126
+ <thead>
127
+ <tr>
128
+ <th>Name</th>
129
+ <th data-sort="number">Size</th>
130
+ <th data-sort="none">Actions</th>
131
+ </tr>
132
+ </thead>
133
+ <tbody>...</tbody>
134
+ </table>
135
+ ```
136
+
137
+ A cell can carry `data-sort-value` to sort a formatted value ("2 days ago",
138
+ "$1,204.00") by what it means. The numeric sniff is deliberately strict: a
139
+ loose `parseFloat` reads `2023-09-01` as `2023` and `SKU-001` as `-1`, which
140
+ quietly sorts a date column by year and an ID column by the digits after the
141
+ first dash.
142
+
143
+ - **Code blocks get a copy button.** `code-copy.js` was bundled but never
144
+ initialised, so `.retro-code-copy` existed only in the stylesheet. It now runs
145
+ from `RetroCSS.init()`. Outside a secure context, where
146
+ `navigator.clipboard` is undefined, it selects the code and says
147
+ `Press Ctrl+C` rather than failing silently.
148
+
149
+ - **`npm run docs:api`** renders the SassDoc blocks the SCSS has always carried
150
+ to `docs/api/`. `sassdoc` was installed and never wired up.
151
+
152
+ ## Verifying your own pages
153
+
154
+ `npm run check:pages` renders every page in the repo in real Chromium, in both
155
+ themes, at 1200/980/760/420/360px, and fails on console errors, horizontal
156
+ overflow, a missing or duplicated `h1`, contrast below AA on any rendered text,
157
+ or an input glyph off-centre. It is worth pointing at your own pages.
158
+
159
+ ---
160
+
1
161
  # Migrating to RetroCSS 2.0
2
162
 
3
163
  2.0 is an accessibility and readability release. Nothing was renamed and no
package/README.md CHANGED
@@ -175,9 +175,10 @@ Typography is tokenised the same way: `--retro-font`, `--retro-font-heading`,
175
175
  default; for a modern heading font, set
176
176
  `--retro-font-heading: 'Segoe UI', Tahoma, sans-serif;`.
177
177
 
178
- > **Upgrading from 1.x?** See [MIGRATION.md](MIGRATION.md). No classes were
179
- > renamed or removed, but 2.0 visibly restyles a few things to meet WCAG AA
180
- > each with a one-line override.
178
+ > **Upgrading?** See [MIGRATION.md](MIGRATION.md). No class has ever been
179
+ > renamed, but 3.0 raises the body text to 16px and drops the `!important` from
180
+ > the `border-radius` reset, both of which are visible on every page — each with
181
+ > a one-line override. 2.0 restyled a few things to meet WCAG AA.
181
182
 
182
183
  ## Utilities
183
184
 
@@ -210,6 +211,13 @@ themes. `npm run check:a11y` compiles the SCSS and asserts it, and fails the
210
211
  build on a regression — it also catches any `var(--retro-*)` that resolves to
211
212
  nothing.
212
213
 
214
+ That proves the *tokens* are sound. `npm run check:pages` proves the *pages*
215
+ are: it renders every page in the repo in real Chromium, in both themes, at
216
+ 1200/980/760/420/360px, and fails on a console error, horizontal overflow, a
217
+ missing or duplicated `<h1>`, any rendered text below AA against the surface
218
+ actually painted behind it, or an input glyph off its field's centre line. Both
219
+ run in CI on every push.
220
+
213
221
  Beyond colour:
214
222
 
215
223
  - **Focus rings are `:focus-visible`.** Keyboard and assistive-tech users get a
@@ -224,6 +232,8 @@ Beyond colour:
224
232
  Tab all behave. Escape returns focus to the toggle.
225
233
  - **`prefers-reduced-motion` is honoured** — every animation and transition is
226
234
  neutralised, with the looping text effects switched off outright.
235
+ - **Sortable tables are operable.** `.retro-table-sortable` headers are
236
+ focusable, sort on Enter and Space as well as click, and carry `aria-sort`.
227
237
  - **`.retro-sr-only`** labels icon-only controls; `.retro-sr-only-focusable`
228
238
  gives you a skip link.
229
239
 
@@ -262,6 +272,20 @@ Watch for changes:
262
272
  npm run watch
263
273
  ```
264
274
 
275
+ Run the gates:
276
+
277
+ ```bash
278
+ npm run check:a11y && npm run check:pages
279
+ ```
280
+
281
+ `check:pages` needs a browser once: `npx playwright install chromium`.
282
+
283
+ Render the SassDoc API reference to `docs/api/`:
284
+
285
+ ```bash
286
+ npm run docs:api
287
+ ```
288
+
265
289
  ## License
266
290
 
267
291
  MIT
package/dist/retro.css CHANGED
@@ -339,13 +339,13 @@
339
339
  --retro-font: MS Sans Serif, Microsoft Sans Serif, Arial, sans-serif;
340
340
  --retro-font-heading: MS Sans Serif, Microsoft Sans Serif, Arial, sans-serif;
341
341
  --retro-font-mono: Courier New, Courier, monospace;
342
- --retro-font-size: 0.875rem;
343
- --retro-font-size-xs: 0.6875rem;
344
- --retro-font-size-sm: 0.75rem;
345
- --retro-font-size-lg: 1rem;
346
- --retro-font-size-xl: 1.125rem;
347
- --retro-font-size-2xl: 1.375rem;
348
- --retro-font-size-3xl: 1.75rem;
342
+ --retro-font-size: 1rem;
343
+ --retro-font-size-xs: 0.75rem;
344
+ --retro-font-size-sm: 0.875rem;
345
+ --retro-font-size-lg: 1.125rem;
346
+ --retro-font-size-xl: 1.25rem;
347
+ --retro-font-size-2xl: 1.5rem;
348
+ --retro-font-size-3xl: 1.875rem;
349
349
  --retro-line-height: 1.5;
350
350
  --retro-line-height-tight: 1.25;
351
351
  --retro-font-weight-normal: 400;
@@ -628,7 +628,7 @@
628
628
  box-sizing: border-box;
629
629
  margin: 0;
630
630
  padding: 0;
631
- border-radius: 0 !important;
631
+ border-radius: 0;
632
632
  box-shadow: none;
633
633
  transition: none;
634
634
  }
@@ -977,7 +977,6 @@ h5, h6 {
977
977
  font-size: var(--retro-font-size-2xl);
978
978
  font-weight: var(--retro-font-weight-bold);
979
979
  text-transform: uppercase;
980
- letter-spacing: 0.08em;
981
980
  padding: 0.5rem 1.2rem;
982
981
  margin-bottom: 0.5rem;
983
982
  color: var(--retro-text);
@@ -1040,6 +1039,7 @@ h5, h6 {
1040
1039
  .retro-heading-primary, .retro-heading-success, .retro-heading-warning, .retro-heading-danger, .retro-heading-info, .retro-heading-teal, .retro-heading-pink, .retro-heading-lime {
1041
1040
  padding: var(--retro-spacing-sm) var(--retro-spacing-md);
1042
1041
  margin-bottom: var(--retro-spacing-md);
1042
+ min-width: 0;
1043
1043
  border: 2px solid;
1044
1044
  position: relative;
1045
1045
  font-family: var(--retro-font-heading);
@@ -1440,6 +1440,16 @@ h5, h6 {
1440
1440
  .retro-code .retro-code-copy:active {
1441
1441
  box-shadow: inset 1px 1px 0 var(--retro-shadow-light), inset -1px -1px 0 var(--retro-border-dark);
1442
1442
  }
1443
+ .retro-code .retro-code-copy.retro-code-copy-ok {
1444
+ background: var(--retro-success);
1445
+ color: var(--retro-success-fg);
1446
+ border-color: var(--retro-success-active);
1447
+ }
1448
+ .retro-code .retro-code-copy.retro-code-copy-fail {
1449
+ background: var(--retro-danger);
1450
+ color: var(--retro-danger-fg);
1451
+ border-color: var(--retro-danger-active);
1452
+ }
1443
1453
  .retro-code code {
1444
1454
  display: block;
1445
1455
  padding: 1.2rem;
@@ -1779,7 +1789,7 @@ h5, h6 {
1779
1789
  text-shadow: none;
1780
1790
  padding: 8px 16px;
1781
1791
  font-weight: bold;
1782
- font-size: 0.875rem;
1792
+ font-size: 1rem;
1783
1793
  user-select: none;
1784
1794
  display: block;
1785
1795
  text-align: left;
@@ -1789,7 +1799,7 @@ h5, h6 {
1789
1799
  padding: 16px 16px;
1790
1800
  background: var(--retro-card-content-bg);
1791
1801
  border-top: 2px solid var(--retro-card-content-bg);
1792
- font-size: 0.875rem;
1802
+ font-size: 1rem;
1793
1803
  color: var(--retro-card-content-text);
1794
1804
  min-height: 2em;
1795
1805
  text-align: left;
@@ -1800,7 +1810,7 @@ h5, h6 {
1800
1810
  border-top: 2px solid var(--retro-card-footer-bg);
1801
1811
  color: var(--retro-card-footer-text);
1802
1812
  padding: 8px 16px;
1803
- font-size: 0.75rem;
1813
+ font-size: 0.875rem;
1804
1814
  text-align: left;
1805
1815
  }
1806
1816
 
@@ -1814,7 +1824,7 @@ h5, h6 {
1814
1824
 
1815
1825
  .retro-card-compact .retro-card-content {
1816
1826
  padding: 4px 8px;
1817
- font-size: 0.75rem;
1827
+ font-size: 0.875rem;
1818
1828
  }
1819
1829
 
1820
1830
  /* RetroCSS - A Retro-Inspired CSS Framework */
@@ -2537,7 +2547,7 @@ input[type=radio].retro-input:focus-visible {
2537
2547
  border-top: 2px solid var(--retro-info-active);
2538
2548
  }
2539
2549
 
2540
- .retro-alert-icon, .retro-toast-icon, .retro-alert-close, .retro-toast-close {
2550
+ .retro-alert-icon, .retro-toast-icon {
2541
2551
  display: none !important;
2542
2552
  }
2543
2553
 
@@ -2571,7 +2581,12 @@ input[type=radio].retro-input:focus-visible {
2571
2581
  border-left: 6px solid var(--retro-info-active);
2572
2582
  }
2573
2583
 
2574
- .retro-toast-close {
2584
+ .retro-toast-body {
2585
+ flex: 1 1 auto;
2586
+ min-width: 0;
2587
+ }
2588
+
2589
+ .retro-alert-close, .retro-toast-close {
2575
2590
  background: none;
2576
2591
  border: none;
2577
2592
  color: inherit;
@@ -2579,12 +2594,15 @@ input[type=radio].retro-input:focus-visible {
2579
2594
  font-weight: bold;
2580
2595
  margin-left: auto;
2581
2596
  cursor: pointer;
2582
- opacity: 0.7;
2583
- transition: opacity 0.2s;
2597
+ opacity: 1;
2598
+ line-height: 1;
2599
+ padding: 0 0.25em;
2600
+ transition: background-color 0.2s;
2584
2601
  }
2585
2602
 
2586
- .retro-toast-close:hover {
2587
- opacity: 1;
2603
+ .retro-alert-close:hover, .retro-toast-close:hover,
2604
+ .retro-alert-close:focus-visible, .retro-toast-close:focus-visible {
2605
+ background-color: rgba(var(--retro-shadow-rgb), 0.18);
2588
2606
  }
2589
2607
 
2590
2608
  .retro-alert-primary {
@@ -2618,6 +2636,9 @@ input[type=radio].retro-input:focus-visible {
2618
2636
  }
2619
2637
 
2620
2638
  .retro-toast {
2639
+ display: flex;
2640
+ align-items: flex-start;
2641
+ gap: var(--retro-spacing-sm);
2621
2642
  box-shadow: 2px 4px 16px rgba(var(--retro-shadow-rgb), 0.18), 1px 1px 0 var(--retro-border-light), 2px 2px 0 var(--retro-border-medium);
2622
2643
  border-width: 1.5px;
2623
2644
  margin-bottom: 0.75em;
@@ -2727,7 +2748,7 @@ input[type=radio].retro-input:focus-visible {
2727
2748
  background-color: var(--retro-table-bg);
2728
2749
  color: var(--retro-table-header-text);
2729
2750
  font-family: var(--retro-font);
2730
- font-size: 0.875rem;
2751
+ font-size: 1rem;
2731
2752
  box-shadow: var(--retro-box-shadow-outset-button);
2732
2753
  overflow-x: auto;
2733
2754
  margin-bottom: var(--retro-spacing-md);
@@ -2757,12 +2778,43 @@ input[type=radio].retro-input:focus-visible {
2757
2778
  .retro-table tbody tr:hover {
2758
2779
  background-color: var(--retro-table-striped-bg);
2759
2780
  }
2781
+ .retro-table thead th.retro-th-sortable {
2782
+ cursor: pointer;
2783
+ user-select: none;
2784
+ padding-right: calc(var(--retro-spacing-md) + 14px);
2785
+ position: relative;
2786
+ }
2787
+ .retro-table thead th.retro-th-sortable:hover {
2788
+ background-color: var(--retro-primary);
2789
+ color: var(--retro-primary-fg);
2790
+ }
2791
+ .retro-table thead th.retro-th-sortable:focus-visible {
2792
+ outline: 2px solid var(--retro-border-light);
2793
+ outline-offset: -3px;
2794
+ }
2795
+ .retro-table thead th.retro-th-sortable::after {
2796
+ content: "\11 95";
2797
+ position: absolute;
2798
+ right: 6px;
2799
+ top: 50%;
2800
+ transform: translateY(-50%);
2801
+ font-size: var(--retro-font-size-xs);
2802
+ opacity: 0.45;
2803
+ }
2804
+ .retro-table thead th.retro-th-sortable.asc::after {
2805
+ content: "\15 B2";
2806
+ opacity: 1;
2807
+ }
2808
+ .retro-table thead th.retro-th-sortable.desc::after {
2809
+ content: "\15 BC";
2810
+ opacity: 1;
2811
+ }
2760
2812
  .retro-table.retro-table-striped tbody tr:nth-child(odd) {
2761
2813
  background-color: var(--retro-table-striped-bg);
2762
2814
  }
2763
2815
  .retro-table.retro-table-striped tbody tr:nth-child(odd):hover {
2764
2816
  background-color: var(--retro-primary);
2765
- color: var(--retro-white);
2817
+ color: var(--retro-primary-fg);
2766
2818
  }
2767
2819
  .retro-table.retro-table-bordered {
2768
2820
  border: 2px solid var(--retro-border-dark);
@@ -2800,6 +2852,27 @@ input[type=radio].retro-input:focus-visible {
2800
2852
  width: 16px;
2801
2853
  }
2802
2854
 
2855
+ /**
2856
+ * @name Responsive Table Wrapper
2857
+ * @group components
2858
+ * @description
2859
+ * Horizontal scroll container for a wide table. `table-responsive.js` wraps
2860
+ * every `.retro-table` in this class — but the styles had been commented out,
2861
+ * so the wrapper was inert and wide tables simply overflowed the page on
2862
+ * narrow viewports.
2863
+ */
2864
+ .retro-table-responsive {
2865
+ display: block;
2866
+ width: 100%;
2867
+ max-width: 100%;
2868
+ min-width: 0;
2869
+ overflow-x: auto;
2870
+ -webkit-overflow-scrolling: touch;
2871
+ }
2872
+ .retro-table-responsive > .retro-table {
2873
+ margin-bottom: 0;
2874
+ }
2875
+
2803
2876
  /* RetroCSS - A Retro-Inspired CSS Framework */
2804
2877
  /* Main SCSS file that imports all components */
2805
2878
  /* Core */
@@ -3042,7 +3115,7 @@ input[type=radio].retro-input:focus-visible {
3042
3115
  }
3043
3116
  .retro-nav-item.active, .active.retro-tab {
3044
3117
  background: var(--retro-primary);
3045
- color: var(--retro-white);
3118
+ color: var(--retro-primary-fg);
3046
3119
  text-shadow: 0 1px 2px var(--retro-border-dark), 0 0 2px var(--retro-border-light);
3047
3120
  outline: 2px solid var(--retro-border-light);
3048
3121
  outline-offset: -2px;
@@ -3117,6 +3190,7 @@ input[type=radio].retro-input:focus-visible {
3117
3190
  display: flex;
3118
3191
  flex-direction: column;
3119
3192
  width: max-content;
3193
+ max-width: 100%;
3120
3194
  border: 2px solid var(--retro-border-dark);
3121
3195
  background: var(--retro-light);
3122
3196
  padding: 0;
@@ -3157,11 +3231,11 @@ input[type=radio].retro-input:focus-visible {
3157
3231
  }
3158
3232
  .retro-nav-pills .retro-nav-item:hover, .retro-nav-pills .retro-tab:hover {
3159
3233
  background: var(--retro-primary);
3160
- color: var(--retro-white);
3234
+ color: var(--retro-primary-fg);
3161
3235
  }
3162
3236
  .retro-nav-pills .retro-nav-item.active, .retro-nav-pills .active.retro-tab {
3163
3237
  background: var(--retro-primary);
3164
- color: var(--retro-white);
3238
+ color: var(--retro-primary-fg);
3165
3239
  font-weight: bold;
3166
3240
  box-shadow: 0 1px 4px rgba(var(--retro-primary-rgb), 0.35) inset;
3167
3241
  }
@@ -3243,6 +3317,7 @@ input[type=radio].retro-input:focus-visible {
3243
3317
 
3244
3318
  .retro-nav-tabbed {
3245
3319
  display: flex;
3320
+ flex-wrap: wrap;
3246
3321
  padding: 0;
3247
3322
  margin: 0 0 -1px 0;
3248
3323
  background: transparent;
@@ -3276,6 +3351,7 @@ input[type=radio].retro-input:focus-visible {
3276
3351
 
3277
3352
  .retro-nav-underlined {
3278
3353
  display: flex;
3354
+ flex-wrap: wrap;
3279
3355
  padding: 0;
3280
3356
  margin: 0;
3281
3357
  background: transparent;
@@ -3318,6 +3394,7 @@ input[type=radio].retro-input:focus-visible {
3318
3394
 
3319
3395
  .retro-nav-buttons {
3320
3396
  display: inline-flex;
3397
+ flex-wrap: wrap;
3321
3398
  padding: 0;
3322
3399
  margin: 0;
3323
3400
  background: transparent;
@@ -3352,7 +3429,7 @@ input[type=radio].retro-input:focus-visible {
3352
3429
  }
3353
3430
  .retro-nav-buttons .retro-nav-item.active, .retro-nav-buttons .active.retro-tab {
3354
3431
  background: var(--retro-primary);
3355
- color: var(--retro-white);
3432
+ color: var(--retro-primary-fg);
3356
3433
  z-index: 2;
3357
3434
  }
3358
3435
 
@@ -3788,7 +3865,7 @@ input[type=radio].retro-input:focus-visible {
3788
3865
  .retro-pagination .retro-btn.active,
3789
3866
  .retro-pagination .retro-btn:active {
3790
3867
  background: var(--retro-primary);
3791
- color: var(--retro-white);
3868
+ color: var(--retro-primary-fg);
3792
3869
  font-weight: bold;
3793
3870
  border-color: var(--retro-primary);
3794
3871
  }
@@ -3799,6 +3876,7 @@ input[type=radio].retro-input:focus-visible {
3799
3876
  .retro-breadcrumbs {
3800
3877
  display: flex;
3801
3878
  align-items: center;
3879
+ flex-wrap: wrap;
3802
3880
  font-family: var(--retro-font);
3803
3881
  font-size: var(--retro-font-size-lg);
3804
3882
  background: var(--retro-card-bg);
@@ -3849,7 +3927,7 @@ input[type=radio].retro-input:focus-visible {
3849
3927
  }
3850
3928
  .retro-dropdown.open .retro-dropdown-toggle {
3851
3929
  background: var(--retro-primary);
3852
- color: var(--retro-white);
3930
+ color: var(--retro-primary-fg);
3853
3931
  border-color: var(--retro-primary-dark);
3854
3932
  }
3855
3933
 
@@ -3925,7 +4003,7 @@ input[type=radio].retro-input:focus-visible {
3925
4003
  }
3926
4004
  .retro-dropdown-item:hover {
3927
4005
  background: var(--retro-primary);
3928
- color: var(--retro-white);
4006
+ color: var(--retro-primary-fg);
3929
4007
  }
3930
4008
  .retro-dropdown-item:active {
3931
4009
  background: var(--retro-primary-dark);
@@ -4094,7 +4172,7 @@ input[type=radio].retro-input:focus-visible {
4094
4172
  }
4095
4173
  .retro-search-suggestion:hover {
4096
4174
  background: var(--retro-primary);
4097
- color: var(--retro-white);
4175
+ color: var(--retro-primary-fg);
4098
4176
  }
4099
4177
 
4100
4178
  /* RetroCSS - A Retro-Inspired CSS Framework */
@@ -4108,7 +4186,7 @@ input[type=radio].retro-input:focus-visible {
4108
4186
 
4109
4187
  .retro-rating-star {
4110
4188
  font-size: var(--retro-font-size-3xl);
4111
- color: var(--retro-border-dark);
4189
+ color: var(--retro-text-muted);
4112
4190
  cursor: pointer;
4113
4191
  transition: color 0.2s, text-shadow 0.2s, border 0.2s;
4114
4192
  text-shadow: 1px 1px 0 var(--retro-border-light);
@@ -4243,9 +4321,7 @@ input[type=radio].retro-input:focus-visible {
4243
4321
  box-shadow: 3px 3px 0 rgba(var(--retro-shadow-rgb), 0.2);
4244
4322
  z-index: 1050;
4245
4323
  pointer-events: none;
4246
- opacity: 0;
4247
- visibility: hidden;
4248
- transition: opacity 0.2s, visibility 0.2s;
4324
+ display: none;
4249
4325
  font-family: var(--retro-font);
4250
4326
  max-width: 200px;
4251
4327
  line-height: 1.4;
@@ -4260,8 +4336,7 @@ input[type=radio].retro-input:focus-visible {
4260
4336
  /* Active state */
4261
4337
  }
4262
4338
  .retro-tooltip.show {
4263
- opacity: 1;
4264
- visibility: visible;
4339
+ display: block;
4265
4340
  }
4266
4341
  .retro-tooltip {
4267
4342
  /* Positions */
@@ -4337,7 +4412,7 @@ input[type=radio].retro-input:focus-visible {
4337
4412
  }
4338
4413
  .retro-tooltip.retro-tooltip-primary {
4339
4414
  background: var(--retro-primary);
4340
- color: var(--retro-white);
4415
+ color: var(--retro-primary-fg);
4341
4416
  }
4342
4417
  .retro-tooltip.retro-tooltip-primary.retro-tooltip-top::after {
4343
4418
  border-top-color: var(--retro-primary);
@@ -4353,7 +4428,7 @@ input[type=radio].retro-input:focus-visible {
4353
4428
  }
4354
4429
  .retro-tooltip.retro-tooltip-success {
4355
4430
  background: var(--retro-success);
4356
- color: var(--retro-white);
4431
+ color: var(--retro-success-fg);
4357
4432
  }
4358
4433
  .retro-tooltip.retro-tooltip-success.retro-tooltip-top::after {
4359
4434
  border-top-color: var(--retro-success);
@@ -4385,7 +4460,7 @@ input[type=radio].retro-input:focus-visible {
4385
4460
  }
4386
4461
  .retro-tooltip.retro-tooltip-danger {
4387
4462
  background: var(--retro-danger);
4388
- color: var(--retro-white);
4463
+ color: var(--retro-danger-fg);
4389
4464
  }
4390
4465
  .retro-tooltip.retro-tooltip-danger.retro-tooltip-top::after {
4391
4466
  border-top-color: var(--retro-danger);
@@ -4466,7 +4541,7 @@ input[type=radio].retro-input:focus-visible {
4466
4541
  }
4467
4542
  .retro-list-hover li:hover, .retro-list-hover li:focus-visible {
4468
4543
  background-color: var(--retro-primary);
4469
- color: var(--retro-white);
4544
+ color: var(--retro-primary-fg);
4470
4545
  box-shadow: 0 2px 8px rgba(var(--retro-shadow-rgb), 0.06);
4471
4546
  outline: none;
4472
4547
  }
@@ -4496,7 +4571,7 @@ ol.retro-list li::before {
4496
4571
  width: 2em;
4497
4572
  height: 2em;
4498
4573
  background: var(--retro-primary);
4499
- color: var(--retro-white);
4574
+ color: var(--retro-primary-fg);
4500
4575
  font-weight: bold;
4501
4576
  font-family: inherit;
4502
4577
  font-size: 1.1em;
@@ -4524,7 +4599,7 @@ ol.retro-list li ol.retro-list li::before {
4524
4599
  height: 1.5em;
4525
4600
  font-size: 0.95em;
4526
4601
  background: var(--retro-success);
4527
- color: var(--retro-white);
4602
+ color: var(--retro-success-fg);
4528
4603
  border-radius: 4px;
4529
4604
  border: 2px solid var(--retro-border-medium);
4530
4605
  top: 0.1em;
@@ -7625,17 +7700,6 @@ input[type=datetime-local].retro-input.retro-input-sm {
7625
7700
  container-name: retro-container;
7626
7701
  }
7627
7702
 
7628
- @container retro-container (min-width: 20rem) {}
7629
- @container retro-container (min-width: 30rem) {}
7630
- @container retro-container (min-width: 40rem) {}
7631
- @container retro-container (min-width: 50rem) {}
7632
- @container retro-container (min-aspect-ratio: 16/9) {}
7633
- @container retro-container (max-aspect-ratio: 4/3) {}
7634
- @container retro-container (orientation: landscape) {}
7635
- @container retro-container (orientation: portrait) {}
7636
- @container retro-container (min-width: 20rem) and (max-width: 30rem) {}
7637
- @container retro-container (min-width: 30rem) and (max-width: 40rem) {}
7638
- @container retro-container (min-width: 40rem) and (max-width: 50rem) {}
7639
7703
  @container retro-container (max-width: 20rem) {
7640
7704
  .retro-cq-hide {
7641
7705
  display: none;