@axewo/fin-micro 1.0.0 → 2.0.1

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 (103) hide show
  1. package/README.md +181 -4
  2. package/cli/index.mjs +22 -6
  3. package/dist/browser.cjs +1 -1
  4. package/dist/browser.mjs +68 -66
  5. package/dist/core.cjs +1 -1
  6. package/dist/core.mjs +459 -441
  7. package/dist/index.cjs +1 -1
  8. package/dist/index.mjs +31 -24
  9. package/dist/layout.cjs +1 -0
  10. package/dist/layout.css +1 -0
  11. package/dist/layout.mjs +719 -0
  12. package/dist/{router-view-impl-C1KG6mxu.mjs → router-view-impl-B1NzCGKV.mjs} +18 -18
  13. package/dist/router-view-impl-BvOToV_Z.cjs +1 -0
  14. package/dist/runtime.cjs +1 -1
  15. package/dist/runtime.mjs +40 -39
  16. package/dist/sdk.cjs +1 -1
  17. package/dist/sdk.mjs +92 -56
  18. package/dist/types/browser/index.d.ts +4 -0
  19. package/dist/types/core/index.d.ts +1 -1
  20. package/dist/types/index.d.ts +2 -0
  21. package/dist/types/layout/HostShell.vue.d.ts +528 -0
  22. package/dist/types/layout/ShellHeader.vue.d.ts +46 -0
  23. package/dist/types/layout/ShellMenu.vue.d.ts +12 -0
  24. package/dist/types/layout/ShellTabs.vue.d.ts +23 -0
  25. package/dist/types/layout/StandaloneMenuItem.vue.d.ts +11 -0
  26. package/dist/types/layout/StandaloneShell.vue.d.ts +40 -0
  27. package/dist/types/layout/index.d.ts +5 -0
  28. package/dist/types/layout/types.d.ts +65 -0
  29. package/dist/types/runtime/lifecycle.d.ts +1 -1
  30. package/dist/types/sdk/index.d.ts +65 -4
  31. package/dist/types/vue/index.d.ts +13 -2
  32. package/dist/types/vue/router-view-impl.d.ts +1 -1
  33. package/dist/types/watermark/FinWatermark.vue.d.ts +16 -0
  34. package/dist/types/watermark/config.d.ts +36 -0
  35. package/dist/types/watermark/index.d.ts +4 -0
  36. package/dist/vue.cjs +1 -1
  37. package/dist/vue.mjs +49 -35
  38. package/dist/watermark.cjs +2 -0
  39. package/dist/watermark.mjs +119 -0
  40. package/package.json +29 -4
  41. package/scaffold/base/index.html +2 -1
  42. package/scaffold/base/package.json.template +5 -1
  43. package/scaffold/base/pnpm-workspace.yaml +6 -0
  44. package/scaffold/base/scripts/check-runtime.mjs +43 -0
  45. package/scaffold/base/src/locales/en.ts +12 -0
  46. package/scaffold/base/src/locales/index.ts +7 -1
  47. package/scaffold/base/src/locales/zh-CN.ts +12 -0
  48. package/scaffold/base/src/main.ts +13 -5
  49. package/scaffold/base/src/router/demo.ts +6 -0
  50. package/scaffold/base/src/router/index.ts +13 -0
  51. package/scaffold/base/src/stores/demo.ts +12 -0
  52. package/scaffold/base/src/stores/index.ts +11 -0
  53. package/scaffold/base/src/utils/appConfig.ts +49 -0
  54. package/scaffold/base/src/utils/errorUtils.ts +109 -0
  55. package/scaffold/base/src/utils/requestUtils.ts +32 -11
  56. package/scaffold/base/src/utils/watermarkConfig.ts +18 -0
  57. package/scaffold/base/src/views/demo/index.vue +26 -0
  58. package/scaffold/host/.env.example +11 -3
  59. package/scaffold/host/src/App.vue +1 -13
  60. package/scaffold/host/src/bootstrap.ts +40 -8
  61. package/scaffold/host/src/hooks/usePlatformSession.ts +40 -8
  62. package/scaffold/host/src/layout/HostHeader.vue +65 -5
  63. package/scaffold/host/src/layout/HostLayout.vue +65 -21
  64. package/scaffold/host/src/layout/HostMenu.vue +11 -2
  65. package/scaffold/host/src/layout/HostTabs.vue +91 -8
  66. package/scaffold/host/src/layout/HostWorkspace.vue +29 -7
  67. package/scaffold/host/src/localPages.ts +45 -0
  68. package/scaffold/host/src/platform.ts +51 -14
  69. package/scaffold/host/src/router/guards.ts +128 -0
  70. package/scaffold/host/src/router/index.ts +25 -0
  71. package/scaffold/host/src/router/targets.ts +30 -0
  72. package/scaffold/host/src/router/workspace.ts +63 -0
  73. package/scaffold/host/src/styles/shell.css +776 -0
  74. package/scaffold/host/src/utils/request.ts +30 -3
  75. package/scaffold/host/src/views/home/index.vue +19 -0
  76. package/scaffold/host/src/views/login/components/LoginForm.vue +83 -0
  77. package/scaffold/host/src/views/login/index.vue +16 -0
  78. package/scaffold/host/src/views/not-found/index.vue +1 -0
  79. package/scaffold/host/src/views/profile/index.vue +24 -0
  80. package/scaffold/host/src/views/workspace/index.vue +11 -0
  81. package/scaffold/layouts/standard/host/src/layout/HostLayout.vue +116 -0
  82. package/scaffold/layouts/standard/host/src/styles/shell.css +168 -0
  83. package/scaffold/layouts/standard/vue/src/layout/StandaloneLayout.vue +26 -0
  84. package/scaffold/vue/src/App.vue +13 -7
  85. package/scaffold/vue/src/bootstrap.ts +25 -24
  86. package/scaffold/vue/src/bridge/auth.ts +23 -0
  87. package/scaffold/vue/src/bridge/session.ts +2 -2
  88. package/scaffold/vue/src/layout/Header.vue +15 -0
  89. package/scaffold/vue/src/layout/Sidebar.vue +21 -0
  90. package/scaffold/vue/src/layout/SidebarItem.vue +21 -0
  91. package/scaffold/vue/src/layout/StandaloneLayout.vue +34 -0
  92. package/scaffold/vue/src/main.ts +5 -2
  93. package/scaffold/vue/src/router/index.ts +9 -4
  94. package/scaffold/vue/src/router/menu.ts +38 -0
  95. package/scaffold/vue/src/views/demo/configs/table.ts +24 -0
  96. package/scaffold/vue/src/views/demo/hooks/useRecordNavigation.ts +32 -0
  97. package/scaffold/vue/src/views/demo/index.vue +17 -0
  98. package/scaffold/vue/src/views/{DetailView.vue → demo/modules/detail/index.vue} +15 -6
  99. package/scaffold/vue/src/views/demo/types.ts +5 -0
  100. package/dist/router-view-impl-CgLEalx4.cjs +0 -1
  101. package/scaffold/host/src/views/LoginView.vue +0 -38
  102. package/scaffold/vue/src/views/ListView.vue +0 -51
  103. /package/scaffold/vue/src/views/{NotFoundView.vue → not-found/index.vue} +0 -0
@@ -0,0 +1,776 @@
1
+ /* 宿主浅色工作区:布局选择器均限于 shell,避免覆盖登录页及子应用样式。 */
2
+ .host-shell {
3
+ --shell-accent: #3267e3;
4
+ --shell-border: #e8ebf1;
5
+ --shell-muted: #8791a3;
6
+ color: #263248;
7
+ font:
8
+ 14px/1.5 'Inter',
9
+ 'PingFang SC',
10
+ 'Microsoft YaHei',
11
+ sans-serif;
12
+ background: #f5f7fa;
13
+ /* 外壳占满视口但不承担滚动;动态视口适配移动浏览器地址栏变化。 */
14
+ height: 100vh;
15
+ height: 100dvh;
16
+ min-height: 0;
17
+ overflow: hidden;
18
+ position: relative;
19
+ }
20
+ .host-shell *,
21
+ .host-shell *::before,
22
+ .host-shell *::after {
23
+ box-sizing: border-box;
24
+ }
25
+ .host-shell button,
26
+ .host-shell input {
27
+ font: inherit;
28
+ }
29
+ .host-shell button {
30
+ cursor: pointer;
31
+ color: inherit;
32
+ }
33
+ .host-shell button:disabled {
34
+ cursor: not-allowed;
35
+ opacity: 0.4;
36
+ }
37
+ .host-shell button:focus-visible,
38
+ .host-shell a:focus-visible,
39
+ .host-shell input:focus-visible {
40
+ outline: 2px solid #3267e3;
41
+ outline-offset: 2px;
42
+ }
43
+ .host-shell .shell-topbar {
44
+ height: 56px;
45
+ flex: 0 0 56px;
46
+ display: flex;
47
+ align-items: center;
48
+ padding: 0 24px 0 20px;
49
+ gap: 18px;
50
+ border-bottom: 1px solid var(--shell-border);
51
+ background: #fff;
52
+ position: relative;
53
+ z-index: 30;
54
+ flex: 0 0 56px;
55
+ }
56
+ .host-shell .brand {
57
+ width: 184px;
58
+ flex-shrink: 0;
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 10px;
62
+ text-decoration: none;
63
+ color: #1b2a45;
64
+ letter-spacing: 1px;
65
+ }
66
+ .host-shell .brand-icon {
67
+ display: grid;
68
+ place-items: center;
69
+ width: 30px;
70
+ height: 30px;
71
+ border-radius: 8px;
72
+ background: #3267e3;
73
+ color: white;
74
+ font-size: 21px;
75
+ font-weight: 800;
76
+ }
77
+ .host-shell .brand strong {
78
+ font-size: 16px;
79
+ white-space: nowrap;
80
+ }
81
+ .host-shell .brand strong span {
82
+ margin-left: 7px;
83
+ font-weight: 500;
84
+ font-size: 13px;
85
+ letter-spacing: 0;
86
+ }
87
+ .host-shell .icon-button {
88
+ border: 0;
89
+ background: transparent;
90
+ width: 32px;
91
+ height: 32px;
92
+ border-radius: 6px;
93
+ font-size: 20px;
94
+ color: #647087;
95
+ display: inline-flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+ }
99
+ .host-shell .icon-button .el-icon {
100
+ font-size: 18px;
101
+ }
102
+ .host-shell .icon-button:hover,
103
+ .host-shell .user-trigger:hover {
104
+ background: #f1f5fc;
105
+ }
106
+ .host-shell .menu-search {
107
+ width: 300px;
108
+ flex: 0 1 300px;
109
+ min-width: 0;
110
+ position: relative;
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 8px;
114
+ background: #f5f7fa;
115
+ border: 1px solid #edf0f5;
116
+ border-radius: 6px;
117
+ padding: 5px 10px;
118
+ color: #8791a3;
119
+ }
120
+ .host-shell .menu-search > .el-icon {
121
+ font-size: 18px;
122
+ flex-shrink: 0;
123
+ }
124
+ .host-shell .menu-search input {
125
+ min-width: 0;
126
+ flex: 1;
127
+ width: 100%;
128
+ border: 0;
129
+ background: transparent;
130
+ outline: 0;
131
+ font-size: 12px;
132
+ color: #263248;
133
+ }
134
+ .host-shell .menu-search input::placeholder {
135
+ color: #929bab;
136
+ }
137
+ .host-shell .menu-search kbd {
138
+ border: 1px solid #dde3ee;
139
+ background: #fff;
140
+ border-radius: 3px;
141
+ width: 18px;
142
+ text-align: center;
143
+ font-size: 11px;
144
+ }
145
+ .host-shell .topbar-spacer {
146
+ flex: 1;
147
+ }
148
+ .host-shell .topbar-action {
149
+ position: relative;
150
+ }
151
+ .host-shell .demo-badge {
152
+ font-size: 11px;
153
+ padding: 2px 7px;
154
+ background: #fff7e8;
155
+ color: #9b681d;
156
+ border: 1px solid #f5e5c6;
157
+ border-radius: 4px;
158
+ white-space: nowrap;
159
+ }
160
+ .host-shell .user-trigger {
161
+ display: flex;
162
+ align-items: center;
163
+ gap: 9px;
164
+ background: transparent;
165
+ border: 0;
166
+ padding: 3px;
167
+ border-radius: 6px;
168
+ font-size: 13px !important;
169
+ flex-shrink: 0;
170
+ }
171
+ .host-shell .user-trigger .el-icon {
172
+ font-size: 15px;
173
+ }
174
+ .host-shell .avatar {
175
+ width: 30px;
176
+ height: 30px;
177
+ display: grid;
178
+ place-items: center;
179
+ border-radius: 50%;
180
+ background: #eaf0ff;
181
+ color: #3267e3;
182
+ font-weight: 600;
183
+ }
184
+ .host-shell .shell-sidebar {
185
+ position: absolute;
186
+ top: 56px;
187
+ bottom: 0;
188
+ left: 0;
189
+ width: 224px;
190
+ min-height: 0;
191
+ padding: 20px 12px;
192
+ border-right: 1px solid var(--shell-border);
193
+ background: #fff;
194
+ display: flex;
195
+ flex-direction: column;
196
+ overflow: auto;
197
+ }
198
+ .host-shell .shell-sidebar button {
199
+ border: 0;
200
+ background: transparent;
201
+ text-align: left;
202
+ width: 100%;
203
+ padding: 9px 12px;
204
+ border-radius: 6px;
205
+ font-size: 13px;
206
+ }
207
+ .host-shell .shell-sidebar button:hover {
208
+ background: #f5f7fc;
209
+ }
210
+ .host-shell .shell-sidebar .selected {
211
+ background: #edf3ff;
212
+ color: #3267e3;
213
+ font-weight: 600;
214
+ }
215
+ .host-shell .sidebar-home {
216
+ display: flex;
217
+ gap: 12px;
218
+ align-items: center;
219
+ }
220
+ .host-shell .sidebar-home > span:first-child {
221
+ font-size: 18px;
222
+ }
223
+ .host-shell .sidebar-caption {
224
+ color: #9ca4b2;
225
+ font-size: 11px;
226
+ padding: 24px 12px 3px;
227
+ }
228
+ .host-shell .sidebar-app h2 {
229
+ font-size: 12px;
230
+ font-weight: 600;
231
+ color: #79849a;
232
+ margin: 17px 12px 6px;
233
+ }
234
+ .host-shell .sidebar-menu {
235
+ --el-menu-bg-color: #fff;
236
+ --el-menu-text-color: #263248;
237
+ --el-menu-active-color: var(--shell-accent);
238
+ --el-menu-hover-bg-color: #f5f7fc;
239
+ --el-menu-item-height: 38px;
240
+ --el-menu-sub-item-height: 36px;
241
+ --el-menu-base-level-padding: 10px;
242
+ --el-menu-level-padding: 12px;
243
+ --el-menu-item-font-size: 12px;
244
+ border-right: 0;
245
+ }
246
+ .host-shell .sidebar-menu .el-menu-item,
247
+ .host-shell .sidebar-menu .el-sub-menu__title {
248
+ border-radius: 6px;
249
+ margin: 2px 0;
250
+ }
251
+ .host-shell .sidebar-footer {
252
+ margin-top: auto;
253
+ padding: 32px 12px 0;
254
+ display: flex;
255
+ gap: 8px;
256
+ align-items: center;
257
+ color: #8d97a8;
258
+ font-size: 11px;
259
+ }
260
+ .host-shell .status-dot {
261
+ width: 6px;
262
+ height: 6px;
263
+ border-radius: 50%;
264
+ background: #5ab695;
265
+ flex-shrink: 0;
266
+ }
267
+ .host-shell .shell-main {
268
+ margin-left: 224px;
269
+ min-width: 0;
270
+ min-height: 0;
271
+ height: calc(100vh - 56px);
272
+ height: calc(100dvh - 56px);
273
+ display: flex;
274
+ flex-direction: column;
275
+ overflow: hidden;
276
+ }
277
+ .host-shell.is-collapsed .shell-sidebar {
278
+ width: 64px;
279
+ padding: 20px 8px;
280
+ }
281
+ .host-shell.is-collapsed .shell-main {
282
+ margin-left: 64px;
283
+ }
284
+ .host-shell.is-collapsed .sidebar-label,
285
+ .host-shell.is-collapsed .sidebar-caption {
286
+ display: none;
287
+ }
288
+ .host-shell.is-collapsed .sidebar-home {
289
+ justify-content: center;
290
+ padding: 9px 0;
291
+ }
292
+ .host-shell.is-collapsed .sidebar-app {
293
+ margin-top: 14px;
294
+ }
295
+ .host-shell.is-collapsed .collapsed-entry {
296
+ text-align: center;
297
+ padding: 10px 0;
298
+ }
299
+ .host-shell.is-collapsed .sidebar-footer {
300
+ justify-content: center;
301
+ padding-left: 0;
302
+ padding-right: 0;
303
+ }
304
+ .host-shell .shell-tabbar {
305
+ display: flex;
306
+ flex: 0 0 40px;
307
+ height: 40px;
308
+ position: relative;
309
+ background: white;
310
+ border-bottom: 1px solid var(--shell-border);
311
+ padding-left: 16px;
312
+ }
313
+ .host-shell .tab-strip {
314
+ display: flex;
315
+ overflow-x: auto;
316
+ overflow-y: hidden;
317
+ scrollbar-width: none;
318
+ flex: 1;
319
+ min-width: 0;
320
+ gap: 4px;
321
+ align-items: stretch;
322
+ }
323
+ .host-shell .shell-tab {
324
+ display: flex;
325
+ flex-shrink: 0;
326
+ position: relative;
327
+ align-items: center;
328
+ border-right: 1px solid #f0f2f6;
329
+ }
330
+ .host-shell .shell-tab > button {
331
+ height: 100%;
332
+ border: 0;
333
+ background: transparent;
334
+ padding: 0 13px;
335
+ font-size: 12px;
336
+ max-width: 210px;
337
+ overflow: hidden;
338
+ text-overflow: ellipsis;
339
+ white-space: nowrap;
340
+ }
341
+ .host-shell .shell-tab.active {
342
+ background: #f2f6ff;
343
+ color: #3267e3;
344
+ }
345
+ .host-shell .shell-tab.active::after {
346
+ content: '';
347
+ position: absolute;
348
+ bottom: 0;
349
+ left: 8px;
350
+ right: 8px;
351
+ height: 2px;
352
+ background: #3267e3;
353
+ }
354
+ .host-shell .shell-tab .tab-close {
355
+ padding: 0 8px;
356
+ max-width: none;
357
+ color: #9aa4b6;
358
+ }
359
+ .host-shell .shell-tab .tab-close:hover {
360
+ color: #cf4b4b;
361
+ }
362
+ .host-shell .tab-strip::-webkit-scrollbar { display: none; }
363
+ .host-shell .tab-scroll {
364
+ flex: 0 0 32px;
365
+ width: 32px;
366
+ padding: 0;
367
+ border: 0;
368
+ border-right: 1px solid var(--shell-border);
369
+ background: white;
370
+ display: inline-flex;
371
+ align-items: center;
372
+ justify-content: center;
373
+ }
374
+ .host-shell .tab-scroll svg { width: 14px; height: 14px; }
375
+ .host-shell .tab-scroll:not(:disabled):hover { background: #f0f5ff; color: #3267e3; }
376
+ .host-shell .tab-more {
377
+ border: 0;
378
+ border-left: 1px solid var(--shell-border);
379
+ width: 44px;
380
+ background: white;
381
+ font-size: 20px !important;
382
+ flex-shrink: 0;
383
+ }
384
+ .host-shell .shell-breadcrumb {
385
+ display: flex;
386
+ align-items: center;
387
+ gap: 8px;
388
+ min-width: 0;
389
+ color: #939cab;
390
+ font-size: 12px;
391
+ }
392
+ .host-shell .shell-breadcrumb strong {
393
+ color: #536079;
394
+ font-weight: 400;
395
+ overflow: hidden;
396
+ text-overflow: ellipsis;
397
+ white-space: nowrap;
398
+ }
399
+ /* 工作区建立确定的高度链:本地长页面由此滚动,远端挂载点继承内容盒高度。 */
400
+ .host-shell .shell-content {
401
+ flex: 1 1 auto;
402
+ min-height: 0;
403
+ /* 工作区是宿主唯一业务滚动容器;头部、页签和面包屑不随内容滚动。 */
404
+ overflow: auto;
405
+ overscroll-behavior: contain;
406
+ padding: 20px 28px 32px;
407
+ }
408
+ .host-shell .shell-app-container {
409
+ min-height: 0 !important;
410
+ height: auto !important;
411
+ }
412
+ .host-shell .shell-app-container > div {
413
+ min-height: 0 !important;
414
+ height: auto !important;
415
+ }
416
+ .host-shell .shell-feedback {
417
+ margin: 14px 28px 0;
418
+ flex: 0 0 auto;
419
+ padding: 9px 13px;
420
+ display: flex;
421
+ align-items: center;
422
+ justify-content: space-between;
423
+ gap: 16px;
424
+ color: #3267e3;
425
+ background: #eaf1ff;
426
+ border: 1px solid #d7e5ff;
427
+ border-radius: 6px;
428
+ font-size: 12px;
429
+ }
430
+ .host-shell .shell-feedback.warning {
431
+ color: #91681e;
432
+ background: #fff9ec;
433
+ border-color: #f3e6c3;
434
+ }
435
+ .host-shell .shell-feedback button {
436
+ border: 0;
437
+ background: transparent;
438
+ font-size: 18px;
439
+ }
440
+ /* 弹层背板只覆盖页面,顶栏和弹出菜单位于其上;点击空白或 Esc 均可关闭。 */
441
+ .host-shell .popover-backdrop {
442
+ position: fixed;
443
+ inset: 0;
444
+ z-index: 20;
445
+ border: 0;
446
+ background: transparent;
447
+ cursor: default !important;
448
+ }
449
+ .host-shell .shell-popover {
450
+ position: absolute;
451
+ z-index: 40;
452
+ background: white;
453
+ border: 1px solid #e5eaf2;
454
+ box-shadow: 0 10px 34px #20395e1a;
455
+ border-radius: 8px;
456
+ padding: 8px;
457
+ text-align: left;
458
+ }
459
+ .host-shell .shell-popover button {
460
+ display: block;
461
+ width: 100%;
462
+ text-align: left;
463
+ background: transparent;
464
+ border: 0;
465
+ padding: 8px 10px;
466
+ border-radius: 4px;
467
+ font-size: 12px;
468
+ }
469
+ .host-shell .shell-popover button:hover:not(:disabled) {
470
+ background: #eff4ff;
471
+ color: #3267e3;
472
+ }
473
+ .host-shell .shell-popover small {
474
+ display: block;
475
+ font-size: 11px;
476
+ color: #909aad;
477
+ }
478
+ .host-shell .shell-popover hr {
479
+ border: 0;
480
+ border-top: 1px solid #eef0f5;
481
+ margin: 6px 0;
482
+ }
483
+ .host-shell .popover-label {
484
+ color: #939cab;
485
+ font-size: 11px;
486
+ margin: 2px 10px 6px;
487
+ overflow: hidden;
488
+ text-overflow: ellipsis;
489
+ white-space: nowrap;
490
+ }
491
+ .host-shell .popover-empty {
492
+ text-align: center;
493
+ color: #9aa4b4;
494
+ padding: 16px;
495
+ font-size: 12px;
496
+ }
497
+ .host-shell .search-results {
498
+ top: 40px;
499
+ left: 0;
500
+ width: 360px;
501
+ max-height: 360px;
502
+ overflow: auto;
503
+ }
504
+ .host-shell .search-results button strong {
505
+ font-weight: 500;
506
+ }
507
+ .host-shell .search-results button small {
508
+ margin-top: 3px;
509
+ }
510
+ .host-shell .message-popover {
511
+ right: 0;
512
+ top: 42px;
513
+ width: 300px;
514
+ }
515
+ .host-shell .message-popover h3 {
516
+ font-size: 14px;
517
+ margin: 8px 10px;
518
+ }
519
+ .host-shell .user-popover {
520
+ right: 0;
521
+ top: 43px;
522
+ width: 180px;
523
+ padding: 14px 8px 8px;
524
+ }
525
+ .host-shell .user-popover > strong,
526
+ .host-shell .user-popover > small {
527
+ padding: 0 10px;
528
+ }
529
+ .host-shell .tab-actions {
530
+ right: 8px;
531
+ top: 44px;
532
+ width: 176px;
533
+ }
534
+ .host-shell .tab-actions.context-actions {
535
+ position: fixed;
536
+ right: auto;
537
+ }
538
+ .host-shell .home-view {
539
+ max-width: 1440px;
540
+ margin: 0 auto;
541
+ }
542
+ .host-shell .welcome-panel {
543
+ background: #f4f7fc;
544
+ border: 1px solid #e5ebf5;
545
+ border-radius: 10px;
546
+ padding: 28px 32px;
547
+ min-height: 152px;
548
+ display: flex;
549
+ justify-content: space-between;
550
+ align-items: center;
551
+ margin-bottom: 22px;
552
+ overflow: hidden;
553
+ }
554
+ .host-shell .eyebrow {
555
+ color: #7f94b4 !important;
556
+ font-size: 10px !important;
557
+ letter-spacing: 1.8px;
558
+ margin: 0 0 10px !important;
559
+ }
560
+ .host-shell .welcome-panel h1 {
561
+ font-size: 23px;
562
+ letter-spacing: 0.3px;
563
+ margin: 0 0 9px;
564
+ font-weight: 600;
565
+ color: #25344e;
566
+ }
567
+ .host-shell .welcome-panel p {
568
+ font-size: 12px;
569
+ color: #8b97aa;
570
+ margin: 0;
571
+ }
572
+ .host-shell .home-panel {
573
+ background: #fff;
574
+ border: 1px solid var(--shell-border);
575
+ border-radius: 9px;
576
+ padding: 22px 24px;
577
+ margin-bottom: 22px;
578
+ }
579
+ .host-shell .panel-heading {
580
+ display: flex;
581
+ justify-content: space-between;
582
+ align-items: center;
583
+ gap: 12px;
584
+ margin-bottom: 20px;
585
+ }
586
+ .host-shell .panel-heading h2 {
587
+ margin: 0;
588
+ font-size: 14px;
589
+ font-weight: 600;
590
+ }
591
+ .host-shell .panel-heading > span {
592
+ color: #9ba4b4;
593
+ font-size: 11px;
594
+ }
595
+ .host-shell .shortcut-grid {
596
+ display: grid;
597
+ grid-template-columns: repeat(3, minmax(0, 1fr));
598
+ gap: 16px;
599
+ }
600
+ .host-shell .shortcut-card {
601
+ display: flex;
602
+ align-items: center;
603
+ gap: 14px;
604
+ padding: 18px;
605
+ background: white;
606
+ border: 1px solid #e9edf5;
607
+ border-radius: 7px;
608
+ text-align: left;
609
+ transition:
610
+ border-color 0.15s,
611
+ background 0.15s;
612
+ }
613
+ .host-shell .shortcut-card:hover {
614
+ border-color: #acc2f5;
615
+ background: #fafcff;
616
+ }
617
+ .host-shell .entry-icon {
618
+ width: 40px;
619
+ height: 40px;
620
+ display: grid;
621
+ place-items: center;
622
+ border-radius: 9px;
623
+ background: #edf3ff;
624
+ color: #4c79dc;
625
+ font-size: 17px;
626
+ }
627
+ .host-shell .shortcut-card:nth-child(2) .entry-icon {
628
+ background: #edf8f5;
629
+ color: #4a9a88;
630
+ }
631
+ .host-shell .shortcut-card strong {
632
+ display: block;
633
+ font-size: 13px;
634
+ font-weight: 500;
635
+ }
636
+ .host-shell .shortcut-card small {
637
+ display: block;
638
+ color: #99a3b4;
639
+ font-size: 11px;
640
+ margin-top: 4px;
641
+ }
642
+ .host-shell .entry-arrow {
643
+ margin-left: auto;
644
+ color: #a0acbe;
645
+ }
646
+ .host-shell .home-columns {
647
+ display: grid;
648
+ grid-template-columns: 1.2fr 1fr;
649
+ gap: 22px;
650
+ }
651
+ .host-shell .home-columns .home-panel {
652
+ min-height: 266px;
653
+ }
654
+ .host-shell .empty-state {
655
+ text-align: center;
656
+ color: #9ba5b4;
657
+ padding: 25px 12px;
658
+ font-size: 12px;
659
+ }
660
+ .host-shell .empty-state strong {
661
+ display: block;
662
+ font-weight: 400;
663
+ color: #8491a6;
664
+ margin-bottom: 6px;
665
+ }
666
+ .host-shell .empty-state p {
667
+ margin: 0;
668
+ font-size: 11px;
669
+ }
670
+ .host-shell .empty-symbol {
671
+ display: block;
672
+ color: #ced7e5;
673
+ font-size: 32px;
674
+ line-height: 1.2;
675
+ margin-bottom: 13px;
676
+ }
677
+ .host-shell .recent-list {
678
+ list-style: none;
679
+ margin: 0;
680
+ padding: 0;
681
+ }
682
+ .host-shell .recent-list li + li {
683
+ border-top: 1px solid #f1f3f7;
684
+ }
685
+ .host-shell .recent-list button {
686
+ display: flex;
687
+ align-items: center;
688
+ justify-content: space-between;
689
+ gap: 16px;
690
+ width: 100%;
691
+ border: 0;
692
+ background: white;
693
+ text-align: left;
694
+ padding: 12px 0;
695
+ font-size: 12px;
696
+ }
697
+ .host-shell .recent-list button:hover {
698
+ color: #3267e3;
699
+ }
700
+ .host-shell .recent-list small {
701
+ color: #99a5b5;
702
+ font-size: 11px;
703
+ white-space: nowrap;
704
+ }
705
+ @media (max-width: 1100px) {
706
+ .host-shell .shortcut-grid {
707
+ grid-template-columns: repeat(2, minmax(0, 1fr));
708
+ }
709
+ .host-shell .home-columns {
710
+ grid-template-columns: 1fr;
711
+ }
712
+ .host-shell .menu-search {
713
+ width: 230px;
714
+ }
715
+ .host-shell .shell-content {
716
+ padding: 18px;
717
+ }
718
+ }
719
+ @media (max-width: 760px) {
720
+ .host-shell .shell-sidebar {
721
+ width: 180px;
722
+ }
723
+ .host-shell .shell-main {
724
+ margin-left: 180px;
725
+ }
726
+ .host-shell .brand {
727
+ width: auto;
728
+ }
729
+ .host-shell .brand strong span {
730
+ display: none;
731
+ }
732
+ .host-shell .shell-topbar {
733
+ padding: 0 12px;
734
+ gap: 8px;
735
+ }
736
+ .host-shell .menu-search {
737
+ width: 180px;
738
+ min-width: 0;
739
+ flex: 0 1 180px;
740
+ margin-left: auto;
741
+ }
742
+ .host-shell .shell-breadcrumb {
743
+ flex: 1;
744
+ overflow: hidden;
745
+ white-space: nowrap;
746
+ }
747
+ .host-shell .menu-search kbd,
748
+ .host-shell .demo-badge {
749
+ display: none;
750
+ }
751
+ .host-shell .topbar-spacer {
752
+ display: none;
753
+ }
754
+ .host-shell .search-results {
755
+ width: 280px;
756
+ }
757
+ .host-shell .shell-content {
758
+ padding: 14px;
759
+ }
760
+ .host-shell .welcome-panel {
761
+ padding: 22px;
762
+ }
763
+ .host-shell .welcome-panel h1 {
764
+ font-size: 19px;
765
+ }
766
+ .host-shell .shortcut-grid {
767
+ grid-template-columns: 1fr;
768
+ }
769
+ .host-shell .home-panel {
770
+ padding: 18px;
771
+ }
772
+ .host-shell .shell-feedback {
773
+ margin-left: 14px;
774
+ margin-right: 14px;
775
+ }
776
+ }