mamba-layout 0.44.0 → 0.46.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.
package/README.md CHANGED
@@ -1,47 +1,155 @@
1
- # mamba-layout
2
-
3
- Shared Mamba Vue layout shell, styles, locale helpers, and a standalone browser layout build.
4
-
5
- ## Install
6
-
7
- ```sh
8
- npm install mamba-layout
9
- ```
10
-
11
- `mamba-layout` is designed for Vue 3 applications. Vue, Vue Router, Vue I18n, Element Plus, and Tailwind CSS are peer dependencies for component usage.
12
-
13
- ## Vue Usage
14
-
15
- ```ts
16
- import { BaseLayout, i18n, initTheme } from "mamba-layout";
17
- import "mamba-layout/styles";
18
- ```
19
-
20
- ```vue
21
- <template>
22
- <BaseLayout :setting="setting" />
23
- </template>
24
- ```
25
-
26
- The consuming app owns user state, menus, account menu entries, app switcher data, and auth actions. Pass those values through the `setting` prop.
27
-
28
- ## Standalone Usage
29
-
30
- The standalone build bundles Vue, Vue Router, Vue I18n, Element Plus, Element Plus icons, and layout styles. It registers the `<mamba-layout>` custom element and reads config from `window.MAMBA_LAYOUT_CONFIG`.
31
-
32
- ```html
33
- <link rel="stylesheet" href="./node_modules/mamba-layout/dist/layout.css" />
34
- <script>
35
- window.MAMBA_LAYOUT_CONFIG = {
36
- setting: {
37
- title: "Mamba",
38
- menus: [],
39
- accountMenu: [],
40
- appList: [],
41
- user: null
42
- }
43
- };
44
- </script>
45
- <mamba-layout></mamba-layout>
46
- <script src="./node_modules/mamba-layout/dist/layout.global.js"></script>
47
- ```
1
+ # mamba-layout
2
+
3
+ Shared Mamba Vue layout shell, styles, locale helpers, and a standalone browser layout build.
4
+
5
+ ### Quick Start
6
+
7
+ ```html
8
+ <!doctype html>
9
+ <html lang="zh-CN">
10
+ <head>
11
+ <meta charset="UTF-8" />
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13
+ <title>My App</title>
14
+ <link type="text/css" rel="stylesheet" href="https://at.alicdn.com/t/c/font_4614982_ta3fsffdp7.css" />
15
+ <link type="text/css" rel="stylesheet" href="https://at.alicdn.com/t/c/font_4839395_zeh0j9u8an.css" />
16
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mamba-layout@latest/dist/layout.css" />
17
+ <style>
18
+ html, body, mamba-layout {
19
+ width: 100%;
20
+ height: 100%;
21
+ margin: 0;
22
+ }
23
+ mamba-layout {
24
+ display: block;
25
+ }
26
+ </style>
27
+ </head>
28
+ <body>
29
+ <mamba-layout>
30
+ <div class="demo-content">
31
+ <h1>Hello World</h1>
32
+ <p>Your content goes here</p>
33
+ </div>
34
+ </mamba-layout>
35
+ <script src="https://cdn.jsdelivr.net/npm/mamba-layout@latest/dist/layout.global.js"></script>
36
+ </body>
37
+ </html>
38
+ ```
39
+
40
+ ### Dark Mode CSS
41
+
42
+ The layout uses CSS variables that automatically adapt to dark mode. When dark mode is active, the following variables change:
43
+
44
+ ```css
45
+ /* Light mode (default) */
46
+ :root {
47
+ --ui-bg-page: #ffffff;
48
+ --ui-bg-card: #ffffff;
49
+ --ui-text-primary: #303133;
50
+ --ui-text-secondary: #606266;
51
+ --ui-border-default: #dcdfe6;
52
+ }
53
+
54
+ /* Dark mode (automatically applied when theme="dark") */
55
+ :root.dark {
56
+ --ui-bg-page: #1a1a1a;
57
+ --ui-bg-card: #2a2a2a;
58
+ --ui-text-primary: #e5e5e5;
59
+ --ui-text-secondary: #a0a0a0;
60
+ --ui-border-default: #404040;
61
+ }
62
+ ```
63
+
64
+ To customize dark mode colors for your content:
65
+
66
+ ```css
67
+ /* Your custom dark mode styles */
68
+ :root.dark {
69
+ --ui-bg-page: #0f0f0f; /* Custom dark background */
70
+ --ui-bg-card: #1f1f1f; /* Custom dark card */
71
+ --ui-text-primary: #ffffff; /* Custom text color */
72
+ --ui-text-secondary: #b0b0b0; /* Custom secondary text */
73
+ }
74
+ ```
75
+
76
+ ### Available CSS Variables
77
+
78
+ ```css
79
+ /* Background colors */
80
+ --ui-bg-page /* Page background */
81
+ --ui-bg-card /* Card background */
82
+ --ui-bg-muted /* Muted/secondary background */
83
+ --ui-bg-overlay /* Overlay background */
84
+
85
+ /* Text colors */
86
+ --ui-text-primary /* Primary text */
87
+ --ui-text-secondary /* Secondary text */
88
+ --ui-text-disabled /* Disabled text */
89
+
90
+ /* Border colors */
91
+ --ui-border-default /* Default border */
92
+ --ui-border-light /* Light border */
93
+
94
+ /* Other */
95
+ --ui-radius-control /* Border radius for controls */
96
+ --ui-shadow-card /* Card shadow */
97
+ ```
98
+
99
+ ### AI Usage Guidelines
100
+
101
+ **⚠️ Important for AI Code Generation:**
102
+
103
+ When using Mamba Layout, **DO NOT** generate the following components as they are already provided by the `<mamba-layout>` element:
104
+
105
+ - ❌ **Sidebar/Navigation Menu** - The layout includes a built-in sidebar with navigation
106
+ - ❌ **Top Header Bar** - The layout includes a built-in header with logo and actions
107
+ - ❌ **Layout Structure** - Do not create flex/grid containers for overall page layout
108
+ - ❌ **Theme Toggle Button** - Dark mode is handled automatically by the layout
109
+
110
+ **What to generate:**
111
+
112
+ - ✅ **Page Content Only** - Place your actual page content inside `<mamba-layout>` tags
113
+ - ✅ **Data Cards** - Statistics cards, metric displays
114
+ - ✅ **Charts & Visualizations** - Data charts, graphs
115
+ - ✅ **Tables** - Data tables, lists
116
+ - ✅ **Forms** - Input forms, filters
117
+ - ✅ **Custom Components** - Any business-specific UI components
118
+
119
+ **Example for AI Prompts:**
120
+
121
+ ```
122
+ Create a dashboard page with statistics cards and charts using Mamba Layout.
123
+ Only generate the page content that goes inside the <mamba-layout> element.
124
+ Do NOT create sidebar, header, or navigation as they are provided by the layout.
125
+ ```
126
+
127
+ **Correct Usage:**
128
+
129
+ ```html
130
+ <mamba-layout>
131
+ <!-- Only your page content here -->
132
+ <div class="dashboard-content">
133
+ <h1>Data Dashboard</h1>
134
+ <div class="stats-grid">...</div>
135
+ <div class="charts">...</div>
136
+ </div>
137
+ </mamba-layout>
138
+ ```
139
+
140
+ **Incorrect Usage (what NOT to do):**
141
+
142
+ ```html
143
+ <mamba-layout>
144
+ <!-- ❌ Don't create your own sidebar -->
145
+ <aside class="sidebar">...</aside>
146
+
147
+ <!-- ❌ Don't create your own header -->
148
+ <header class="top-bar">...</header>
149
+
150
+ <!-- ❌ Don't create layout containers -->
151
+ <div style="display: flex;">
152
+ <main>...</main>
153
+ </div>
154
+ </mamba-layout>
155
+ ```
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .menu-item-icon[data-v-9373691a]{display:inline-flex;align-items:center;justify-content:center;color:currentColor}.menu-item-icon__svg[data-v-9373691a]{display:inline-flex}.menu-item-icon__svg[data-v-9373691a] svg{width:1em;height:1em;display:block;fill:currentColor}.aside-bar[data-v-75424edc]{border-right:1px solid var(--ui-sidebar-border, var(--el-border-color));background:var(--ui-sidebar-bg);color:var(--ui-sidebar-foreground)}.aside-bar__mobile-head[data-v-75424edc]{border-bottom:1px solid var(--ui-sidebar-border, var(--el-border-color))}.aside-bar__close[data-v-75424edc]{color:var(--ui-text-muted)}.app-select[data-v-e8bc4fc6]{display:flex;gap:4px;line-height:1}.app-select__group[data-v-e8bc4fc6]{position:relative;min-height:52px;display:flex;align-items:center}.app-select__group:hover .app-select__link[data-v-e8bc4fc6]:not(.app-select__link--active){color:var(--ui-topnav-foreground);background:var(--ui-topnav-surface)}.app-select__group:hover .app-select__dropdown[data-v-e8bc4fc6]{opacity:1;visibility:visible;transform:translateY(0)}.app-select__link[data-v-e8bc4fc6]{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;height:32px;color:var(--ui-topnav-muted);font-size:13px;font-weight:600;transition:color var(--ui-transition-fast);border-radius:6px}.app-select__link--active[data-v-e8bc4fc6],.app-select__link--active[data-v-e8bc4fc6]:hover{background:var(--ui-topnav-active-bg);color:var(--ui-topnav-active-fg, var(--el-color-primary))}.app-select__dropdown[data-v-e8bc4fc6]{position:absolute;top:calc(100% + 0px);left:0;width:400px;padding:8px;border:1px solid var(--ui-border-default);border-radius:var(--ui-radius-card);background:var(--ui-bg-card, var(--el-bg-color));box-shadow:var(--ui-shadow-pop, var(--el-box-shadow));opacity:0;visibility:hidden;transform:translateY(-5px);transition:opacity var(--ui-transition-fast),visibility var(--ui-transition-fast),transform var(--ui-transition-fast);z-index:20}.app-select__dropdown-item[data-v-e8bc4fc6]{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.app-select__dropdown-item[data-v-e8bc4fc6]:hover{background:var(--ui-bg-muted)}.app-select__dropdown-item--active[data-v-e8bc4fc6]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.app-select__dropdown-icon[data-v-e8bc4fc6]{color:var(--ui-text-muted)}.app-select__dropdown-desc[data-v-e8bc4fc6]{font-size:12px;color:var(--ui-text-muted);line-height:1.4;margin-top:2px}.nav-icon-btn[data-v-815200af]{--nav-icon-btn-size: 30px;--nav-icon-btn-padding-x: 12px;--nav-icon-btn-color: var(--ui-topnav-muted);--nav-icon-btn-bg: transparent;--nav-icon-btn-border-color: transparent;--nav-icon-btn-hover-bg: rgba(0, 0, 0, .1);--nav-icon-btn-hover-border-color: var(--nav-icon-btn-border-color);--nav-icon-btn-focus-ring: var(--ui-topnav-foreground);min-width:var(--nav-icon-btn-size);height:var(--nav-icon-btn-size);display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 var(--nav-icon-btn-padding-x);border:1px solid var(--nav-icon-btn-border-color);border-radius:var(--ui-radius-control);background:var(--nav-icon-btn-bg);color:var(--nav-icon-btn-color);font-size:16px;line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;box-sizing:border-box;flex-shrink:0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:background var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast)}.nav-icon-btn[data-v-815200af]:hover{background:var(--nav-icon-btn-hover-bg);color:var(--nav-icon-btn-hover-color);border-color:var(--nav-icon-btn-hover-border-color)}.nav-icon-btn[data-v-815200af]:focus-visible{outline:2px solid var(--nav-icon-btn-focus-ring);outline-offset:2px}.nav-icon-btn[data-v-815200af]:disabled{opacity:.6;cursor:not-allowed}.nav-icon-btn--icon-only[data-v-815200af]{width:var(--nav-icon-btn-size);padding:0}.theme-toggle__label[data-v-5a63bf38]{font-size:12px;line-height:1}.top-language-popover{padding:6px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;box-shadow:var(--ui-shadow-pop)!important}.language-select[data-v-86baf2ab]{flex-shrink:0}.language-select__current[data-v-86baf2ab]{font-size:14px;font-weight:600;line-height:1}.language-select__caret[data-v-86baf2ab]{font-size:12px}.language-select__panel[data-v-86baf2ab]{display:grid;gap:4px}.language-select__option[data-v-86baf2ab]{padding:10px 12px;border-radius:var(--ui-radius-control);cursor:pointer;color:var(--ui-text-primary);transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.language-select__option[data-v-86baf2ab]:hover{background:var(--ui-bg-muted)}.language-select__option--active[data-v-86baf2ab]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.mobile-user-popover[data-v-cb126c27]{display:grid;gap:4px}.mobile-user-popover__item[data-v-cb126c27]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.mobile-user-popover__item[data-v-cb126c27]:hover{background:var(--ui-bg-muted)}.mobile-user-popover__item--danger[data-v-cb126c27]{color:var(--el-color-danger)}.mobile-user-popover__divider[data-v-cb126c27]{height:1px;background:var(--ui-border-default);margin:2px 0}.header-right-mobile[data-v-e2e035b7]{--nav-icon-btn-size: 40px;display:flex;align-items:center;gap:8px;padding-right:0;min-width:0}.header-right-mobile[data-v-e2e035b7] .nav-icon-btn{--nav-icon-btn-size: 40px;--nav-icon-btn-color: var(--ui-topnav-foreground);--nav-icon-btn-bg: var(--ui-topnav-surface);--nav-icon-btn-border-color: var(--ui-topnav-border);--nav-icon-btn-hover-bg: var(--ui-topnav-hover);--nav-icon-btn-hover-color: var(--ui-topnav-foreground);--nav-icon-btn-hover-border-color: var(--ui-topnav-border)}.header-right-mobile__action[data-v-e2e035b7]{--nav-icon-btn-color: var(--ui-topnav-foreground);--nav-icon-btn-bg: var(--ui-topnav-surface);--nav-icon-btn-border-color: var(--ui-topnav-border);--nav-icon-btn-hover-bg: var(--ui-topnav-hover);--nav-icon-btn-hover-color: var(--ui-topnav-foreground);--nav-icon-btn-hover-border-color: var(--ui-topnav-border)}@media(max-width:374px){.header-right-mobile[data-v-e2e035b7]{--nav-icon-btn-size: 36px;gap:6px}.header-right-mobile[data-v-e2e035b7] .nav-icon-btn{--nav-icon-btn-size: 36px}}.mobile-menu-toggle[data-v-00764a28]{width:40px;height:40px;display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border:1px solid var(--ui-topnav-border);border-radius:var(--ui-radius-control);background:var(--ui-topnav-surface);color:var(--ui-topnav-foreground);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.mobile-menu-toggle[data-v-00764a28]:hover{background:var(--ui-topnav-hover)}.mobile-menu-toggle[data-v-00764a28]:focus-visible{outline:2px solid var(--ui-topnav-foreground);outline-offset:2px}.mobile-menu-toggle__icon[data-v-00764a28]{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;font-size:18px}.user-avatar[data-v-69654729]{--el-avatar-bg-color: transparent}.user-avatar--fallback[data-v-69654729]{--el-avatar-bg-color: var(--ui-avatar-bg, var(--el-color-primary));color:var(--ui-text-on-brand)}.user-avatar__fallback[data-v-69654729]{color:inherit;font-weight:600;line-height:1;-webkit-user-select:none;user-select:none}.user-avatar__icon[data-v-69654729]{color:inherit;font-size:1em}.layout-breadcrumb[data-v-1589a248]{display:flex;min-width:0;align-items:center;gap:6px;color:var(--ui-text-placeholder);line-height:1.4}.layout-breadcrumb__back[data-v-1589a248]{display:inline-flex;width:24px;height:24px;flex:0 0 auto;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--ui-radius-sm);padding:0;background:transparent;color:var(--ui-text-placeholder);cursor:pointer;font:inherit;transition:background-color var(--ui-transition-fast),border-color var(--ui-transition-fast),color var(--ui-transition-fast)}.layout-breadcrumb__back[data-v-1589a248]:hover{background:var(--ui-bg-muted);color:var(--ui-text-muted)}.layout-breadcrumb__back[data-v-1589a248]:focus-visible{outline:2px solid var(--ui-ring);outline-offset:2px}.layout-breadcrumb__separator[data-v-1589a248]{flex:0 0 auto;color:var(--ui-text-disabled);font-size:11px}.layout-breadcrumb__link[data-v-1589a248],.layout-breadcrumb__current[data-v-1589a248]{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layout-breadcrumb__link[data-v-1589a248]{border:0;padding:0;background:transparent;color:var(--ui-text-placeholder);cursor:pointer;font:inherit;transition:color var(--ui-transition-fast)}.layout-breadcrumb__link[data-v-1589a248]:hover{color:var(--ui-text-muted)}.layout-breadcrumb__link[data-v-1589a248]:focus-visible{outline:2px solid var(--ui-ring);outline-offset:2px;border-radius:var(--ui-radius-sm)}.layout-breadcrumb__current[data-v-1589a248]{color:var(--ui-text-muted);font-weight:500}@media(max-width:768px){.layout-breadcrumb__link[data-v-1589a248],.layout-breadcrumb__current[data-v-1589a248]{max-width:44vw}}.top-timezone-popover{padding:6px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;box-shadow:var(--ui-shadow-pop)!important}.timezone-select[data-v-00b7fb6f]{flex-shrink:0}.timezone-select__current[data-v-00b7fb6f]{max-width:132px;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:600;line-height:1}.timezone-select__caret[data-v-00b7fb6f]{font-size:12px}.timezone-select__panel[data-v-00b7fb6f]{display:grid;gap:4px;max-height:min(360px,70vh);overflow-y:auto}.timezone-select__option[data-v-00b7fb6f]{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border:0;border-radius:var(--ui-radius-control);background:transparent;color:var(--ui-text-primary);text-align:left;cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.timezone-select__option[data-v-00b7fb6f]:hover{background:var(--ui-bg-muted)}.timezone-select__name[data-v-00b7fb6f]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timezone-select__offset[data-v-00b7fb6f]{color:var(--ui-text-muted);font-size:12px;white-space:nowrap}.timezone-select__option--active[data-v-00b7fb6f]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.timezone-select__option--active .timezone-select__offset[data-v-00b7fb6f]{color:var(--el-color-primary)}.top-userinfo-popover{padding:8px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;border-radius:var(--ui-radius-card)!important;box-shadow:var(--ui-shadow-pop)!important}.user-info__trigger[data-v-39b88d52]{display:inline-flex;width:28px;height:28px;overflow:hidden;border-radius:var(--ui-radius-pill);background:var(--ui-avatar-bg, var(--el-color-primary));border:1px solid var(--ui-topnav-border);align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--ui-text-on-brand);cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:border-color var(--ui-transition-fast),filter var(--ui-transition-fast)}.user-info__trigger[data-v-39b88d52]:hover{border-color:var(--ui-topnav-foreground);filter:brightness(1.05)}.user-info__panel[data-v-39b88d52]{display:grid;gap:2px}.user-info__profile[data-v-39b88d52]{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px;align-items:center;padding:8px 8px 10px}.user-info__profile-avatar[data-v-39b88d52]{width:44px;height:44px;overflow:hidden;border-radius:var(--ui-radius-pill);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--ui-avatar-bg, var(--el-color-primary));color:var(--ui-text-on-brand);font-size:16px;font-weight:700}.user-info__profile-main[data-v-39b88d52]{min-width:0}.user-info__display-name[data-v-39b88d52]{color:var(--ui-text-primary);font-size:14px;font-weight:700;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-info__username[data-v-39b88d52]{margin-top:2px;color:var(--ui-text-muted);font-size:12px;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-info__meta[data-v-39b88d52]{display:grid;gap:2px;padding:8px;margin-bottom:2px;border-radius:var(--ui-radius-control);background:var(--ui-bg-muted)}.user-info__meta-row[data-v-39b88d52]{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;align-items:center;min-height:24px;font-size:12px;line-height:18px}.user-info__meta-label[data-v-39b88d52]{color:var(--ui-text-muted)}.user-info__meta-value[data-v-39b88d52]{min-width:0;color:var(--ui-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.user-info__item[data-v-39b88d52]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);font-size:12px;cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.user-info__item[data-v-39b88d52]:hover{background:var(--ui-bg-muted)}.user-info__item--danger[data-v-39b88d52]{color:var(--el-color-danger)}.user-info__divider[data-v-39b88d52]{height:1px;background:var(--ui-border-soft);margin:4px 0}.header-right[data-v-a0481d3b]{display:flex;align-items:center;gap:8px;font-size:13px;--nav-icon-btn-size: 30px}.header-right__login[data-v-a0481d3b]{height:30px;line-height:30px;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 12px;border-radius:var(--ui-radius-control);color:var(--ui-topnav-foreground);background:linear-gradient(135deg,var(--el-color-primary) 0%,var(--ui-topnav-accent) 100%);box-shadow:0 8px 18px rgba(var(--el-color-primary-rgb),.24);transition:background var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast)}.header-right__login[data-v-a0481d3b]:hover{filter:brightness(1.05)}.header-bar[data-v-4f914a75]{min-height:56px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 12px;background:var(--ui-topnav-bg);color:var(--ui-topnav-muted)}.header-bar__left[data-v-4f914a75],.header-bar__right[data-v-4f914a75]{display:flex;align-items:center;min-width:0}.header-bar__left[data-v-4f914a75]{gap:12px;flex:1}.header-bar__right[data-v-4f914a75]{flex-shrink:0}.header-bar__logo-wrap[data-v-4f914a75]{display:flex;align-items:center;min-width:0}.header-bar__logo-link[data-v-4f914a75]{display:inline-flex;align-items:center;justify-content:center;min-height:40px;color:inherit}.header-bar__divider[data-v-4f914a75]{width:1px;height:18px;background:var(--ui-topnav-border)}[header-bar][data-v-4f914a75] .el-image .el-image__inner{width:auto;display:block}.aside-user-mobile[data-v-56c059ce]{width:100%;position:relative;display:flex;align-items:center;gap:8px;padding:16px;border-top:1px solid var(--ui-sidebar-border);color:var(--ui-sidebar-foreground);cursor:pointer}.aside-user-mobile__icon[data-v-56c059ce]{color:var(--ui-text-muted)}.aside-bar-mobile[data-v-d944cb85]{width:min(86vw,320px);max-width:calc(100vw - 32px);height:100vh;height:100dvh;z-index:240;border-right:1px solid var(--ui-sidebar-border);background:var(--ui-sidebar-bg);color:var(--ui-sidebar-foreground);box-shadow:var(--ui-shadow-pop);will-change:transform}.aside-bar-mobile__head[data-v-d944cb85]{min-height:var(--layout-mobile-header-height, 56px);padding:10px 12px;border-bottom:1px solid var(--ui-sidebar-border);flex-shrink:0}.aside-bar-mobile__close[data-v-d944cb85]{width:36px;height:36px;display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border:1px solid var(--ui-sidebar-border);border-radius:var(--ui-radius-control);background:var(--ui-sidebar-accent);color:var(--ui-text-muted);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast)}.aside-bar-mobile__close[data-v-d944cb85]:hover{background:var(--ui-sidebar-hover-bg);color:var(--ui-sidebar-foreground)}.aside-bar-mobile[data-v-d944cb85] .el-scrollbar{flex:1 1 auto;min-height:0}.layout-shell[data-v-5e5f3e6c]{height:100vh;--layout-mobile-header-height: 56px;background:var(--ui-topnav-bg);color:var(--ui-text-primary);overflow:hidden}.layout-shell__body[data-v-5e5f3e6c]{border-radius:var(--ui-body-radius);background:var(--ui-bg-page)}.layout-shell__content[data-v-5e5f3e6c]{background:var(--ui-bg-page)}.layout-shell__overlay[data-v-5e5f3e6c]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:230;background:var(--ui-bg-overlay);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);touch-action:none}.layout-page-view[data-v-5e5f3e6c]{display:flex;flex:1 1 auto;flex-direction:column;width:100%;min-width:0;min-height:0;background:var(--ui-bg-page);contain:paint}.layout-overlay-enter-active[data-v-5e5f3e6c],.layout-overlay-leave-active[data-v-5e5f3e6c]{transition:opacity var(--ui-transition-base)}.layout-overlay-enter-from[data-v-5e5f3e6c],.layout-overlay-leave-to[data-v-5e5f3e6c]{opacity:0}.layout-page-enter-active[data-v-5e5f3e6c],.layout-page-leave-active[data-v-5e5f3e6c]{transition:opacity var(--ui-transition-base),transform var(--ui-transition-base);will-change:opacity,transform}.layout-page-enter-from[data-v-5e5f3e6c]{opacity:0;transform:translate3d(8px,0,0)}.layout-page-leave-to[data-v-5e5f3e6c]{opacity:0;transform:translate3d(-6px,0,0)}@media(prefers-reduced-motion:reduce){.layout-overlay-enter-active[data-v-5e5f3e6c],.layout-overlay-leave-active[data-v-5e5f3e6c],.layout-page-enter-active[data-v-5e5f3e6c],.layout-page-leave-active[data-v-5e5f3e6c]{transition:none}.layout-page-enter-from[data-v-5e5f3e6c],.layout-page-leave-to[data-v-5e5f3e6c]{opacity:1;transform:none}}@media(max-width:1023px){.layout-shell[data-v-5e5f3e6c]{background:var(--ui-bg-page)}.layout-shell__body[data-v-5e5f3e6c]{border-radius:0}.layout-page-view[data-v-5e5f3e6c]{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.layout-page-enter-from[data-v-5e5f3e6c]{transform:translate3d(0,6px,0)}.layout-page-leave-to[data-v-5e5f3e6c]{transform:translate3d(0,-4px,0)}}
1
+ .menu-item-icon[data-v-ed060390]{display:inline-flex;align-items:center;justify-content:center;color:currentColor}.menu-item-icon__svg[data-v-ed060390]{display:inline-flex}.menu-item-icon__svg[data-v-ed060390] svg{width:1em;height:1em;display:block;fill:currentColor}.aside-bar[data-v-4ebd3eba]{border-right:1px solid var(--ui-sidebar-border, var(--el-border-color));background:var(--ui-sidebar-bg);color:var(--ui-sidebar-foreground)}.aside-bar__mobile-head[data-v-4ebd3eba]{border-bottom:1px solid var(--ui-sidebar-border, var(--el-border-color))}.aside-bar__close[data-v-4ebd3eba]{color:var(--ui-text-muted)}.app-select[data-v-edbb0fe6]{display:flex;gap:4px;line-height:1}.app-select__group[data-v-edbb0fe6]{position:relative;min-height:52px;display:flex;align-items:center}.app-select__group:hover .app-select__link[data-v-edbb0fe6]:not(.app-select__link--active){color:var(--ui-topnav-foreground);background:var(--ui-topnav-surface)}.app-select__group:hover .app-select__dropdown[data-v-edbb0fe6]{opacity:1;visibility:visible;transform:translateY(0)}.app-select__link[data-v-edbb0fe6]{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;height:32px;color:var(--ui-topnav-muted);font-size:13px;font-weight:600;transition:color var(--ui-transition-fast);border-radius:6px}.app-select__link--active[data-v-edbb0fe6],.app-select__link--active[data-v-edbb0fe6]:hover{background:var(--ui-topnav-active-bg);color:var(--ui-topnav-active-fg, var(--el-color-primary))}.app-select__dropdown[data-v-edbb0fe6]{position:absolute;top:calc(100% + 0px);left:0;width:400px;padding:8px;border:1px solid var(--ui-border-default);border-radius:var(--ui-radius-card);background:var(--ui-bg-card, var(--el-bg-color));box-shadow:var(--ui-shadow-pop, var(--el-box-shadow));opacity:0;visibility:hidden;transform:translateY(-5px);transition:opacity var(--ui-transition-fast),visibility var(--ui-transition-fast),transform var(--ui-transition-fast);z-index:20}.app-select__dropdown-item[data-v-edbb0fe6]{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.app-select__dropdown-item[data-v-edbb0fe6]:hover{background:var(--ui-bg-muted)}.app-select__dropdown-item--active[data-v-edbb0fe6]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.app-select__dropdown-icon[data-v-edbb0fe6]{color:var(--ui-text-muted)}.app-select__dropdown-desc[data-v-edbb0fe6]{font-size:12px;color:var(--ui-text-muted);line-height:1.4;margin-top:2px}.nav-icon-btn[data-v-824bbddc]{--nav-icon-btn-size: 30px;--nav-icon-btn-padding-x: 12px;--nav-icon-btn-color: var(--ui-topnav-muted);--nav-icon-btn-bg: transparent;--nav-icon-btn-border-color: transparent;--nav-icon-btn-hover-bg: rgba(0, 0, 0, .1);--nav-icon-btn-hover-border-color: var(--nav-icon-btn-border-color);--nav-icon-btn-focus-ring: var(--ui-topnav-foreground);min-width:var(--nav-icon-btn-size);height:var(--nav-icon-btn-size);display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 var(--nav-icon-btn-padding-x);border:1px solid var(--nav-icon-btn-border-color);border-radius:var(--ui-radius-control);background:var(--nav-icon-btn-bg);color:var(--nav-icon-btn-color);font-size:16px;line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;box-sizing:border-box;flex-shrink:0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:background var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast)}.nav-icon-btn[data-v-824bbddc]:hover{background:var(--nav-icon-btn-hover-bg);color:var(--nav-icon-btn-hover-color);border-color:var(--nav-icon-btn-hover-border-color)}.nav-icon-btn[data-v-824bbddc]:focus-visible{outline:2px solid var(--nav-icon-btn-focus-ring);outline-offset:2px}.nav-icon-btn[data-v-824bbddc]:disabled{opacity:.6;cursor:not-allowed}.nav-icon-btn--icon-only[data-v-824bbddc]{width:var(--nav-icon-btn-size);padding:0}.theme-toggle__label[data-v-e6ea60b7]{font-size:12px;line-height:1}.top-language-popover{padding:6px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;box-shadow:var(--ui-shadow-pop)!important}.language-select[data-v-48306ad1]{flex-shrink:0}.language-select__current[data-v-48306ad1]{font-size:14px;font-weight:600;line-height:1}.language-select__caret[data-v-48306ad1]{font-size:12px}.language-select__panel[data-v-48306ad1]{display:grid;gap:4px}.language-select__option[data-v-48306ad1]{padding:10px 12px;border-radius:var(--ui-radius-control);cursor:pointer;color:var(--ui-text-primary);transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.language-select__option[data-v-48306ad1]:hover{background:var(--ui-bg-muted)}.language-select__option--active[data-v-48306ad1]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.mobile-user-popover[data-v-87e082b1]{display:grid;gap:4px}.mobile-user-popover__item[data-v-87e082b1]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.mobile-user-popover__item[data-v-87e082b1]:hover{background:var(--ui-bg-muted)}.mobile-user-popover__item--danger[data-v-87e082b1]{color:var(--el-color-danger)}.mobile-user-popover__divider[data-v-87e082b1]{height:1px;background:var(--ui-border-default);margin:2px 0}.header-right-mobile[data-v-48792b0a]{--nav-icon-btn-size: 40px;display:flex;align-items:center;gap:8px;padding-right:0;min-width:0}.header-right-mobile[data-v-48792b0a] .nav-icon-btn{--nav-icon-btn-size: 40px;--nav-icon-btn-color: var(--ui-topnav-foreground);--nav-icon-btn-bg: var(--ui-topnav-surface);--nav-icon-btn-border-color: var(--ui-topnav-border);--nav-icon-btn-hover-bg: var(--ui-topnav-hover);--nav-icon-btn-hover-color: var(--ui-topnav-foreground);--nav-icon-btn-hover-border-color: var(--ui-topnav-border)}.header-right-mobile__action[data-v-48792b0a]{--nav-icon-btn-color: var(--ui-topnav-foreground);--nav-icon-btn-bg: var(--ui-topnav-surface);--nav-icon-btn-border-color: var(--ui-topnav-border);--nav-icon-btn-hover-bg: var(--ui-topnav-hover);--nav-icon-btn-hover-color: var(--ui-topnav-foreground);--nav-icon-btn-hover-border-color: var(--ui-topnav-border)}@media(max-width:374px){.header-right-mobile[data-v-48792b0a]{--nav-icon-btn-size: 36px;gap:6px}.header-right-mobile[data-v-48792b0a] .nav-icon-btn{--nav-icon-btn-size: 36px}}.mobile-menu-toggle[data-v-b1a4f38a]{width:40px;height:40px;display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border:1px solid var(--ui-topnav-border);border-radius:var(--ui-radius-control);background:var(--ui-topnav-surface);color:var(--ui-topnav-foreground);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.mobile-menu-toggle[data-v-b1a4f38a]:hover{background:var(--ui-topnav-hover)}.mobile-menu-toggle[data-v-b1a4f38a]:focus-visible{outline:2px solid var(--ui-topnav-foreground);outline-offset:2px}.mobile-menu-toggle__icon[data-v-b1a4f38a]{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;font-size:18px}.user-avatar[data-v-50be58a7]{--el-avatar-bg-color: transparent}.user-avatar--fallback[data-v-50be58a7]{--el-avatar-bg-color: var(--ui-avatar-bg, var(--el-color-primary));color:var(--ui-text-on-brand)}.user-avatar__fallback[data-v-50be58a7]{color:inherit;font-weight:600;line-height:1;-webkit-user-select:none;user-select:none}.user-avatar__icon[data-v-50be58a7]{color:inherit;font-size:1em}.top-timezone-popover{padding:6px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;box-shadow:var(--ui-shadow-pop)!important}.timezone-select[data-v-e62f5f2d]{flex-shrink:0}.timezone-select__current[data-v-e62f5f2d]{max-width:132px;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:600;line-height:1}.timezone-select__caret[data-v-e62f5f2d]{font-size:12px}.timezone-select__panel[data-v-e62f5f2d]{display:grid;gap:4px;max-height:min(360px,70vh);overflow-y:auto}.timezone-select__option[data-v-e62f5f2d]{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border:0;border-radius:var(--ui-radius-control);background:transparent;color:var(--ui-text-primary);text-align:left;cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.timezone-select__option[data-v-e62f5f2d]:hover{background:var(--ui-bg-muted)}.timezone-select__name[data-v-e62f5f2d]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timezone-select__offset[data-v-e62f5f2d]{color:var(--ui-text-muted);font-size:12px;white-space:nowrap}.timezone-select__option--active[data-v-e62f5f2d]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.timezone-select__option--active .timezone-select__offset[data-v-e62f5f2d]{color:var(--el-color-primary)}.top-userinfo-popover{padding:8px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;border-radius:var(--ui-radius-card)!important;box-shadow:var(--ui-shadow-pop)!important}.user-info__trigger[data-v-ac052463]{display:inline-flex;width:28px;height:28px;overflow:hidden;border-radius:var(--ui-radius-pill);background:var(--ui-avatar-bg, var(--el-color-primary));border:1px solid var(--ui-topnav-border);align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--ui-text-on-brand);cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:border-color var(--ui-transition-fast),filter var(--ui-transition-fast)}.user-info__trigger[data-v-ac052463]:hover{border-color:var(--ui-topnav-foreground);filter:brightness(1.05)}.user-info__panel[data-v-ac052463]{display:grid;gap:2px}.user-info__profile[data-v-ac052463]{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px;align-items:center;padding:8px 8px 10px}.user-info__profile-avatar[data-v-ac052463]{width:44px;height:44px;overflow:hidden;border-radius:var(--ui-radius-pill);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--ui-avatar-bg, var(--el-color-primary));color:var(--ui-text-on-brand);font-size:16px;font-weight:700}.user-info__profile-main[data-v-ac052463]{min-width:0}.user-info__display-name[data-v-ac052463]{color:var(--ui-text-primary);font-size:14px;font-weight:700;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-info__username[data-v-ac052463]{margin-top:2px;color:var(--ui-text-muted);font-size:12px;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-info__meta[data-v-ac052463]{display:grid;gap:2px;padding:8px;margin-bottom:2px;border-radius:var(--ui-radius-control);background:var(--ui-bg-muted)}.user-info__meta-row[data-v-ac052463]{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;align-items:center;min-height:24px;font-size:12px;line-height:18px}.user-info__meta-label[data-v-ac052463]{color:var(--ui-text-muted)}.user-info__meta-value[data-v-ac052463]{min-width:0;color:var(--ui-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.user-info__item[data-v-ac052463]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);font-size:12px;cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.user-info__item[data-v-ac052463]:hover{background:var(--ui-bg-muted)}.user-info__item--danger[data-v-ac052463]{color:var(--el-color-danger)}.user-info__divider[data-v-ac052463]{height:1px;background:var(--ui-border-soft);margin:4px 0}.header-right[data-v-3c5e16a6]{display:flex;align-items:center;gap:8px;font-size:13px;--nav-icon-btn-size: 30px}.header-right__login[data-v-3c5e16a6]{height:30px;line-height:30px;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 12px;border-radius:var(--ui-radius-control);color:var(--ui-topnav-foreground);background:linear-gradient(135deg,var(--el-color-primary) 0%,var(--ui-topnav-accent) 100%);box-shadow:0 8px 18px rgba(var(--el-color-primary-rgb),.24);transition:background var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast)}.header-right__login[data-v-3c5e16a6]:hover{filter:brightness(1.05)}.header-bar[data-v-0ce1ab70]{min-height:56px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 12px;background:var(--ui-topnav-bg);color:var(--ui-topnav-muted)}.header-bar__left[data-v-0ce1ab70],.header-bar__right[data-v-0ce1ab70]{display:flex;align-items:center;min-width:0}.header-bar__left[data-v-0ce1ab70]{gap:12px;flex:1}.header-bar__right[data-v-0ce1ab70]{flex-shrink:0}.header-bar__logo-wrap[data-v-0ce1ab70]{display:flex;align-items:center;min-width:0}.header-bar__logo-link[data-v-0ce1ab70]{display:inline-flex;align-items:center;justify-content:center;min-height:40px;color:inherit}.header-bar__divider[data-v-0ce1ab70]{width:1px;height:18px;background:var(--ui-topnav-border)}[header-bar][data-v-0ce1ab70] .el-image .el-image__inner{width:auto;display:block}.aside-user-mobile[data-v-c56964a5]{width:100%;position:relative;display:flex;align-items:center;gap:8px;padding:16px;border-top:1px solid var(--ui-sidebar-border);color:var(--ui-sidebar-foreground);cursor:pointer}.aside-user-mobile__icon[data-v-c56964a5]{color:var(--ui-text-muted)}.aside-bar-mobile[data-v-eddacff2]{width:min(86vw,320px);max-width:calc(100vw - 32px);height:100vh;height:100dvh;z-index:240;border-right:1px solid var(--ui-sidebar-border);background:var(--ui-sidebar-bg);color:var(--ui-sidebar-foreground);box-shadow:var(--ui-shadow-pop);will-change:transform}.aside-bar-mobile__head[data-v-eddacff2]{min-height:var(--layout-mobile-header-height, 56px);padding:10px 12px;border-bottom:1px solid var(--ui-sidebar-border);flex-shrink:0}.aside-bar-mobile__close[data-v-eddacff2]{width:36px;height:36px;display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border:1px solid var(--ui-sidebar-border);border-radius:var(--ui-radius-control);background:var(--ui-sidebar-accent);color:var(--ui-text-muted);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast)}.aside-bar-mobile__close[data-v-eddacff2]:hover{background:var(--ui-sidebar-hover-bg);color:var(--ui-sidebar-foreground)}.aside-bar-mobile[data-v-eddacff2] .el-scrollbar{flex:1 1 auto;min-height:0}.layout-shell[data-v-474b62ee]{height:100vh;--layout-mobile-header-height: 56px;background:var(--ui-topnav-bg);color:var(--ui-text-primary);overflow:hidden}.layout-shell__body[data-v-474b62ee]{border-radius:var(--ui-body-radius);background:var(--ui-bg-page)}.layout-shell__content[data-v-474b62ee]{background:var(--ui-bg-page)}.layout-shell__overlay[data-v-474b62ee]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:230;background:var(--ui-bg-overlay);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);touch-action:none}.layout-page-view[data-v-474b62ee]{display:flex;flex:1 1 auto;flex-direction:column;width:100%;min-width:0;min-height:0;background:var(--ui-bg-page);contain:paint}.layout-overlay-enter-active[data-v-474b62ee],.layout-overlay-leave-active[data-v-474b62ee]{transition:opacity var(--ui-transition-base)}.layout-overlay-enter-from[data-v-474b62ee],.layout-overlay-leave-to[data-v-474b62ee]{opacity:0}.layout-page-enter-active[data-v-474b62ee],.layout-page-leave-active[data-v-474b62ee]{transition:opacity var(--ui-transition-base),transform var(--ui-transition-base);will-change:opacity,transform}.layout-page-enter-from[data-v-474b62ee]{opacity:0;transform:translate3d(8px,0,0)}.layout-page-leave-to[data-v-474b62ee]{opacity:0;transform:translate3d(-6px,0,0)}@media(prefers-reduced-motion:reduce){.layout-overlay-enter-active[data-v-474b62ee],.layout-overlay-leave-active[data-v-474b62ee],.layout-page-enter-active[data-v-474b62ee],.layout-page-leave-active[data-v-474b62ee]{transition:none}.layout-page-enter-from[data-v-474b62ee],.layout-page-leave-to[data-v-474b62ee]{opacity:1;transform:none}}@media(max-width:1023px){.layout-shell[data-v-474b62ee]{background:var(--ui-bg-page)}.layout-shell__body[data-v-474b62ee]{border-radius:0}.layout-page-view[data-v-474b62ee]{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.layout-page-enter-from[data-v-474b62ee]{transform:translate3d(0,6px,0)}.layout-page-leave-to[data-v-474b62ee]{transform:translate3d(0,-4px,0)}}