body{margin:0;padding:0;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;font-variant-numeric:tabular-nums;-webkit-font-variant-numeric:tabular-nums;height:100vh;overflow:hidden}#app{height:100%}.login-container[data-v-1269e4fc]{height:100vh;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#2d3a4b,#1a2a3a)}.login-card[data-v-1269e4fc]{width:380px;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.3)}.switch-text[data-v-1269e4fc]{text-align:center;margin-bottom:0}.switch-text span[data-v-1269e4fc]{color:#606266;font-size:14px}.switch-text a[data-v-1269e4fc]{color:#409eff;text-decoration:none}.switch-text a[data-v-1269e4fc]:hover{text-decoration:underline}.ink-text[data-v-43b60a85]{display:inline-block;white-space:nowrap;will-change:filter,opacity;transform:translateZ(0)}.ink-text--plain[data-v-43b60a85]{white-space:normal}.ink-text__char[data-v-43b60a85]{display:inline-block;opacity:0;filter:blur(8px);transform:translateY(2px);animation-name:ink-focus-in-43b60a85;animation-timing-function:var(--ease-out-soft,ease);animation-fill-mode:forwards;animation-delay:calc(var(--ink-index, 0)*var(--ink-stagger, 30ms))}@keyframes ink-focus-in-43b60a85{to{opacity:1;filter:blur(0);transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.ink-text__char[data-v-43b60a85]{opacity:1;filter:none;transform:none;animation:none}}.layout-root{height:100%}.standalone-page{height:100%;min-height:100dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;background-color:var(--surface-2)}.standalone-page>*{min-height:100%;box-sizing:border-box}.app-wrapper{height:100%;display:flex;flex-direction:column}.app-header{background-color:#3f51b5;color:var(--color-text-primary);justify-content:space-between;padding:0 20px;border-bottom:1px solid rgba(31,45,61,.06);box-shadow:var(--shadow-surface-1);position:relative;z-index:2}.app-header,.header-left{display:flex;align-items:center}.header-left .logo{width:30px;height:30px;margin-right:10px;flex-shrink:0;display:block}.header-left .title{font-size:18px;font-weight:600;color:var(--color-text-primary);letter-spacing:.2px}.header-left .el-icon-s-fold,.header-left .el-icon-s-unfold,.header-right .el-icon-bell{vertical-align:-.125em;color:var(--color-text-secondary);transition:color var(--transition-duration-fast) var(--ease-out-soft),transform var(--transition-duration-fast) var(--ease-feedback)}.header-left .el-icon-s-fold:hover,.header-left .el-icon-s-unfold:hover,.header-right .el-icon-bell:hover{color:var(--color-primary);transform:scale(1.06)}.header-right .el-dropdown-link{color:var(--color-text-regular)}.header-right .el-dropdown-link:hover{color:var(--color-primary)}.main-container{flex:1;display:flex;overflow:hidden}.app-sidebar{background-color:#eef1f6;border-right:1px solid #dcdfe6;height:calc(100vh - 60px);transition:width var(--transition-duration-base) var(--ease-out-soft);overflow-x:hidden;overflow-y:auto}.app-sidebar::-webkit-scrollbar{width:8px}.app-sidebar::-webkit-scrollbar-thumb{background-color:rgba(144,147,153,.45);border-radius:8px}.app-sidebar::-webkit-scrollbar-track{background-color:transparent}.el-menu-vertical-demo{border-right:none;min-height:100%;background-color:transparent!important}.el-menu-vertical-demo:not(.el-menu--collapse){width:220px}.el-menu-vertical-demo .el-menu-item,.el-menu-vertical-demo .el-submenu__title{height:44px;line-height:44px;margin:2px 8px;border-radius:var(--border-radius-md);color:var(--color-text-regular);background-color:transparent;transition:background-color var(--transition-duration-fast) var(--ease-out-soft),color var(--transition-duration-fast) var(--ease-out-soft),padding-left var(--transition-duration-fast) var(--ease-out-soft)}.el-menu-vertical-demo .el-menu-item:hover,.el-menu-vertical-demo .el-submenu__title:hover{background-color:hsla(0,0%,100%,.72);color:var(--color-text-primary)}.el-menu-vertical-demo .el-menu-item.is-active{background-color:var(--surface-1);color:var(--color-primary);font-weight:500;box-shadow:var(--shadow-surface-1)}.el-menu-vertical-demo .el-menu-item.is-active:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;border-radius:0 2px 2px 0;background-color:var(--color-primary)}.el-menu-vertical-demo .el-menu-item i,.el-menu-vertical-demo .el-submenu__title i{vertical-align:-.125em;margin-right:8px;transition:transform var(--transition-duration-fast) var(--ease-feedback)}.el-menu-vertical-demo .el-menu-item:hover i,.el-menu-vertical-demo .el-submenu__title:hover i{transform:scale(1.08)}@media (prefers-color-scheme:dark){.app-header,.tags-view-container{background-color:var(--surface-1-dark);border-bottom-color:hsla(0,0%,100%,.06);box-shadow:var(--shadow-surface-1-dark)}.app-main,.app-sidebar{background-color:var(--bg-color-page-dark)}.header-left .title,.header-right .el-dropdown-link{color:var(--color-text-primary-dark)}.el-menu-vertical-demo .el-menu-item,.el-menu-vertical-demo .el-submenu__title{color:var(--color-text-regular-dark)}.el-menu-vertical-demo .el-menu-item:hover,.el-menu-vertical-demo .el-submenu__title:hover{background-color:var(--surface-2-dark);color:var(--color-text-primary-dark)}.el-menu-vertical-demo .el-menu-item.is-active,.tags-view-item{background-color:var(--surface-2-dark)}.tags-view-item{color:var(--color-text-regular-dark)}.tags-view-item:not(.active):hover{background-color:var(--surface-1-dark)}}.app-main{background-color:var(--surface-3);padding:0;display:flex;flex-direction:column}.tags-view-container{height:34px;width:100%;background:var(--surface-1);border-bottom:1px solid #d8dce5;box-shadow:var(--shadow-surface-1);display:flex;align-items:center;padding-left:10px;position:relative;z-index:1}.tags-view-item{display:inline-flex;align-items:center;position:relative;cursor:pointer;height:24px;line-height:24px;border:1px solid transparent;border-radius:var(--border-radius-sm);color:var(--color-text-regular);background:var(--surface-3);padding:0 8px;font-size:12px;margin-left:5px;margin-top:4px;transition:background-color var(--transition-duration-fast) var(--ease-out-soft),color var(--transition-duration-fast) var(--ease-out-soft),box-shadow var(--transition-duration-fast) var(--ease-out-soft)}.tags-view-item.active{background-color:var(--color-primary);color:#fff;box-shadow:var(--shadow-surface-1)}.tags-view-item.active:before{content:"";background:var(--surface-1);display:inline-block;width:6px;height:6px;border-radius:50%;position:relative;margin-right:4px;vertical-align:-.125em}.tags-view-container .el-icon-close{width:16px;height:16px;vertical-align:-.125em;border-radius:50%;text-align:center;transition:all var(--transition-duration-fast) var(--ease-out-soft);transform-origin:100% 50%}.tags-view-container .el-icon-close:before{transform:scale(.6);display:inline-block;vertical-align:-.125em}.tags-view-container .el-icon-close:hover{background-color:hsla(0,0%,100%,.24)}.tags-view-item:not(.active):hover{background-color:var(--surface-1);color:var(--color-primary);box-shadow:var(--shadow-surface-1)}.content-wrapper{flex:1;min-height:0;padding:12px;box-sizing:border-box;overflow:hidden;display:flex;flex-direction:column}.content-wrapper>*{flex:1 1 auto;min-height:0;box-sizing:border-box}:root{--color-primary:#409eff;--color-primary-light:#66b1ff;--color-primary-dark:#3a8ee6;--color-success:#67c23a;--color-warning:#e6a23c;--color-danger:#f56c6c;--color-info:#909399;--color-text-primary:#303133;--color-text-regular:#606266;--color-text-secondary:#909399;--color-text-placeholder:#c0c4cc;--bg-color-page:#f0f2f5;--bg-color-white:#fff;--bg-color-card:hsla(0,0%,100%,0.95);--bg-color-header:#3f51b5;--bg-color-sidebar:#eef1f6;--bg-color-info:#f4f4f5;--border-color-base:#dcdfe6;--border-color-light:#e4e7ed;--border-color-lighter:#ebeef5;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:20px;--spacing-xl:30px;--spacing-xxl:40px;--font-family-base:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--font-size-xs:12px;--font-size-sm:13px;--font-size-base:14px;--font-size-md:16px;--font-size-lg:18px;--font-size-xl:22px;--font-size-xxl:32px;--border-radius-sm:3px;--border-radius-base:4px;--border-radius-md:8px;--border-radius-lg:12px;--transition-duration-base:0.3s;--transition-duration-fast:0.15s;--transition-duration-slow:0.5s;--transition-timing-base:cubic-bezier(0.645,0.045,0.355,1);--z-index-dropdown:1000;--z-index-sticky:1020;--z-index-fixed:1030;--z-index-modal-backdrop:1040;--z-index-modal:1050;--z-index-popover:1060;--z-index-tooltip:1070;--z-index-toast:9999;--shadow-sm:0 1px 3px rgba(0,0,0,0.12),0 0 3px rgba(0,0,0,0.04);--shadow-md:0 2px 12px rgba(0,0,0,0.1);--shadow-lg:0 8px 24px rgba(0,0,0,0.15);--shadow-card:0 4px 20px rgba(0,0,0,0.3);--surface-1:#fff;--surface-2:#f4f4f5;--surface-3:#e6ebf2;--shadow-surface-1:0 1px 2px rgba(31,45,61,0.04),0 2px 8px rgba(31,45,61,0.05);--shadow-surface-2:0 2px 4px rgba(31,45,61,0.06),0 8px 24px rgba(31,45,61,0.08);--shadow-surface-3:0 4px 12px rgba(31,45,61,0.08),0 16px 40px rgba(31,45,61,0.1);--focus-ring-inset:inset 0 0 0 1px rgba(64,158,255,0.35);--focus-ring-outer:0 0 0 3px rgba(64,158,255,0.12);--focus-ring-third:0 0 0 6px rgba(64,158,255,0.06);--ease-drag:cubic-bezier(0.5,0,0.75,0);--ease-feedback:cubic-bezier(0.34,1.4,0.64,1);--ease-out-soft:cubic-bezier(0.25,0.1,0.25,1);--bg-color-page-dark:#14161a;--surface-1-dark:#1c1f24;--surface-2-dark:#22262d;--surface-3-dark:#2a2f37;--shadow-surface-1-dark:0 1px 2px rgba(0,0,0,0.32),0 2px 8px rgba(0,0,0,0.24);--shadow-surface-2-dark:0 2px 4px rgba(0,0,0,0.36),0 8px 24px rgba(0,0,0,0.32);--shadow-surface-3-dark:0 4px 12px rgba(0,0,0,0.4),0 16px 40px rgba(0,0,0,0.36);--color-text-primary-dark:#e8eaed;--color-text-regular-dark:#c9cdd4;--color-text-secondary-dark:#a3a8b3;--header-height:60px;--sidebar-width:220px;--sidebar-collapsed-width:64px}.introjs-overlay{background-color:rgba(0,0,0,.65);opacity:1}.introjs-helperLayer{border:2px solid var(--color-primary,#409eff);border-radius:var(--border-radius-base,4px);box-shadow:0 0 0 9999px rgba(0,0,0,.65);transition:all .3s cubic-bezier(.645,.045,.355,1)}.introjs-helperLayer .introjs-helperNumberLayer{background:var(--color-primary,#409eff);color:#fff;font-size:12px;font-weight:600;width:22px;height:22px;line-height:22px;border-radius:50%;box-shadow:0 2px 8px rgba(64,158,255,.4)}.introjs-tooltip{background-color:var(--bg-color-white,#fff);color:var(--color-text-primary,#303133);border-radius:var(--border-radius-md,8px);box-shadow:var(--shadow-lg,0 8px 24px rgba(0,0,0,.15));padding:16px 20px;min-width:260px;max-width:360px;font-family:var(--font-family-base)}.introjs-tooltiptext{font-size:var(--font-size-base,14px);line-height:1.6;color:var(--color-text-regular,#606266)}.introjs-arrow{border-bottom-color:var(--bg-color-white,#fff);border-width:8px}.introjs-arrow.top{border-bottom-color:var(--bg-color-white,#fff);border-top-color:transparent}.introjs-arrow.right{border-left-color:var(--bg-color-white,#fff);border-right-color:transparent}.introjs-arrow.bottom{border-top-color:var(--bg-color-white,#fff);border-bottom-color:transparent}.introjs-arrow.left{border-right-color:var(--bg-color-white,#fff);border-left-color:transparent}.introjs-bullets ul li a{width:8px;height:8px;background:var(--border-color-base,#dcdfe6);transition:all .2s ease}.introjs-bullets ul li a.active{width:20px;border-radius:4px;background:var(--color-primary,#409eff)}.introjs-progress{height:3px;background:var(--border-color-lighter,#ebeef5);border-radius:2px;margin:12px 0 8px}.introjs-progressbar{background:linear-gradient(90deg,#667eea,#764ba2);border-radius:2px}.introjs-tooltipbuttons{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;border-top:1px solid var(--border-color-lighter,#ebeef5);padding-top:12px}.introjs-button{font-size:var(--font-size-sm,13px);font-weight:500;padding:6px 16px;border-radius:var(--border-radius-base,4px);border:1px solid var(--border-color-base,#dcdfe6);background:var(--bg-color-white,#fff);color:var(--color-text-regular,#606266);cursor:pointer;transition:all .2s ease;outline:none;text-shadow:none}.introjs-button:hover{color:var(--color-primary,#409eff);border-color:var(--color-primary-light,#66b1ff);background:#ecf5ff}.introjs-button:focus{outline:none;box-shadow:0 0 0 2px rgba(64,158,255,.2)}.introjs-nextbutton{background:var(--color-primary,#409eff);color:#fff;border-color:var(--color-primary,#409eff)}.introjs-nextbutton:hover{background:var(--color-primary-light,#66b1ff);border-color:var(--color-primary-light,#66b1ff);color:#fff}.introjs-donebutton{background:var(--color-success,#67c23a);color:#fff;border-color:var(--color-success,#67c23a)}.introjs-donebutton:hover{background:#85ce61;border-color:#85ce61;color:#fff}.introjs-skipbutton{color:var(--color-text-secondary,#909399);border:none;background:transparent;margin-right:auto}.introjs-skipbutton:hover{color:var(--color-text-regular,#606266);background:transparent}.introjs-prevbutton{float:none}.introjs-disabled,.introjs-disabled:hover{opacity:.4;cursor:not-allowed;pointer-events:none}.introjs-fixedTooltip{background-color:var(--bg-color-white,#fff);color:var(--color-text-primary,#303133)}.introjs-disableInteraction{background:transparent}@media(max-width:768px){.introjs-tooltip{min-width:200px;max-width:280px;padding:12px 16px}.introjs-tooltipbuttons{flex-wrap:wrap}.introjs-button{padding:5px 12px;font-size:12px}}.skill-page{padding:0;background-color:transparent;height:100%;box-sizing:border-box;overflow:auto}.page-header{margin-bottom:var(--spacing-xl);text-align:center}.page-header h2{color:var(--color-text-primary);margin-bottom:10px}.page-header p{color:var(--color-text-regular);font-size:var(--font-size-base)}.card{background:var(--surface-1);border-radius:var(--border-radius-md);padding:var(--spacing-md);border:1px solid rgba(31,45,61,.06);box-shadow:var(--shadow-surface-2);transition:box-shadow var(--transition-duration-base) var(--transition-timing-base)}.card:hover{box-shadow:var(--shadow-surface-3)}.table-container{background:var(--surface-1);border-radius:var(--border-radius-md);padding:var(--spacing-md);border:1px solid rgba(31,45,61,.06);box-shadow:var(--shadow-surface-2)}.table-container .table-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-md)}.table-container .table-footer{display:flex;justify-content:flex-end;margin-top:var(--spacing-md)}.form-container{background:var(--surface-1);border-radius:var(--border-radius-md);padding:var(--spacing-md);border:1px solid rgba(31,45,61,.06);box-shadow:var(--shadow-surface-2);max-width:980px}.form-container .form-section-title{font-size:var(--font-size-md);font-weight:600;color:var(--color-text-primary);margin-bottom:var(--spacing-md)}.form-container .form-tip{margin-top:6px;color:var(--color-text-secondary);font-size:var(--font-size-xs);line-height:1.5}.el-input__inner:focus,.el-input__inner:hover{border-color:var(--color-primary-light)}.el-input__inner:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring-inset),var(--focus-ring-outer),var(--focus-ring-third)}@media(prefers-color-scheme:dark){:root{--surface-1:var(--surface-1-dark);--surface-2:var(--surface-2-dark);--surface-3:var(--surface-3-dark);--shadow-surface-1:var(--shadow-surface-1-dark);--shadow-surface-2:var(--shadow-surface-2-dark);--shadow-surface-3:var(--shadow-surface-3-dark)}body{background-color:var(--bg-color-page-dark);color:var(--color-text-regular-dark)}.form-section-title,h1,h2,h3,h4,h5,h6{font-weight:500}.page-header p,.skill-page,body,p{font-weight:300}.el-form-item__label,.el-message,.el-table,.el-tooltip__popper,.small-text,small{font-weight:400}.card,.form-container,.table-container{background:var(--surface-1-dark);border-color:hsla(0,0%,100%,.06);box-shadow:var(--shadow-surface-2-dark)}.card:hover,.form-container:hover,.table-container:hover{box-shadow:var(--shadow-surface-3-dark)}.el-input__inner{background-color:var(--surface-2-dark);border-color:hsla(0,0%,100%,.08);color:var(--color-text-regular-dark)}}.ink-typewriter{display:inline-block;white-space:nowrap}.ink-typewriter .ink-char{display:inline-block;opacity:0;filter:blur(8px);transform:translateY(2px);animation:ink-focus-in .45s var(--ease-out-soft) forwards;animation-delay:calc(var(--ink-index, 0)*var(--ink-stagger, 30ms))}.ink-typewriter:has(.ink-char:nth-child(21)) .ink-char{opacity:1;filter:none;transform:none;animation:none}@keyframes ink-focus-in{to{opacity:1;filter:blur(0);transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.ink-typewriter .ink-char{opacity:1;filter:none;transform:none;animation:none}}.ink-typewriter{will-change:filter,opacity;transform:translateZ(0)}body,html{font-variant-numeric:tabular-nums;-webkit-font-variant-numeric:tabular-nums}.form-section-title,.page-header h2,h1,h2,h3,h4,h5,h6{text-wrap:balance;-webkit-line-clamp:unset}.form-tip,.skill-page,.table-container,body,p{text-wrap:pretty}body{word-break:break-word;overflow-wrap:anywhere}.cjk-pretty,.form-tip,.page-header p{line-break:strict;word-break:normal;overflow-wrap:break-word;text-wrap:pretty}.form-section-title,.page-header h2,h1,h2,h3,h4,h5,h6{line-break:strict;word-break:keep-all}.inline-icon-align{display:inline-block;vertical-align:-.125em;line-height:1}.auto-grid{display:grid;grid-template-rows:auto;grid-auto-rows:auto;row-gap:var(--spacing-sm);align-content:start;overflow:hidden;transition:grid-template-rows var(--transition-duration-base) var(--ease-out-soft)}.ease-drag{transition-timing-function:var(--ease-drag)}.ease-feedback{transition-timing-function:var(--ease-feedback)}.toast-success{border-color:var(--color-success)}.toast-success,.toast-success .el-message__content{color:var(--color-success)}.toast-error{border-color:var(--color-danger)}.toast-error,.toast-error .el-message__content{color:var(--color-danger)}.toast-warning{border-color:var(--color-warning)}.toast-warning,.toast-warning .el-message__content{color:var(--color-warning)}.toast-info{border-color:var(--color-info)}.toast-info,.toast-info .el-message__content{color:var(--color-info)}.drag-snap{transition:transform 0s linear}.bounce-feedback{animation:bounce-in .32s var(--ease-feedback)}@media(prefers-reduced-motion:reduce){.bounce-feedback{animation:none}}@keyframes bounce-in{0%{transform:scale(.92)}60%{transform:scale(1.04)}to{transform:scale(1)}}.press-scale{transition:transform var(--transition-duration-fast) var(--ease-feedback);will-change:transform}.press-scale:active{transform:scale(.96)}@media(prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}