:root{--bg: #f1f5f9;--surface: #ffffff;--border: #e2e8f0;--text: #0f172a;--muted: #64748b;--primary: #4f46e5;--primary-light: #818cf8;--pass: #059669;--fail: #dc2626;--skip: #d97706;--sidebar-bg: #0f172a;--sidebar-bg-hover: rgba(255, 255, 255, .06);--sidebar-bg-active: rgba(99, 102, 241, .18);--sidebar-text: #94a3b8;--sidebar-text-hover: #e2e8f0;--sidebar-text-active: #ffffff;--sidebar-border: rgba(255, 255, 255, .08);--sidebar-width: 268px}*{box-sizing:border-box}body{margin:0;font-family:Poppins,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--text)}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);min-width:var(--sidebar-width);background:linear-gradient(180deg,#0f172a,#1e293b);border-right:1px solid var(--sidebar-border);padding:1.5rem 1rem;display:flex;flex-direction:column;box-shadow:4px 0 24px #0f172a1f;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar-brand{display:flex;align-items:center;gap:.75rem;padding:.25rem .75rem 1.5rem;border-bottom:1px solid var(--sidebar-border);margin-bottom:1.25rem}.brand-icon{color:var(--primary-light);flex-shrink:0;width:28px;height:28px}.sidebar h1{font-size:1.125rem;margin:0;color:var(--sidebar-text-active);font-weight:700;line-height:1.35;letter-spacing:.01em}.sidebar-nav{display:flex;flex-direction:column;gap:.35rem}.nav-item{display:flex;align-items:center;gap:.85rem;padding:.85rem 1rem;border-radius:10px;color:var(--sidebar-text);text-decoration:none;font-size:1rem;font-weight:500;border-left:3px solid transparent;transition:background .2s ease,color .2s ease,transform .15s ease,box-shadow .2s ease}.nav-item:hover{background:var(--sidebar-bg-hover);color:var(--sidebar-text-hover);text-decoration:none;transform:translate(2px)}.nav-item.active{background:var(--sidebar-bg-active);color:var(--sidebar-text-active);border-left-color:var(--primary-light);font-weight:600;box-shadow:inset 0 1px #ffffff0f}.nav-icon{flex-shrink:0;width:20px;height:20px;opacity:.75;transition:opacity .2s ease}.nav-item:hover .nav-icon{opacity:.95}.nav-item.active .nav-icon{opacity:1;color:var(--primary-light)}.main{flex:1;padding:2rem;overflow:auto}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.25rem;margin-bottom:1rem}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin-bottom:1.5rem}.stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.25rem}.stat .label{font-size:.8rem;color:var(--muted)}.stat .value{font-size:1.75rem;font-weight:600;margin-top:.25rem}.badge{display:inline-block;padding:.2rem .5rem;border-radius:6px;font-size:.75rem;font-weight:500}.badge.pass{background:#d1fae5;color:var(--pass)}.badge.fail{background:#fee2e2;color:var(--fail)}.badge.skip{background:#fef3c7;color:var(--skip)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.75rem;border-bottom:1px solid var(--border)}th{font-size:.8rem;color:var(--muted);font-weight:500}.chart{height:200px;display:flex;align-items:flex-end;gap:8px;padding-top:1rem}.chart-bar{flex:1;min-width:24px;background:var(--primary);border-radius:4px 4px 0 0;position:relative}.chart-bar.fail{background:var(--fail)}.chart-label{font-size:.65rem;color:var(--muted);text-align:center;margin-top:4px}.screenshot{max-width:100%;border-radius:8px;border:1px solid var(--border);margin-top:.5rem}.steps{margin:0;padding-left:1.25rem}.steps li{margin-bottom:.35rem}.filter-bar{display:flex;gap:.5rem;margin-bottom:1rem}.filter-bar button{padding:.4rem .75rem;border:1px solid var(--border);background:var(--surface);border-radius:8px;cursor:pointer}.filter-bar button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.empty{color:var(--muted);text-align:center;padding:3rem}.banner{padding:.75rem 1rem;border-radius:8px;margin-bottom:1rem;font-size:.9rem}.banner-warn{background:#fef3c7;color:#92400e;border:1px solid #fcd34d}.btn{display:inline-block;padding:.5rem 1rem;border:1px solid var(--border);background:var(--surface);border-radius:8px;cursor:pointer;font-size:.9rem;color:var(--text);text-decoration:none}.btn:hover{background:#f8fafc}.btn.primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn.primary:hover{background:#4338ca}.btn.primary:disabled,.btn:disabled{opacity:.5;cursor:not-allowed}.btn-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.tabs{display:flex;gap:.5rem;margin-bottom:1rem}.tabs button{padding:.5rem 1rem;border:1px solid var(--border);background:var(--surface);border-radius:8px 8px 0 0;cursor:pointer}.tabs button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.form label{display:block;margin-bottom:1rem;font-size:.9rem;font-weight:500}.form input,.form select,.form textarea{display:block;width:100%;margin-top:.35rem;padding:.5rem .75rem;border:1px solid var(--border);border-radius:8px;font:inherit}.checkbox-label{display:flex!important;align-items:center;gap:.5rem}.checkbox-label input{width:auto;margin:0}.code-area{font-family:ui-monospace,monospace;font-size:.85rem}.log-panel{max-height:320px;overflow:auto;background:#0f172a;color:#e2e8f0;padding:1rem;border-radius:8px;font-size:.8rem}.card-header-row{display:flex;justify-content:space-between;align-items:center}.module-grid{display:flex;flex-wrap:wrap;gap:.75rem}.module-item{padding:.75rem 1rem;background:#f8fafc;border-radius:8px;display:flex;gap:.5rem;align-items:center}.tag-chip{display:inline-block;background:#eef2ff;color:var(--primary);padding:.15rem .4rem;border-radius:4px;font-size:.7rem;margin-right:.25rem}.link-btn{background:none;border:none;color:var(--fail);cursor:pointer;padding:0;font:inherit;text-decoration:underline}.muted{color:var(--muted);font-size:.9rem}.error-text{color:var(--fail)}.success-text{color:var(--pass)}.quick-actions h3{margin-top:0}.btn-sm{padding:.25rem .5rem;font-size:.8rem}.btn-run{display:inline-flex;align-items:center;gap:.25rem;margin-right:.5rem;color:var(--pass);border-color:#a7f3d0;background:#ecfdf5}.btn-run:hover:not(:disabled){background:#d1fae5}.btn-with-icon{display:inline-flex;align-items:center;gap:.35rem}.actions-cell{white-space:nowrap}.spinner{display:inline-block;width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.run-log-panel{margin-top:1rem}.log-panel-toggle{display:flex;align-items:center;gap:.5rem;width:100%;background:none;border:none;padding:0;font:inherit;font-weight:600;cursor:pointer;text-align:left;margin-bottom:.5rem}.log-panel{max-height:280px;overflow:auto;background:#0f172a;color:#e2e8f0;padding:1rem;border-radius:8px;font-size:.8rem;margin:0}.api-request-row{display:flex;gap:.5rem;margin-bottom:1rem}.method-select{width:110px;padding:.5rem .75rem;border:1px solid var(--border);border-radius:8px;font:inherit;font-weight:600;background:var(--surface)}.url-input{flex:1;padding:.5rem .75rem;border:1px solid var(--border);border-radius:8px;font:inherit}.api-section{margin-top:1rem}.section-toggle{background:none;border:none;font:inherit;font-weight:600;cursor:pointer;padding:0;margin-bottom:.5rem}.headers-editor{display:flex;flex-direction:column;gap:.5rem}.header-row{display:flex;gap:.5rem}.header-row input{flex:1;padding:.4rem .6rem;border:1px solid var(--border);border-radius:6px;font:inherit}.response-header{display:flex;align-items:center;gap:1rem;margin-bottom:.75rem}.response-details{margin-bottom:.75rem}.code-block{background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:1rem;overflow:auto;font-size:.85rem;font-family:ui-monospace,monospace;margin:.5rem 0 0}.response-body{max-height:400px}.history-list{list-style:none;padding:0;margin:0}.history-item{display:flex;align-items:center;gap:.75rem;width:100%;padding:.6rem .5rem;border:none;background:none;border-bottom:1px solid var(--border);cursor:pointer;text-align:left;font:inherit}.history-item:hover{background:#f8fafc}.history-url{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem}.schedule-stat-sm{font-size:1rem!important;line-height:1.4}.schedule-stat-wide .value{font-size:.95rem}.schedule-form{margin-top:1rem}.cron-presets{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:-.5rem 0 1rem}.cron-help{margin:-.25rem 0 1rem;font-size:.85rem}.cron-help code,.cron-chip{font-family:ui-monospace,monospace;font-size:.8rem;background:#f1f5f9;padding:.15rem .4rem;border-radius:4px}.cron-chip{display:inline-block}.live-log-toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.live-log-tabs{margin-bottom:0}.live-log-toolbar-right{display:flex;align-items:center;gap:.75rem}.live-log-filter{min-width:220px;padding:.45rem .75rem;border:1px solid var(--border);border-radius:8px;font:inherit}.live-log-toggle{font-weight:400!important;margin:0!important}.live-log-panel-wrap{padding:0;overflow:hidden}.live-log-panel{max-height:520px;overflow:auto;background:#0f172a;color:#e2e8f0;padding:.75rem 1rem;font-family:ui-monospace,monospace;font-size:.8rem}.live-log-empty{padding:2rem 0;text-align:center}.live-log-line{display:flex;flex-wrap:wrap;gap:.5rem;padding:.35rem 0;border-bottom:1px solid rgba(148,163,184,.12)}.live-log-time{color:#94a3b8;flex-shrink:0}.live-log-tag,.live-log-method{color:#38bdf8;flex-shrink:0;font-weight:600}.live-log-test{color:#a5b4fc;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.live-log-url{flex:1;min-width:180px;word-break:break-all}.live-log-message{flex:1;min-width:200px;word-break:break-word}.live-log-meta{color:#94a3b8;margin-left:auto}.log-level-error{color:#fca5a5}.log-level-warn{color:#fcd34d}.log-level-info{color:#93c5fd}.log-level-ok{color:#86efac}.live-running{display:inline-flex;align-items:center;gap:.35rem;color:var(--pass);font-size:.85rem}.trace-list{display:flex;flex-direction:column;gap:.75rem}.trace-card{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid var(--border);border-radius:10px;background:#f8fafc}.trace-card-main{min-width:0}.ai-banner-ok{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}.ai-form-row{display:flex;flex-wrap:wrap;gap:1.5rem;align-items:flex-end}.ai-result{margin-top:1.25rem;padding-top:1.25rem;border-top:1px solid var(--border)}.ai-inline-panel{margin-bottom:1rem}.ai-inline-form{margin-top:.75rem;display:flex;flex-direction:column;gap:.75rem}.ai-inline-form textarea{width:100%;padding:.5rem .75rem;border:1px solid var(--border);border-radius:8px;font:inherit}.ai-markdown{background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:1rem;margin-top:.75rem;max-height:480px;overflow:auto}.ai-markdown pre{margin:0;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,monospace;font-size:.85rem;line-height:1.5}.perf-center .muted{color:var(--muted);margin-top:.25rem}.perf-panel{display:flex;flex-direction:column;gap:1rem}.perf-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem}.perf-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem;display:flex;flex-direction:column;gap:.35rem}.perf-card-label{font-size:.8rem;color:var(--muted)}.perf-chart-card,.perf-form-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1rem}.perf-chart-card h3,.perf-form-card h3{margin:0 0 .75rem}.perf-form-row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end}.perf-form-row label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem}.perf-form-row input{min-width:120px;padding:.45rem .65rem;border:1px solid var(--border);border-radius:8px}.perf-log{margin-top:.75rem}.perf-good{color:#16a34a;font-weight:600}.perf-warn{color:#d97706;font-weight:600}.perf-bad{color:#dc2626;font-weight:600}.mono{font-family:ui-monospace,monospace;font-size:.82rem;word-break:break-all}.env-var{display:inline-block;margin-left:.35rem;padding:.2rem .55rem;background:#eef2ff;color:var(--primary);border-radius:6px;font-family:ui-monospace,monospace;font-size:.95rem;font-weight:600}.ai-fab{position:fixed;width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-light) 100%);color:#fff;border:none;cursor:grab;box-shadow:0 8px 24px #4f46e559,0 2px 4px #0f172a33;display:flex;align-items:center;justify-content:center;z-index:998;touch-action:none;transition:transform .15s ease,box-shadow .2s ease}.ai-fab:hover{transform:scale(1.05);box-shadow:0 12px 32px #4f46e573,0 4px 8px #0f172a40}.ai-fab:active{cursor:grabbing;transform:scale(.95)}.ai-fab.open{background:linear-gradient(135deg,#ef4444,#f87171)}.ai-fab-panel{background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 20px 60px #0f172a40,0 4px 12px #0f172a1a;display:flex;flex-direction:column;overflow:hidden;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px)}.ai-fab-header{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1rem;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-light) 100%);color:#fff;font-size:1rem}.ai-fab-actions{display:flex;gap:.5rem}.ai-fab-icon-btn{background:#ffffff26;color:#fff;border:none;border-radius:6px;padding:.25rem .55rem;font-size:.8rem;cursor:pointer;transition:background .15s}.ai-fab-icon-btn:hover{background:#ffffff47}.ai-fab-messages{flex:1;overflow-y:auto;padding:.85rem;background:var(--bg);display:flex;flex-direction:column;gap:.65rem;font-size:.92rem;line-height:1.55}.ai-fab-empty{color:var(--muted);padding:.5rem 0}.ai-fab-empty p{margin:0 0 .5rem}.ai-fab-empty ul{margin:0;padding-left:1.25rem}.ai-fab-msg{display:flex}.ai-fab-msg.user{justify-content:flex-end}.ai-fab-msg-bubble{max-width:80%;padding:.6rem .85rem;border-radius:12px;white-space:pre-wrap;word-break:break-word}.ai-fab-msg.user .ai-fab-msg-bubble{background:var(--primary);color:#fff;border-bottom-right-radius:4px}.ai-fab-msg.assistant .ai-fab-msg-bubble{background:var(--surface);color:var(--text);border:1px solid var(--border);border-bottom-left-radius:4px}.ai-fab-msg-bubble.loading{font-style:italic;color:var(--muted)}.ai-fab-input{display:flex;gap:.5rem;padding:.65rem;border-top:1px solid var(--border);background:var(--surface)}.ai-fab-input textarea{flex:1;resize:none;border:1px solid var(--border);border-radius:8px;padding:.5rem .65rem;font:inherit;font-size:.9rem}.ai-fab-input textarea:focus{outline:2px solid var(--primary-light);outline-offset:-1px}.api-form-section{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1rem;margin-bottom:1rem}.api-form-section h3{margin:0 0 .75rem}.api-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem}.kv-row,.assertion-row{display:grid;grid-template-columns:1fr 1fr auto;gap:.5rem;margin-bottom:.5rem;align-items:center}.assertion-row{grid-template-columns:120px 1fr 100px 1fr auto}.response-preview{background:#0f172a;color:#e2e8f0;border-radius:8px;padding:1rem;margin-top:1rem;overflow:auto}.response-preview pre{white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,monospace;font-size:.82rem;max-height:320px;overflow:auto}.api-run-detail-item{border-top:1px solid rgba(255,255,255,.1);padding-top:.75rem;margin-top:.75rem}.api-run-detail-item:first-child{border-top:none;padding-top:0;margin-top:0}.badge{display:inline-block;padding:.15rem .45rem;border-radius:4px;background:#e0e7ff;color:#3730a3;font-size:.75rem;font-weight:600}.btn-sm{padding:.25rem .55rem;font-size:.82rem}.alert-ok{background:#ecfdf5;border:1px solid #6ee7b7;color:#065f46;padding:.65rem .85rem;border-radius:8px;margin-bottom:.75rem}
