y2k-social-ui 0.1.0 → 0.1.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Neon Social UI contributors
3
+ Copyright (c) 2026 y2k Social UI contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Neon Social UI
1
+ # y2k Social UI
2
2
 
3
3
  A plug-and-play Y2K / MySpace-inspired React component kit for Next.js and Tailwind CSS v4. It uses CSS variables for its design tokens, so components can switch themes without depending on Tailwind utility generation.
4
4
 
@@ -52,7 +52,7 @@ Place `data-rs-theme` on any wrapper. Components inside that wrapper inherit the
52
52
  Available theme names:
53
53
 
54
54
  - `myspace` — blue social-web gradients and light panels
55
- - `cyber` — dark surfaces, neon pink, and lime accents
55
+ - `cyber` — dark surfaces, y2k pink, and lime accents
56
56
  - `chrome` — cool greys and metallic-looking title bars
57
57
 
58
58
  You can override any CSS custom property in your app:
package/package.json CHANGED
@@ -1,8 +1,30 @@
1
1
  {
2
2
  "name": "y2k-social-ui",
3
- "version": "0.1.0",
4
- "description": "A plug-and-play Y2K and MySpace-inspired UI kit for React and Next.js with Tailwind CSS v4.",
3
+ "version": "0.1.2",
4
+ "description": "Retro Y2K and MySpace-inspired UI components for React and Next.js with Tailwind CSS v4 and customizable themes.",
5
5
  "license": "MIT",
6
+ "keywords": [
7
+ "y2k",
8
+ "myspace",
9
+ "retro-ui",
10
+ "retro-design",
11
+ "y2k-design",
12
+ "react-components",
13
+ "nextjs",
14
+ "tailwindcss",
15
+ "tailwind-v4",
16
+ "social-ui",
17
+ "webcore",
18
+ "frutiger-aero",
19
+ "geocities",
20
+ "typescript",
21
+ "ui-library"
22
+ ],
23
+ "homepage": "yash.bagarias.com",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/iwilder53/y2k-social-ui"
27
+ },
6
28
  "type": "module",
7
29
  "sideEffects": [
8
30
  "./dist/theme.css"
@@ -36,5 +58,8 @@
36
58
  "@types/react-dom": "^19.0.0",
37
59
  "tsup": "^8.3.0",
38
60
  "typescript": "^5.7.0"
61
+ },
62
+ "dependencies": {
63
+ "y2k-social-ui": "^0.1.0"
39
64
  }
40
65
  }
package/dist/index.d.ts DELETED
@@ -1,57 +0,0 @@
1
- import * as react from 'react';
2
- import { HTMLAttributes, ReactNode, ButtonHTMLAttributes } from 'react';
3
-
4
- interface RetroWindowProps extends HTMLAttributes<HTMLElement> {
5
- title: string;
6
- children: ReactNode;
7
- icon?: ReactNode;
8
- controls?: boolean;
9
- variant?: "classic" | "chrome" | "flat";
10
- }
11
- declare function RetroWindow({ title, children, icon, controls, variant, className, ...props }: RetroWindowProps): react.JSX.Element;
12
-
13
- interface RetroButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
14
- variant?: "primary" | "secondary" | "ghost" | "danger";
15
- size?: "sm" | "md" | "lg";
16
- }
17
- declare function RetroButton({ variant, size, className, type, ...props }: RetroButtonProps): react.JSX.Element;
18
-
19
- interface RetroCardProps extends HTMLAttributes<HTMLDivElement> {
20
- title?: string;
21
- children: ReactNode;
22
- accent?: boolean;
23
- }
24
- declare function RetroCard({ title, children, accent, className, ...props }: RetroCardProps): react.JSX.Element;
25
-
26
- interface RetroBadgeProps extends HTMLAttributes<HTMLSpanElement> {
27
- tone?: "pink" | "blue" | "lime" | "purple" | "neutral";
28
- }
29
- declare function RetroBadge({ tone, className, ...props }: RetroBadgeProps): react.JSX.Element;
30
-
31
- interface MarqueeProps extends HTMLAttributes<HTMLDivElement> {
32
- children: ReactNode;
33
- speed?: "slow" | "normal" | "fast";
34
- separator?: string;
35
- }
36
- declare function Marquee({ children, speed, separator, className, ...props }: MarqueeProps): react.JSX.Element;
37
-
38
- interface ProfileCardProps extends HTMLAttributes<HTMLDivElement> {
39
- name: string;
40
- handle: string;
41
- avatar?: string;
42
- status?: string;
43
- mood?: string;
44
- children?: ReactNode;
45
- }
46
- declare function ProfileCard({ name, handle, avatar, status, mood, children, className, ...props }: ProfileCardProps): react.JSX.Element;
47
-
48
- interface MusicPlayerProps extends HTMLAttributes<HTMLDivElement> {
49
- title: string;
50
- artist: string;
51
- src: string;
52
- cover?: string;
53
- autoPlay?: boolean;
54
- }
55
- declare function MusicPlayer({ title, artist, src, cover, autoPlay, className, ...props }: MusicPlayerProps): react.JSX.Element;
56
-
57
- export { Marquee, type MarqueeProps, MusicPlayer, type MusicPlayerProps, ProfileCard, type ProfileCardProps, RetroBadge, type RetroBadgeProps, RetroButton, type RetroButtonProps, RetroCard, type RetroCardProps, RetroWindow, type RetroWindowProps };
package/dist/index.js DELETED
@@ -1,164 +0,0 @@
1
- // src/components/cn.ts
2
- function cn(...values) {
3
- return values.filter(Boolean).join(" ");
4
- }
5
-
6
- // src/components/retro-window.tsx
7
- import { jsx, jsxs } from "react/jsx-runtime";
8
- function RetroWindow({
9
- title,
10
- children,
11
- icon,
12
- controls = true,
13
- variant = "classic",
14
- className,
15
- ...props
16
- }) {
17
- return /* @__PURE__ */ jsxs(
18
- "section",
19
- {
20
- className: cn("rs-window", `rs-window--${variant}`, className),
21
- ...props,
22
- children: [
23
- /* @__PURE__ */ jsxs("header", { className: "rs-window__titlebar", children: [
24
- /* @__PURE__ */ jsxs("span", { className: "rs-window__title", children: [
25
- icon ? /* @__PURE__ */ jsx("span", { className: "rs-window__icon", children: icon }) : null,
26
- title
27
- ] }),
28
- controls ? /* @__PURE__ */ jsxs("span", { className: "rs-window__controls", "aria-hidden": "true", children: [
29
- /* @__PURE__ */ jsx("span", { children: "_" }),
30
- /* @__PURE__ */ jsx("span", { children: "\u25A1" }),
31
- /* @__PURE__ */ jsx("span", { children: "\xD7" })
32
- ] }) : null
33
- ] }),
34
- /* @__PURE__ */ jsx("div", { className: "rs-window__body", children })
35
- ]
36
- }
37
- );
38
- }
39
-
40
- // src/components/retro-button.tsx
41
- import { jsx as jsx2 } from "react/jsx-runtime";
42
- function RetroButton({
43
- variant = "primary",
44
- size = "md",
45
- className,
46
- type = "button",
47
- ...props
48
- }) {
49
- return /* @__PURE__ */ jsx2(
50
- "button",
51
- {
52
- type,
53
- className: cn("rs-button", `rs-button--${variant}`, `rs-button--${size}`, className),
54
- ...props
55
- }
56
- );
57
- }
58
-
59
- // src/components/retro-card.tsx
60
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
61
- function RetroCard({ title, children, accent = false, className, ...props }) {
62
- return /* @__PURE__ */ jsxs2("div", { className: cn("rs-card", accent && "rs-card--accent", className), ...props, children: [
63
- title ? /* @__PURE__ */ jsx3("div", { className: "rs-card__heading", children: title }) : null,
64
- /* @__PURE__ */ jsx3("div", { className: "rs-card__content", children })
65
- ] });
66
- }
67
-
68
- // src/components/retro-badge.tsx
69
- import { jsx as jsx4 } from "react/jsx-runtime";
70
- function RetroBadge({ tone = "pink", className, ...props }) {
71
- return /* @__PURE__ */ jsx4("span", { className: cn("rs-badge", `rs-badge--${tone}`, className), ...props });
72
- }
73
-
74
- // src/components/marquee.tsx
75
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
76
- function Marquee({ children, speed = "normal", separator = " \u2726 ", className, ...props }) {
77
- return /* @__PURE__ */ jsxs3("div", { className: cn("rs-marquee", `rs-marquee--${speed}`, className), "aria-label": typeof children === "string" ? children : void 0, ...props, children: [
78
- /* @__PURE__ */ jsxs3("div", { className: "rs-marquee__track", "aria-hidden": "true", children: [
79
- /* @__PURE__ */ jsxs3("span", { children: [
80
- children,
81
- separator
82
- ] }),
83
- /* @__PURE__ */ jsxs3("span", { children: [
84
- children,
85
- separator
86
- ] })
87
- ] }),
88
- /* @__PURE__ */ jsx5("span", { className: "rs-sr-only", children })
89
- ] });
90
- }
91
-
92
- // src/components/profile-card.tsx
93
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
94
- function ProfileCard({ name, handle, avatar, status = "ONLINE NOW", mood = "currently listening to music", children, className, ...props }) {
95
- return /* @__PURE__ */ jsxs4("div", { className: cn("rs-profile", className), ...props, children: [
96
- /* @__PURE__ */ jsxs4("div", { className: "rs-profile__top", children: [
97
- avatar ? (
98
- // eslint-disable-next-line @next/next/no-img-element
99
- /* @__PURE__ */ jsx6("img", { className: "rs-profile__avatar", src: avatar, alt: `${name}'s avatar` })
100
- ) : /* @__PURE__ */ jsx6("div", { className: "rs-profile__avatar rs-profile__avatar--placeholder", "aria-hidden": "true", children: "\u273F" }),
101
- /* @__PURE__ */ jsxs4("div", { className: "rs-profile__identity", children: [
102
- /* @__PURE__ */ jsx6("h2", { children: name }),
103
- /* @__PURE__ */ jsxs4("p", { children: [
104
- "@",
105
- handle
106
- ] }),
107
- /* @__PURE__ */ jsxs4("span", { className: "rs-status", children: [
108
- /* @__PURE__ */ jsx6("i", {}),
109
- status
110
- ] })
111
- ] })
112
- ] }),
113
- /* @__PURE__ */ jsx6("div", { className: "rs-profile__mood", children: mood }),
114
- children ? /* @__PURE__ */ jsx6("div", { className: "rs-profile__extra", children }) : null
115
- ] });
116
- }
117
-
118
- // src/components/music-player.tsx
119
- import { useRef, useState } from "react";
120
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
121
- function MusicPlayer({ title, artist, src, cover, autoPlay = false, className, ...props }) {
122
- const audioRef = useRef(null);
123
- const [playing, setPlaying] = useState(false);
124
- const toggle = async () => {
125
- const audio = audioRef.current;
126
- if (!audio) return;
127
- if (audio.paused) {
128
- try {
129
- await audio.play();
130
- setPlaying(true);
131
- } catch {
132
- setPlaying(false);
133
- }
134
- } else {
135
- audio.pause();
136
- setPlaying(false);
137
- }
138
- };
139
- return /* @__PURE__ */ jsxs5("div", { className: cn("rs-player", className), ...props, children: [
140
- /* @__PURE__ */ jsx7("audio", { ref: audioRef, src, autoPlay, onEnded: () => setPlaying(false), onPause: () => setPlaying(false), onPlay: () => setPlaying(true) }),
141
- /* @__PURE__ */ jsx7("div", { className: "rs-player__cover", children: cover ? /* @__PURE__ */ jsx7("img", { src: cover, alt: "" }) : /* @__PURE__ */ jsx7("span", { "aria-hidden": "true", children: "\u266B" }) }),
142
- /* @__PURE__ */ jsxs5("div", { className: "rs-player__meta", children: [
143
- /* @__PURE__ */ jsx7("strong", { children: title }),
144
- /* @__PURE__ */ jsx7("span", { children: artist }),
145
- /* @__PURE__ */ jsxs5("div", { className: "rs-player__equalizer", "aria-hidden": "true", children: [
146
- /* @__PURE__ */ jsx7("i", {}),
147
- /* @__PURE__ */ jsx7("i", {}),
148
- /* @__PURE__ */ jsx7("i", {}),
149
- /* @__PURE__ */ jsx7("i", {}),
150
- /* @__PURE__ */ jsx7("i", {})
151
- ] })
152
- ] }),
153
- /* @__PURE__ */ jsx7("button", { className: "rs-player__toggle", type: "button", onClick: toggle, "aria-label": playing ? "Pause track" : "Play track", children: playing ? "\u2161" : "\u25B6" })
154
- ] });
155
- }
156
- export {
157
- Marquee,
158
- MusicPlayer,
159
- ProfileCard,
160
- RetroBadge,
161
- RetroButton,
162
- RetroCard,
163
- RetroWindow
164
- };
package/dist/theme.css DELETED
@@ -1,160 +0,0 @@
1
- /*
2
- * Neon Social UI — CSS-first theme tokens, compatible with Tailwind CSS v4.
3
- * Import this file once in app/globals.css or app/layout.tsx.
4
- */
5
- @import url("https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Space+Grotesk:wght@400;500;600;700&display=swap");
6
-
7
- :root {
8
- --rs-font-sans: "Space Grotesk", ui-sans-serif, system-ui, sans-serif;
9
- --rs-font-mono: "DM Mono", ui-monospace, monospace;
10
- --rs-bg: #f4f2ff;
11
- --rs-surface: #ffffff;
12
- --rs-surface-raised: #f9f7ff;
13
- --rs-text: #20163b;
14
- --rs-muted: #716785;
15
- --rs-border: #b8a9db;
16
- --rs-primary: #4d5bff;
17
- --rs-primary-contrast: #ffffff;
18
- --rs-pink: #ff5cb8;
19
- --rs-lime: #d9ff70;
20
- --rs-purple: #a878ff;
21
- --rs-shadow: 4px 4px 0 rgb(58 36 106 / 18%);
22
- --rs-radius: 12px;
23
- --rs-radius-sm: 7px;
24
- --rs-focus: #ff3ca6;
25
- }
26
-
27
- /* Apply a theme at any subtree: <main data-rs-theme="cyber"> */
28
- [data-rs-theme="myspace"] {
29
- --rs-bg: #dcecff;
30
- --rs-surface: #f8fbff;
31
- --rs-surface-raised: #eaf3ff;
32
- --rs-text: #122f61;
33
- --rs-muted: #496b9d;
34
- --rs-border: #8bb4e7;
35
- --rs-primary: #2866c7;
36
- --rs-primary-contrast: #fff;
37
- --rs-pink: #ff8ac7;
38
- --rs-lime: #d9ff8a;
39
- --rs-purple: #8b85ff;
40
- --rs-shadow: 4px 4px 0 rgb(25 76 145 / 20%);
41
- }
42
- [data-rs-theme="cyber"] {
43
- --rs-bg: #0b0b12;
44
- --rs-surface: #171722;
45
- --rs-surface-raised: #20202f;
46
- --rs-text: #f6f1ff;
47
- --rs-muted: #aaa3c5;
48
- --rs-border: #51436b;
49
- --rs-primary: #ff3eb5;
50
- --rs-primary-contrast: #180716;
51
- --rs-pink: #ff3eb5;
52
- --rs-lime: #d7ff3f;
53
- --rs-purple: #a878ff;
54
- --rs-shadow: 4px 4px 0 rgb(255 62 181 / 18%);
55
- --rs-focus: #d7ff3f;
56
- }
57
- [data-rs-theme="chrome"] {
58
- --rs-bg: #e6e8ee;
59
- --rs-surface: #f8f9fb;
60
- --rs-surface-raised: #e1e4eb;
61
- --rs-text: #20232d;
62
- --rs-muted: #656a77;
63
- --rs-border: #a3a8b6;
64
- --rs-primary: #686f80;
65
- --rs-primary-contrast: #fff;
66
- --rs-pink: #e8a6d2;
67
- --rs-lime: #c8e986;
68
- --rs-purple: #a6a5ed;
69
- --rs-shadow: 4px 4px 0 rgb(44 49 62 / 15%);
70
- }
71
-
72
- .rs-theme {
73
- min-height: 100%;
74
- color: var(--rs-text);
75
- background: var(--rs-bg);
76
- font-family: var(--rs-font-sans);
77
- }
78
- .rs-window, .rs-card, .rs-profile, .rs-player {
79
- color: var(--rs-text);
80
- border: 1px solid var(--rs-border);
81
- border-radius: var(--rs-radius);
82
- background: var(--rs-surface);
83
- box-shadow: var(--rs-shadow);
84
- }
85
- .rs-window { overflow: hidden; }
86
- .rs-window__titlebar {
87
- display: flex; align-items: center; justify-content: space-between; gap: 12px;
88
- min-height: 40px; padding: 8px 12px; color: white;
89
- background: linear-gradient(110deg, var(--rs-primary), var(--rs-purple));
90
- font: 500 12px var(--rs-font-mono);
91
- }
92
- .rs-window__title { display: flex; align-items: center; gap: 8px; min-width: 0; overflow-wrap: anywhere; }
93
- .rs-window__icon { display: inline-flex; }
94
- .rs-window__controls { display: flex; gap: 4px; flex-shrink: 0; }
95
- .rs-window__controls span {
96
- display: inline-grid; place-items: center; width: 20px; height: 18px;
97
- color: var(--rs-text); background: var(--rs-surface); border: 1px solid rgb(255 255 255 / 70%);
98
- border-radius: 3px; font: 700 12px var(--rs-font-mono);
99
- }
100
- .rs-window__body { padding: 16px; }
101
- .rs-window--chrome .rs-window__titlebar { color: var(--rs-text); background: linear-gradient(#fff, #cbd0db); border-bottom: 1px solid var(--rs-border); }
102
- .rs-window--flat { box-shadow: none; }
103
- .rs-button {
104
- display: inline-flex; align-items: center; justify-content: center; gap: 8px;
105
- min-height: 38px; padding: 9px 14px; border: 1px solid transparent;
106
- border-radius: var(--rs-radius-sm); cursor: pointer; font: 600 13px var(--rs-font-sans);
107
- transition: transform 120ms ease, filter 120ms ease; text-decoration: none;
108
- }
109
- .rs-button:hover { filter: brightness(1.06); transform: translateY(-1px); }
110
- .rs-button:active { transform: translate(1px, 1px); }
111
- .rs-button:focus-visible, .rs-player__toggle:focus-visible { outline: 3px solid var(--rs-focus); outline-offset: 3px; }
112
- .rs-button--primary { background: linear-gradient(120deg, var(--rs-primary), var(--rs-purple)); color: var(--rs-primary-contrast); border-color: var(--rs-border); box-shadow: 2px 2px 0 rgb(0 0 0 / 12%); }
113
- .rs-button--secondary { background: var(--rs-lime); color: #27203c; border-color: var(--rs-border); }
114
- .rs-button--ghost { background: transparent; color: var(--rs-text); border-color: var(--rs-border); }
115
- .rs-button--danger { background: #ffdfeb; color: #8d164b; border-color: #e98bb2; }
116
- .rs-button--sm { min-height: 30px; padding: 6px 10px; font-size: 12px; }
117
- .rs-button--lg { min-height: 46px; padding: 12px 18px; font-size: 15px; }
118
- .rs-card { overflow: hidden; }
119
- .rs-card__heading { padding: 9px 12px; background: var(--rs-surface-raised); border-bottom: 1px solid var(--rs-border); font: 500 11px var(--rs-font-mono); text-transform: uppercase; letter-spacing: .08em; }
120
- .rs-card__content { padding: 14px; }
121
- .rs-card--accent { border-top: 4px solid var(--rs-pink); }
122
- .rs-badge { display: inline-flex; align-items: center; padding: 4px 8px; border: 1px solid var(--rs-border); border-radius: 4px; font: 500 10px var(--rs-font-mono); letter-spacing: .04em; text-transform: uppercase; }
123
- .rs-badge--pink { background: var(--rs-pink); color: #25132c; }
124
- .rs-badge--blue { background: #c9e5ff; color: #143c74; }
125
- .rs-badge--lime { background: var(--rs-lime); color: #27330b; }
126
- .rs-badge--purple { background: var(--rs-purple); color: #21113b; }
127
- .rs-badge--neutral { background: var(--rs-surface-raised); color: var(--rs-text); }
128
- .rs-profile { padding: 14px; }
129
- .rs-profile__top { display: flex; align-items: center; gap: 12px; }
130
- .rs-profile__avatar { width: 72px; height: 72px; object-fit: cover; border: 2px solid var(--rs-pink); border-radius: 8px; background: var(--rs-surface-raised); }
131
- .rs-profile__avatar--placeholder { display: grid; place-items: center; color: var(--rs-primary); font-size: 36px; }
132
- .rs-profile__identity h2 { margin: 0; font-size: 19px; font-weight: 700; }
133
- .rs-profile__identity p { margin: 2px 0 7px; color: var(--rs-muted); font: 11px var(--rs-font-mono); }
134
- .rs-status { display: inline-flex; align-items: center; gap: 6px; color: var(--rs-muted); font: 10px var(--rs-font-mono); }
135
- .rs-status i { width: 7px; height: 7px; border-radius: 50%; background: #69db83; box-shadow: 0 0 0 3px rgb(105 219 131 / 18%); }
136
- .rs-profile__mood { margin-top: 14px; padding: 9px 10px; border: 1px dashed var(--rs-border); border-radius: 6px; background: var(--rs-surface-raised); font-size: 12px; }
137
- .rs-profile__extra { margin-top: 12px; }
138
- .rs-marquee { overflow: hidden; border: 1px solid var(--rs-border); border-radius: 5px; background: var(--rs-surface-raised); color: var(--rs-text); }
139
- .rs-marquee__track { display: flex; width: max-content; animation: rs-marquee-scroll 22s linear infinite; }
140
- .rs-marquee__track span { flex-shrink: 0; padding: 8px 0; font: 11px var(--rs-font-mono); white-space: nowrap; }
141
- .rs-marquee--slow .rs-marquee__track { animation-duration: 34s; }
142
- .rs-marquee--fast .rs-marquee__track { animation-duration: 12s; }
143
- .rs-marquee:hover .rs-marquee__track { animation-play-state: paused; }
144
- @keyframes rs-marquee-scroll { to { transform: translateX(-50%); } }
145
- .rs-player { display: flex; align-items: center; gap: 12px; padding: 10px; }
146
- .rs-player audio { display: none; }
147
- .rs-player__cover { display: grid; place-items: center; width: 48px; height: 48px; overflow: hidden; border-radius: 6px; background: linear-gradient(135deg, var(--rs-pink), var(--rs-purple)); color: white; font-size: 25px; flex-shrink: 0; }
148
- .rs-player__cover img { width: 100%; height: 100%; object-fit: cover; }
149
- .rs-player__meta { display: grid; gap: 2px; min-width: 0; flex: 1; }
150
- .rs-player__meta strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
151
- .rs-player__meta > span { color: var(--rs-muted); font-size: 11px; }
152
- .rs-player__equalizer { display: flex; align-items: end; gap: 2px; height: 9px; margin-top: 3px; }
153
- .rs-player__equalizer i { width: 3px; height: 4px; background: var(--rs-primary); }
154
- .rs-player__equalizer i:nth-child(2), .rs-player__equalizer i:nth-child(4) { height: 9px; }
155
- .rs-player__toggle { display: grid; place-items: center; width: 34px; height: 34px; border: 1px solid var(--rs-border); border-radius: 50%; background: var(--rs-surface-raised); color: var(--rs-text); cursor: pointer; }
156
- .rs-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
157
- @media (prefers-reduced-motion: reduce) {
158
- .rs-marquee__track { animation: none; }
159
- .rs-button { transition: none; }
160
- }