@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,313 @@
1
+ /* ========================================
2
+ Query Editor Components
3
+ Syntax highlighting, autocomplete, virtual textbox, inline query editor
4
+ ======================================== */
5
+ @use '../../variables' as *;
6
+
7
+ // Search Query Syntax Highlighting
8
+ .pa-search-highlight {
9
+ position: relative;
10
+ display: flex;
11
+
12
+ &__overlay {
13
+ position: absolute;
14
+ top: 0;
15
+ left: 0;
16
+ right: 0;
17
+ bottom: 0;
18
+ padding: $input-padding-v $input-padding-h;
19
+ border: $border-width-base solid transparent;
20
+ border-radius: $border-radius;
21
+ font-size: $font-size-sm;
22
+ font-family: inherit;
23
+ white-space: pre-wrap;
24
+ word-wrap: break-word;
25
+ pointer-events: none;
26
+ color: transparent;
27
+ overflow: hidden;
28
+ }
29
+
30
+ &__input {
31
+ position: relative;
32
+ z-index: 1;
33
+ background: transparent;
34
+ color: var(--pa-text-primary);
35
+ }
36
+
37
+ &__field {
38
+ display: inline;
39
+ background-color: rgba($accent-color, 0.15);
40
+ color: $accent-color;
41
+ padding: 0.2rem 0.4rem;
42
+ border-radius: 0.4rem;
43
+ font-weight: $font-weight-medium;
44
+ }
45
+
46
+ &__operator {
47
+ display: inline;
48
+ background-color: rgba($success-bg, 0.15);
49
+ color: $success-bg;
50
+ padding: 0.2rem 0.4rem;
51
+ border-radius: 0.4rem;
52
+ font-weight: $font-weight-medium;
53
+ }
54
+ }
55
+
56
+ // Search Autocomplete Popover
57
+ .pa-search-autocomplete {
58
+ position: absolute;
59
+ z-index: 1000;
60
+ background: var(--pa-input-bg);
61
+ border: $border-width-base solid $border-color;
62
+ border-radius: $border-radius;
63
+ box-shadow: $shadow-lg;
64
+ max-height: 24rem;
65
+ overflow-y: auto;
66
+ min-width: 19.2rem;
67
+
68
+ &__item {
69
+ padding: $spacing-sm $spacing-md;
70
+ cursor: pointer;
71
+ display: flex;
72
+ align-items: center;
73
+ gap: $spacing-sm;
74
+ transition: background-color $transition-fast $easing-snappy;
75
+ font-size: $font-size-sm;
76
+
77
+ &:hover,
78
+ &--active {
79
+ background-color: var(--pa-table-hover-bg);
80
+ }
81
+
82
+ &-name {
83
+ font-weight: $font-weight-medium;
84
+ color: var(--pa-accent);
85
+ }
86
+
87
+ &-type {
88
+ margin-left: auto;
89
+ font-size: $font-size-xs;
90
+ color: var(--pa-text-secondary);
91
+ opacity: 0.7;
92
+ }
93
+ }
94
+
95
+ &__section {
96
+ padding: $spacing-xs $spacing-md;
97
+ font-size: $font-size-xs;
98
+ font-weight: $font-weight-medium;
99
+ color: var(--pa-text-secondary);
100
+ text-transform: uppercase;
101
+ letter-spacing: 0.05em;
102
+ background-color: var(--pa-card-header-bg);
103
+ border-bottom: $border-width-base solid var(--pa-border-color);
104
+ }
105
+
106
+ &__empty {
107
+ padding: $spacing-md;
108
+ text-align: center;
109
+ color: var(--pa-text-secondary);
110
+ font-size: $font-size-sm;
111
+ }
112
+ }
113
+
114
+ // Virtual Textbox (Contenteditable with Inline Tokens)
115
+ // Uses same styling as .pa-input for consistency
116
+ .pa-virtual-textbox {
117
+ width: 100%;
118
+ padding: $input-padding-v $input-padding-h;
119
+ border: $border-width-base solid $border-color;
120
+ border-radius: $border-radius;
121
+ font-size: $font-size-sm;
122
+ background-color: var(--pa-input-bg);
123
+ color: var(--pa-text-primary);
124
+ cursor: text;
125
+ overflow-wrap: break-word;
126
+ word-wrap: break-word;
127
+ line-height: 1.5;
128
+ transition: border-color $transition-fast $easing-snappy;
129
+
130
+ &:focus {
131
+ outline: none;
132
+ border-color: $input-focus-border-color;
133
+ box-shadow: 0 0 0 $focus-ring-width $accent-light;
134
+ }
135
+
136
+ &:empty::before {
137
+ content: attr(data-placeholder);
138
+ color: var(--pa-text-secondary);
139
+ opacity: 0.7;
140
+ pointer-events: none;
141
+ }
142
+
143
+ // Inline token badges - use standard pa-badge styling
144
+ .pa-badge {
145
+ vertical-align: middle;
146
+ margin: 0 3.2px;
147
+ user-select: none;
148
+ cursor: default;
149
+
150
+ // Prevent editing inline tokens
151
+ &[contenteditable="false"] {
152
+ outline: none;
153
+ }
154
+ }
155
+ }
156
+
157
+ // Inline Query Editor (V2) - Dual Layer Syntax Highlighting
158
+ .pa-inline-query-editor {
159
+ position: relative;
160
+ width: 100%;
161
+
162
+ &__layers {
163
+ position: relative;
164
+ width: 100%;
165
+ }
166
+
167
+ &__highlights {
168
+ position: absolute;
169
+ top: 0;
170
+ left: 0;
171
+ right: 0;
172
+ bottom: 0;
173
+ padding: $input-padding-v $input-padding-h;
174
+ border: $border-width-base solid transparent;
175
+ border-radius: $border-radius;
176
+ font-size: $font-size-sm;
177
+ font-family: $body-font-family;
178
+ white-space: pre-wrap;
179
+ word-wrap: break-word;
180
+ pointer-events: none;
181
+ overflow: hidden;
182
+ line-height: 1.5;
183
+ background-color: var(--pa-input-bg);
184
+ z-index: 1;
185
+ }
186
+
187
+ &__input {
188
+ position: relative;
189
+ z-index: 2;
190
+ width: 100%;
191
+ padding: $input-padding-v $input-padding-h;
192
+ border: $border-width-base solid $border-color;
193
+ border-radius: $border-radius;
194
+ font-size: $font-size-sm;
195
+ font-family: $body-font-family;
196
+ background: transparent;
197
+ color: transparent;
198
+ caret-color: var(--pa-text-primary);
199
+ resize: none;
200
+ overflow: hidden;
201
+ line-height: 1.5;
202
+ transition: border-color $transition-fast $easing-snappy;
203
+ min-height: 4rem;
204
+
205
+ &:focus {
206
+ outline: none;
207
+ border-color: $input-focus-border-color;
208
+ box-shadow: 0 0 0 $focus-ring-width $accent-light;
209
+ }
210
+
211
+ &::placeholder {
212
+ color: var(--pa-text-secondary);
213
+ opacity: 0.7;
214
+ }
215
+ }
216
+ }
217
+
218
+ // Inline Query Token Highlighting
219
+ .pa-inline-query-token {
220
+ display: inline;
221
+ font-weight: $font-weight-medium;
222
+
223
+ &--field {
224
+ background-color: rgba($accent-color, 0.15);
225
+ color: var(--pa-text-primary);
226
+
227
+ &.pa-inline-query-token--invalid {
228
+ background-color: rgba($danger-bg, 0.15);
229
+ color: var(--pa-text-primary);
230
+ text-decoration: wavy underline;
231
+ }
232
+ }
233
+
234
+ &--operator {
235
+ background-color: rgba(var(--pa-text-secondary), 0.15);
236
+ color: var(--pa-text-primary);
237
+ }
238
+
239
+ &--value {
240
+ background-color: rgba($success-bg, 0.15);
241
+ color: var(--pa-text-primary);
242
+ }
243
+
244
+ &--keyword {
245
+ background-color: rgba($warning-bg, 0.15);
246
+ color: var(--pa-text-primary);
247
+ font-style: italic;
248
+ }
249
+ }
250
+
251
+ // Inline Query Autocomplete Popup
252
+ .pa-inline-query-autocomplete {
253
+ position: absolute;
254
+ z-index: 1000;
255
+ background: var(--pa-input-bg);
256
+ border: $border-width-base solid $border-color;
257
+ border-radius: $border-radius;
258
+ box-shadow: $shadow-lg;
259
+ max-height: 24rem;
260
+ overflow-y: auto;
261
+ min-width: 19.2rem;
262
+
263
+ &__item {
264
+ padding: $spacing-sm $spacing-md;
265
+ cursor: pointer;
266
+ display: flex;
267
+ align-items: center;
268
+ gap: $spacing-sm;
269
+ transition: background-color $transition-fast $easing-snappy;
270
+ font-size: $font-size-sm;
271
+
272
+ &:hover,
273
+ &--active {
274
+ background-color: var(--pa-table-hover-bg);
275
+ }
276
+
277
+ &-icon {
278
+ font-size: $font-size-base;
279
+ line-height: 1;
280
+ flex-shrink: 0;
281
+ }
282
+
283
+ &-content {
284
+ flex: 1;
285
+ min-width: 0;
286
+ }
287
+
288
+ &-name {
289
+ display: block;
290
+ font-weight: $font-weight-medium;
291
+ color: $accent-color;
292
+ line-height: 1.3;
293
+ }
294
+
295
+ &-type {
296
+ display: block;
297
+ font-size: $font-size-xs;
298
+ color: var(--pa-text-secondary);
299
+ opacity: 0.7;
300
+ line-height: 1.3;
301
+ }
302
+
303
+ &-badge {
304
+ flex-shrink: 0;
305
+ font-size: $font-size-xs;
306
+ padding: 0.2rem 0.6rem;
307
+ background-color: rgba(var(--pa-text-secondary), 0.1);
308
+ color: var(--pa-text-secondary);
309
+ border-radius: 0.4rem;
310
+ font-family: $body-font-family;
311
+ }
312
+ }
313
+ }
@@ -0,0 +1,11 @@
1
+ /* ========================================
2
+ Layout Index
3
+ Central import point for all layout component modules
4
+ ======================================== */
5
+
6
+ @forward 'navbar';
7
+ @forward 'layout-container';
8
+ @forward 'sidebar';
9
+ @forward 'sidebar-states';
10
+ @forward 'navbar-elements';
11
+ @forward 'layout-responsive';
@@ -0,0 +1,105 @@
1
+ /* ========================================
2
+ Layout Container
3
+ Main layout wrapper, content areas, sticky/scroll modes
4
+ ======================================== */
5
+ @use '../../variables' as *;
6
+
7
+ // Layout wrapper - applied to body for mode-specific classes
8
+ body.pa-layout--sticky {
9
+ height: 100vh;
10
+ overflow: hidden;
11
+ }
12
+
13
+ // Layout Container - centered, starts below navbar
14
+ .pa-layout {
15
+ max-width: 100%;
16
+ margin: $header-height auto 0;
17
+ background-color: var(--pa-primary-bg);
18
+ overflow: visible; // Allow tooltips to escape
19
+ display: flex;
20
+ flex-direction: column;
21
+ }
22
+
23
+ // Constrained widths - controlled by body class
24
+ body.pa-container-sm .pa-layout {
25
+ max-width: $layout-container-sm;
26
+ box-shadow: $shadow-2xl;
27
+ border-left: $border-width-base solid var(--pa-border-color);
28
+ border-right: $border-width-base solid var(--pa-border-color);
29
+ }
30
+
31
+ body.pa-container-md .pa-layout {
32
+ max-width: $layout-container-md;
33
+ box-shadow: $shadow-2xl;
34
+ border-left: $border-width-base solid var(--pa-border-color);
35
+ border-right: $border-width-base solid var(--pa-border-color);
36
+ }
37
+
38
+ body.pa-container-lg .pa-layout {
39
+ max-width: $layout-container-lg;
40
+ box-shadow: $shadow-2xl;
41
+ border-left: $border-width-base solid var(--pa-border-color);
42
+ border-right: $border-width-base solid var(--pa-border-color);
43
+ }
44
+
45
+ body.pa-container-xl .pa-layout {
46
+ max-width: $layout-container-xl;
47
+ box-shadow: $shadow-xl;
48
+ border-left: $border-width-base solid var(--pa-border-color);
49
+ border-right: $border-width-base solid var(--pa-border-color);
50
+ }
51
+
52
+ body.pa-container-2xl .pa-layout {
53
+ max-width: $layout-container-2xl;
54
+ box-shadow: $shadow-xl;
55
+ border-left: $border-width-base solid var(--pa-border-color);
56
+ border-right: $border-width-base solid var(--pa-border-color);
57
+ }
58
+
59
+ // Sticky mode - fixed height
60
+ body.pa-layout--sticky .pa-layout {
61
+ height: calc(100vh - #{$header-height}); // Full viewport minus top margin
62
+ }
63
+
64
+ // Scroll mode - minimum height
65
+ body:not(.pa-layout--sticky) .pa-layout {
66
+ min-height: calc(100vh - #{$header-height}); // Ensure footer reaches bottom
67
+ }
68
+
69
+ // Layout inner container - flex wrapper for sidebar + content
70
+ .pa-layout__inner {
71
+ display: flex;
72
+ width: 100%;
73
+ flex: 1; // Take available space, pushing footer to bottom
74
+ }
75
+
76
+ // Sticky mode - inner container takes full height minus footer
77
+ body.pa-layout--sticky .pa-layout__inner {
78
+ flex: 1;
79
+ overflow: hidden; // Prevent overflow, let content wrapper scroll
80
+ }
81
+
82
+ // Content wrapper - wraps main content only
83
+ .pa-layout__content {
84
+ flex: 1;
85
+ display: flex;
86
+ flex-direction: column;
87
+ overflow-y: auto; // Always scrollable
88
+ }
89
+
90
+ // Main content area
91
+ .pa-layout__main {
92
+ flex: 1;
93
+ padding: $spacing-base;
94
+ }
95
+
96
+ // Footer - outside inner, sibling to inner
97
+ .pa-layout__footer {
98
+ height: $footer-height;
99
+ background-color: var(--pa-footer-bg);
100
+ border-top: $border-width-base solid var(--pa-footer-border-color);
101
+ display: flex;
102
+ align-items: center;
103
+ padding: 0 $spacing-base;
104
+ flex-shrink: 0; // Don't shrink footer
105
+ }
@@ -0,0 +1,100 @@
1
+ /* ========================================
2
+ Layout Responsive
3
+ Mobile and tablet media queries
4
+ ======================================== */
5
+ @use '../../variables' as *;
6
+
7
+ // Responsive Design - Mobile and Tablet
8
+ @media (max-width: $mobile-breakpoint) {
9
+ // Mobile: Auto-hide sidebar, content takes full width
10
+ body:not(.sidebar-visible) {
11
+ .pa-layout__sidebar {
12
+ width: 0;
13
+ opacity: 0;
14
+ overflow: hidden;
15
+ border-right: none;
16
+ }
17
+
18
+ // Override icon-collapse mode on mobile - sidebar should be fully hidden
19
+ .pa-layout__sidebar--icon-collapse {
20
+ width: 0 !important;
21
+ }
22
+ }
23
+
24
+ // Mobile: Fullscreen sidebar overlay when visible
25
+ .sidebar-visible {
26
+ // Use fixed positioning for mobile overlay
27
+ .pa-layout__inner {
28
+ position: relative;
29
+ }
30
+
31
+ .pa-layout__sidebar {
32
+ position: fixed;
33
+ top: $header-height;
34
+ left: 0;
35
+ bottom: 0;
36
+ width: $mobile-sidebar-width;
37
+ z-index: 1050;
38
+ background-color: var(--pa-sidebar-bg);
39
+ opacity: 1;
40
+ overflow-y: auto;
41
+ }
42
+
43
+ // Override icon-collapse mode on mobile - show full width overlay
44
+ .pa-layout__sidebar--icon-collapse {
45
+ width: $mobile-sidebar-width !important;
46
+ overflow-y: auto !important;
47
+
48
+ .pa-sidebar__label {
49
+ opacity: 1 !important;
50
+ width: auto !important;
51
+ overflow: visible !important;
52
+ position: static !important;
53
+ }
54
+ }
55
+
56
+ // Add backdrop overlay
57
+ &::before {
58
+ content: "";
59
+ position: fixed;
60
+ top: $header-height;
61
+ left: 0;
62
+ right: 0;
63
+ bottom: 0;
64
+ background-color: $mobile-backdrop-bg;
65
+ z-index: 1040;
66
+ }
67
+ }
68
+
69
+ // Adjust header for mobile
70
+ .pa-header {
71
+ gap: $spacing-sm;
72
+
73
+ &__nav {
74
+ display: none; // Hide navigation links on mobile
75
+ }
76
+
77
+ &__title h2 {
78
+ font-size: $font-size-sm;
79
+ }
80
+ }
81
+
82
+ // Hide theme switcher label on mobile
83
+ .theme-switcher {
84
+ label {
85
+ display: none;
86
+ }
87
+ }
88
+ }
89
+
90
+ @media (max-width: $tablet-breakpoint) and (min-width: $tablet-breakpoint-min) {
91
+ // Tablet: Reduce sidebar width
92
+ .pa-layout__sidebar {
93
+ width: $sidebar-width-tablet;
94
+
95
+ &__nav ul li a {
96
+ padding: $spacing-sm $spacing-md;
97
+ font-size: $font-size-sm;
98
+ }
99
+ }
100
+ }