:root { --bg: #0e1014; --panel: #161920; --panel-2: #1d212a; --line: #2a2f3a; --fg: #e6e9ef; --muted: #8b93a3; --ok: #35c48a; --warn: #e5a13a; --err: #e05a5a; --accent: #4c8dff; --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; --radius: 10px; } * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; background: var(--bg); color: var(--fg); font: 13px/1.5 -apple-system, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; padding: 12px 14px 18px; } /* ---------------------------------------------------------------- 顶栏 */ header { margin-bottom: 10px; } .brand { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; } h1 { font-size: 15px; margin: 0; letter-spacing: .2px; } .sub { color: var(--muted); font-size: 11.5px; } .controls { display: flex; align-items: center; gap: 8px; margin-top: 9px; flex-wrap: wrap; } .controls label { display: flex; align-items: center; gap: 5px; color: var(--muted); font-size: 12px; } select, button { background: var(--panel-2); color: var(--fg); border: 1px solid var(--line); border-radius: 7px; padding: 6px 10px; font-size: 12.5px; font-family: inherit; } input[type="number"] { background: var(--panel-2); color: var(--fg); border: 1px solid var(--line); border-radius: 7px; padding: 6px 8px; font-size: 12.5px; font-family: var(--mono); width: 64px; } select { padding-right: 6px; } button { cursor: pointer; } button:hover:not(:disabled) { border-color: var(--accent); } button:disabled { opacity: .45; cursor: not-allowed; } button.primary { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; } button.primary:disabled { background: var(--panel-2); color: var(--fg); border-color: var(--line); } .cooldown { font-family: var(--mono); font-size: 12px; color: var(--warn); } .cooldown.ready { color: var(--ok); } .note { margin-top: 6px; font-size: 12px; color: var(--muted); } /* ---------------------------------------------------------------- 布局 */ main { display: grid; grid-template-columns: minmax(330px, 0.82fr) minmax(430px, 1.18fr); gap: 12px; align-items: start; } @media (max-width: 1000px) { main { grid-template-columns: 1fr; } } .col { display: flex; flex-direction: column; gap: 12px; min-width: 0; } .panel { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 11px 12px; min-width: 0; } h2 { font-size: 11.5px; margin: 0 0 9px; color: var(--muted); font-weight: 600; text-transform: uppercase; letter-spacing: .6px; display: flex; align-items: center; gap: 9px; flex-wrap: wrap; } h2 .right { margin-left: auto; text-transform: none; letter-spacing: 0; font-weight: 400; } .badge { font-size: 10.5px; padding: 1px 8px; border-radius: 999px; background: var(--panel-2); color: var(--muted); border: 1px solid var(--line); } .badge.running { color: var(--accent); border-color: var(--accent); } .badge.ok { color: var(--ok); border-color: var(--ok); } .badge.warn { color: var(--warn); border-color: var(--warn); } .badge.err { color: var(--err); border-color: var(--err); } /* ---------------------------------------------------------------- 日志 */ .log { font-family: var(--mono); font-size: 11.5px; height: clamp(220px, 40vh, 420px); overflow-y: auto; background: #0a0c10; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; overscroll-behavior: contain; } .log .row { display: grid; grid-template-columns: 56px 1fr; gap: 8px; padding: .5px 0; } .log .t { color: #4f5766; } .log .m { white-space: pre-wrap; word-break: break-word; color: #cdd4e0; } .log .row.WARNING .m { color: var(--warn); } .log .row.ERROR .m { color: var(--err); } .log .row.meta .m { color: var(--muted); font-style: italic; } .log .empty { color: #4f5766; font-style: italic; } /* ---------------------------------------------------------------- 结果 */ .kv-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 8px; align-items: start; /* 关键:不让少数卡片被拉满整列高 */ } .kv { background: var(--panel-2); border: 1px solid var(--line); border-radius: 8px; padding: 7px 9px; min-width: 0; } .kv .k { color: var(--muted); font-size: 10.5px; letter-spacing: .3px; } .kv .v { font-family: var(--mono); font-size: 13px; margin-top: 2px; word-break: break-all; } .kv.wide { grid-column: 1 / -1; } /* ticket 这类长文本占整行,避免撑高别的卡 */ .kv .v.trunc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .v.ec0 { color: var(--ok); } .v.ec50 { color: var(--warn); } .v.ec12 { color: var(--err); } .v.other { color: var(--muted); } .v small { font-size: 11px; font-family: inherit; } /* ----------------------------------------------------------- 题目卡片 */ .challenge { border: 1px solid var(--line); border-radius: 9px; background: var(--panel-2); padding: 9px 10px; margin-bottom: 10px; } .challenge:last-child { margin-bottom: 0; } .ch-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; } .pill { font-family: var(--mono); font-size: 11px; padding: 1px 7px; border-radius: 5px; background: #263043; color: #9db8e8; } .kind { font-family: var(--mono); font-size: 11px; color: var(--muted); } .inst { font-size: 12px; color: #cdd4e0; letter-spacing: .5px; } .ch-media { display: flex; gap: 12px; align-items: flex-start; flex-wrap: wrap; } .thumb { margin: 0; min-width: 0; } .thumb img { display: block; max-width: 100%; max-height: 250px; width: auto; height: auto; border-radius: 6px; background: #000; cursor: zoom-in; border: 1px solid #000; } .thumb.prompt img { max-height: 56px; } .thumb figcaption { font-size: 10.5px; color: var(--muted); margin-top: 4px; } .ch-meta { font-family: var(--mono); font-size: 11px; color: #9fb0cc; margin-top: 8px; word-break: break-word; } .ch-meta .warn { color: var(--warn); } .empty-hint { color: var(--muted); font-size: 12.5px; } /* ---------------------------------------------------------------- 表格 */ table { width: 100%; border-collapse: collapse; font-size: 12px; table-layout: fixed; } th, td { text-align: left; padding: 6px 8px; border-bottom: 1px solid var(--line); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } th { color: var(--muted); font-weight: 600; font-size: 10.5px; letter-spacing: .3px; } td.mono, .mono { font-family: var(--mono); } tbody tr:hover { background: var(--panel-2); cursor: pointer; } tbody tr.active { background: #1b2436; } col.c-time { width: 76px; } col.c-target { width: 62px; } col.c-kind { width: 64px; } col.c-ec { width: 108px; } col.c-ms { width: 64px; } col.c-ok { width: 54px; } /* ------------------------------------------------------------- lightbox */ .lightbox { position: fixed; inset: 0; z-index: 50; display: none; background: rgba(0, 0, 0, .86); align-items: center; justify-content: center; padding: 24px; cursor: zoom-out; } .lightbox.show { display: flex; } .lightbox img { max-width: 96vw; max-height: 92vh; border-radius: 8px; box-shadow: 0 12px 40px rgba(0, 0, 0, .6); } .lightbox .tip { position: fixed; top: 12px; left: 50%; transform: translateX(-50%); font-size: 12px; color: #cfd6e4; background: rgba(0, 0, 0, .5); padding: 4px 12px; border-radius: 999px; } /* ---------------------------------------------------------------- 图例 */ .legend { display: flex; gap: 16px; flex-wrap: wrap; color: var(--muted); font-size: 11.5px; margin-top: 10px; } .legend b { font-family: var(--mono); padding: 0 5px; border-radius: 4px; } .ec0 { color: var(--ok); } .ec50 { color: var(--warn); } .ec12 { color: var(--err); } .muted { color: var(--muted); } /* 连打时「每发结果」一览里的彩色编号 */ .round-ec { padding: 0 4px; border-radius: 4px; background: rgba(255,255,255,.05); } .round-ec.ec0 { color: var(--ok); } .round-ec.ec50 { color: var(--warn); } .round-ec.ec12 { color: var(--err); } .round-ec.other { color: var(--muted); }