| :root { |
| --bg: #0a0a14; |
| --surface: #12121f; |
| --surface2: #1a1a2e; |
| --surface3: #1e1e34; |
| --border: #2a2a4a; |
| --accent: #7c6dfa; |
| --accent2: #38bdf8; |
| --green: #4ade80; |
| --orange: #fb923c; |
| --red: #f87171; |
| --text: #e2e2f0; |
| --muted: #7878a0; |
| --radius: 12px; |
| } |
|
|
| * { box-sizing: border-box; margin: 0; padding: 0; } |
| body { |
| background: var(--bg); |
| color: var(--text); |
| font-family: 'Segoe UI', system-ui, sans-serif; |
| font-size: 14px; |
| min-height: 100vh; |
| } |
|
|
| |
| header { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| padding: 14px 32px; |
| background: var(--surface); |
| border-bottom: 1px solid var(--border); |
| position: sticky; top: 0; z-index: 100; |
| } |
| .header-left { display: flex; align-items: center; gap: 14px; } |
| .logo { font-size: 28px; } |
| h1 { font-size: 19px; color: var(--accent); font-weight: 700; } |
| .subtitle { color: var(--muted); font-size: 11px; margin-top: 3px; } |
|
|
| |
| .tabs { |
| display: flex; |
| background: var(--surface2); |
| border-bottom: 1px solid var(--border); |
| padding: 0 32px; |
| overflow-x: auto; |
| } |
| .tab { |
| background: none; border: none; |
| color: var(--muted); |
| padding: 13px 18px; |
| cursor: pointer; font-size: 13px; font-weight: 500; |
| border-bottom: 3px solid transparent; |
| white-space: nowrap; |
| transition: color .2s, border-color .2s; |
| } |
| .tab:hover { color: var(--text); } |
| .tab.active { color: var(--accent); border-bottom-color: var(--accent); } |
|
|
| |
| main { max-width: 1280px; margin: 0 auto; padding: 24px 32px; } |
| .tab-content { display: none; } |
| .tab-content.active { display: block; } |
|
|
| |
| .card { |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: var(--radius); |
| padding: 22px 24px; |
| margin-bottom: 20px; |
| } |
| .card h2 { |
| font-size: 15px; font-weight: 600; |
| color: var(--accent2); |
| margin-bottom: 14px; |
| display: flex; align-items: center; gap: 8px; |
| } |
|
|
| |
| .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } |
| .grid-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 14px; } |
|
|
| @media (max-width: 900px) { |
| .grid-2,.grid-3 { grid-template-columns: 1fr; } |
| main { padding: 14px; } |
| header{ padding: 12px 16px; } |
| .tabs { padding: 0 12px; } |
| } |
|
|
| |
| .kpi-grid { |
| display: grid; |
| grid-template-columns: repeat(6, 1fr); |
| gap: 12px; |
| } |
| .kpi-grid.wide { |
| grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); |
| } |
| @media (max-width: 900px) { .kpi-grid { grid-template-columns: repeat(3,1fr); } } |
|
|
| .kpi-card { |
| background: var(--surface2); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| padding: 16px; |
| text-align: center; |
| } |
| .kpi-val { font-size: 26px; font-weight: 700; color: var(--accent); } |
| .kpi-lbl { color: var(--muted); font-size: 11px; margin-top: 4px; text-transform: uppercase; letter-spacing: .5px; } |
|
|
| |
| .badge { |
| display: inline-block; |
| padding: 3px 10px; |
| border-radius: 20px; |
| font-size: 11px; |
| font-weight: 600; |
| } |
| .badge-pending { background: #1e1e3a; color: var(--muted); } |
| .badge-running { background: #0f2a1a; color: var(--green); border: 1px solid var(--green); } |
| .badge-complete { background: #0d2233; color: var(--accent2); border: 1px solid var(--accent2); } |
| .badge-error { background: #2a0f0f; color: var(--red); } |
| .badge-info { background: var(--surface2); color: var(--muted); } |
| .badge-cat { background: #1a1a3a; color: var(--accent); border: 1px solid var(--border); } |
| .badge-fmt { background: #0d2233; color: var(--accent2); } |
| .badge-interest { background: #1a2a1a; color: var(--green); border: 1px solid #2a4a2a; } |
|
|
| |
| .btn { |
| padding: 10px 20px; border: none; border-radius: 8px; |
| font-size: 13px; font-weight: 600; cursor: pointer; |
| transition: opacity .2s, transform .1s; |
| } |
| .btn:hover { opacity: .85; transform: translateY(-1px); } |
| .btn:active { transform: translateY(0); } |
| .btn:disabled { opacity: .4; cursor: not-allowed; transform: none; } |
| .btn-primary { background: var(--accent); color: #fff; } |
| .btn-secondary{ background: var(--surface2); color: var(--text); border: 1px solid var(--border); } |
|
|
| |
| .form-row { margin-bottom: 12px; } |
| .form-row label { |
| display: block; color: var(--muted); margin-bottom: 5px; |
| font-size: 11px; text-transform: uppercase; letter-spacing: .5px; |
| } |
| select, .num-input { |
| background: var(--surface2); border: 1px solid var(--border); |
| color: var(--text); padding: 9px 11px; |
| border-radius: 8px; font-size: 13px; outline: none; |
| transition: border-color .2s; |
| } |
| select { width: 100%; } |
| .num-input{ width: 80px; } |
| select:focus,.num-input:focus { border-color: var(--accent); } |
|
|
| .time-row { display: flex; gap: 12px; } |
|
|
| |
| .profile-box { |
| background: var(--surface2); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| padding: 14px; |
| margin: 12px 0; |
| } |
| .profile-row { |
| display: flex; align-items: center; justify-content: space-between; |
| padding: 6px 0; border-bottom: 1px solid var(--border); |
| } |
| .profile-row:last-child { border-bottom: none; } |
| .profile-lbl { color: var(--muted); font-size: 12px; } |
|
|
| |
| .item-list { max-height: 340px; overflow-y: auto; } |
| .history-row { |
| display: flex; align-items: center; justify-content: space-between; |
| padding: 10px 0; border-bottom: 1px solid var(--border); |
| } |
| .history-row:last-child { border-bottom: none; } |
| .history-meta { font-size: 12px; color: var(--muted); margin-top: 2px; } |
| .outcome-click { color: var(--green); font-size: 15px; } |
| .outcome-convert { color: #fbbf24; font-size: 15px; } |
| .outcome-skip { color: var(--muted);font-size: 15px; opacity: .5; } |
|
|
| |
| .ad-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); |
| gap: 14px; |
| } |
| .ad-card { |
| background: var(--surface2); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| padding: 16px; |
| transition: border-color .2s, transform .2s; |
| } |
| .ad-card:hover { border-color: var(--accent); transform: translateY(-2px); } |
|
|
| .ad-rank { color: var(--muted); font-size: 11px; margin-bottom: 6px; } |
| .ad-headline { font-weight: 600; color: var(--text); font-size: 14px; margin-bottom: 8px; } |
| .ad-advertiser { color: var(--muted); font-size: 11px; margin-bottom: 8px; } |
|
|
| .ad-metrics { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 10px; } |
| .ad-metric { |
| background: var(--surface3); |
| border: 1px solid var(--border); |
| border-radius: 6px; |
| padding: 4px 8px; |
| font-size: 11px; |
| color: var(--muted); |
| } |
| .ad-metric .val { color: var(--accent2); font-weight: 600; } |
| .ad-metric .ctr-val { color: var(--green); font-weight: 600; } |
| .ad-metric .cvr-val { color: var(--orange); font-weight: 600; } |
|
|
| .rec-info-bar { color: var(--muted); font-size: 12px; margin-bottom: 12px; } |
| .error-msg { color: var(--red); font-size: 13px; margin-top: 8px; } |
|
|
| |
| .data-table { width: 100%; border-collapse: collapse; font-size: 13px; } |
| .data-table th { |
| text-align: left; padding: 10px 12px; |
| border-bottom: 2px solid var(--border); |
| color: var(--accent2); font-weight: 600; |
| white-space: nowrap; |
| } |
| .data-table td { |
| padding: 9px 12px; |
| border-bottom: 1px solid var(--border); |
| color: var(--muted); |
| } |
| .data-table tr:last-child td { border-bottom: none; } |
| .data-table tr:hover td { background: var(--surface2); } |
|
|
| .bar-cell { display: flex; align-items: center; gap: 8px; } |
| .bar-bg { flex: 1; background: var(--surface2); border-radius: 4px; height: 8px; overflow: hidden; } |
| .bar-fill { height: 100%; background: linear-gradient(90deg, var(--accent), var(--accent2)); border-radius: 4px; } |
|
|
| |
| .metrics-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); |
| gap: 12px; |
| } |
| .metric-card { |
| background: var(--surface2); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| padding: 16px; |
| text-align: center; |
| } |
| .metric-name { color: var(--muted); font-size: 11px; margin-bottom: 8px; text-transform: uppercase; } |
| .metric-val { font-size: 24px; font-weight: 700; } |
| .metric-val.good { color: var(--green); } |
| .metric-val.mid { color: var(--orange); } |
| .metric-val.low { color: var(--red); } |
|
|
| |
| .arch-diagram { |
| background: var(--surface2); border: 1px solid var(--border); |
| border-radius: 8px; padding: 20px; |
| color: var(--accent2); font-size: 12px; line-height: 1.7; |
| overflow-x: auto; white-space: pre; |
| } |
|
|
| |
| .feature-list { list-style: none; padding: 0; } |
| .feature-list li { |
| padding: 7px 0; border-bottom: 1px solid var(--border); |
| color: var(--muted); line-height: 1.5; |
| } |
| .feature-list li:last-child { border-bottom: none; } |
| .feature-list strong { color: var(--text); } |
|
|
| .ref-list { list-style: none; padding: 0; } |
| .ref-list li { |
| padding: 6px 0; border-bottom: 1px solid var(--border); |
| color: var(--muted); font-size: 12px; |
| } |
| .ref-list li:last-child { border-bottom: none; } |
| .ref-list li::before { content: "π "; } |
|
|
| |
| .info-card { |
| background: var(--surface2); border: 1px solid var(--border); |
| border-radius: 8px; padding: 16px; text-align: center; |
| } |
| .info-icon { font-size: 26px; margin-bottom: 8px; } |
| .info-card h3 { color: var(--accent); font-size: 13px; margin-bottom: 6px; } |
| .info-card p { color: var(--muted); font-size: 12px; line-height: 1.5; } |
|
|
| |
| .training-status { margin-bottom: 18px; } |
| .status-row { |
| display: flex; justify-content: space-between; align-items: center; |
| padding: 8px 0; border-bottom: 1px solid var(--border); |
| } |
| .status-row:last-child { border-bottom: none; } |
|
|
| .progress-wrap { |
| background: var(--surface2); border-radius: 8px; |
| height: 10px; overflow: hidden; margin: 12px 0 6px; |
| } |
| .progress-bar { |
| height: 100%; |
| background: linear-gradient(90deg, var(--accent), var(--accent2)); |
| border-radius: 8px; transition: width .5s ease; |
| } |
| .progress-label { color: var(--muted); font-size: 12px; text-align: right; } |
|
|
| .retrain-form { |
| display: flex; align-items: center; gap: 10px; margin-top: 18px; flex-wrap: wrap; |
| } |
| .retrain-form label { color: var(--muted); font-size: 13px; } |
|
|
| |
| .empty-state { color: var(--muted); text-align: center; padding: 28px; font-size: 13px; } |
| .muted { color: var(--muted); font-size: 13px; margin-bottom: 14px; } |
| p { color: var(--muted); line-height: 1.6; margin-bottom: 10px; } |
| ul { padding-left: 0; } |
|
|
| .genre-badge { |
| display: inline-block; padding: 2px 8px; border-radius: 10px; |
| font-size: 11px; background: var(--surface2); color: var(--accent2); |
| border: 1px solid var(--border); margin: 2px 2px 0 0; |
| } |
|
|
| ::-webkit-scrollbar { width: 6px; height: 6px; } |
| ::-webkit-scrollbar-track { background: var(--surface2); } |
| ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } |
|
|