:root{color-scheme:dark;--bg: #0a0f1a;--panel-1: #101826;--panel-2: #17202f;--panel-3: #1e293b;--overlay: rgba(8, 12, 22, .74);--border: #1f2a3b;--border-hover: #2d3b52;--border-focus: #38bdf8;--text-high: #e6edf7;--text: #c7d2e3;--text-mute: #8b97a9;--text-dim: #697486;--accent: #22d3ee;--accent-strong: #06b6d4;--accent-soft: rgba(34, 211, 238, .12);--success: #34d399;--success-soft: rgba(52, 211, 153, .12);--warn: #f59e0b;--warn-soft: rgba(245, 158, 11, .12);--danger: #f87171;--danger-soft: rgba(248, 113, 113, .12);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);--shadow-md: 0 4px 12px rgba(0, 0, 0, .45);--shadow-lg: 0 20px 48px rgba(0, 0, 0, .55);--ff-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ff-mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace;--t-fast: .1s ease;--t-med: .18s ease;--radius-sm: 6px;--radius: 8px;--radius-lg: 12px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--ff-sans);background:var(--bg);color:var(--text);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4{margin:0;color:var(--text-high);letter-spacing:-.01em}h2{font-size:22px;font-weight:600}h3{font-size:15px;font-weight:600}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:2px}code{font-family:var(--ff-mono);font-size:12.5px}.mono,code,.tabular-nums{font-variant-numeric:tabular-nums}button{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:7px 14px;font:inherit;font-weight:500;cursor:pointer;min-height:34px;transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast)}button:hover:not(:disabled){background:var(--panel-3);border-color:var(--border-hover)}button:active:not(:disabled){transform:translateY(.5px)}button:disabled{opacity:.55;cursor:not-allowed}button.primary{background:var(--accent);color:#001018;border-color:var(--accent);font-weight:600}button.primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}button.ghost{background:transparent;border-color:transparent;color:var(--text-mute)}button.ghost:hover:not(:disabled){color:var(--text);background:var(--panel-2)}button.danger{background:transparent;color:var(--danger);border-color:var(--border)}button.danger:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger)}button.danger-filled{background:var(--danger);color:#1b0505;border-color:var(--danger);font-weight:600}button.danger-filled:hover:not(:disabled){background:#ef4444;border-color:#ef4444}button.small{min-height:28px;padding:3px 10px;font-size:12.5px}button:focus-visible,.chip:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:none;box-shadow:0 0 0 3px var(--accent-soft),0 0 0 1px var(--border-focus)}input,select,textarea{background:var(--panel-2);color:var(--text-high);border:1px solid var(--border);border-radius:var(--radius);padding:7px 10px;font:inherit;width:100%;min-height:34px;transition:border-color var(--t-fast),background var(--t-fast)}input::placeholder,textarea::placeholder{color:var(--text-dim)}input:hover,select:hover,textarea:hover{border-color:var(--border-hover)}textarea{font-family:var(--ff-mono);font-size:12.5px;resize:vertical}input[type=checkbox]{width:auto;min-height:0;accent-color:var(--accent)}label{display:block;font-weight:500;margin-bottom:4px;color:var(--text-mute);font-size:12.5px}.shell{display:grid;grid-template-columns:228px 1fr;min-height:100%}.sidebar{background:linear-gradient(180deg,#0a111f,#0a101c);border-right:1px solid var(--border);padding:18px 14px 14px;display:flex;flex-direction:column;gap:4px}.sidebar h1{font-size:13px;font-weight:600;letter-spacing:.02em;color:var(--text-high);margin:0 4px 14px;display:flex;align-items:center;gap:8px}.sidebar h1 .brand-mark{width:22px;height:22px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);border-radius:6px;flex:0 0 22px}.sidebar nav{display:flex;flex-direction:column;gap:1px;flex:1}.sidebar nav a{display:block;padding:8px 12px;border-radius:var(--radius);color:var(--text-mute);font-size:13.5px;font-weight:500;border-left:2px solid transparent;margin-left:-2px}.sidebar nav a:hover{background:var(--panel-2);color:var(--text);text-decoration:none}.sidebar nav a.active{background:var(--panel-2);color:var(--text-high);border-left-color:var(--accent)}.sidebar .account{border-top:1px solid var(--border);padding-top:12px;margin-top:12px}.sidebar .account .who{padding:0 4px 10px}.sidebar .account .who .name{color:var(--text-high);font-weight:500;font-size:13px}.sidebar .account .who .email{color:var(--text-dim);font-size:11.5px;margin-top:1px}.main{padding:24px 32px 48px;max-width:1400px;min-width:0}@media (max-width: 820px){.shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}.sidebar{border-right:none;border-bottom:1px solid var(--border);padding:10px 12px}.sidebar h1{margin:0 0 8px;font-size:14px}.sidebar nav{flex-direction:row;gap:6px;flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.sidebar nav a{flex:0 0 auto;padding:8px 12px;border-left:none;border-bottom:2px solid transparent}.sidebar nav a.active{border-left-color:transparent;border-bottom-color:var(--accent)}.sidebar .account{border-top:1px solid var(--border);padding-top:8px;margin-top:8px;display:flex;align-items:center;gap:10px}.sidebar .account .who{padding:0;flex:1;min-width:0}.sidebar .account .who .name,.sidebar .account .who .email{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar .account .ghost.small{width:auto!important;flex:0 0 auto;min-height:40px;padding-inline:12px}.main{padding:16px}.card{overflow-x:auto}.main table{min-width:max-content}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}.page-header{flex-wrap:wrap;row-gap:6px}.grid.cols-2{grid-template-columns:minmax(0,1fr)!important}.main dl{grid-template-columns:minmax(0,1fr)!important;gap:4px!important}.main dl dt{font-size:11px;text-transform:uppercase;letter-spacing:.5px}.main dl dd{margin:0 0 8px}.runs-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}.runs-tabs button{flex:0 0 auto}}@media (max-width: 480px){.main{padding:12px}.card{padding:12px 14px;margin-bottom:12px}.stat-grid{grid-template-columns:minmax(0,1fr)!important}.stat-card{padding:12px 14px}.stat-value{font-size:24px}button,.sidebar nav a{min-height:40px}.page-header h2{font-size:18px}.page-header .subtitle{font-size:12px}}.card{background:var(--panel-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px 20px;margin-bottom:18px;box-shadow:var(--shadow-sm)}.card.card-ghost{background:transparent;border-style:dashed;box-shadow:none}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spacer{flex:1}.grid{display:grid;gap:16px}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}table{width:100%;border-collapse:separate;border-spacing:0}th,td{text-align:left;padding:10px 12px;vertical-align:middle}th{color:var(--text-mute);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);background:var(--panel-1)}td{border-bottom:1px solid var(--border)}tbody tr{transition:background var(--t-fast)}tbody tr:hover td{background:var(--panel-2)}tbody tr.selected td{background:var(--accent-soft)}.badge{display:inline-flex;align-items:center;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:500;line-height:1.5;border:1px solid transparent;white-space:nowrap}.badge.ok{background:var(--success-soft);color:var(--success);border-color:#34d3994d}.badge.fail{background:var(--danger-soft);color:var(--danger);border-color:#f871714d}.badge.warn{background:var(--warn-soft);color:var(--warn);border-color:#f59e0b4d}.badge.info,.badge.running{background:var(--accent-soft);color:var(--accent);border-color:#22d3ee4d}.badge.queued{background:var(--panel-2);color:var(--text);border-color:var(--border-hover)}.badge.muted{background:var(--panel-2);color:var(--text-mute);border-color:var(--border)}.badge.group{background:var(--panel-2);color:var(--text);border-color:var(--border-hover)}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:0 0 8px;vertical-align:middle}.dot.on{background:var(--success);box-shadow:0 0 0 3px #34d3992e}.dot.off{background:var(--text-dim)}.dot.running{background:var(--accent);box-shadow:0 0 0 3px #22d3ee2e;animation:pulse 1.5s ease-in-out infinite}.dot.warn{background:var(--warn)}.dot.danger{background:var(--danger)}@keyframes pulse{0%,to{box-shadow:0 0 0 3px #22d3ee2e}50%{box-shadow:0 0 0 6px #22d3ee14}}@keyframes wg-spin{to{transform:rotate(360deg)}}.chip{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:999px;padding:6px 14px;font-size:13px;font-weight:500;cursor:pointer;min-height:30px;transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast)}.chip:hover:not(:disabled){background:var(--panel-3);border-color:var(--border-hover)}.chip.chip-on{background:var(--accent);border-color:var(--accent);color:#001018;font-weight:600}.chip.chip-on:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}.log-viewer{background:#050b16;border:1px solid var(--border);color:#d9e5f3;font-family:var(--ff-mono);font-size:12px;padding:12px 14px;height:360px;overflow:auto;white-space:pre;border-radius:var(--radius)}.login{display:grid;place-items:center;min-height:100vh;padding:20px}.login .card{width:min(400px,92vw);padding:24px}.toast-stack{position:fixed;top:18px;right:18px;z-index:300;display:flex;flex-direction:column;gap:8px}.toast{background:var(--panel-1);border:1px solid var(--border-hover);color:var(--text);padding:11px 14px;border-radius:var(--radius);max-width:380px;box-shadow:var(--shadow-md);font-size:13.5px}.toast.ok{border-left:3px solid var(--success)}.toast.err{border-left:3px solid var(--danger)}.toast.info{border-left:3px solid var(--accent)}.muted{color:var(--text-mute)}.dim{color:var(--text-dim)}.small{font-size:12px}.h-mono{font-family:var(--ff-mono)}.vstack{display:flex;flex-direction:column}.vstack>*+*{margin-top:var(--gap, 10px)}.section-label{text-transform:uppercase;letter-spacing:.08em;font-size:10.5px;color:var(--text-mute);font-weight:600;margin-bottom:6px}.display-num{font-size:30px;font-weight:600;color:var(--text-high);line-height:1.1;font-variant-numeric:tabular-nums}.icon{width:16px;height:16px;flex:0 0 16px;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;fill:none;vertical-align:-3px}.icon-lg{width:20px;height:20px;flex-basis:20px}.icon-xl{width:40px;height:40px;flex-basis:40px;stroke-width:1.5}.empty-state{text-align:center;padding:40px 24px;color:var(--text-mute)}.empty-state .empty-icon{width:48px;height:48px;margin:0 auto 12px;display:grid;place-items:center;background:var(--panel-2);border-radius:14px;color:var(--text-mute)}.empty-state h3{color:var(--text-high);font-size:16px;margin-bottom:6px}.empty-state p{margin:0 auto 14px;max-width:440px;line-height:1.5}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);z-index:200;display:grid;place-items:center;padding:20px;overflow-y:auto;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.modal{background:var(--panel-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:22px 24px;width:min(760px,96vw);max-height:94vh;overflow-y:auto;box-shadow:var(--shadow-lg)}.modal section{padding:14px 0;border-top:1px solid var(--border)}.modal section:first-of-type{border-top:none;padding-top:0}.schedule-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px}.schedule-card{margin-bottom:0;transition:border-color var(--t-med)}.schedule-card:hover{border-color:var(--border-hover)}.schedule-card[data-enabled=false] .schedule-meta{opacity:.7}.schedule-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:12px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin:4px 0}.schedule-meta .meta-label{color:var(--text-mute);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:2px;font-weight:600}.schedule-meta .meta-value{color:var(--text);font-size:13px;font-variant-numeric:tabular-nums}.schedule-actions{gap:6px}.schedule-actions button{font-size:12.5px}.group-picker{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px;max-height:300px;overflow-y:auto}.group-picker .gp-toolbar{display:flex;align-items:center;gap:8px;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border);flex-wrap:wrap}.group-picker .gp-toolbar input{max-width:220px;min-height:30px;padding:4px 10px}.group-picker .gp-toolbar .gp-count{color:var(--text-mute);font-size:12px}.group-picker .gp-group-label{color:var(--text-mute);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;margin:10px 0 4px}.group-picker .gp-group-label:first-child{margin-top:0}.group-picker .gp-chips{display:flex;gap:6px;flex-wrap:wrap}.runs-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:14px}.runs-tabs button{background:transparent;border:none;border-radius:0;color:var(--text-mute);padding:8px 14px;min-height:36px;border-bottom:2px solid transparent;margin-bottom:-1px;font-weight:500}.runs-tabs button:hover:not(:disabled){background:transparent;color:var(--text)}.runs-tabs button.active{color:var(--text-high);border-bottom-color:var(--accent)}.runs-tabs button .tab-count{display:inline-block;margin-left:6px;font-size:11px;color:var(--text-mute);background:var(--panel-2);padding:1px 7px;border-radius:999px;min-width:18px;text-align:center}.runs-tabs button.active .tab-count{background:var(--accent-soft);color:var(--accent)}.bulk-action-bar{background:var(--accent-soft);border:1px solid rgba(34,211,238,.3);border-radius:var(--radius);padding:10px 14px;margin-bottom:12px;display:flex;align-items:center;gap:10px;color:var(--text-high)}.bulk-action-bar .bulk-count{font-weight:600;color:var(--accent)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:18px}.stat-card{background:var(--panel-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 18px;box-shadow:var(--shadow-sm)}.stat-card .stat-label{color:var(--text-mute);font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;margin-bottom:6px;font-weight:600}.stat-card .stat-value{font-size:28px;font-weight:600;color:var(--text-high);font-variant-numeric:tabular-nums;line-height:1.1}.stat-card .stat-sub{color:var(--text-mute);font-size:12px;margin-top:4px}.preview-list{padding-left:20px;margin:6px 0 0;list-style-type:decimal}.preview-list li{padding:2px 0;color:var(--text);font-variant-numeric:tabular-nums}.page-header{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:18px}.page-header h2{flex:0 0 auto}.page-header .subtitle{color:var(--text-mute);font-size:13px}.copy-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--panel-2);color:var(--text);font-size:12.5px;font-weight:500;cursor:pointer;transition:background .12s,border-color .12s,color .12s}.copy-btn:hover{border-color:var(--border-hover);background:var(--panel-3)}.copy-btn:focus-visible{outline:2px solid var(--border-focus);outline-offset:1px}.copy-btn .icon{width:13px;height:13px;flex-basis:13px}.copy-btn-ok{background:var(--success-soft);border-color:#34d39959;color:var(--success)}.copy-btn-err{background:var(--danger-soft);border-color:#f8717159;color:var(--danger)}.url-chip{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%}.url-chip .url-text{font-family:var(--ff-mono);font-size:12px;color:var(--text);background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-md);padding:4px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:ltr;min-width:0;flex:1 1 auto}.url-chip.url-chip-none .url-text{color:var(--text-dim);font-style:italic;background:transparent;border-style:dashed}.url-chip .icon-btn{padding:5px 7px;border-radius:var(--radius-md);background:var(--panel-2);border:1px solid var(--border);color:var(--text);display:inline-flex;align-items:center;justify-content:center;text-decoration:none;cursor:pointer;flex:0 0 auto}.url-chip .icon-btn:hover{border-color:var(--border-hover);background:var(--panel-3)}.url-chip .icon-btn:focus-visible{outline:2px solid var(--border-focus);outline-offset:1px}.url-status{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;letter-spacing:.02em}.url-status.ready{background:var(--success-soft);color:var(--success)}.url-status.stale,.url-status.pending{background:var(--warn-soft);color:var(--warn)}.url-status.none{background:var(--panel-2);color:var(--text-mute)}.stat-card.count-card{padding:10px 12px}.stat-card.count-card .stat-label{font-size:10.5px;margin-bottom:2px}.stat-card.count-card .stat-value{font-size:22px}.stat-card.count-card.tone-ok{background:var(--success-soft);border-color:#34d39947}.stat-card.count-card.tone-ok .stat-value{color:var(--success)}.stat-card.count-card.tone-warn{background:var(--warn-soft);border-color:#f59e0b47}.stat-card.count-card.tone-warn .stat-value{color:var(--warn)}.stat-card.count-card.tone-muted .stat-value{color:var(--text-mute)}table.compact{font-size:12.5px}table.compact th,table.compact td{padding:6px 10px}table.compact thead th{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase}.iptv-card{background:var(--panel-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 18px;margin-bottom:16px;box-shadow:var(--shadow-sm)}.iptv-card h3{margin:0 0 4px;font-size:14px;letter-spacing:.03em}.iptv-card .iptv-sub{color:var(--text-mute);font-size:12.5px;margin-bottom:12px}.iptv-card .iptv-row{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}.iptv-card .iptv-row .iptv-kind{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-mute);min-width:72px;font-weight:600}.iptv-card .iptv-row .iptv-kind.primary{color:var(--accent)}.iptv-card .iptv-meta{color:var(--text-mute);font-size:12px;margin-top:8px;display:flex;gap:14px;flex-wrap:wrap}
