:root { color-scheme:light; --ink:#172b35; --muted:#71818b; --line:#e4e9ed; --bg:#f4f7f8; --green:#087a69; --green-soft:#e6f5ef; --red:#b53f42; --amber:#92671a; font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif; font-size:14px; } * { box-sizing:border-box; } body { margin:0; background:var(--bg); color:var(--ink); } button,input { font:inherit; } button { cursor:pointer; } button:disabled { cursor:not-allowed; opacity:.45; } button,input,summary { touch-action:manipulation; } button:focus-visible,input:focus-visible,summary:focus-visible { outline:3px solid #55baa5; outline-offset:3px; } input { width:100%; height:45px; border:1px solid #d9e2e7; border-radius:8px; padding:0 12px; color:var(--ink); background:#fff; transition:border-color .15s; } input:focus { border-color:var(--green); outline:none; box-shadow:0 0 0 3px #087a6910; } input::placeholder { color:#a0acb4; } label { display:block; font-weight:600; font-size:13px; margin:0 0 8px; } pre { font:12px/1.65 ui-monospace,SFMono-Regular,Consolas,monospace; white-space:pre-wrap; overflow-wrap:anywhere; } h1,h2,p { margin:0; } h1 { font-size:32px; font-weight:650; letter-spacing:-1px; margin:17px 0 10px; } h2 { font-size:16px; font-weight:650; } .page { max-width:1264px; margin:auto; padding:38px 32px 24px; } .page-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:28px; } .eyebrow { display:flex; align-items:center; gap:10px; font:600 11px/1.2 ui-monospace,SFMono-Regular,Consolas,monospace; letter-spacing:1.5px; color:#647d83; } .brand-mark { display:grid; place-items:center; height:25px; width:25px; background:var(--green); color:white; border-radius:7px; font-size:20px; letter-spacing:0; } .eyebrow-divider { color:#b5c3c7; margin:0 3px; } .intro { font-size:14px; color:var(--muted); line-height:1.65; } .pill { display:flex; align-items:center; gap:8px; border:1px solid #dce5e8; background:#fff; border-radius:24px; padding:10px 15px; font-size:12px; font-weight:600; } .dot { display:inline-block; width:7px; height:7px; border-radius:50%; background:#9daeb5; flex:none; } .green,.pill[data-status=connected] .dot { background:var(--green); } .pill[data-status=connected] { border-color:#b9ded0; color:var(--green); background:#f1faf5; } .pill[data-status=connecting] .dot { background:#bc8c35; animation:pulse 1.3s infinite; } .pill[data-status=failed],.pill[data-status=unavailable] { color:var(--red); border-color:#e7c5c5; } .workspace { display:grid; grid-template-columns:360px minmax(0,1fr); gap:22px; align-items:start; } .card { background:#fff; border:1px solid var(--line); border-radius:13px; box-shadow:0 3px 12px #16303c03; padding:24px; } .section-heading { display:flex; align-items:center; gap:9px; margin-bottom:22px; } .section-heading .small { margin-left:auto; } .section-number { color:#93a3aa; font:12px ui-monospace,SFMono-Regular,Consolas,monospace; } .muted { color:var(--muted); } .small { font-size:12px; } .field-help { font-size:12px; color:var(--muted); line-height:1.7; margin:8px 0 20px; } .token-field { position:relative; } .token-field input { padding-right:56px; } .icon-button { border:0; background:none; position:absolute; right:7px; top:8px; padding:6px; color:var(--green); font-size:12px; } .button { border:1px solid transparent; border-radius:8px; padding:11px 15px; display:inline-flex; justify-content:center; align-items:center; gap:8px; white-space:nowrap; font-weight:600; font-size:13px; min-height:42px; } .primary { background:var(--green); color:white; } .primary:hover:not(:disabled) { background:#066758; } .secondary { background:#fff; border-color:#dce4e8; color:#3c5661; } .secondary:hover:not(:disabled) { background:#f4f7f8; } .full-width { width:100%; justify-content:space-between; } .connection-actions { display:grid; grid-template-columns:1fr 70px; gap:9px; margin-top:22px; } .small-note { font-size:11px; line-height:1.8; color:#8a999f; margin-top:15px; } .right-column { display:grid; gap:22px; } .checks { list-style:none; padding:0; margin:0; } .checks li { display:flex; align-items:center; gap:13px; padding:14px 0; border-bottom:1px solid #f0f3f5; } .checks li:first-child { padding-top:0; } .checks li:last-child { border-bottom:0; padding-bottom:0; } .check-icon { width:30px; height:30px; border:1px solid #dfe7eb; color:#92a3ab; border-radius:50%; display:grid; place-items:center; font:12px ui-monospace,SFMono-Regular,Consolas,monospace; flex:none; } .checks strong { display:block; font-size:13px; font-weight:600; margin-bottom:5px; } .checks li div span { font-size:12px; color:#8999a0; line-height:1.6; display:block; } .check-state { margin-left:auto; color:#9babb2; font-size:11px; white-space:nowrap; } .checks [data-status=ok] .check-icon { color:var(--green); background:var(--green-soft); border-color:transparent; } .checks [data-status=ok] .check-state { color:var(--green); } .checks [data-status=loading] .check-icon { color:var(--amber); background:#fff8e7; border-color:transparent; } .checks [data-status=error] .check-icon { color:var(--red); background:#fceeee; border-color:transparent; } .checks [data-status=error] .check-state { color:var(--red); } .checks [data-status=warning] .check-state { color:var(--amber); } .verdict { font-size:12px; color:#758e92; line-height:1.8; background:#f4f9f8; border-radius:8px; padding:12px 14px; margin-top:21px; } .verdict[data-status=ok] { color:#146b56; background:#eaf6ee; } .config-summary { margin-top:22px; padding-top:19px; border-top:1px solid var(--line); } .summary-topline { display:flex; align-items:center; gap:7px; font-size:12px; color:var(--green); font-weight:600; } .config-summary dl { margin:13px 0; } .config-summary dl div { display:flex; gap:10px; align-items:baseline; font-size:11px; margin-top:11px; } .config-summary dt { flex:none; color:var(--muted); width:65px; } .config-summary dd { margin:0; color:#38505b; overflow-wrap:anywhere; font-family:ui-monospace,SFMono-Regular,Consolas,monospace; } .config-summary pre { background:#f5f8f9; padding:12px; border-radius:6px; max-height:250px; overflow:auto; margin-bottom:0; } summary { font-size:12px; color:var(--muted); cursor:pointer; } .channel-toolbar,.event-toolbar { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:15px; } .channel-toolbar>div { display:flex; align-items:center; gap:8px; } .text-button { border:0; background:none; color:var(--green); padding:4px 0; font-size:12px; } .text-button:hover:not(:disabled) { text-decoration:underline; } .compact { min-height:32px; padding:6px 10px; font-size:12px; } .channel-list { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; max-height:236px; overflow:auto; padding:1px; } .channel { display:flex; align-items:center; gap:9px; border:1px solid #e5ecef; border-radius:7px; padding:10px; min-width:0; margin:0; font-size:12px; font-weight:400; cursor:pointer; } .channel:has(input:checked) { background:#f4faf7; border-color:#d6e8df; } .channel input { width:14px; height:14px; accent-color:var(--green); flex:none; margin:0; } .channel .channel-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } .channel-status { margin-left:auto; font-size:10px; color:#96a7ae; white-space:nowrap; } .channel-status[data-status=subscribed] { color:var(--green); } .channel-status[data-status=denied],.channel-status[data-status=error] { color:var(--red); } .replay-controls { display:flex; align-items:end; gap:10px; border-top:1px solid #eef2f4; padding-top:15px; margin-top:16px; } .replay-controls>div { flex:1; } .replay-controls input { height:38px; font-size:12px; } .replay-controls label { font-size:12px; } .optional { font-weight:400; color:#a0adb4; font-size:11px; margin-left:6px; } .replay-controls button { min-height:38px; } .channels-card .field-help { margin-bottom:0; } .events-card { margin-top:22px; padding-bottom:12px; } .event-totals { margin-left:auto; display:flex; gap:20px; color:var(--muted); font-size:12px; } .event-totals strong { font-variant-numeric:tabular-nums; font-size:16px; color:#304c57; font-weight:600; margin-left:5px; } .segmented { display:flex; gap:2px; background:#f1f5f6; padding:3px; border-radius:7px; } .segmented button { border:0; border-radius:5px; background:transparent; color:#83959e; padding:6px 16px; font-size:12px; } .segmented [aria-pressed=true] { color:#1f6257; background:#fff; box-shadow:0 1px 4px #142e3810; } .table-scroll { overflow-x:auto; } table { border-collapse:collapse; width:100%; text-align:left; font-size:12px; } th { color:#899aa2; font-weight:400; font-size:11px; padding:11px 10px; background:#f8fafb; border-bottom:1px solid var(--line); white-space:nowrap; } th:first-child { border-radius:7px 0 0; } th:last-child { border-radius:0 7px 0 0; } td { padding:13px 10px; border-bottom:1px solid #edf2f4; white-space:nowrap; } td .subline { display:block; color:#91a0a6; margin-top:5px; font-size:11px; } td.seq { font-family:ui-monospace,SFMono-Regular,Consolas,monospace; } .tag { display:inline-block; padding:3px 7px; border-radius:4px; background:#e8f5ee; color:#228160; font-size:10px; } .tag.replay { background:#eef1fa; color:#6578ad; } .tag.duplicate { background:#fff6e5; color:#a17a2e; margin-left:4px; } tr.selected td { background:#f5faf8; } .empty { padding:35px 16px; display:flex; flex-direction:column; align-items:center; gap:10px; color:#97a5ad; font-size:12px; line-height:1.7; text-align:center; } .empty strong { color:#758991; font-size:13px; font-weight:500; } .empty-signal { font-size:34px; line-height:1; color:#b1c9c4; } .compact-empty { grid-column:1/-1; padding:24px; font-size:12px; } .event-detail { margin:16px 0 5px; border:1px solid var(--line); border-radius:8px; padding:14px; background:#f8fafb; } .event-detail summary { color:#34525d; } #detail-meta { font-size:11px; color:#8b9ba2; margin-left:10px; } .event-detail pre { max-height:350px; overflow:auto; margin-bottom:0; } .logs-card { margin-top:22px; padding-bottom:14px; } .logs-card .section-heading { margin-bottom:12px; } .logs-card .text-button { margin-left:auto; } .logs-card h2 { font-size:14px; } #logs { margin:0; padding:0; list-style:none; max-height:230px; overflow:auto; scrollbar-width:thin; } .log-entry { padding:9px 0; border-bottom:1px solid #f0f3f5; display:flex; align-items:baseline; gap:14px; font-size:12px; line-height:1.7; overflow-wrap:anywhere; } .log-entry:last-child { border:0; } .log-entry time { font:11px ui-monospace,SFMono-Regular,Consolas,monospace; color:#9cabb1; flex:none; width:66px; } .log-entry[data-level=error]>span { color:var(--red); } .log-entry[data-level=warning]>span { color:var(--amber); } .log-entry[data-level=success]>span { color:#3d8069; } .notice { border:1px solid #edcece; border-radius:9px; padding:13px 16px; font-size:13px; line-height:1.7; margin-bottom:20px; } .notice.error { background:#fff3f1; color:#a84541; } footer { display:flex; justify-content:space-between; align-items:center; gap:15px; color:#9ba9b0; font-size:11px; padding:24px 2px 0; } footer>span:first-child { display:flex; gap:7px; align-items:center; } .sr-only { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); } [hidden] { display:none!important; } @keyframes pulse { 50% { opacity:.35; } } @media(max-width:960px) { .workspace { grid-template-columns:320px minmax(0,1fr); } .card { padding:20px; } .channel-list { grid-template-columns:1fr; } .event-totals { gap:12px; } } @media(max-width:760px) { .page { padding:24px 18px; } .workspace { grid-template-columns:1fr; } .page-header { align-items:flex-start; } .pill { margin-top:6px; padding:8px 11px; } h1 { font-size:28px; } .intro { max-width:250px; font-size:13px; } .channel-list { grid-template-columns:repeat(2,minmax(0,1fr)); } .event-heading { flex-wrap:wrap; } .event-totals { width:100%; margin:3px 0 0 24px; } .checks li div span { max-width:250px; } footer { align-items:flex-start; flex-direction:column; gap:9px; } .section-heading { margin-bottom:18px; } .setup-card .small-note { max-width:500px; } } @media(prefers-reduced-motion:reduce) { *,*::before,*::after { animation:none!important; transition:none!important; } }