.login-shell{display:flex;align-items:center;justify-content:center;height:100vh;background:var(--color-canvas)}.sidebar-brand{flex-shrink:0;display:flex;align-items:center;gap:10px;padding:14px 18px 12px;border-bottom:1px solid rgba(255,255,255,.08);overflow:hidden}.sidebar-brand--collapsed{padding:14px 0 12px;justify-content:center}.sidebar-menu-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 0}.sidebar-menu-scroll::-webkit-scrollbar{width:6px}.sidebar-menu-scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.sidebar-menu .n-menu-item-group-title{height:auto!important;padding-top:10px!important;padding-bottom:4px!important;font-size:11px;text-transform:uppercase;letter-spacing:.06em}.sidebar-menu.n-menu--collapsed .n-menu-item-group-title{display:none!important}.brand-mark{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;flex-shrink:0;border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-size:12px;font-weight:700;letter-spacing:.04em}.brand-text{color:#fff;font-size:14px;font-weight:600;letter-spacing:.02em;white-space:nowrap}.sidebar-menu:not(.n-menu--collapsed){padding:0 8px}.sidebar-menu.n-menu--collapsed{padding:0}.sidebar-menu.n-menu--collapsed .n-menu-item-content{display:flex!important;justify-content:center!important;align-items:center!important;padding-left:0!important;padding-right:0!important}.sidebar-menu.n-menu--collapsed .n-menu-item-content-header,.sidebar-menu.n-menu--collapsed .n-menu-item-content__arrow{display:none!important}.sidebar-menu.n-menu--collapsed .n-menu-item-content__icon{margin:0!important}.sidebar-footer{flex-shrink:0;padding:10px 14px;border-top:1px solid rgba(255,255,255,.08);background:var(--sidebar-bg)}.sidebar-footer--collapsed{display:flex;justify-content:center;padding:10px 0}.account{display:flex;align-items:center;gap:10px}.avatar{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;flex-shrink:0;border-radius:50%;background:#0a84ff2e;color:#bfe0ff;font-size:13px;font-weight:600}.account-email{flex:1;min-width:0;color:#a0a0b0;font-size:12px}.logout-btn{color:#8a8f9e!important;flex-shrink:0;width:30px;height:30px;border-radius:7px;justify-content:center}.logout-btn:hover{color:#fff!important;background:#ffffff14!important}:root{--color-canvas: #f5f5f7;--color-surface: #ffffff;--color-surface-secondary: #fafafa;--color-border: #e5e5ea;--color-border-strong: #d2d2d7;--color-text-primary: #1d1d1f;--color-text-secondary: #6e6e73;--color-text-tertiary: #9a9aa2;--color-accent: #0a84ff;--color-accent-hover: #2f95ff;--color-accent-active: #086ad1;--color-accent-soft: #e8f2ff;--color-accent-contrast: #ffffff;--color-success-bg: #e3f8ec;--color-success-fg: #167a45;--color-warning-bg: #fff3d6;--color-warning-fg: #93650a;--color-danger-bg: #fde8e8;--color-danger-fg: #c0341d;--color-info-bg: #e8f2ff;--color-info-fg: #0a5dc2;--color-neutral-bg: #eceef1;--color-neutral-fg: #64656d;--color-danger-solid: #dc2626;--color-danger-solid-hover: #c81e1e;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 32px;--space-8: 40px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-full: 999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 1px rgba(0, 0, 0, .03);--shadow-md: 0 2px 10px rgba(0, 0, 0, .06);--shadow-lg: 0 8px 28px rgba(0, 0, 0, .1);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "SF Mono", "JetBrains Mono", "Fira Mono", ui-monospace, monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 17px;--text-xl: 20px;--text-2xl: 24px;--sidebar-bg: #1b1f2e;--diff-add-bg: #e6ffed;--diff-del-bg: #ffeef0;--code-key: #7c3aed;--code-str: #16a34a;--code-num: #d97706;--code-kw: #2563eb}:root[data-theme=dark]{--color-canvas: #131318;--color-surface: #1c1c22;--color-surface-secondary: #262630;--color-border: #32323e;--color-border-strong: #424250;--color-text-primary: #e8e8ed;--color-text-secondary: #a6a6b0;--color-text-tertiary: #75757f;--color-accent: #409cff;--color-accent-hover: #5faaff;--color-accent-active: #2f7fd6;--color-accent-soft: #17293f;--color-accent-contrast: #ffffff;--color-success-bg: #12301f;--color-success-fg: #5cc98e;--color-warning-bg: #34290f;--color-warning-fg: #e2b458;--color-danger-bg: #3a1b1b;--color-danger-fg: #f08370;--color-info-bg: #14283f;--color-info-fg: #72b3f5;--color-neutral-bg: #2a2a34;--color-neutral-fg: #a9a9b3;--color-danger-solid: #e5484d;--color-danger-solid-hover: #d33e43;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow-md: 0 2px 10px rgba(0, 0, 0, .5);--shadow-lg: 0 8px 28px rgba(0, 0, 0, .6);--sidebar-bg: #17171d;--diff-add-bg: #12301f;--diff-del-bg: #3a1b1b;--code-key: #b794f6;--code-str: #68d391;--code-num: #f6ad55;--code-kw: #63b3ed}:root[data-theme=dark] .vue-flow__controls{box-shadow:var(--shadow-md)}:root[data-theme=dark] .vue-flow__controls button{background:var(--color-surface-secondary);border-bottom:1px solid var(--color-border)}:root[data-theme=dark] .vue-flow__controls button:hover{background:var(--color-border)}:root[data-theme=dark] .vue-flow__controls button svg{fill:var(--color-text-primary)}*{box-sizing:border-box}html,body{margin:0;padding:0;font-family:var(--font-sans);font-size:var(--text-base);background:var(--color-canvas);color:var(--color-text-primary);-webkit-font-smoothing:antialiased}#app{height:100vh}.login-card{background:var(--color-surface);padding:var(--space-7);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:360px}.login-card h1{margin:0 0 var(--space-6);font-size:var(--text-2xl)}.login-card label{display:block;font-size:var(--text-sm);color:var(--color-text-secondary);margin-bottom:var(--space-1)}.login-card input{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:var(--text-base);margin-bottom:var(--space-4);outline:none}.login-card input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}.login-card .error{color:var(--color-danger-fg);font-size:var(--text-sm);margin-bottom:var(--space-3)}table{width:100%;border-collapse:collapse;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-sm)}th,td{padding:var(--space-3) var(--space-4);text-align:left;border-bottom:1px solid var(--color-border);font-size:var(--text-sm)}th{background:var(--color-surface-secondary);font-weight:600;color:var(--color-text-secondary);font-size:var(--text-xs);letter-spacing:.02em}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:var(--color-surface-secondary)}.badge{display:inline-block;padding:2px var(--space-2);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:600;line-height:1.6}.badge.active,.badge.passed{background:var(--color-success-bg);color:var(--color-success-fg)}.badge.expired,.badge.error{background:var(--color-warning-bg);color:var(--color-warning-fg)}.badge.disabled,.badge.failed{background:var(--color-danger-bg);color:var(--color-danger-fg)}.badge.running{background:var(--color-info-bg);color:var(--color-info-fg)}.badge.pending,.badge.cancelled{background:var(--color-neutral-bg);color:var(--color-neutral-fg)}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-5);gap:var(--space-4)}.toolbar>div{display:flex;gap:var(--space-2);align-items:center}button.primary{background:var(--color-accent);border:none;color:var(--color-accent-contrast);padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--text-base);font-family:inherit;transition:background-color .12s}button.primary:hover{background:var(--color-accent-hover)}button.primary:active{background:var(--color-accent-active)}button.primary:disabled{opacity:.5;cursor:default;background:var(--color-accent)}button.ghost{background:transparent;border:1px solid var(--color-border-strong);color:var(--color-text-primary);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--text-sm);font-family:inherit;transition:background-color .12s,border-color .12s}button.ghost:hover{background:var(--color-surface-secondary);border-color:var(--color-text-tertiary)}button.ghost:disabled{opacity:.5;cursor:default}button.danger{background:var(--color-danger-solid);border:none;color:#fff;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--text-sm);font-family:inherit;transition:background-color .12s}button.danger:hover{background:var(--color-danger-solid-hover)}button.danger.small{padding:var(--space-1) var(--space-2);font-size:var(--text-xs)}button.danger:disabled{opacity:.5;cursor:default}h2{margin-top:0;color:var(--color-text-primary);font-size:var(--text-xl);font-weight:700}.page{max-width:1280px;margin:0 auto;padding-bottom:var(--space-8)}.page-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-5)}.page-header h1,.page-header h2{margin:0;font-size:var(--text-xl);font-weight:700;color:var(--color-text-primary)}.page-header>div{display:flex;gap:var(--space-2);align-items:center}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-sm)}.muted{color:var(--color-text-secondary)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-8) var(--space-4);color:var(--color-text-tertiary);font-size:var(--text-sm);text-align:center}.form-grid{display:flex;flex-direction:column;gap:var(--space-4)}.form-grid label{display:block;font-size:var(--text-sm);color:var(--color-text-secondary);margin-bottom:var(--space-1)}.form-grid input,.form-grid textarea,.form-grid select{width:100%;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);font-size:var(--text-base);font-family:inherit;background:var(--color-surface);color:var(--color-text-primary);outline:none;transition:border-color .12s,box-shadow .12s}.form-grid input:focus,.form-grid textarea:focus,.form-grid select:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}.form-grid textarea{resize:vertical}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:var(--text-xs)}
