@axewo/fin-micro 0.0.0-stage → 2.0.0

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 (91) hide show
  1. package/README.md +223 -2
  2. package/cli/index.mjs +240 -0
  3. package/dist/browser.cjs +1 -0
  4. package/dist/browser.mjs +169 -0
  5. package/dist/core.cjs +1 -0
  6. package/dist/core.mjs +654 -0
  7. package/dist/iframe.cjs +1 -0
  8. package/dist/iframe.mjs +146 -0
  9. package/dist/index.cjs +1 -0
  10. package/dist/index.mjs +35 -0
  11. package/dist/router-view-impl-B1NzCGKV.mjs +76 -0
  12. package/dist/router-view-impl-BvOToV_Z.cjs +1 -0
  13. package/dist/runtime.cjs +1 -0
  14. package/dist/runtime.mjs +149 -0
  15. package/dist/sdk.cjs +1 -0
  16. package/dist/sdk.mjs +118 -0
  17. package/dist/types/browser/index.d.ts +46 -0
  18. package/dist/types/core/index.d.ts +63 -0
  19. package/dist/types/iframe/index.d.ts +77 -0
  20. package/dist/types/index.d.ts +8 -0
  21. package/dist/types/runtime/index.d.ts +21 -0
  22. package/dist/types/runtime/lifecycle.d.ts +23 -0
  23. package/dist/types/sdk/index.d.ts +397 -0
  24. package/dist/types/vue/index.d.ts +102 -0
  25. package/dist/types/vue/router-view-impl.d.ts +41 -0
  26. package/dist/types/vue/router-view.d.ts +42 -0
  27. package/dist/types/vue/tab-context.d.ts +6 -0
  28. package/dist/vue.cjs +1 -0
  29. package/dist/vue.mjs +180 -0
  30. package/package.json +91 -3
  31. package/scaffold/base/index.html +12 -0
  32. package/scaffold/base/package.json.template +33 -0
  33. package/scaffold/base/scripts/check-runtime.mjs +43 -0
  34. package/scaffold/base/src/components/.gitkeep +1 -0
  35. package/scaffold/base/src/components/AppProviders.vue +25 -0
  36. package/scaffold/base/src/hooks/.gitkeep +1 -0
  37. package/scaffold/base/src/layout/.gitkeep +1 -0
  38. package/scaffold/base/src/locales/.gitkeep +1 -0
  39. package/scaffold/base/src/locales/en.ts +12 -0
  40. package/scaffold/base/src/locales/index.ts +13 -0
  41. package/scaffold/base/src/locales/zh-CN.ts +12 -0
  42. package/scaffold/base/src/main.ts +22 -0
  43. package/scaffold/base/src/router/.gitkeep +1 -0
  44. package/scaffold/base/src/router/demo.ts +6 -0
  45. package/scaffold/base/src/router/index.ts +13 -0
  46. package/scaffold/base/src/stores/.gitkeep +1 -0
  47. package/scaffold/base/src/stores/demo.ts +12 -0
  48. package/scaffold/base/src/stores/index.ts +11 -0
  49. package/scaffold/base/src/styles/index.css +18 -0
  50. package/scaffold/base/src/types/.gitkeep +1 -0
  51. package/scaffold/base/src/utils/.gitkeep +1 -0
  52. package/scaffold/base/src/utils/appConfig.ts +49 -0
  53. package/scaffold/base/src/utils/errorUtils.ts +92 -0
  54. package/scaffold/base/src/utils/requestUtils.ts +144 -0
  55. package/scaffold/base/src/views/.gitkeep +1 -0
  56. package/scaffold/base/src/views/DemoView.vue +26 -0
  57. package/scaffold/base/tsconfig.json +16 -0
  58. package/scaffold/base/vite.config.ts +8 -0
  59. package/scaffold/host/.env.example +13 -0
  60. package/scaffold/host/src/App.vue +4 -0
  61. package/scaffold/host/src/bootstrap.ts +50 -0
  62. package/scaffold/host/src/hooks/usePlatformSession.ts +91 -0
  63. package/scaffold/host/src/layout/HostHeader.vue +69 -0
  64. package/scaffold/host/src/layout/HostLayout.vue +168 -0
  65. package/scaffold/host/src/layout/HostMenu.vue +15 -0
  66. package/scaffold/host/src/layout/HostTabs.vue +47 -0
  67. package/scaffold/host/src/layout/HostWorkspace.vue +26 -0
  68. package/scaffold/host/src/localPages.ts +45 -0
  69. package/scaffold/host/src/platform.ts +239 -0
  70. package/scaffold/host/src/router/guards.ts +128 -0
  71. package/scaffold/host/src/router/index.ts +25 -0
  72. package/scaffold/host/src/router/targets.ts +30 -0
  73. package/scaffold/host/src/router/workspace.ts +63 -0
  74. package/scaffold/host/src/styles/shell.css +761 -0
  75. package/scaffold/host/src/types/platform.ts +12 -0
  76. package/scaffold/host/src/utils/request.ts +42 -0
  77. package/scaffold/host/src/views/HomeView.vue +19 -0
  78. package/scaffold/host/src/views/LoginRoute.vue +16 -0
  79. package/scaffold/host/src/views/LoginView.vue +88 -0
  80. package/scaffold/host/src/views/NotFoundView.vue +1 -0
  81. package/scaffold/host/src/views/ProfileView.vue +24 -0
  82. package/scaffold/host/src/views/WorkspaceRoute.vue +11 -0
  83. package/scaffold/vue/src/App.vue +24 -0
  84. package/scaffold/vue/src/bootstrap.ts +67 -0
  85. package/scaffold/vue/src/bridge/auth.ts +23 -0
  86. package/scaffold/vue/src/bridge/session.ts +16 -0
  87. package/scaffold/vue/src/main.ts +13 -0
  88. package/scaffold/vue/src/router/index.ts +16 -0
  89. package/scaffold/vue/src/views/DetailView.vue +57 -0
  90. package/scaffold/vue/src/views/ListView.vue +55 -0
  91. package/scaffold/vue/src/views/NotFoundView.vue +1 -0
@@ -0,0 +1,761 @@
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
+ scrollbar-width: thin;
317
+ flex: 1;
318
+ min-width: 0;
319
+ gap: 4px;
320
+ align-items: stretch;
321
+ }
322
+ .host-shell .shell-tab {
323
+ display: flex;
324
+ flex-shrink: 0;
325
+ position: relative;
326
+ align-items: center;
327
+ border-right: 1px solid #f0f2f6;
328
+ }
329
+ .host-shell .shell-tab > button {
330
+ height: 100%;
331
+ border: 0;
332
+ background: transparent;
333
+ padding: 0 13px;
334
+ font-size: 12px;
335
+ max-width: 210px;
336
+ overflow: hidden;
337
+ text-overflow: ellipsis;
338
+ white-space: nowrap;
339
+ }
340
+ .host-shell .shell-tab.active {
341
+ background: #f2f6ff;
342
+ color: #3267e3;
343
+ }
344
+ .host-shell .shell-tab.active::after {
345
+ content: '';
346
+ position: absolute;
347
+ bottom: 0;
348
+ left: 8px;
349
+ right: 8px;
350
+ height: 2px;
351
+ background: #3267e3;
352
+ }
353
+ .host-shell .shell-tab .tab-close {
354
+ padding: 0 8px;
355
+ max-width: none;
356
+ color: #9aa4b6;
357
+ }
358
+ .host-shell .shell-tab .tab-close:hover {
359
+ color: #cf4b4b;
360
+ }
361
+ .host-shell .tab-more {
362
+ border: 0;
363
+ border-left: 1px solid var(--shell-border);
364
+ width: 44px;
365
+ background: white;
366
+ font-size: 20px !important;
367
+ flex-shrink: 0;
368
+ }
369
+ .host-shell .shell-breadcrumb {
370
+ display: flex;
371
+ align-items: center;
372
+ gap: 8px;
373
+ min-width: 0;
374
+ color: #939cab;
375
+ font-size: 12px;
376
+ }
377
+ .host-shell .shell-breadcrumb strong {
378
+ color: #536079;
379
+ font-weight: 400;
380
+ overflow: hidden;
381
+ text-overflow: ellipsis;
382
+ white-space: nowrap;
383
+ }
384
+ /* 工作区建立确定的高度链:本地长页面由此滚动,远端挂载点继承内容盒高度。 */
385
+ .host-shell .shell-content {
386
+ flex: 1 1 auto;
387
+ min-height: 0;
388
+ /* 工作区是宿主唯一业务滚动容器;头部、页签和面包屑不随内容滚动。 */
389
+ overflow: auto;
390
+ overscroll-behavior: contain;
391
+ padding: 20px 28px 32px;
392
+ }
393
+ .host-shell .shell-app-container {
394
+ min-height: 0 !important;
395
+ height: auto !important;
396
+ }
397
+ .host-shell .shell-app-container > div {
398
+ min-height: 0 !important;
399
+ height: auto !important;
400
+ }
401
+ .host-shell .shell-feedback {
402
+ margin: 14px 28px 0;
403
+ flex: 0 0 auto;
404
+ padding: 9px 13px;
405
+ display: flex;
406
+ align-items: center;
407
+ justify-content: space-between;
408
+ gap: 16px;
409
+ color: #3267e3;
410
+ background: #eaf1ff;
411
+ border: 1px solid #d7e5ff;
412
+ border-radius: 6px;
413
+ font-size: 12px;
414
+ }
415
+ .host-shell .shell-feedback.warning {
416
+ color: #91681e;
417
+ background: #fff9ec;
418
+ border-color: #f3e6c3;
419
+ }
420
+ .host-shell .shell-feedback button {
421
+ border: 0;
422
+ background: transparent;
423
+ font-size: 18px;
424
+ }
425
+ /* 弹层背板只覆盖页面,顶栏和弹出菜单位于其上;点击空白或 Esc 均可关闭。 */
426
+ .host-shell .popover-backdrop {
427
+ position: fixed;
428
+ inset: 0;
429
+ z-index: 20;
430
+ border: 0;
431
+ background: transparent;
432
+ cursor: default !important;
433
+ }
434
+ .host-shell .shell-popover {
435
+ position: absolute;
436
+ z-index: 40;
437
+ background: white;
438
+ border: 1px solid #e5eaf2;
439
+ box-shadow: 0 10px 34px #20395e1a;
440
+ border-radius: 8px;
441
+ padding: 8px;
442
+ text-align: left;
443
+ }
444
+ .host-shell .shell-popover button {
445
+ display: block;
446
+ width: 100%;
447
+ text-align: left;
448
+ background: transparent;
449
+ border: 0;
450
+ padding: 8px 10px;
451
+ border-radius: 4px;
452
+ font-size: 12px;
453
+ }
454
+ .host-shell .shell-popover button:hover:not(:disabled) {
455
+ background: #eff4ff;
456
+ color: #3267e3;
457
+ }
458
+ .host-shell .shell-popover small {
459
+ display: block;
460
+ font-size: 11px;
461
+ color: #909aad;
462
+ }
463
+ .host-shell .shell-popover hr {
464
+ border: 0;
465
+ border-top: 1px solid #eef0f5;
466
+ margin: 6px 0;
467
+ }
468
+ .host-shell .popover-label {
469
+ color: #939cab;
470
+ font-size: 11px;
471
+ margin: 2px 10px 6px;
472
+ overflow: hidden;
473
+ text-overflow: ellipsis;
474
+ white-space: nowrap;
475
+ }
476
+ .host-shell .popover-empty {
477
+ text-align: center;
478
+ color: #9aa4b4;
479
+ padding: 16px;
480
+ font-size: 12px;
481
+ }
482
+ .host-shell .search-results {
483
+ top: 40px;
484
+ left: 0;
485
+ width: 360px;
486
+ max-height: 360px;
487
+ overflow: auto;
488
+ }
489
+ .host-shell .search-results button strong {
490
+ font-weight: 500;
491
+ }
492
+ .host-shell .search-results button small {
493
+ margin-top: 3px;
494
+ }
495
+ .host-shell .message-popover {
496
+ right: 0;
497
+ top: 42px;
498
+ width: 300px;
499
+ }
500
+ .host-shell .message-popover h3 {
501
+ font-size: 14px;
502
+ margin: 8px 10px;
503
+ }
504
+ .host-shell .user-popover {
505
+ right: 0;
506
+ top: 43px;
507
+ width: 180px;
508
+ padding: 14px 8px 8px;
509
+ }
510
+ .host-shell .user-popover > strong,
511
+ .host-shell .user-popover > small {
512
+ padding: 0 10px;
513
+ }
514
+ .host-shell .tab-actions {
515
+ right: 8px;
516
+ top: 44px;
517
+ width: 176px;
518
+ }
519
+ .host-shell .tab-actions.context-actions {
520
+ position: fixed;
521
+ right: auto;
522
+ }
523
+ .host-shell .home-view {
524
+ max-width: 1440px;
525
+ margin: 0 auto;
526
+ }
527
+ .host-shell .welcome-panel {
528
+ background: #f4f7fc;
529
+ border: 1px solid #e5ebf5;
530
+ border-radius: 10px;
531
+ padding: 28px 32px;
532
+ min-height: 152px;
533
+ display: flex;
534
+ justify-content: space-between;
535
+ align-items: center;
536
+ margin-bottom: 22px;
537
+ overflow: hidden;
538
+ }
539
+ .host-shell .eyebrow {
540
+ color: #7f94b4 !important;
541
+ font-size: 10px !important;
542
+ letter-spacing: 1.8px;
543
+ margin: 0 0 10px !important;
544
+ }
545
+ .host-shell .welcome-panel h1 {
546
+ font-size: 23px;
547
+ letter-spacing: 0.3px;
548
+ margin: 0 0 9px;
549
+ font-weight: 600;
550
+ color: #25344e;
551
+ }
552
+ .host-shell .welcome-panel p {
553
+ font-size: 12px;
554
+ color: #8b97aa;
555
+ margin: 0;
556
+ }
557
+ .host-shell .home-panel {
558
+ background: #fff;
559
+ border: 1px solid var(--shell-border);
560
+ border-radius: 9px;
561
+ padding: 22px 24px;
562
+ margin-bottom: 22px;
563
+ }
564
+ .host-shell .panel-heading {
565
+ display: flex;
566
+ justify-content: space-between;
567
+ align-items: center;
568
+ gap: 12px;
569
+ margin-bottom: 20px;
570
+ }
571
+ .host-shell .panel-heading h2 {
572
+ margin: 0;
573
+ font-size: 14px;
574
+ font-weight: 600;
575
+ }
576
+ .host-shell .panel-heading > span {
577
+ color: #9ba4b4;
578
+ font-size: 11px;
579
+ }
580
+ .host-shell .shortcut-grid {
581
+ display: grid;
582
+ grid-template-columns: repeat(3, minmax(0, 1fr));
583
+ gap: 16px;
584
+ }
585
+ .host-shell .shortcut-card {
586
+ display: flex;
587
+ align-items: center;
588
+ gap: 14px;
589
+ padding: 18px;
590
+ background: white;
591
+ border: 1px solid #e9edf5;
592
+ border-radius: 7px;
593
+ text-align: left;
594
+ transition:
595
+ border-color 0.15s,
596
+ background 0.15s;
597
+ }
598
+ .host-shell .shortcut-card:hover {
599
+ border-color: #acc2f5;
600
+ background: #fafcff;
601
+ }
602
+ .host-shell .entry-icon {
603
+ width: 40px;
604
+ height: 40px;
605
+ display: grid;
606
+ place-items: center;
607
+ border-radius: 9px;
608
+ background: #edf3ff;
609
+ color: #4c79dc;
610
+ font-size: 17px;
611
+ }
612
+ .host-shell .shortcut-card:nth-child(2) .entry-icon {
613
+ background: #edf8f5;
614
+ color: #4a9a88;
615
+ }
616
+ .host-shell .shortcut-card strong {
617
+ display: block;
618
+ font-size: 13px;
619
+ font-weight: 500;
620
+ }
621
+ .host-shell .shortcut-card small {
622
+ display: block;
623
+ color: #99a3b4;
624
+ font-size: 11px;
625
+ margin-top: 4px;
626
+ }
627
+ .host-shell .entry-arrow {
628
+ margin-left: auto;
629
+ color: #a0acbe;
630
+ }
631
+ .host-shell .home-columns {
632
+ display: grid;
633
+ grid-template-columns: 1.2fr 1fr;
634
+ gap: 22px;
635
+ }
636
+ .host-shell .home-columns .home-panel {
637
+ min-height: 266px;
638
+ }
639
+ .host-shell .empty-state {
640
+ text-align: center;
641
+ color: #9ba5b4;
642
+ padding: 25px 12px;
643
+ font-size: 12px;
644
+ }
645
+ .host-shell .empty-state strong {
646
+ display: block;
647
+ font-weight: 400;
648
+ color: #8491a6;
649
+ margin-bottom: 6px;
650
+ }
651
+ .host-shell .empty-state p {
652
+ margin: 0;
653
+ font-size: 11px;
654
+ }
655
+ .host-shell .empty-symbol {
656
+ display: block;
657
+ color: #ced7e5;
658
+ font-size: 32px;
659
+ line-height: 1.2;
660
+ margin-bottom: 13px;
661
+ }
662
+ .host-shell .recent-list {
663
+ list-style: none;
664
+ margin: 0;
665
+ padding: 0;
666
+ }
667
+ .host-shell .recent-list li + li {
668
+ border-top: 1px solid #f1f3f7;
669
+ }
670
+ .host-shell .recent-list button {
671
+ display: flex;
672
+ align-items: center;
673
+ justify-content: space-between;
674
+ gap: 16px;
675
+ width: 100%;
676
+ border: 0;
677
+ background: white;
678
+ text-align: left;
679
+ padding: 12px 0;
680
+ font-size: 12px;
681
+ }
682
+ .host-shell .recent-list button:hover {
683
+ color: #3267e3;
684
+ }
685
+ .host-shell .recent-list small {
686
+ color: #99a5b5;
687
+ font-size: 11px;
688
+ white-space: nowrap;
689
+ }
690
+ @media (max-width: 1100px) {
691
+ .host-shell .shortcut-grid {
692
+ grid-template-columns: repeat(2, minmax(0, 1fr));
693
+ }
694
+ .host-shell .home-columns {
695
+ grid-template-columns: 1fr;
696
+ }
697
+ .host-shell .menu-search {
698
+ width: 230px;
699
+ }
700
+ .host-shell .shell-content {
701
+ padding: 18px;
702
+ }
703
+ }
704
+ @media (max-width: 760px) {
705
+ .host-shell .shell-sidebar {
706
+ width: 180px;
707
+ }
708
+ .host-shell .shell-main {
709
+ margin-left: 180px;
710
+ }
711
+ .host-shell .brand {
712
+ width: auto;
713
+ }
714
+ .host-shell .brand strong span {
715
+ display: none;
716
+ }
717
+ .host-shell .shell-topbar {
718
+ padding: 0 12px;
719
+ gap: 8px;
720
+ }
721
+ .host-shell .menu-search {
722
+ width: 180px;
723
+ min-width: 0;
724
+ flex: 0 1 180px;
725
+ margin-left: auto;
726
+ }
727
+ .host-shell .shell-breadcrumb {
728
+ flex: 1;
729
+ overflow: hidden;
730
+ white-space: nowrap;
731
+ }
732
+ .host-shell .menu-search kbd,
733
+ .host-shell .demo-badge {
734
+ display: none;
735
+ }
736
+ .host-shell .topbar-spacer {
737
+ display: none;
738
+ }
739
+ .host-shell .search-results {
740
+ width: 280px;
741
+ }
742
+ .host-shell .shell-content {
743
+ padding: 14px;
744
+ }
745
+ .host-shell .welcome-panel {
746
+ padding: 22px;
747
+ }
748
+ .host-shell .welcome-panel h1 {
749
+ font-size: 19px;
750
+ }
751
+ .host-shell .shortcut-grid {
752
+ grid-template-columns: 1fr;
753
+ }
754
+ .host-shell .home-panel {
755
+ padding: 18px;
756
+ }
757
+ .host-shell .shell-feedback {
758
+ margin-left: 14px;
759
+ margin-right: 14px;
760
+ }
761
+ }