
:root{
  --bg:#f4f6f9;--panel:#fff;--panel-soft:#fafcff;--line:#e5e9f0;--text:#1f2937;--muted:#6b7280;--primary:#2563eb;--primary-soft:#eef4ff;
  --success:#1b7f46;--success-bg:#eaf8ef;--warn:#9a6b00;--warn-bg:#fff6df;--danger:#bb2323;--danger-bg:#ffe9e9;--shadow:0 8px 24px rgba(15,23,42,.06);--radius:18px;
}
*{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--text);font-family:"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
a{text-decoration:none;color:inherit}
button,input,select,textarea{font:inherit}
.app-shell{display:grid;grid-template-columns:248px 1fr;min-height:100vh}
.sidebar{background:#111827;color:#fff;padding:18px 14px;position:sticky;top:0;height:100vh;overflow:auto}
.brand{padding:16px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.06);border-radius:20px;margin-bottom:14px}
.brand-top{font-size:11px;letter-spacing:.18em;color:rgba(255,255,255,.62);margin-bottom:8px}
.brand h1{font-size:24px;margin:0 0 6px}.brand p{margin:0;color:rgba(255,255,255,.78);font-size:13px;line-height:1.7}
.menu{display:grid;gap:8px}.menu-item{padding:12px 14px;border-radius:14px;color:rgba(255,255,255,.82);font-size:14px}.menu-item.active{background:#fff;color:#111827;font-weight:700}.menu-item:hover{background:rgba(255,255,255,.08)}
.sidebar-note{margin-top:14px;padding:14px;border-radius:18px;background:rgba(255,255,255,.08);font-size:13px;line-height:1.7;color:rgba(255,255,255,.8)}
.main{padding:18px}.page-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:16px}.page-head h2{margin:0;font-size:28px}.page-head p{margin:6px 0 0;color:var(--muted);font-size:14px;line-height:1.65}.head-actions{display:flex;gap:10px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 14px;border:1px solid var(--line);background:#fff;border-radius:14px;color:var(--text);cursor:pointer;box-shadow:var(--shadow)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.primary:hover{filter:brightness(.96)}.btn.small{padding:8px 12px;font-size:13px}.btn.ghost{background:transparent;box-shadow:none}
.grid-2,.grid-3,.grid-4,.grid-5{display:grid;gap:16px}.grid-2{grid-template-columns:1.3fr 1fr}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-5{grid-template-columns:repeat(5,minmax(0,1fr))}.stack{display:grid;gap:16px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow)}.card-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:18px 18px 0}.card-body{padding:18px}.title{margin:0;font-size:18px}.subtitle{margin:5px 0 0;color:var(--muted);font-size:13px;line-height:1.6}
.kpi{padding:18px}.kpi .label{font-size:13px;color:var(--muted);margin-bottom:8px}.kpi .value{font-size:24px;font-weight:700}.kpi .desc{margin-top:8px;color:var(--muted);font-size:12px;line-height:1.5}
.badge{display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;background:#eff4ff;color:var(--primary);font-size:12px;font-weight:600}.badge.success{background:var(--success-bg);color:var(--success)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.danger{background:var(--danger-bg);color:var(--danger)}.badge.muted{background:#f3f4f6;color:#6b7280}
.list{display:grid;gap:10px}.list-item{padding:12px 14px;background:var(--panel-soft);border:1px solid var(--line);border-radius:14px;font-size:14px;line-height:1.7}
.code-block{margin:0;background:#0f172a;color:#e5edf8;border-radius:16px;padding:16px;overflow:auto;font-size:12px;line-height:1.7}
.table-wrap{overflow:auto}.table{width:100%;border-collapse:collapse;font-size:13px}.table th,.table td{padding:12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.table th{color:var(--muted);font-weight:600;background:#fafbff}.table tr:hover td{background:#fcfdff}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.form-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.field{display:grid;gap:8px}.field label{font-size:13px;font-weight:600}.field input,.field select,.field textarea{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--text);outline:none}.field textarea{resize:vertical;min-height:96px}.field small{color:var(--muted);font-size:12px;line-height:1.5}
.section-title{font-size:15px;font-weight:700;margin:0 0 10px}.inline{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.switch{display:inline-flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--line);border-radius:14px;background:#fff;font-size:13px}
.tab-bar{display:flex;gap:10px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding:0 18px}.tab-btn{margin-bottom:-1px;padding:13px 8px;border:none;background:transparent;border-bottom:2px solid transparent;color:var(--muted);font-weight:700;cursor:pointer}.tab-btn.active{color:var(--primary);border-color:var(--primary)}
.tab-pane{display:none}.tab-pane.active{display:block}
.test-layout{display:grid;grid-template-columns:1.55fr .9fr;gap:16px}.live-log{background:#0f172a;color:#e6eef7;border-radius:18px;padding:14px;min-height:640px}.live-log-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.live-log h3{margin:0;font-size:16px}.live-log .sub{color:#a9b4c7;font-size:12px}
.log-stream{display:grid;gap:8px;max-height:560px;overflow:auto}.log-row{display:grid;grid-template-columns:58px 74px 1fr;gap:10px;padding:9px 10px;border-radius:12px;background:rgba(255,255,255,.05);font-size:12px;line-height:1.55}.log-level{font-weight:700}.log-level.info{color:#93c5fd}.log-level.warn{color:#fcd34d}.log-level.error{color:#fca5a5}.log-time{color:#9fb0c9}.log-text{color:#eaf0fb}.empty{color:#b0bdd1;font-size:12px;padding:10px 0}
.preview-box{padding:14px;border-radius:16px;background:var(--panel-soft);border:1px dashed #ced7e5;font-size:13px;line-height:1.7;color:#445063}.preview-box strong{color:#111827}
.result-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:16px}.result-panel{padding:14px;border:1px solid var(--line);border-radius:16px;background:#fff}.result-panel h4{margin:0 0 10px;font-size:15px}.result-panel .sub{font-size:12px;color:var(--muted);margin-bottom:10px}
.episode-tabs,.mini-tabs{display:flex;gap:8px;flex-wrap:wrap}.episode-btn,.mini-tab{padding:8px 12px;border:1px solid var(--line);background:#fff;border-radius:999px;cursor:pointer;font-size:13px}.episode-btn.active,.mini-tab.active{background:var(--primary-soft);border-color:#bfd4ff;color:var(--primary);font-weight:700}
.script-list,.shot-list{display:grid;gap:10px;max-height:360px;overflow:auto}.script-item,.shot-item{padding:12px 14px;border-radius:14px;background:var(--panel-soft);border:1px solid var(--line);font-size:13px;line-height:1.7}
.asset-grid,.frame-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.asset-card,.frame-card{border:1px solid var(--line);border-radius:18px;background:#fff;overflow:hidden;box-shadow:var(--shadow)}
.asset-card img,.frame-card img,.video-stage img{display:block;width:100%;aspect-ratio:4/5;object-fit:cover;background:#eff4ff}.frame-card img{aspect-ratio:16/9}.asset-body,.frame-body{padding:12px}.asset-meta,.frame-meta{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px}.muted{color:var(--muted)}
.asset-url,.tiny{font-size:12px;color:var(--muted);word-break:break-all;line-height:1.5}.actions{display:flex;gap:8px;flex-wrap:wrap}.selection-strip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.selection-box{padding:12px;border-radius:16px;background:var(--panel-soft);border:1px solid var(--line)}
.video-stage{border:1px solid var(--line);border-radius:18px;overflow:hidden;background:#000}.video-stage img{aspect-ratio:16/9}.player-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px;background:#101828;color:#fff}.player-bar .meta{font-size:12px;color:#b6c2d4}
.range-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.pill{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;font-size:12px;font-weight:700;background:#eef4ff;color:var(--primary)}
.note{padding:12px 14px;border-radius:14px;background:#f7faff;border:1px solid #dbe7ff;font-size:13px;line-height:1.65;color:#41516d}
.dual{display:grid;grid-template-columns:1fr 1fr;gap:16px}.hidden{display:none!important}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.mini-card{padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--panel-soft);font-size:13px;line-height:1.7}
.mini-card b{display:block;margin-bottom:4px}
.asset-row{padding:14px;border:1px solid var(--line);border-radius:16px;background:#fff;margin-bottom:12px}
.asset-row-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.log-panel{max-height:calc(100vh - 120px);overflow:auto}
.log-item{padding:9px 10px;border-radius:12px;background:rgba(247,250,255,.6);border:1px solid var(--line);font-size:12px;line-height:1.55;margin-bottom:6px}
.log-meta{color:var(--muted);font-size:11px;margin-bottom:4px;font-weight:600}
@media (max-width:1200px){.grid-4,.grid-5,.grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-2,.test-layout,.result-grid,.dual{grid-template-columns:1fr}.asset-grid,.frame-grid{grid-template-columns:1fr}}
@media (max-width:900px){.app-shell{grid-template-columns:1fr}.sidebar{position:static;height:auto}.main{padding:14px}.page-head{flex-direction:column}.grid-4,.grid-5,.grid-3,.form-grid,.form-grid-3,.selection-strip{grid-template-columns:1fr}}
