@keenmate/pure-admin-core 1.0.0-rc01

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/dist/css/main.css +11542 -0
  4. package/dist/fonts/Delivery/Delivery_W_Bd.woff2 +0 -0
  5. package/dist/fonts/Delivery/Delivery_W_BdIt.woff2 +0 -0
  6. package/dist/fonts/Delivery/Delivery_W_CdBlk.woff2 +0 -0
  7. package/dist/fonts/Delivery/Delivery_W_CdLt.woff2 +0 -0
  8. package/dist/fonts/Delivery/Delivery_W_It.woff2 +0 -0
  9. package/dist/fonts/Delivery/Delivery_W_Lt.woff2 +0 -0
  10. package/dist/fonts/Delivery/Delivery_W_LtIt.woff2 +0 -0
  11. package/dist/fonts/Delivery/Delivery_W_Rg.woff2 +0 -0
  12. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2 +0 -0
  13. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.1 +0 -0
  14. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.2 +0 -0
  15. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2 +0 -0
  16. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.1 +0 -0
  17. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.2 +0 -0
  18. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2 +0 -0
  19. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2.1 +0 -0
  20. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2 +0 -0
  21. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.1 +0 -0
  22. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.2 +0 -0
  23. package/dist/fonts/google/6aez4K2oVqwIvtE2H68T.woff2 +0 -0
  24. package/dist/fonts/google/6aez4K2oVqwIvtU2Hw.woff2 +0 -0
  25. package/dist/fonts/google/6aez4K2oVqwIvtY2H68T.woff2 +0 -0
  26. package/dist/fonts/google/6aez4K2oVqwIvtg2H68T.woff2 +0 -0
  27. package/dist/fonts/google/6aez4K2oVqwIvto2H68T.woff2 +0 -0
  28. package/dist/fonts/google/6aez4K2oVqwIvts2H68T.woff2 +0 -0
  29. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nejog.woff2 +0 -0
  30. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nijogp5.woff2 +0 -0
  31. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nmjogp5.woff2 +0 -0
  32. package/dist/fonts/google/PN_xRfK9oXHga0XdZ8g_vT0.woff2 +0 -0
  33. package/dist/fonts/google/PN_xRfK9oXHga0XdZsg_.woff2 +0 -0
  34. package/dist/fonts/google/PN_xRfK9oXHga0XdaMg_vT0.woff2 +0 -0
  35. package/dist/fonts/google/TK3tWkYFABsmjsphPho.woff2 +0 -0
  36. package/dist/fonts/google/TK3tWkYFABsmjspuPho7vA.woff2 +0 -0
  37. package/dist/fonts/google/TK3tWkYFABsmjspvPho7vA.woff2 +0 -0
  38. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjTYJwQj.woff2 +0 -0
  39. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjXYJwQj.woff2 +0 -0
  40. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6Vj_YJwQj.woff2 +0 -0
  41. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjbYJwQj.woff2 +0 -0
  42. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjvYJw.woff2 +0 -0
  43. package/dist/fonts/google/fonts-tracklist.txt +48 -0
  44. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbBjM4.woff2 +0 -0
  45. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbOjM7sfA.woff2 +0 -0
  46. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbPjM7sfA.woff2 +0 -0
  47. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfLtrftV.woff2 +0 -0
  48. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfXtrftV.woff2 +0 -0
  49. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfbtrQ.woff2 +0 -0
  50. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfjtrftV.woff2 +0 -0
  51. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfntrftV.woff2 +0 -0
  52. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfrtrftV.woff2 +0 -0
  53. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfvtrftV.woff2 +0 -0
  54. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_B-bnBeA.woff2 +0 -0
  55. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_C-bk.woff2 +0 -0
  56. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_G-bnBeA.woff2 +0 -0
  57. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_M-bnBeA.woff2 +0 -0
  58. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_N-bnBeA.woff2 +0 -0
  59. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_P-bnBeA.woff2 +0 -0
  60. package/package.json +60 -0
  61. package/snippets/alerts.html +281 -0
  62. package/snippets/badges.html +212 -0
  63. package/snippets/buttons.html +287 -0
  64. package/snippets/cards.html +393 -0
  65. package/snippets/checkbox-lists.html +490 -0
  66. package/snippets/code.html +225 -0
  67. package/snippets/command-palette.html +210 -0
  68. package/snippets/comparison.html +428 -0
  69. package/snippets/customization.html +142 -0
  70. package/snippets/forms.html +477 -0
  71. package/snippets/grid.html +338 -0
  72. package/snippets/layout.html +598 -0
  73. package/snippets/lists.html +232 -0
  74. package/snippets/loaders.html +183 -0
  75. package/snippets/manifest.json +388 -0
  76. package/snippets/modal-dialogs.html +411 -0
  77. package/snippets/modals.html +310 -0
  78. package/snippets/popconfirm.html +253 -0
  79. package/snippets/profile.html +264 -0
  80. package/snippets/tables.html +317 -0
  81. package/snippets/tabs.html +930 -0
  82. package/snippets/timeline.html +364 -0
  83. package/snippets/toasts.html +154 -0
  84. package/snippets/tooltips.html +411 -0
  85. package/snippets/typography.html +101 -0
  86. package/snippets/utilities.html +595 -0
  87. package/snippets/virtual-scroll.html +322 -0
  88. package/snippets/web-daterangepicker.html +634 -0
  89. package/snippets/web-multiselect.html +362 -0
  90. package/src/scss/.claude/settings.local.json +11 -0
  91. package/src/scss/_base-css-variables.scss +348 -0
  92. package/src/scss/_core.scss +99 -0
  93. package/src/scss/_fonts.scss +67 -0
  94. package/src/scss/_purecss-grid-responsive.scss +138 -0
  95. package/src/scss/_purecss-grid.scss +58 -0
  96. package/src/scss/_variables.scss +14 -0
  97. package/src/scss/core-components/_alerts.scss +212 -0
  98. package/src/scss/core-components/_badges.scss +16 -0
  99. package/src/scss/core-components/_base.scss +124 -0
  100. package/src/scss/core-components/_buttons.scss +473 -0
  101. package/src/scss/core-components/_cards.scss +285 -0
  102. package/src/scss/core-components/_checkbox-lists.scss +289 -0
  103. package/src/scss/core-components/_code.scss +141 -0
  104. package/src/scss/core-components/_command-palette.scss +518 -0
  105. package/src/scss/core-components/_comparison.scss +172 -0
  106. package/src/scss/core-components/_file-selector.scss +780 -0
  107. package/src/scss/core-components/_forms.scss +16 -0
  108. package/src/scss/core-components/_grid.scss +264 -0
  109. package/src/scss/core-components/_layout.scss +15 -0
  110. package/src/scss/core-components/_lists.scss +211 -0
  111. package/src/scss/core-components/_loaders.scss +277 -0
  112. package/src/scss/core-components/_logic-tree.scss +280 -0
  113. package/src/scss/core-components/_modals.scss +209 -0
  114. package/src/scss/core-components/_notifications.scss +253 -0
  115. package/src/scss/core-components/_pagers.scss +141 -0
  116. package/src/scss/core-components/_popconfirm.scss +170 -0
  117. package/src/scss/core-components/_profile.scss +281 -0
  118. package/src/scss/core-components/_settings-panel.scss +128 -0
  119. package/src/scss/core-components/_statistics.scss +200 -0
  120. package/src/scss/core-components/_tables.scss +555 -0
  121. package/src/scss/core-components/_tabs.scss +438 -0
  122. package/src/scss/core-components/_timeline.scss +589 -0
  123. package/src/scss/core-components/_toasts.scss +281 -0
  124. package/src/scss/core-components/_tooltips.scss +503 -0
  125. package/src/scss/core-components/_utilities.scss +241 -0
  126. package/src/scss/core-components/_web-components-theme.scss +294 -0
  127. package/src/scss/core-components/badges/_badge-base.scss +131 -0
  128. package/src/scss/core-components/badges/_badge-group.scss +25 -0
  129. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -0
  130. package/src/scss/core-components/badges/_composite-badge.scss +70 -0
  131. package/src/scss/core-components/badges/_index.scss +10 -0
  132. package/src/scss/core-components/badges/_labels.scss +155 -0
  133. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -0
  134. package/src/scss/core-components/forms/_form-inputs.scss +100 -0
  135. package/src/scss/core-components/forms/_form-layout.scss +66 -0
  136. package/src/scss/core-components/forms/_form-states.scss +89 -0
  137. package/src/scss/core-components/forms/_index.scss +12 -0
  138. package/src/scss/core-components/forms/_input-groups.scss +149 -0
  139. package/src/scss/core-components/forms/_input-wrapper.scss +89 -0
  140. package/src/scss/core-components/forms/_query-editor.scss +313 -0
  141. package/src/scss/core-components/layout/_index.scss +11 -0
  142. package/src/scss/core-components/layout/_layout-container.scss +105 -0
  143. package/src/scss/core-components/layout/_layout-responsive.scss +100 -0
  144. package/src/scss/core-components/layout/_navbar-elements.scss +238 -0
  145. package/src/scss/core-components/layout/_navbar.scss +71 -0
  146. package/src/scss/core-components/layout/_sidebar-states.scss +228 -0
  147. package/src/scss/core-components/layout/_sidebar.scss +177 -0
  148. package/src/scss/main.scss +7 -0
  149. package/src/scss/themes/_dark-base.scss +207 -0
  150. package/src/scss/themes/audi-light.scss +311 -0
  151. package/src/scss/themes/audi.scss +288 -0
  152. package/src/scss/themes/corporate.scss +203 -0
  153. package/src/scss/themes/dark-blue.scss +152 -0
  154. package/src/scss/themes/dark-green.scss +156 -0
  155. package/src/scss/themes/dark-red.scss +160 -0
  156. package/src/scss/themes/dark.scss +145 -0
  157. package/src/scss/themes/express.scss +281 -0
  158. package/src/scss/themes/minimal.scss +121 -0
  159. package/src/scss/utilities.scss +481 -0
  160. package/src/scss/variables/_base.scss +81 -0
  161. package/src/scss/variables/_colors.scss +148 -0
  162. package/src/scss/variables/_components.scss +509 -0
  163. package/src/scss/variables/_index.scss +13 -0
  164. package/src/scss/variables/_layout.scss +65 -0
  165. package/src/scss/variables/_spacing.scss +66 -0
  166. package/src/scss/variables/_system.scss +80 -0
  167. package/src/scss/variables/_typography.scss +37 -0
@@ -0,0 +1,170 @@
1
+ /* ========================================
2
+ Popconfirm Component
3
+ Small confirmation dialog anchored to trigger button
4
+ Alternative to modal for simple yes/no confirmations
5
+ ======================================== */
6
+ @use '../variables' as *;
7
+
8
+ // ====================
9
+ // Popconfirm Container
10
+ // ====================
11
+
12
+ .pa-popconfirm {
13
+ position: absolute;
14
+ z-index: $z-index-tooltip; // 9000 - Above everything else
15
+ display: none;
16
+ min-width: 25.6rem;
17
+ max-width: 32rem;
18
+
19
+ &.is-open {
20
+ display: block;
21
+ }
22
+ }
23
+
24
+ // Arrow pointing to trigger button
25
+ .pa-popconfirm__arrow {
26
+ position: absolute;
27
+ width: 1.2rem;
28
+ height: 1.2rem;
29
+ background-color: var(--pa-card-bg);
30
+ transform: rotate(45deg);
31
+ border: $border-width-base solid var(--pa-border-color);
32
+ z-index: -1;
33
+ }
34
+
35
+ // Content container
36
+ .pa-popconfirm__content {
37
+ background-color: var(--pa-card-bg);
38
+ border: $border-width-base solid var(--pa-border-color);
39
+ border-radius: $border-radius;
40
+ box-shadow: $shadow-2xl;
41
+ overflow: hidden;
42
+ }
43
+
44
+ // Message area
45
+ .pa-popconfirm__message {
46
+ padding: $spacing-base;
47
+ border-bottom: $border-width-base solid var(--pa-border-color);
48
+
49
+ p {
50
+ margin: 0;
51
+ font-size: $font-size-sm;
52
+ color: var(--pa-text-primary);
53
+ line-height: $line-height-base;
54
+ }
55
+ }
56
+
57
+ // Icon for message (optional)
58
+ .pa-popconfirm__icon {
59
+ display: flex;
60
+ align-items: flex-start;
61
+ gap: $spacing-sm;
62
+
63
+ &::before {
64
+ content: '⚠️';
65
+ font-size: $font-size-lg;
66
+ flex-shrink: 0;
67
+ }
68
+
69
+ &--danger::before {
70
+ content: '🗑️';
71
+ }
72
+
73
+ &--warning::before {
74
+ content: '⚠️';
75
+ }
76
+
77
+ &--info::before {
78
+ content: 'ℹ️';
79
+ }
80
+
81
+ p {
82
+ flex: 1;
83
+ }
84
+ }
85
+
86
+ // Action buttons
87
+ .pa-popconfirm__actions {
88
+ padding: $spacing-sm $spacing-base;
89
+ display: flex;
90
+ gap: $spacing-sm;
91
+ justify-content: flex-end;
92
+ background-color: rgba($border-color, 0.3);
93
+
94
+ .pa-btn {
95
+ font-size: $font-size-xs;
96
+ padding: $spacing-xs $spacing-sm;
97
+ }
98
+ }
99
+
100
+ // ====================
101
+ // Position Variants
102
+ // ====================
103
+
104
+ // Bottom (default) - arrow on top
105
+ .pa-popconfirm--bottom {
106
+ margin-top: $spacing-sm;
107
+
108
+ .pa-popconfirm__arrow {
109
+ top: -0.64rem;
110
+ left: 50%;
111
+ transform: translateX(-50%) rotate(45deg);
112
+ border-right: none;
113
+ border-bottom: none;
114
+ }
115
+ }
116
+
117
+ // Top - arrow on bottom
118
+ .pa-popconfirm--top {
119
+ margin-bottom: $spacing-sm;
120
+
121
+ .pa-popconfirm__arrow {
122
+ bottom: -0.64rem;
123
+ left: 50%;
124
+ transform: translateX(-50%) rotate(45deg);
125
+ border-left: none;
126
+ border-top: none;
127
+ }
128
+ }
129
+
130
+ // Right - arrow on left
131
+ .pa-popconfirm--right {
132
+ margin-left: $spacing-sm;
133
+
134
+ .pa-popconfirm__arrow {
135
+ left: -0.64rem;
136
+ top: 50%;
137
+ transform: translateY(-50%) rotate(45deg);
138
+ border-top: none;
139
+ border-right: none;
140
+ }
141
+ }
142
+
143
+ // Left - arrow on right
144
+ .pa-popconfirm--left {
145
+ margin-right: $spacing-sm;
146
+
147
+ .pa-popconfirm__arrow {
148
+ right: -0.64rem;
149
+ top: 50%;
150
+ transform: translateY(-50%) rotate(45deg);
151
+ border-bottom: none;
152
+ border-left: none;
153
+ }
154
+ }
155
+
156
+ // ====================
157
+ // Compact Variant
158
+ // ====================
159
+
160
+ .pa-popconfirm--compact {
161
+ min-width: 19.2rem;
162
+
163
+ .pa-popconfirm__message {
164
+ padding: $spacing-sm;
165
+ }
166
+
167
+ .pa-popconfirm__actions {
168
+ padding: $spacing-xs $spacing-sm;
169
+ }
170
+ }
@@ -0,0 +1,281 @@
1
+ /* ========================================
2
+ Profile Panel Components
3
+ Profile panel and header button
4
+ ======================================== */
5
+ @use '../variables' as *;
6
+
7
+ // ====================
8
+ // Profile Panel & Header Button
9
+ // ====================
10
+
11
+ // Header profile button
12
+ .pa-header__profile-btn {
13
+ display: flex;
14
+ align-items: center;
15
+ background: none;
16
+ border: none;
17
+ padding: $spacing-xs $spacing-sm; // Match nav item padding
18
+ border-radius: $border-radius;
19
+ color: var(--pa-text-primary);
20
+ cursor: pointer;
21
+ font-size: $font-size-sm; // Apply to whole button (text and icon)
22
+ transition: background-color $transition-fast $easing-snappy;
23
+
24
+ &:hover {
25
+ background-color: var(--pa-accent-light);
26
+ }
27
+
28
+ &:focus {
29
+ outline: $focus-outline-width solid var(--pa-accent);
30
+ outline-offset: $focus-outline-offset;
31
+ }
32
+ }
33
+
34
+ .pa-header__profile-name {
35
+ font-weight: $font-weight-medium;
36
+ color: $header-profile-name-color;
37
+ }
38
+
39
+ // Profile panel
40
+ .pa-profile-panel {
41
+ position: fixed;
42
+ top: 0;
43
+ right: 0;
44
+ height: 100vh;
45
+ z-index: $z-index-profile-panel;
46
+ pointer-events: none;
47
+ opacity: 0;
48
+ visibility: hidden;
49
+ transition: opacity $transition-medium $easing-snappy,
50
+ visibility $transition-medium $easing-snappy;
51
+
52
+ &--open {
53
+ opacity: 1;
54
+ visibility: visible;
55
+ pointer-events: all;
56
+
57
+ .pa-profile-panel__content {
58
+ transform: translateX(0);
59
+ }
60
+ }
61
+
62
+ &__overlay {
63
+ position: absolute;
64
+ top: 0;
65
+ left: 0;
66
+ width: 100vw;
67
+ height: 100vh;
68
+ background-color: var(--pa-profile-overlay-bg);
69
+ cursor: pointer;
70
+ }
71
+
72
+ &__content {
73
+ position: absolute;
74
+ top: 0;
75
+ right: 0;
76
+ width: $profile-panel-width;
77
+ max-width: $profile-panel-max-width;
78
+ height: 100vh;
79
+ background-color: var(--pa-card-bg);
80
+ box-shadow: $shadow-profile-panel;
81
+ transform: translateX(100%);
82
+ transition: transform $transition-medium $easing-snappy;
83
+ display: flex;
84
+ flex-direction: column;
85
+ overflow: hidden;
86
+ }
87
+
88
+ &__header {
89
+ padding: $spacing-lg;
90
+ background-color: var(--pa-header-bg);
91
+ border-bottom: $border-width-base solid var(--pa-border-color);
92
+ display: flex;
93
+ align-items: flex-start;
94
+ gap: $spacing-base;
95
+ position: relative;
96
+ }
97
+
98
+ &__avatar {
99
+ width: $profile-avatar-size;
100
+ height: $profile-avatar-size;
101
+ background-color: var(--pa-accent-light);
102
+ border-radius: 50%;
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ flex-shrink: 0;
107
+ }
108
+
109
+ &__avatar-icon {
110
+ font-size: $font-size-4xl;
111
+ color: $accent-color;
112
+ }
113
+
114
+ &__info {
115
+ flex: 1;
116
+ min-width: 0;
117
+ }
118
+
119
+ &__name {
120
+ margin: 0 0 $spacing-xs 0;
121
+ font-size: $font-size-lg;
122
+ font-weight: $font-weight-semibold;
123
+ color: var(--pa-text-primary);
124
+ }
125
+
126
+ &__email {
127
+ margin: 0 0 $spacing-sm 0;
128
+ font-size: $font-size-sm;
129
+ color: var(--pa-text-secondary);
130
+ overflow: hidden;
131
+ text-overflow: ellipsis;
132
+ white-space: nowrap;
133
+ }
134
+
135
+ &__role {
136
+ display: inline-block;
137
+ padding: $btn-padding-v $btn-padding-h;
138
+ background-color: var(--pa-accent-light);
139
+ color: var(--pa-accent);
140
+ font-size: $font-size-xs;
141
+ font-weight: $font-weight-medium;
142
+ border-radius: $border-radius;
143
+ text-transform: uppercase;
144
+ letter-spacing: $profile-role-letter-spacing;
145
+ }
146
+
147
+ &__close {
148
+ position: absolute;
149
+ top: $spacing-base;
150
+ right: $spacing-base;
151
+ width: $profile-close-size;
152
+ height: $profile-close-size;
153
+ background: none;
154
+ border: none;
155
+ cursor: pointer;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ color: var(--pa-text-secondary);
160
+ border-radius: $border-radius;
161
+ transition: background-color $transition-fast $easing-snappy,
162
+ color $transition-fast $easing-snappy;
163
+
164
+ &:hover {
165
+ background-color: var(--pa-accent-light);
166
+ color: var(--pa-accent);
167
+ }
168
+
169
+ &:focus {
170
+ outline: $focus-outline-width solid var(--pa-accent);
171
+ outline-offset: $focus-outline-offset;
172
+ }
173
+ }
174
+
175
+ &__body {
176
+ flex: 1;
177
+ padding: $spacing-lg;
178
+ display: flex;
179
+ flex-direction: column;
180
+ gap: $profile-section-gap;
181
+ overflow-y: auto;
182
+ }
183
+
184
+ &__nav {
185
+ ul {
186
+ list-style: none;
187
+ margin: 0;
188
+ padding: 0;
189
+ }
190
+
191
+ li {
192
+ margin-bottom: $spacing-sm;
193
+ }
194
+ }
195
+
196
+ &__nav-item {
197
+ display: flex;
198
+ align-items: center;
199
+ gap: $spacing-md;
200
+ padding: $card-footer-padding-v $card-footer-padding-h;
201
+ color: var(--pa-text-primary);
202
+ text-decoration: none;
203
+ border-radius: $border-radius;
204
+ transition: background-color $transition-fast $easing-snappy,
205
+ color $transition-fast $easing-snappy;
206
+ font-weight: $font-weight-medium;
207
+
208
+ &:hover {
209
+ background-color: var(--pa-accent-light);
210
+ color: var(--pa-accent);
211
+ }
212
+
213
+ &:focus {
214
+ outline: $focus-outline-width solid var(--pa-accent);
215
+ outline-offset: $focus-outline-offset;
216
+ }
217
+ }
218
+
219
+ &__nav-icon {
220
+ font-size: $font-size-lg;
221
+ width: $profile-nav-icon-width;
222
+ text-align: center;
223
+ }
224
+
225
+ &__actions {
226
+ display: flex;
227
+ flex-direction: column;
228
+ gap: $spacing-md;
229
+ margin-top: auto;
230
+ }
231
+ }
232
+
233
+ // Responsive adjustments
234
+ @media (max-width: $mobile-breakpoint) {
235
+ .pa-profile-panel__content {
236
+ width: 85vw;
237
+ max-width: $profile-panel-mobile-max-width;
238
+ }
239
+
240
+ .pa-header__profile-name {
241
+ display: none;
242
+ }
243
+ }
244
+
245
+ // Global scrollbar styling - applies to all content
246
+ /* Webkit browsers (Chrome, Safari, Edge) */
247
+ *::-webkit-scrollbar {
248
+ width: $scrollbar-width;
249
+ height: $scrollbar-width;
250
+ }
251
+
252
+ *::-webkit-scrollbar-track {
253
+ background: var(--pa-primary-bg);
254
+ border-radius: $border-radius;
255
+ }
256
+
257
+ *::-webkit-scrollbar-thumb {
258
+ background: $border-color;
259
+ border-radius: $border-radius;
260
+ border: $border-width-base solid var(--pa-primary-bg);
261
+
262
+ &:hover {
263
+ background: $accent-color;
264
+ border-color: $accent-hover;
265
+ }
266
+
267
+ &:active {
268
+ background: $accent-hover;
269
+ }
270
+ }
271
+
272
+ *::-webkit-scrollbar-corner {
273
+ background: var(--pa-primary-bg);
274
+ }
275
+
276
+ /* Firefox */
277
+ * {
278
+ scrollbar-width: auto;
279
+ scrollbar-color: var(--pa-border-color) var(--pa-primary-bg);
280
+ }
281
+
@@ -0,0 +1,128 @@
1
+ /* ========================================
2
+ Settings Panel Component
3
+ Floating panel for global settings management
4
+ ======================================== */
5
+ @use '../variables' as *;
6
+
7
+ .pa-settings-panel {
8
+ position: fixed;
9
+ right: -$profile-panel-width-fixed; // Panel hidden by default
10
+ top: $settings-panel-top; // Position higher up for larger panel
11
+ z-index: 10000;
12
+ width: $profile-panel-width-fixed;
13
+ transition: right $settings-panel-transition-duration $settings-panel-transition-easing;
14
+
15
+ &__toggle {
16
+ position: absolute;
17
+ right: $profile-panel-width-fixed; // Position button at the right edge
18
+ top: 0;
19
+ width: $profile-panel-toggle-size;
20
+ height: $profile-panel-toggle-size;
21
+ background: $accent-color;
22
+ color: white;
23
+ border: none;
24
+ border-radius: $border-radius 0 0 $border-radius;
25
+ cursor: pointer;
26
+ font-size: $font-size-xl;
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ transition: all $settings-panel-transition-duration $settings-panel-transition-easing;
31
+ box-shadow: $shadow-sidebar;
32
+
33
+ &:hover {
34
+ background: $accent-hover;
35
+ width: $profile-panel-toggle-size-open;
36
+ right: calc($profile-panel-width-fixed + $settings-panel-hover-offset);
37
+ }
38
+ }
39
+
40
+ &__content {
41
+ background: var(--pa-content-bg);
42
+ border: $border-width-base solid var(--pa-border-color);
43
+ border-right: none;
44
+ border-radius: $border-radius 0 0 $border-radius;
45
+ box-shadow: $shadow-sidebar-open;
46
+ padding: $spacing-lg;
47
+ width: 100%;
48
+ height: $settings-panel-height; // Larger panel height for more settings
49
+ min-height: $settings-panel-min-height;
50
+ max-height: calc(100vh - $settings-panel-vertical-clearance); // Leave space from top/bottom
51
+ overflow-y: auto;
52
+ }
53
+
54
+ &__title {
55
+ margin: 0 0 $spacing-lg 0;
56
+ padding-bottom: $card-footer-padding-v;
57
+ border-bottom: $border-width-medium solid var(--pa-border-color);
58
+ color: var(--pa-text-primary);
59
+ font-size: $font-size-lg;
60
+ font-weight: $font-weight-semibold;
61
+ }
62
+
63
+ &__section {
64
+ margin-bottom: $spacing-base;
65
+
66
+ &:last-child {
67
+ margin-bottom: 0;
68
+ }
69
+ }
70
+
71
+ &__label {
72
+ display: block;
73
+ margin-bottom: $spacing-sm;
74
+ color: var(--pa-text-primary);
75
+ font-size: $font-size-sm;
76
+ font-weight: $font-weight-medium;
77
+ }
78
+
79
+ &__select {
80
+ width: 100%;
81
+ padding: $spacing-sm;
82
+ border: $border-width-base solid var(--pa-border-color);
83
+ border-radius: $border-radius;
84
+ background: var(--pa-input-bg);
85
+ color: var(--pa-text-primary);
86
+ font-size: $font-size-sm;
87
+ cursor: pointer;
88
+
89
+ &:focus {
90
+ outline: none;
91
+ border-color: $accent-color;
92
+ box-shadow: 0 0 0 $focus-ring-width $accent-light;
93
+ }
94
+ }
95
+
96
+ &__checkbox-group {
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: $spacing-sm;
100
+ }
101
+
102
+ &__checkbox {
103
+ display: flex;
104
+ align-items: center;
105
+ cursor: pointer;
106
+ color: var(--pa-text-primary);
107
+ font-size: $font-size-sm;
108
+
109
+ input[type="checkbox"] {
110
+ margin-right: $btn-icon-margin;
111
+ cursor: pointer;
112
+ }
113
+
114
+ &:hover {
115
+ color: $accent-color;
116
+ }
117
+ }
118
+
119
+ // Panel states
120
+ &--open {
121
+ right: 0; // Slide panel into view
122
+
123
+ .pa-settings-panel__toggle {
124
+ background: $accent-hover;
125
+ transform: rotate(180deg);
126
+ }
127
+ }
128
+ }