@rtsee/ngx 0.0.102 → 0.0.104

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.
Files changed (44) hide show
  1. package/dist/ngx/fesm2022/rtsee-ngx.mjs +3002 -1591
  2. package/dist/ngx/fesm2022/rtsee-ngx.mjs.map +1 -1
  3. package/dist/ngx/index.d.ts +106 -11
  4. package/dist/ngx/src/lib/theme/common-components/image-uploader.scss +37 -4
  5. package/dist/ngx/src/lib/theme/common-variables.scss +1 -1
  6. package/dist/ngx/src/lib/theme/common.scss +1 -1
  7. package/dist/ngx/src/lib/theme/containers/shell.scss +2 -2
  8. package/dist/ngx/src/lib/theme/forms/variables.scss +1 -2
  9. package/dist/ngx/src/lib/theme/messenger/call-widget.scss +25 -6
  10. package/dist/ngx/src/lib/theme/messenger/chat-input.scss +206 -17
  11. package/dist/ngx/src/lib/theme/messenger/chat-thumbnail.scss +79 -62
  12. package/dist/ngx/src/lib/theme/messenger/chat.scss +38 -23
  13. package/dist/ngx/src/lib/theme/messenger/chats-list.scss +10 -10
  14. package/dist/ngx/src/lib/theme/messenger/create-chat.scss +383 -0
  15. package/dist/ngx/src/lib/theme/messenger/index.scss +7 -0
  16. package/dist/ngx/src/lib/theme/messenger/invite-link.scss +63 -0
  17. package/dist/ngx/src/lib/theme/messenger/message-time-and-status.scss +29 -15
  18. package/dist/ngx/src/lib/theme/messenger/message.scss +36 -21
  19. package/dist/ngx/src/lib/theme/messenger/messages-list.scss +83 -68
  20. package/dist/ngx/src/lib/theme/messenger/messenger-header.scss +257 -77
  21. package/dist/ngx/src/lib/theme/messenger/messenger-search.scss +26 -11
  22. package/dist/ngx/src/lib/theme/messenger/messenger.scss +42 -26
  23. package/dist/ngx/src/lib/theme/messenger/payment-product-snippet.scss +57 -72
  24. package/dist/ngx/src/lib/theme/messenger/payments.scss +31 -105
  25. package/dist/ngx/src/lib/theme/messenger/profile.scss +109 -137
  26. package/dist/ngx/src/lib/theme/messenger/rate-input.scss +37 -15
  27. package/dist/ngx/src/lib/theme/messenger/variables.scss +13 -3
  28. package/dist/ngx/src/lib/theme/rts-common/_index.scss +24 -0
  29. package/dist/ngx/src/lib/theme/rts-common/_variables-colors.scss +133 -0
  30. package/dist/ngx/src/lib/theme/rts-common/_variables-effects.scss +28 -0
  31. package/dist/ngx/src/lib/theme/rts-common/_variables-layout.scss +30 -0
  32. package/dist/ngx/src/lib/theme/rts-common/_variables-spacing.scss +12 -0
  33. package/dist/ngx/src/lib/theme/rts-common/_variables-typography.scss +36 -0
  34. package/dist/ngx/src/lib/theme/rts-common/animations.scss +77 -0
  35. package/dist/ngx/src/lib/theme/rts-common/avatars.scss +76 -0
  36. package/dist/ngx/src/lib/theme/rts-common/buttons.scss +169 -0
  37. package/dist/ngx/src/lib/theme/rts-common/cards.scss +71 -0
  38. package/dist/ngx/src/lib/theme/rts-common/forms.scss +191 -0
  39. package/dist/ngx/src/lib/theme/rts-common/inputs.scss +109 -0
  40. package/dist/ngx/src/lib/theme/rts-common/labels.scss +80 -0
  41. package/dist/ngx/src/lib/theme/rts-common/messages.scss +60 -0
  42. package/dist/ngx/src/lib/theme/rts-common/user-thumbnails.scss +68 -0
  43. package/dist/ngx/src/lib/theme/styles.scss +1 -0
  44. package/package.json +12 -11
@@ -0,0 +1,28 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Unified Effects Variables
3
+ // ═══════════════════════════════════════════════════════════════════
4
+
5
+ // ── Transitions ─────────────────────────────────────────────────
6
+ $rtsu-transition-fast: 0.15s ease;
7
+ $rtsu-transition-base: 0.25s ease;
8
+ $rtsu-transition-slow: 0.4s ease;
9
+ $rtsu-transition-spring: 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
10
+
11
+ // ── Shadows ─────────────────────────────────────────────────────
12
+ $rtsu-shadow-xs: 0 1px 3px rgba(var(--rts-shadow-rgb, 0, 0, 0), 0.1);
13
+ $rtsu-shadow-sm: 0 2px 8px rgba(var(--rts-shadow-rgb, 0, 0, 0), 0.15);
14
+ $rtsu-shadow-md: 0 4px 16px rgba(var(--rts-shadow-rgb, 0, 0, 0), 0.2);
15
+ $rtsu-shadow-lg: 0 8px 32px rgba(var(--rts-shadow-rgb, 0, 0, 0), 0.25);
16
+ $rtsu-shadow-xl: 0 16px 48px rgba(var(--rts-shadow-rgb, 0, 0, 0), 0.3);
17
+
18
+ // ── Accent Shadows ──────────────────────────────────────────────
19
+ $rtsu-shadow-accent-sm: 0 2px 8px rgba(108, 92, 231, 0.2);
20
+ $rtsu-shadow-accent-md: 0 4px 20px rgba(108, 92, 231, 0.3);
21
+ $rtsu-shadow-accent-lg: 0 8px 32px rgba(108, 92, 231, 0.4);
22
+
23
+ $rtsu-shadow-blue-sm: 0 2px 8px rgba(59, 130, 247, 0.2);
24
+ $rtsu-shadow-blue-md: 0 4px 16px rgba(59, 130, 247, 0.3);
25
+
26
+ // ── Glass Effects ───────────────────────────────────────────────
27
+ $rtsu-glass-blur: blur(12px);
28
+ $rtsu-glass-blur-lg: blur(20px);
@@ -0,0 +1,30 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Unified Layout Variables
3
+ // ═══════════════════════════════════════════════════════════════════
4
+
5
+ // ── Border Radius ───────────────────────────────────────────────
6
+ $rtsu-radius-xs: 4px;
7
+ $rtsu-radius-sm: 8px; // original: $rts-new-default-border-radius
8
+ $rtsu-radius-md: 12px; // original: $ai-default-border-radius
9
+ $rtsu-radius-lg: 16px; // original: $rts-rounded-border-radius
10
+ $rtsu-radius-xl: 20px;
11
+ $rtsu-radius-pill: 999px;
12
+
13
+ // ── Avatar Sizes ────────────────────────────────────────────────
14
+ $rtsu-avatar-xs: 28px;
15
+ $rtsu-avatar-sm: 40px; // original: $rts-new-user-avatar-d-sm
16
+ $rtsu-avatar-md: 54px; // original: $rts-user-avatar-d-md
17
+ $rtsu-avatar-lg: 65px; // original: $rts-user-avatar-d-lg
18
+ $rtsu-avatar-xl: 80px;
19
+
20
+ // ── Breakpoints ─────────────────────────────────────────────────
21
+ $rtsu-break-sm: 480px; // original: $rts-break-sm
22
+ $rtsu-break-md: 800px; // original: $rts-break-md
23
+ $rtsu-break-lg: 1100px; // original: $rts-break-lg
24
+
25
+ // ── Structural Dimensions ───────────────────────────────────────
26
+ $rtsu-messenger-header-height: 58px;
27
+ $rtsu-bottom-nav-height: 75px; // original: $rts-bottom-nav-height
28
+ $rtsu-sidebar-width: 75px; // original: $rts-sidebar-width
29
+ $rtsu-chat-input-height: 44px;
30
+ $rtsu-message-status-width: 69px; // original: $rts-message-status-width
@@ -0,0 +1,12 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Unified Spacing Variables
3
+ // ═══════════════════════════════════════════════════════════════════
4
+
5
+ $rtsu-space-2xs: 2px;
6
+ $rtsu-space-xs: 4px; // original: $rts-offset-xsm
7
+ $rtsu-space-sm: 8px; // original: $rts-offset-sm
8
+ $rtsu-space-md: 16px; // original: $rts-offset-md
9
+ $rtsu-space-lg: 24px; // original: $rts-offset-lg
10
+ $rtsu-space-xl: 32px; // original: $rts-offset-xl
11
+ $rtsu-space-2xl: 48px;
12
+ $rtsu-space-3xl: 64px;
@@ -0,0 +1,36 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Unified Typography Variables
3
+ // ═══════════════════════════════════════════════════════════════════
4
+
5
+ $rtsu-font-family: "Work Sans", "Inter", -apple-system, BlinkMacSystemFont,
6
+ "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
7
+
8
+ // ── Font Sizes ──────────────────────────────────────────────────
9
+ $rtsu-font-size-2xs: 10px;
10
+ $rtsu-font-size-xs: 11px;
11
+ $rtsu-font-size-sm: 12px; // original: $rts-new-small-text-size
12
+ $rtsu-font-size-base: 14px;
13
+ $rtsu-font-size-md: 16px; // original: $rts-new-default-text-size
14
+ $rtsu-font-size-lg: 18px;
15
+ $rtsu-font-size-xl: 24px;
16
+ $rtsu-font-size-2xl: 32px;
17
+ $rtsu-font-size-3xl: 36px;
18
+
19
+ // ── Font Weights ────────────────────────────────────────────────
20
+ $rtsu-font-weight-light: 300;
21
+ $rtsu-font-weight-regular: 400;
22
+ $rtsu-font-weight-medium: 500;
23
+ $rtsu-font-weight-semibold: 600;
24
+ $rtsu-font-weight-bold: 700;
25
+ $rtsu-font-weight-extrabold: 800;
26
+
27
+ // ── Line Heights ────────────────────────────────────────────────
28
+ $rtsu-line-height-tight: 1.15;
29
+ $rtsu-line-height-snug: 1.3;
30
+ $rtsu-line-height-normal: 1.5;
31
+ $rtsu-line-height-relaxed: 1.72;
32
+
33
+ // ── Letter Spacing ──────────────────────────────────────────────
34
+ $rtsu-tracking-tight: -0.02em;
35
+ $rtsu-tracking-normal: 0;
36
+ $rtsu-tracking-wide: 0.02em;
@@ -0,0 +1,77 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Shared Keyframe Animations
3
+ // ═══════════════════════════════════════════════════════════════════
4
+
5
+ @keyframes rts-fade-up {
6
+ from {
7
+ opacity: 0;
8
+ transform: translateY(20px);
9
+ }
10
+ to {
11
+ opacity: 1;
12
+ transform: translateY(0);
13
+ }
14
+ }
15
+
16
+ @keyframes rts-fade-in {
17
+ from { opacity: 0; }
18
+ to { opacity: 1; }
19
+ }
20
+
21
+ @keyframes rts-slide-in-right {
22
+ from {
23
+ opacity: 0;
24
+ transform: translateX(20px);
25
+ }
26
+ to {
27
+ opacity: 1;
28
+ transform: translateX(0);
29
+ }
30
+ }
31
+
32
+ @keyframes rts-slide-in-left {
33
+ from {
34
+ opacity: 0;
35
+ transform: translateX(-20px);
36
+ }
37
+ to {
38
+ opacity: 1;
39
+ transform: translateX(0);
40
+ }
41
+ }
42
+
43
+ @keyframes rts-slide-down {
44
+ from {
45
+ opacity: 0;
46
+ transform: translateY(-8px);
47
+ }
48
+ to {
49
+ opacity: 1;
50
+ transform: translateY(0);
51
+ }
52
+ }
53
+
54
+ @keyframes rts-shimmer {
55
+ 0% { transform: translateX(-100%); }
56
+ 100% { transform: translateX(100%); }
57
+ }
58
+
59
+ @keyframes rts-spin {
60
+ to { transform: rotate(360deg); }
61
+ }
62
+
63
+ @keyframes rts-pulse {
64
+ 0%, 100% { opacity: 1; }
65
+ 50% { opacity: 0.6; }
66
+ }
67
+
68
+ @keyframes rts-scale-in {
69
+ from {
70
+ opacity: 0;
71
+ transform: scale(0.9);
72
+ }
73
+ to {
74
+ opacity: 1;
75
+ transform: scale(1);
76
+ }
77
+ }
@@ -0,0 +1,76 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Avatar Component Styles
3
+ // ═══════════════════════════════════════════════════════════════════
4
+ @import "./variables-layout";
5
+ @import "./variables-effects";
6
+
7
+ .rts-avatar {
8
+ position: relative;
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ border-radius: 50%;
13
+ overflow: hidden;
14
+ flex-shrink: 0;
15
+ user-select: none;
16
+
17
+ img {
18
+ width: 100%;
19
+ height: 100%;
20
+ object-fit: cover;
21
+ display: block;
22
+ border-radius: 50%;
23
+ }
24
+
25
+ // ── Size Variants ──
26
+ &.rts-avatar-xs {
27
+ width: $rtsu-avatar-xs;
28
+ height: $rtsu-avatar-xs;
29
+ }
30
+
31
+ &.rts-avatar-sm {
32
+ width: $rtsu-avatar-sm;
33
+ height: $rtsu-avatar-sm;
34
+ }
35
+
36
+ &.rts-avatar-md {
37
+ width: $rtsu-avatar-md;
38
+ height: $rtsu-avatar-md;
39
+ }
40
+
41
+ &.rts-avatar-lg {
42
+ width: $rtsu-avatar-lg;
43
+ height: $rtsu-avatar-lg;
44
+ }
45
+
46
+ &.rts-avatar-xl {
47
+ width: $rtsu-avatar-xl;
48
+ height: $rtsu-avatar-xl;
49
+ }
50
+
51
+ // ── Ring Effect (hover / focused state) ──
52
+ &.rts-avatar-ring {
53
+ box-shadow: 0 0 0 2px var(--rts-bg-primary),
54
+ 0 0 0 4px var(--rts-accent);
55
+ }
56
+
57
+ // ── Background image mode ──
58
+ &.rts-avatar-bg {
59
+ background-size: cover;
60
+ background-position: center;
61
+ background-repeat: no-repeat;
62
+ }
63
+ }
64
+
65
+ // ── Online Indicator ──
66
+ .rts-avatar-online-dot {
67
+ position: absolute;
68
+ bottom: 1px;
69
+ right: 1px;
70
+ width: 10px;
71
+ height: 10px;
72
+ border-radius: 50%;
73
+ background-color: var(--rts-success, #2ecc71);
74
+ border: 2px solid var(--rts-bg-primary);
75
+ z-index: 1;
76
+ }
@@ -0,0 +1,169 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Button Styles
3
+ // ═══════════════════════════════════════════════════════════════════
4
+ @import "./variables-spacing";
5
+ @import "./variables-typography";
6
+ @import "./variables-layout";
7
+ @import "./variables-effects";
8
+ @import "./variables-colors";
9
+
10
+ // ── Base Button ──
11
+ .rts-btn {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: $rtsu-space-sm;
16
+ padding: $rtsu-space-sm + $rtsu-space-xs $rtsu-space-lg;
17
+ border: none;
18
+ border-radius: $rtsu-radius-sm + 2px; // 10px
19
+ font-family: $rtsu-font-family;
20
+ font-size: $rtsu-font-size-base;
21
+ font-weight: $rtsu-font-weight-semibold;
22
+ letter-spacing: $rtsu-tracking-wide;
23
+ cursor: pointer;
24
+ transition: transform $rtsu-transition-base,
25
+ box-shadow $rtsu-transition-base,
26
+ background-color $rtsu-transition-base,
27
+ border-color $rtsu-transition-base;
28
+ position: relative;
29
+ overflow: hidden;
30
+ user-select: none;
31
+ line-height: 1.4;
32
+
33
+ &:hover {
34
+ transform: translateY(-1px);
35
+ }
36
+
37
+ &:active {
38
+ transform: translateY(0);
39
+ }
40
+
41
+ &:disabled {
42
+ opacity: 0.5;
43
+ cursor: not-allowed;
44
+ transform: none;
45
+ }
46
+
47
+ // Full width modifier
48
+ &.rts-btn-block {
49
+ width: 100%;
50
+ }
51
+ }
52
+
53
+ // ── Primary (gradient accent) ──
54
+ .rts-btn-primary {
55
+ background: linear-gradient(135deg, $rtsu-accent-purple 0%, $rtsu-accent-purple-light 100%);
56
+ color: #fff;
57
+ box-shadow: $rtsu-shadow-accent-md;
58
+
59
+ &::before {
60
+ content: '';
61
+ position: absolute;
62
+ inset: 0;
63
+ background: linear-gradient(
64
+ 105deg,
65
+ transparent 40%,
66
+ rgba(255, 255, 255, 0.15) 50%,
67
+ transparent 60%
68
+ );
69
+ animation: rts-shimmer 3s ease-in-out infinite;
70
+ }
71
+
72
+ &:hover {
73
+ box-shadow: $rtsu-shadow-accent-lg;
74
+ }
75
+
76
+ &:active {
77
+ box-shadow: $rtsu-shadow-accent-sm;
78
+ }
79
+ }
80
+
81
+ // ── Ghost (transparent with border) ──
82
+ .rts-btn-ghost {
83
+ background: transparent;
84
+ color: var(--rts-text-primary);
85
+ border: 1px solid var(--rts-border-bright);
86
+
87
+ &:hover {
88
+ background: var(--rts-bg-surface-hover);
89
+ border-color: rgba(108, 92, 231, 0.4);
90
+ }
91
+ }
92
+
93
+ // ── Danger ──
94
+ .rts-btn-danger {
95
+ background: var(--rts-danger-bg);
96
+ color: var(--rts-danger, #e84118);
97
+ border: 1px solid var(--rts-danger-border);
98
+
99
+ &:hover {
100
+ background: rgba(232, 65, 24, 0.2);
101
+ border-color: rgba(232, 65, 24, 0.4);
102
+ }
103
+ }
104
+
105
+ // ── Icon Button (circular) ──
106
+ .rts-btn-icon {
107
+ width: 40px;
108
+ height: 40px;
109
+ padding: 0;
110
+ border-radius: 50%;
111
+ background: rgba(255, 255, 255, 0.06);
112
+ border: 1px solid var(--rts-border-med);
113
+ color: var(--rts-accent-light, #a29bfe);
114
+ transition: background $rtsu-transition-fast,
115
+ transform $rtsu-transition-fast,
116
+ box-shadow $rtsu-transition-fast;
117
+
118
+ &:hover {
119
+ background: rgba(108, 92, 231, 0.15);
120
+ transform: translateY(-2px);
121
+ box-shadow: 0 4px 16px rgba(108, 92, 231, 0.2);
122
+ }
123
+
124
+ &:active {
125
+ transform: translateY(0);
126
+ }
127
+
128
+ // Sizes
129
+ &.rts-btn-icon-sm {
130
+ width: 32px;
131
+ height: 32px;
132
+ }
133
+
134
+ &.rts-btn-icon-lg {
135
+ width: 52px;
136
+ height: 52px;
137
+ }
138
+ }
139
+
140
+ // ── FAB-style accent icon button ──
141
+ .rts-btn-fab {
142
+ width: 36px;
143
+ height: 36px;
144
+ padding: 0;
145
+ border-radius: 50%;
146
+ border: none;
147
+ background-color: var(--rts-accent-blue, #3b82f7);
148
+ color: #fff;
149
+ cursor: pointer;
150
+ display: flex;
151
+ align-items: center;
152
+ justify-content: center;
153
+ transition: background-color $rtsu-transition-fast,
154
+ transform $rtsu-transition-fast;
155
+ box-shadow: $rtsu-shadow-blue-md;
156
+
157
+ &:hover {
158
+ background-color: darken(#3b82f7, 8%);
159
+ transform: scale(1.05);
160
+ }
161
+
162
+ &:active {
163
+ transform: scale(0.95);
164
+ }
165
+
166
+ .material-icons-outlined {
167
+ font-size: 20px;
168
+ }
169
+ }
@@ -0,0 +1,71 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Glass Card Styles
3
+ // Matches the presentation component's glassmorphism design language
4
+ // ═══════════════════════════════════════════════════════════════════
5
+ @import "./variables-spacing";
6
+ @import "./variables-layout";
7
+ @import "./variables-effects";
8
+ @import "./variables-colors";
9
+
10
+ .rts-glass-card {
11
+ background: linear-gradient(
12
+ 135deg,
13
+ var(--rts-card-bg-start, #{$rtsu-card-bg-start}) 0%,
14
+ var(--rts-card-bg-end, #{$rtsu-card-bg-end}) 100%
15
+ );
16
+ border: 1px solid var(--rts-border-dim);
17
+ border-radius: $rtsu-radius-lg;
18
+ backdrop-filter: $rtsu-glass-blur;
19
+ padding: $rtsu-space-md;
20
+ transition: transform $rtsu-transition-base,
21
+ border-color $rtsu-transition-base,
22
+ box-shadow $rtsu-transition-base;
23
+ animation: rts-fade-up 0.6s ease-out both;
24
+
25
+ &:hover {
26
+ border-color: rgba(108, 92, 231, 0.2);
27
+ box-shadow: 0 6px 24px rgba(108, 92, 231, 0.08);
28
+ }
29
+ }
30
+
31
+ .rts-glass-card-interactive {
32
+ cursor: pointer;
33
+
34
+ &:hover {
35
+ transform: translateY(-4px);
36
+ border-color: rgba(108, 92, 231, 0.3);
37
+ box-shadow: 0 8px 32px rgba(108, 92, 231, 0.15);
38
+ }
39
+
40
+ &:active {
41
+ transform: translateY(-2px);
42
+ }
43
+ }
44
+
45
+ .rts-glass-card-header {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: $rtsu-space-sm + 2px;
49
+ margin-bottom: $rtsu-space-md;
50
+
51
+ h2 {
52
+ margin: 0;
53
+ font-size: 1.2rem;
54
+ font-weight: 700;
55
+ color: #fff;
56
+ letter-spacing: -0.01em;
57
+ }
58
+
59
+ svg, .material-icons-outlined {
60
+ color: var(--rts-accent, #6c5ce7);
61
+ flex-shrink: 0;
62
+ }
63
+ }
64
+
65
+ .rts-glass-card-text {
66
+ margin: 0;
67
+ font-size: 0.94rem;
68
+ line-height: 1.72;
69
+ color: var(--rts-text-secondary);
70
+ white-space: pre-line;
71
+ }
@@ -0,0 +1,191 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // RTS-COMMON — Form Field Styles
3
+ // ═══════════════════════════════════════════════════════════════════
4
+ @import "./variables-spacing";
5
+ @import "./variables-typography";
6
+ @import "./variables-layout";
7
+ @import "./variables-effects";
8
+ @import "./variables-colors";
9
+
10
+ .rts-form-group {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: $rtsu-space-md;
14
+ }
15
+
16
+ .rts-form-field {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: $rtsu-space-xs;
20
+ }
21
+
22
+ .rts-form-label {
23
+ font-size: $rtsu-font-size-sm;
24
+ font-weight: $rtsu-font-weight-medium;
25
+ color: var(--rts-text-secondary);
26
+ margin: 0;
27
+ }
28
+
29
+ .rts-form-title {
30
+ font-size: $rtsu-font-size-lg;
31
+ font-weight: $rtsu-font-weight-semibold;
32
+ color: var(--rts-text-primary);
33
+ margin: 0 0 $rtsu-space-xs;
34
+ }
35
+
36
+ .rts-form-description {
37
+ font-size: $rtsu-font-size-sm;
38
+ color: var(--rts-text-secondary);
39
+ margin: 0 0 $rtsu-space-md;
40
+ line-height: $rtsu-line-height-normal;
41
+ }
42
+
43
+ .rts-form-actions {
44
+ display: flex;
45
+ gap: $rtsu-space-sm;
46
+ justify-content: flex-end;
47
+ padding-top: $rtsu-space-sm;
48
+ }
49
+
50
+ // ── Form Field Container ──
51
+ .rts-form-field-container {
52
+ margin-bottom: $rtsu-space-md;
53
+
54
+ &:last-child {
55
+ margin-bottom: 0;
56
+ }
57
+
58
+ .rts-form-field-error-message {
59
+ display: block;
60
+ padding: $rtsu-space-sm $rtsu-space-sm 0 $rtsu-space-sm;
61
+ }
62
+ }
63
+
64
+ // ── Radio Group Label ──
65
+ .rts-radio-group-label {
66
+ font-size: $rtsu-font-size-base;
67
+ font-weight: $rtsu-font-weight-semibold;
68
+ color: var(--rts-text-primary);
69
+ margin-bottom: $rtsu-space-sm;
70
+ }
71
+
72
+ // ── Standard Inline Radio Option ──
73
+ .rts-radio-option {
74
+ display: flex;
75
+ align-items: center;
76
+ gap: $rtsu-space-sm;
77
+ margin-top: $rtsu-space-sm;
78
+
79
+ .rts-radio-option-label {
80
+ font-size: $rtsu-font-size-base;
81
+ color: var(--rts-text-primary);
82
+ cursor: pointer;
83
+ }
84
+ }
85
+
86
+ // ═══════════════════════════════════════════════════════════════════
87
+ // Card-Styled Radio Buttons
88
+ // Activated when radio options have icon and/or description fields.
89
+ // ═══════════════════════════════════════════════════════════════════
90
+
91
+ .rts-radio-card-group {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: $rtsu-space-sm;
95
+ }
96
+
97
+ // ── Group header (e.g. model provider) ──
98
+ .rts-radio-card-group-title {
99
+ margin: 0 0 $rtsu-space-xs;
100
+ font-size: 11px;
101
+ font-weight: $rtsu-font-weight-semibold;
102
+ letter-spacing: 0.08em;
103
+ text-transform: uppercase;
104
+ color: var(--rts-text-secondary);
105
+ }
106
+
107
+ .rts-radio-card-group + .rts-radio-card-group-title {
108
+ margin-top: $rtsu-space-md;
109
+ }
110
+
111
+ .rts-radio-card {
112
+ display: flex;
113
+ align-items: center;
114
+ gap: $rtsu-space-sm + $rtsu-space-xs;
115
+ padding: $rtsu-space-sm + $rtsu-space-xs $rtsu-space-md;
116
+ border: 1px solid var(--rts-border-med);
117
+ border-radius: $rtsu-radius-md;
118
+ background-color: var(--rts-bg-surface);
119
+ cursor: pointer;
120
+ transition: border-color $rtsu-transition-fast,
121
+ background-color $rtsu-transition-fast,
122
+ box-shadow $rtsu-transition-fast;
123
+ user-select: none;
124
+
125
+ &:hover {
126
+ border-color: var(--rts-border-bright);
127
+ background-color: var(--rts-bg-surface-hover);
128
+ }
129
+
130
+ // ── Selected State ──
131
+ &.rts-radio-card-selected {
132
+ border-color: var(--rts-accent, $rtsu-accent-purple);
133
+ background: linear-gradient(
134
+ 135deg,
135
+ rgba(108, 92, 231, 0.08) 0%,
136
+ rgba(162, 155, 254, 0.04) 100%
137
+ );
138
+ box-shadow: 0 0 0 1px var(--rts-accent, $rtsu-accent-purple),
139
+ $rtsu-shadow-accent-sm;
140
+ }
141
+ }
142
+
143
+ // ── Radio Input (hidden visually inside card) ──
144
+ .rts-radio-card-input {
145
+ flex-shrink: 0;
146
+ }
147
+
148
+ // ── Icon ──
149
+ .rts-radio-card-icon {
150
+ display: flex;
151
+ align-items: center;
152
+ justify-content: center;
153
+ width: 36px;
154
+ height: 36px;
155
+ border-radius: $rtsu-radius-sm;
156
+ background-color: var(--rts-accent-highlight-dim, rgba(191, 139, 255, 0.15));
157
+ color: var(--rts-accent-highlight, #bf8bff);
158
+ flex-shrink: 0;
159
+
160
+ .material-icons-outlined {
161
+ font-size: 20px;
162
+ }
163
+
164
+ .rts-radio-card-selected & {
165
+ background-color: rgba(108, 92, 231, 0.2);
166
+ color: var(--rts-accent-light, #a29bfe);
167
+ }
168
+ }
169
+
170
+ // ── Content (label + description) ──
171
+ .rts-radio-card-content {
172
+ display: flex;
173
+ flex-direction: column;
174
+ gap: $rtsu-space-2xs;
175
+ min-width: 0;
176
+ flex: 1;
177
+ }
178
+
179
+ .rts-radio-card-label {
180
+ font-size: $rtsu-font-size-base;
181
+ font-weight: $rtsu-font-weight-semibold;
182
+ color: var(--rts-text-primary);
183
+ line-height: $rtsu-line-height-snug;
184
+ }
185
+
186
+ .rts-radio-card-description {
187
+ font-size: $rtsu-font-size-sm;
188
+ color: var(--rts-text-secondary);
189
+ line-height: $rtsu-line-height-normal;
190
+ }
191
+