:root { color-scheme: light; --bg: #f5f7f6; --surface: #ffffff; --surface-muted: #eef2f0; --ink: #17201c; --muted: #627069; --line: #d9e0dc; --accent: #167052; --accent-hover: #0f5b42; --warning: #a35418; --danger: #a33a32; --info: #246a9b; --radius: 6px; --shadow: 0 8px 24px rgba(23, 32, 28, 0.07); font-family: Inter, "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif; } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; background: var(--bg); color: var(--ink); } button, input, select { font: inherit; } button, .button { min-height: 36px; border: 1px solid var(--line); border-radius: var(--radius); padding: 7px 12px; background: var(--surface); color: var(--ink); cursor: pointer; text-decoration: none; } button:hover, .button:hover { border-color: var(--accent); } button.primary, .button.primary { border-color: var(--accent); background: var(--accent); color: #fff; } button.primary:hover, .button.primary:hover { background: var(--accent-hover); } button.danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, var(--line)); } button:disabled { cursor: not-allowed; opacity: 0.55; } input, select { width: 100%; min-height: 38px; border: 1px solid var(--line); border-radius: var(--radius); padding: 7px 10px; background: var(--surface); color: var(--ink); } input:focus, select:focus, button:focus-visible, .button:focus-visible { outline: 2px solid color-mix(in srgb, var(--accent) 38%, transparent); outline-offset: 1px; } .app { display: grid; grid-template-columns: 220px minmax(0, 1fr); min-height: 100vh; } body[data-page="admin"] .app { grid-template-columns: 160px minmax(0, 1fr); } body[data-page="admin"] .sidebar { padding-right: 8px; padding-left: 8px; } body[data-page="admin"] .main { padding-right: 20px; padding-left: 20px; } body[data-page="admin"] .page-header, body[data-page="admin"] .content { max-width: none; } .sidebar { position: sticky; top: 0; height: 100vh; padding: 20px 14px; border-right: 1px solid var(--line); background: #18231e; color: #f4f8f6; } .brand { display: block; padding: 8px 10px 20px; color: #fff; font-size: 19px; font-weight: 750; text-decoration: none; } .nav-list { display: grid; gap: 4px; } .nav-list a { min-height: 40px; border-radius: var(--radius); padding: 10px 12px; color: #cbd8d1; text-decoration: none; } .nav-list a:hover, .nav-list a.active { background: #2b3c34; color: #fff; } .nav-meta { position: absolute; right: 14px; bottom: 18px; left: 14px; border-top: 1px solid #34463d; padding: 14px 10px 0; color: #aebdb5; font-size: 12px; overflow-wrap: anywhere; } .main { min-width: 0; padding: 24px clamp(18px, 4vw, 48px) 48px; } .page-header { display: flex; align-items: center; justify-content: space-between; gap: 20px; margin: 0 auto 22px; max-width: 1280px; } .page-header h1 { margin: 0; font-size: 25px; letter-spacing: 0; } .page-header p { margin: 5px 0 0; color: var(--muted); font-size: 14px; } .header-actions, .toolbar, .pager, .segmented { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .content { display: grid; gap: 18px; max-width: 1280px; margin: 0 auto; } .band { border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow); } .band-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 54px; border-bottom: 1px solid var(--line); padding: 12px 16px; } .band-header h2 { margin: 0; font-size: 15px; } .band-body { padding: 16px; } .stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .stat { min-height: 92px; border: 1px solid var(--line); border-radius: var(--radius); padding: 14px; background: var(--surface); } .stat span { display: block; color: var(--muted); font-size: 12px; } .stat strong { display: block; margin-top: 9px; font-size: 25px; font-variant-numeric: tabular-nums; } .quick-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--line); } .settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; } .setting-field { display: grid; gap: 7px; } .setting-field > span { color: var(--ink); font-size: 13px; font-weight: 700; } .setting-field small { color: var(--muted); font-size: 12px; line-height: 1.5; } .muted-copy { margin: 5px 0 0; color: var(--muted); font-size: 13px; } .login-shell { display: grid; min-height: 100vh; padding: 24px; place-items: center; } .login-panel { width: min(440px, 100%); } .login-panel h1 { margin: 0; font-size: 20px; } .login-form { display: grid; gap: 14px; } .login-form p { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.6; } .settings-actions { display: flex; justify-content: space-between; gap: 12px; border-top: 1px solid var(--line); padding-top: 16px; } .quick-link { min-height: 112px; padding: 18px; background: var(--surface); color: var(--ink); text-decoration: none; } .quick-link:hover { background: #f8fbf9; } .quick-link strong, .quick-link span { display: block; } .quick-link span { margin-top: 8px; color: var(--muted); font-size: 13px; line-height: 1.5; } .filters { display: grid; grid-template-columns: minmax(220px, 2fr) repeat(3, minmax(120px, 1fr)) auto; gap: 10px; } .table-wrap { overflow-x: auto; } table { width: 100%; border-collapse: collapse; font-size: 13px; } th, td { border-bottom: 1px solid var(--line); padding: 11px 12px; text-align: left; vertical-align: middle; } th { color: var(--muted); font-size: 11px; font-weight: 700; text-transform: uppercase; } tbody tr:hover { background: #f7faf8; } .mono { font-family: "SFMono-Regular", Consolas, monospace; font-size: 12px; } .status { display: inline-flex; align-items: center; min-height: 24px; border-radius: 999px; padding: 3px 8px; background: var(--surface-muted); color: var(--muted); font-size: 11px; font-weight: 700; } .status.running, .status.queued, .status.cancel_requested { background: #e6f0f8; color: var(--info); } .status.success { background: #e3f2eb; color: var(--accent); } .status.error, .status.canceled { background: #f7e8e6; color: var(--danger); } .empty, .loading, .notice { padding: 30px 16px; color: var(--muted); text-align: center; } .notice.error { color: var(--danger); } .pager { justify-content: flex-end; padding: 12px 16px; } .pager span { color: var(--muted); font-size: 12px; } .segmented button.active { border-color: var(--accent); background: var(--surface-muted); color: var(--accent); } .hidden { display: none !important; } .identity { display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: 10px 24px; margin: 0; } .identity dt { color: var(--muted); } .identity dd { margin: 0; overflow-wrap: anywhere; } @media (max-width: 900px) { html, body { max-width: 100%; overflow-x: hidden; } .app { grid-template-columns: 1fr; min-width: 0; max-width: 100%; } body[data-page="admin"] .app { grid-template-columns: 1fr; } .sidebar { position: static; min-width: 0; max-width: 100%; height: auto; padding: 10px 12px; overflow: hidden; } body[data-page="admin"] .sidebar { padding: 10px 12px; } .brand { padding: 6px 8px 10px; } .nav-list { display: flex; width: 100%; max-width: 100%; overflow-x: auto; overscroll-behavior-inline: contain; scrollbar-width: thin; } .nav-list a { white-space: nowrap; } .nav-meta { display: none; } .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); } .filters { grid-template-columns: 1fr 1fr; } .quick-grid { grid-template-columns: 1fr; } } @media (max-width: 600px) { .main { width: 100%; min-width: 0; max-width: 100%; padding: 18px 12px 36px; } body[data-page="admin"] .main { padding: 18px 12px 36px; } .content, .band, .band-body, .settings-grid, .setting-field { min-width: 0; max-width: 100%; } .page-header { align-items: flex-start; flex-direction: column; } .stats, .filters, .settings-grid { grid-template-columns: 1fr; } .identity { grid-template-columns: 1fr; } .identity dd { margin-bottom: 8px; } }