@font-face{font-family:Lexend;src:url(./Lexend-VariableFont_wght-uvWnkqI3.ttf) format("truetype");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:VSFPro;src:url(./VSFPro-Bb1MDcf3.ttf) format("truetype");font-weight:400 800;font-style:normal;font-display:swap}:root{--xam-400: #cfd8d0;--xam-500: #a4b3a7;--xam-600: #7a8e7e;--xam-700: #4e5e51;--xam-800: #3c493e;--xam-850: #2e382f;--xam-900: #262e27;--xam-925: #202721;--xam-950: #181f19;--xam-975: #121813;--chu: #f2f5f3;--xanh-400: #8cf05a;--xanh-500: #6fd63c;--xanh-600: #58b32e;--xanh-fg: #101611;--luc: #7ad49a;--luc-nen: #1d3524;--do: #f87171;--do-nen: #3a1f1f;--vang: #fbbf24;--vang-nen: #3a3020;--xanh-duong: #60a5fa;--xanh-duong-nen: #1c2c40;--radius: 10px;--radius-lg: 14px;--border: 1px solid var(--xam-800);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);--shadow: 0 16px 40px rgba(0, 0, 0, .45);--font: "Lexend", system-ui, -apple-system, sans-serif;--font-display: "VSFPro", "Lexend", system-ui, sans-serif;--mono: "Cascadia Mono", "Consolas", ui-monospace, monospace}*{box-sizing:border-box}html,body,#root{height:100%;max-height:100vh;margin:0}body{background:var(--xam-975);color:var(--chu);font-family:var(--font);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow:hidden}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--xanh-400)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--xam-800);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--xam-700)}::-webkit-scrollbar-track{background:transparent}.shell{display:grid;grid-template-columns:220px 1fr;height:100vh;max-height:100vh;overflow:hidden;transition:grid-template-columns .15s ease}.shell.sidebar-collapsed{grid-template-columns:60px 1fr}.sidebar{background:var(--xam-950);border-right:var(--border);display:flex;flex-direction:column;padding:12px 10px;gap:6px;overflow:hidden;transition:padding .15s ease}.shell.sidebar-collapsed .sidebar{padding:12px 6px;align-items:center}.shell.sidebar-collapsed .brand{padding:4px 0 10px;justify-content:center}.shell.sidebar-collapsed .brand-text{display:none}.shell.sidebar-collapsed .nav{align-items:center;width:100%}.shell.sidebar-collapsed .nav-item{justify-content:center;padding:9px 0;width:44px}.shell.sidebar-collapsed .nav-item span{display:none}.shell.sidebar-collapsed .nav-badge{position:absolute;top:4px;right:4px;font-size:9px;padding:0 4px}.shell.sidebar-collapsed .sidebar-foot{display:none}.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 14px}.brand-mark{width:34px;height:34px;border-radius:9px;background:linear-gradient(145deg,var(--xanh-500),var(--xam-600));display:grid;place-items:center;color:var(--xanh-fg);font-weight:800;font-size:15px;flex:0 0 auto}.brand-title{font-weight:650;letter-spacing:.2px}.brand-sub{font-size:11px;color:var(--xam-500)}.nav{display:flex;flex-direction:column;gap:3px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;color:var(--xam-400);border:1px solid transparent;background:none;text-align:left;width:100%;transition:background .12s,color .12s}.nav-item:hover{background:var(--xam-925);color:var(--chu)}.nav-item.active{background:var(--xam-900);color:var(--chu);border-color:var(--xam-800)}.nav-item.active svg{color:var(--xanh-500)}.nav-badge{margin-left:auto;font-size:11px;color:var(--xanh-fg);background:var(--xanh-500);border-radius:999px;padding:0 7px;font-weight:700}.sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:8px}.engine{border:var(--border);border-radius:var(--radius);padding:9px 10px;background:var(--xam-925);font-size:12px}.engine-row{display:flex;align-items:center;justify-content:space-between;gap:6px}.engine-row+.engine-row{margin-top:4px}.engine-label{color:var(--xam-500)}.dot{width:8px;height:8px;border-radius:50%;display:inline-block}.dot.ok{background:var(--xanh-500);box-shadow:0 0 0 3px #6fd63c24}.dot.warn{background:var(--vang)}.dot.bad{background:var(--do)}.dot.idle{background:var(--xam-600)}.main{display:flex;flex-direction:column;min-width:0;min-height:0;height:100%;max-height:100vh;overflow:hidden}.topbar{height:52px;flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:var(--border);background:var(--xam-950)}.topbar h1{font-size:15px;font-weight:650;margin:0}.topbar .sub{font-size:12px;color:var(--xam-500)}.topbar-actions{margin-left:auto;display:flex;gap:8px;align-items:center}.content{flex:1 1 auto;min-height:0;height:calc(100vh - 52px);overflow-y:auto;overflow-x:hidden;padding:14px 18px}.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border-radius:8px;cursor:pointer;border:var(--border);background:var(--xam-900);color:var(--chu);transition:background .12s,border-color .12s,transform .06s;white-space:nowrap}.btn:hover{background:var(--xam-850)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--xanh-500);color:var(--xanh-fg);border-color:var(--xanh-600);font-weight:650}.btn.primary:hover{background:var(--xanh-400)}.btn.danger{background:var(--do-nen);border-color:#6b2b2b;color:#ffd7d7}.btn.ghost{background:transparent}.btn.sm{padding:5px 9px;font-size:12px;border-radius:7px}.btn.icon{padding:7px}.card{background:var(--xam-950);border:var(--border);border-radius:var(--radius-lg);padding:16px}.card+.card{margin-top:14px}.card-title{font-size:13px;font-weight:650;margin:0 0 4px}.card-hint{font-size:12px;color:var(--xam-500);margin:0 0 12px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.row.end{justify-content:flex-end}.spacer{flex:1 1 auto}h1,h2,h3,.brand-title,.card-title,.topbar h1{font-family:var(--font-display);letter-spacing:-.01em}label.field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--xam-400)}label.field>span{font-weight:600;letter-spacing:.15px}input[type=text],input[type=number],input[type=password],input:not([type]),textarea{background:var(--xam-925);border:var(--border);border-radius:8px;padding:8px 12px;color:var(--chu);outline:none;min-width:0;font-family:var(--font);font-size:13px;transition:border-color .12s,background .12s}select{background:var(--xam-925);border:var(--border);border-radius:8px;height:36px;min-height:36px;line-height:34px;padding:0 32px 0 12px;color:var(--chu);outline:none;min-width:0;font-family:var(--font);font-size:13px;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a4b3a7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right 10px center;background-size:14px;transition:border-color .12s,background .12s}input:focus,select:focus,textarea:focus{border-color:var(--xanh-600);background-color:var(--xam-900)}select option{background:var(--xam-900);color:var(--chu);padding:8px 12px}::placeholder{color:var(--xam-500);opacity:.85}textarea{resize:vertical;min-height:64px;font-family:var(--font);line-height:1.5}input[type=checkbox]{accent-color:var(--xanh-500);width:15px;height:15px}.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--xam-400)}.tag{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--xam-800);color:var(--xam-400);background:var(--xam-925)}.tag.ok{color:var(--luc);border-color:#2c5a3c;background:var(--luc-nen)}.tag.bad{color:var(--do);border-color:#6b2b2b;background:var(--do-nen)}.tag.warn{color:var(--vang);border-color:#6b5520;background:var(--vang-nen)}.tag.info{color:var(--xanh-duong);border-color:#2a4666;background:var(--xanh-duong-nen)}.tag.accent{color:var(--xanh-fg);background:var(--xanh-500);border-color:var(--xanh-600);font-weight:700}.mono{font-family:var(--mono);font-size:12px}.muted{color:var(--xam-500)}.small{font-size:12px}.empty{text-align:center;padding:46px 20px;color:var(--xam-500);border:1px dashed var(--xam-800);border-radius:var(--radius-lg)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.scenario-card{background:var(--xam-950);border:var(--border);border-radius:var(--radius-lg);padding:14px;cursor:pointer;display:flex;flex-direction:column;gap:10px;transition:border-color .12s,transform .12s,background .12s}.scenario-card:hover{border-color:var(--xam-700);background:var(--xam-925);transform:translateY(-1px)}.scenario-title{font-weight:650;font-size:14px}.scenario-meta{display:flex;gap:6px;flex-wrap:wrap}.board{display:flex;flex-direction:column;gap:12px}.scene{display:grid;grid-template-columns:190px 1fr auto;gap:14px;background:var(--xam-950);border:var(--border);border-radius:var(--radius-lg);padding:12px;transition:border-color .12s}.scene.approved{border-color:#2c5a3c}.scene.failed{border-color:#6b2b2b}.scene.running{border-color:var(--xanh-600)}.scene-media{width:190px;height:108px;border-radius:9px;overflow:hidden;background:var(--xam-925);border:var(--border);position:relative;display:grid;place-items:center;color:var(--xam-600)}.scene-media img{width:100%;height:100%;object-fit:cover}.scene-media .idx{position:absolute;top:6px;left:6px;background:#0009;color:var(--chu);font-size:11px;padding:1px 7px;border-radius:999px}.scene-body{display:flex;flex-direction:column;gap:8px;min-width:0}.scene-head{display:flex;align-items:center;gap:8px}.scene-head input{flex:1 1 auto}.scene-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.scene-actions{display:flex;flex-direction:column;gap:6px;justify-content:center}table.tbl{width:100%;border-collapse:collapse;font-size:13px}table.tbl th,table.tbl td{text-align:left;padding:8px 10px;border-bottom:var(--border)}table.tbl th{color:var(--xam-500);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.4px}table.tbl tr:last-child td{border-bottom:none}.modal-back{position:fixed;inset:0;background:#060907b8;display:grid;place-items:center;padding:24px;z-index:40;backdrop-filter:blur(2px)}.modal{width:min(680px,100%);max-height:86vh;overflow:auto;background:var(--xam-950);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:18px}.modal h3{margin:0 0 4px;font-size:15px}.modal-body{display:flex;flex-direction:column;gap:12px;margin:14px 0}.modal-foot{display:flex;justify-content:flex-end;gap:8px}.toasts{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:60}.toast{min-width:240px;max-width:420px;background:var(--xam-900);border:var(--border);border-left:3px solid var(--xanh-500);border-radius:8px;padding:10px 12px;box-shadow:var(--shadow);font-size:13px}.toast.error{border-left-color:var(--do)}.toast.warn{border-left-color:var(--vang)}.progress{height:6px;border-radius:999px;background:var(--xam-900);overflow:hidden}.progress>i{display:block;height:100%;background:var(--xanh-500);transition:width .3s}.log{font-family:var(--mono);font-size:12px;background:var(--xam-975);border:var(--border);border-radius:9px;padding:10px;max-height:260px;overflow:auto;display:flex;flex-direction:column;gap:3px}.log-line{display:flex;gap:8px}.log-line .t{color:var(--xam-600);flex:0 0 auto}.log-line.error{color:#ffb4b4}.log-line.ok{color:var(--luc)}.kv{display:grid;grid-template-columns:150px 1fr;gap:6px 12px;font-size:13px}.kv .k{color:var(--xam-500)}.kv .v{font-family:var(--mono);font-size:12px;word-break:break-all}.split{display:grid;grid-template-columns:1fr 320px;gap:14px;align-items:start}@media(max-width:1180px){.split{grid-template-columns:1fr}.shell{grid-template-columns:76px 1fr}.brand-text,.nav-item span,.engine{display:none}.scene{grid-template-columns:120px 1fr}.scene-media{width:120px;height:72px}.scene-actions{flex-direction:row;grid-column:1 / -1}}.chips{display:flex;gap:6px;flex-wrap:wrap}.chip{font-size:12px;padding:3px 9px;border-radius:999px;border:1px solid var(--xam-800);background:var(--xam-925);cursor:pointer;color:var(--xam-400)}.chip.on{border-color:var(--xanh-600);color:var(--xanh-400);background:var(--luc-nen)}.avatar{width:46px;height:46px;border-radius:999px;overflow:hidden;background:var(--xam-850);display:grid;place-items:center;font-weight:700;color:var(--xam-400);flex:0 0 auto}.avatar img{width:100%;height:100%;object-fit:cover}.media-card-hover:hover{border-color:var(--xam-600)!important;box-shadow:0 4px 14px #0006}.spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
