.app-root{height:100vh;width:100%}:root{--brand-900: #0B1F3A;--brand-800: #0F2A4D;--brand-700: #123E6B;--brand-600: #1E5FA8;--brand-500: #2E71BE;--brand-400: #5BA0E0;--brand-100: #E8F1FB;--sidebar-bg: linear-gradient(180deg, #0B1F3A 0%, #0E2547 100%);--sidebar-width: 232px;--page-bg: #F3F5F9;--card-border: #E4E9F2;--card-shadow: 0 1px 4px rgba(15, 34, 58, .08);--ok: #18A058;--warn: #F0A020;--err: #D03050;--unknown: #909399;--header-h: 56px;--tags-h: 38px}html,body,#app{height:100%;margin:0}body{font-family:PingFang SC,Microsoft YaHei,Segoe UI,system-ui,sans-serif;background:var(--page-bg);color:#1f2937;-webkit-font-smoothing:antialiased}.demo-card{background:#fff;border:1px solid var(--card-border);border-radius:10px;box-shadow:var(--card-shadow);transition:box-shadow .2s ease,transform .2s ease}.demo-card:hover{box-shadow:0 4px 14px #0f223a1f}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#c6cedb;border-radius:4px}::-webkit-scrollbar-track{background:transparent}.page-enter-active{transition:opacity .25s ease,transform .25s ease}.page-leave-active{transition:opacity .18s ease,transform .18s ease;transition-delay:.06s}.page-enter-from{opacity:0;transform:translateY(10px)}.page-leave-to{opacity:0;transform:translateY(-6px)}.fade-up-enter-active{transition:all .25s ease}.fade-up-leave-active{transition:all .18s ease}.fade-up-enter-from,.fade-up-leave-to{opacity:0;transform:translateY(8px)}.fade-enter-active{transition:opacity .2s ease}.fade-leave-active{transition:opacity .15s ease}.fade-enter-from,.fade-leave-to{opacity:0}.zoom-enter-active{transition:all .22s cubic-bezier(.34,1.4,.64,1)}.zoom-leave-active{transition:all .15s ease}.zoom-enter-from,.zoom-leave-to{opacity:0;transform:scale(.94)}.list-enter-active{transition:all .3s ease}.list-leave-active{transition:all .2s ease;position:absolute;width:100%}.list-enter-from{opacity:0;transform:translateY(-14px)}.list-leave-to{opacity:0;transform:translate(20px)}.list-move{transition:transform .3s ease}@keyframes progress-cruise{0%{transform:translate(-100%)}to{transform:translate(240%)}}@keyframes dash-flow{to{stroke-dashoffset:-24}}.flow-line{stroke-dasharray:8 8;animation:dash-flow .8s linear infinite}@keyframes node-pulse{0%{box-shadow:0 0 #2e71be73}70%{box-shadow:0 0 0 10px #2e71be00}to{box-shadow:0 0 #2e71be00}}.pulse{animation:node-pulse 1.2s ease-out infinite}@keyframes soft-blink{0%,to{opacity:1}50%{opacity:.45}}.blink{animation:soft-blink 1.1s ease-in-out infinite}@keyframes wave-breathe{0%,to{transform:scale(1);opacity:.55}50%{transform:scale(1.12);opacity:.9}}
