:root { --bg: #f6f1e8; --panel: rgba(255, 250, 244, 0.82); --panel-strong: rgba(255, 252, 248, 0.94); --text: #112238; --muted: #5f6f80; --line: rgba(17, 34, 56, 0.12); --brand: #0f6c7b; --brand-strong: #0a425a; --accent: #c65d3a; --danger: #a33a2b; --success: #217253; --shadow: 0 20px 50px rgba(17, 34, 56, 0.12); --radius: 24px; --radius-sm: 16px; --font-sans: "Avenir Next", "Trebuchet MS", "PingFang SC", "Microsoft YaHei", sans-serif; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; font-family: var(--font-sans); color: var(--text); background: radial-gradient(circle at top left, rgba(15, 108, 123, 0.18), transparent 30%), linear-gradient(135deg, #f8f4ec 0%, #f0ebe3 45%, #e2edf1 100%); } button, input, textarea { font: inherit; } .background-glow { position: fixed; inset: auto; width: 28rem; height: 28rem; border-radius: 999px; filter: blur(70px); opacity: 0.32; pointer-events: none; } .glow-a { top: -8rem; right: -10rem; background: #f4a261; } .glow-b { left: -8rem; bottom: -12rem; background: #4da6b3; } .shell { position: relative; max-width: 1500px; margin: 0 auto; padding: 36px 24px 48px; } .hero { display: grid; grid-template-columns: minmax(0, 1.8fr) minmax(280px, 0.8fr); gap: 24px; align-items: stretch; margin-bottom: 24px; } .hero-copy, .hero-side, .panel, .metric-card { background: var(--panel); backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.5); box-shadow: var(--shadow); } .hero-copy { padding: 28px; border-radius: calc(var(--radius) + 4px); } .hero-copy h1 { margin: 10px 0 12px; font-size: clamp(2rem, 3vw, 3.4rem); line-height: 1.05; } .eyebrow { margin: 0; font-size: 0.78rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--brand); } .hero-text { margin: 0; max-width: 48rem; font-size: 1.02rem; line-height: 1.7; color: var(--muted); } .hero-side { padding: 24px; border-radius: calc(var(--radius) + 4px); display: flex; flex-direction: column; justify-content: space-between; gap: 18px; } .status-card { display: grid; gap: 8px; padding: 18px; border-radius: var(--radius-sm); background: linear-gradient(145deg, rgba(15, 108, 123, 0.09), rgba(198, 93, 58, 0.06)); } .status-card strong { font-size: 1.1rem; } .status-label, .muted { color: var(--muted); } .hero-actions, .editor-actions, .pager, .form-actions { display: flex; gap: 12px; flex-wrap: wrap; } .dashboard { display: grid; gap: 24px; } .metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; } .metric-card { border-radius: 22px; padding: 20px; display: grid; gap: 8px; } .metric-label { color: var(--muted); font-size: 0.92rem; } .metric-card strong { font-size: clamp(1.8rem, 4vw, 2.6rem); } .metric-foot { color: var(--muted); font-size: 0.86rem; } .panel { border-radius: var(--radius); padding: 24px; } .panel-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; margin-bottom: 18px; } .panel-head h2, .batch-card h3 { margin: 0 0 8px; } .panel-head p, .batch-card p { margin: 0; color: var(--muted); line-height: 1.65; } .search-form, .inline-form { display: flex; gap: 12px; flex-wrap: wrap; align-items: end; } .search-form input, .inline-form input, .user-form input, .batch-card textarea { width: 100%; border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; background: rgba(255, 255, 255, 0.72); color: var(--text); } .inline-form label, .user-form label { display: grid; gap: 8px; color: var(--muted); } .btn { display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 999px; padding: 11px 18px; cursor: pointer; text-decoration: none; transition: transform 0.16s ease, opacity 0.16s ease, background 0.16s ease; } .btn:hover { transform: translateY(-1px); } .btn:disabled { opacity: 0.48; cursor: not-allowed; transform: none; } .btn-primary { background: linear-gradient(135deg, var(--brand), var(--brand-strong)); color: #fff; } .btn-secondary { background: #d7ecef; color: var(--brand-strong); } .btn-ghost { background: rgba(17, 34, 56, 0.08); color: var(--text); } .btn-danger { background: linear-gradient(135deg, var(--danger), #7d241d); color: #fff; } .table-wrap { overflow: auto; border-radius: var(--radius-sm); border: 1px solid var(--line); } .selection-toolbar { margin-bottom: 18px; padding: 14px 16px; border-radius: 18px; border: 1px solid var(--line); background: var(--panel-strong); display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; } .selection-meta, .selection-actions, .table-checkbox, .batch-card-top { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .batch-card-top { justify-content: space-between; align-items: flex-start; } .table-checkbox { color: var(--muted); font-size: 0.82rem; } .check-col, .check-cell { width: 76px; } .check-cell { text-align: center; } table { width: 100%; border-collapse: collapse; min-width: 980px; } th, td { padding: 14px 16px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; } th { font-size: 0.84rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.08em; } tbody tr:hover { background: rgba(15, 108, 123, 0.05); } .table-footer { margin-top: 16px; display: flex; align-items: center; justify-content: space-between; gap: 12px; } .status-pill { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border-radius: 999px; font-size: 0.82rem; } .status-pill.active { background: rgba(33, 114, 83, 0.14); color: var(--success); } .status-pill.disabled { background: rgba(163, 58, 43, 0.12); color: var(--danger); } .actions-inline { display: flex; gap: 8px; flex-wrap: wrap; } .actions-inline .btn { padding: 8px 12px; font-size: 0.88rem; } .user-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; } .checkbox { display: flex; align-items: center; gap: 10px; } .checkbox input { width: auto; } .form-actions { grid-column: 1 / -1; padding-top: 8px; } .license-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; } .license-card, .empty-card { padding: 16px 18px; border-radius: 18px; background: var(--panel-strong); border: 1px solid var(--line); } .license-card strong { display: block; margin-bottom: 10px; } .batch-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } .batch-card { padding: 18px; border-radius: 20px; background: var(--panel-strong); border: 1px solid var(--line); display: grid; gap: 12px; } .file-input { width: 100%; } .batch-card textarea { min-height: 180px; resize: vertical; } .console { margin: 0; padding: 18px; min-height: 220px; border-radius: 18px; background: #102338; color: #edf6ff; overflow: auto; white-space: pre-wrap; line-height: 1.6; } .task-status-card { margin-bottom: 14px; padding: 16px 18px; border-radius: 18px; background: var(--panel-strong); border: 1px solid var(--line); display: grid; gap: 10px; } .task-status-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; } .task-progress-track { width: 100%; height: 10px; border-radius: 999px; overflow: hidden; background: rgba(17, 34, 56, 0.1); } .task-progress-fill { width: 0%; height: 100%; background: linear-gradient(135deg, var(--brand), var(--accent)); transition: width 0.2s ease; } .empty-cell, .hidden { display: none; } .tag { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 999px; background: rgba(15, 108, 123, 0.09); color: var(--brand-strong); font-size: 0.82rem; } @media (max-width: 1100px) { .hero, .metrics, .batch-grid, .user-form { grid-template-columns: 1fr; } .panel-head, .table-footer, .selection-toolbar, .batch-card-top { flex-direction: column; align-items: stretch; } .search-form input { min-width: 100%; } } @media (max-width: 720px) { .shell { padding: 18px 14px 28px; } .panel, .hero-copy, .hero-side { padding: 18px; border-radius: 20px; } }